- Timestamp:
- 2020-12-02T16:28:39+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/tickets_icb_1900
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/tickets_icb_1900
- Property svn:externals
-
old new 8 8 9 9 # SETTE 10 ^/utils/CI/sette_ MPI3_LoopFusion@13943sette10 ^/utils/CI/sette_wave@13990 sette
-
- Property svn:externals
-
NEMO/branches/2020/tickets_icb_1900/src/OCE/SBC/sbccpl.F90
r13899 r14016 8 8 !! 3.1 ! 2009_02 (G. Madec, S. Masson, E. Maisonave, A. Caubel) generic coupled interface 9 9 !! 3.4 ! 2011_11 (C. Harris) more flexibility + multi-category fields 10 !! 4.2 ! 2020-12 (G. Madec, E. Clementi) wave coupling updates 10 11 !!---------------------------------------------------------------------- 11 12 … … 106 107 INTEGER, PARAMETER :: jpr_fraqsr = 42 ! fraction of solar net radiation absorbed in the first ocean level 107 108 INTEGER, PARAMETER :: jpr_mslp = 43 ! mean sea level pressure 108 INTEGER, PARAMETER :: jpr_hsig = 44 ! Hsig 109 INTEGER, PARAMETER :: jpr_phioc = 45 ! Wave=>ocean energy flux 110 INTEGER, PARAMETER :: jpr_sdrftx = 46 ! Stokes drift on grid 1 111 INTEGER, PARAMETER :: jpr_sdrfty = 47 ! Stokes drift on grid 2 109 !** surface wave coupling ** 110 INTEGER, PARAMETER :: jpr_hsig = 44 ! Hsig 111 INTEGER, PARAMETER :: jpr_phioc = 45 ! Wave=>ocean energy flux 112 INTEGER, PARAMETER :: jpr_sdrftx = 46 ! Stokes drift on grid 1 113 INTEGER, PARAMETER :: jpr_sdrfty = 47 ! Stokes drift on grid 2 112 114 INTEGER, PARAMETER :: jpr_wper = 48 ! Mean wave period 113 115 INTEGER, PARAMETER :: jpr_wnum = 49 ! Mean wavenumber 114 INTEGER, PARAMETER :: jpr_ tauwoc= 50 ! Stress fraction adsorbed by waves116 INTEGER, PARAMETER :: jpr_wstrf = 50 ! Stress fraction adsorbed by waves 115 117 INTEGER, PARAMETER :: jpr_wdrag = 51 ! Neutral surface drag coefficient 116 INTEGER, PARAMETER :: jpr_isf = 52 117 INTEGER, PARAMETER :: jpr_icb = 53 118 INTEGER, PARAMETER :: jpr_wfreq = 54 ! Wave peak frequency 119 INTEGER, PARAMETER :: jpr_tauwx = 55 ! x component of the ocean stress from waves 120 INTEGER, PARAMETER :: jpr_tauwy = 56 ! y component of the ocean stress from waves 121 INTEGER, PARAMETER :: jpr_ts_ice = 57 ! Sea ice surface temp 122 123 INTEGER, PARAMETER :: jprcv = 57 ! total number of fields received 118 INTEGER, PARAMETER :: jpr_charn = 52 ! Chranock coefficient 119 INTEGER, PARAMETER :: jpr_twox = 53 ! wave to ocean momentum flux 120 INTEGER, PARAMETER :: jpr_twoy = 54 ! wave to ocean momentum flux 121 INTEGER, PARAMETER :: jpr_tawx = 55 ! net wave-supported stress 122 INTEGER, PARAMETER :: jpr_tawy = 56 ! net wave-supported stress 123 INTEGER, PARAMETER :: jpr_bhd = 57 ! Bernoulli head. waves' induced surface pressure 124 INTEGER, PARAMETER :: jpr_tusd = 58 ! zonal stokes transport 125 INTEGER, PARAMETER :: jpr_tvsd = 59 ! meridional stokes tranmport 126 INTEGER, PARAMETER :: jpr_isf = 60 127 INTEGER, PARAMETER :: jpr_icb = 61 128 INTEGER, PARAMETER :: jpr_ts_ice = 62 ! Sea ice surface temp 129 130 INTEGER, PARAMETER :: jprcv = 62 ! total number of fields received 124 131 125 132 INTEGER, PARAMETER :: jps_fice = 1 ! ice fraction sent to the atmosphere … … 184 191 & sn_snd_thick1, sn_snd_cond, sn_snd_mpnd , sn_snd_sstfrz, sn_snd_ttilyr 185 192 ! ! Received from the atmosphere 186 TYPE(FLD_C) :: sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_ tauw, sn_rcv_dqnsdt, sn_rcv_qsr, &193 TYPE(FLD_C) :: sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr, & 187 194 & sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf, sn_rcv_ts_ice 188 195 TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp, sn_rcv_icb, sn_rcv_isf 189 ! Send to waves196 ! ! Send to waves 190 197 TYPE(FLD_C) :: sn_snd_ifrac, sn_snd_crtw, sn_snd_wlev 191 ! Received from waves192 TYPE(FLD_C) :: sn_rcv_hsig, sn_rcv_phioc, sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper, sn_rcv_wnum, sn_rcv_tauwoc,&193 sn_rcv_wdrag, sn_rcv_wfreq198 ! ! Received from waves 199 TYPE(FLD_C) :: sn_rcv_hsig, sn_rcv_phioc, sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper, sn_rcv_wnum, & 200 & sn_rcv_wstrf, sn_rcv_wdrag, sn_rcv_charn, sn_rcv_taw, sn_rcv_bhd, sn_rcv_tusd, sn_rcv_tvsd 194 201 ! ! Other namelist parameters 195 202 INTEGER :: nn_cplmodel ! Maximum number of models to/from which NEMO is potentialy sending/receiving data … … 274 281 & sn_snd_ifrac , sn_snd_crtw , sn_snd_wlev , sn_rcv_hsig , sn_rcv_phioc , & 275 282 & sn_rcv_w10m , sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr , & 276 & sn_rcv_sdrfx , sn_rcv_sdrfy , sn_rcv_wper , sn_rcv_wnum , sn_rcv_ tauwoc, &277 & sn_rcv_ wdrag , sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal ,&278 & sn_rcv_ iceflx, sn_rcv_co2 , sn_rcv_mslp ,&279 & sn_rcv_ic b , sn_rcv_isf , sn_rcv_wfreq, sn_rcv_tauw , &280 & sn_rcv_ts_ice 283 & sn_rcv_sdrfx , sn_rcv_sdrfy , sn_rcv_wper , sn_rcv_wnum , sn_rcv_wstrf , & 284 & sn_rcv_charn , sn_rcv_taw , sn_rcv_bhd , sn_rcv_tusd , sn_rcv_tvsd, & 285 & sn_rcv_wdrag , sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal , & 286 & sn_rcv_iceflx, sn_rcv_co2 , sn_rcv_icb , sn_rcv_isf , sn_rcv_ts_ice 287 281 288 !!--------------------------------------------------------------------- 282 289 ! … … 319 326 WRITE(numout,*)' sea ice heat fluxes = ', TRIM(sn_rcv_iceflx%cldes), ' (', TRIM(sn_rcv_iceflx%clcat), ')' 320 327 WRITE(numout,*)' atm co2 = ', TRIM(sn_rcv_co2%cldes ), ' (', TRIM(sn_rcv_co2%clcat ), ')' 328 WRITE(numout,*)' Sea ice surface skin temperature= ', TRIM(sn_rcv_ts_ice%cldes), ' (', TRIM(sn_rcv_ts_ice%clcat), ')' 329 WRITE(numout,*)' surface waves:' 321 330 WRITE(numout,*)' significant wave heigth = ', TRIM(sn_rcv_hsig%cldes ), ' (', TRIM(sn_rcv_hsig%clcat ), ')' 322 331 WRITE(numout,*)' wave to oce energy flux = ', TRIM(sn_rcv_phioc%cldes ), ' (', TRIM(sn_rcv_phioc%clcat ), ')' … … 325 334 WRITE(numout,*)' Mean wave period = ', TRIM(sn_rcv_wper%cldes ), ' (', TRIM(sn_rcv_wper%clcat ), ')' 326 335 WRITE(numout,*)' Mean wave number = ', TRIM(sn_rcv_wnum%cldes ), ' (', TRIM(sn_rcv_wnum%clcat ), ')' 327 WRITE(numout,*)' Wave peak frequency = ', TRIM(sn_rcv_wfreq%cldes ), ' (', TRIM(sn_rcv_wfreq%clcat ), ')' 328 WRITE(numout,*)' Stress frac adsorbed by waves = ', TRIM(sn_rcv_tauwoc%cldes), ' (', TRIM(sn_rcv_tauwoc%clcat ), ')' 329 WRITE(numout,*)' Stress components by waves = ', TRIM(sn_rcv_tauw%cldes ), ' (', TRIM(sn_rcv_tauw%clcat ), ')' 336 WRITE(numout,*)' Stress frac adsorbed by waves = ', TRIM(sn_rcv_wstrf%cldes ), ' (', TRIM(sn_rcv_wstrf%clcat ), ')' 330 337 WRITE(numout,*)' Neutral surf drag coefficient = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')' 331 WRITE(numout,*)' Sea ice surface skin temperature= ', TRIM(sn_rcv_ts_ice%cldes), ' (', TRIM(sn_rcv_ts_ice%clcat), ')'338 WRITE(numout,*)' Charnock coefficient = ', TRIM(sn_rcv_charn%cldes ), ' (', TRIM(sn_rcv_charn%clcat ), ')' 332 339 WRITE(numout,*)' sent fields (multiple ice categories)' 333 340 WRITE(numout,*)' surface temperature = ', TRIM(sn_snd_temp%cldes ), ' (', TRIM(sn_snd_temp%clcat ), ')' … … 351 358 WRITE(numout,*)' - mesh = ', sn_snd_crtw%clvgrd 352 359 ENDIF 353 360 IF( lwp .AND. ln_wave) THEN ! control print 361 WRITE(numout,*)' surface waves:' 362 WRITE(numout,*)' Significant wave heigth = ', TRIM(sn_rcv_hsig%cldes ), ' (', TRIM(sn_rcv_hsig%clcat ), ')' 363 WRITE(numout,*)' Wave to oce energy flux = ', TRIM(sn_rcv_phioc%cldes ), ' (', TRIM(sn_rcv_phioc%clcat ), ')' 364 WRITE(numout,*)' Surface Stokes drift grid u = ', TRIM(sn_rcv_sdrfx%cldes ), ' (', TRIM(sn_rcv_sdrfx%clcat ), ')' 365 WRITE(numout,*)' Surface Stokes drift grid v = ', TRIM(sn_rcv_sdrfy%cldes ), ' (', TRIM(sn_rcv_sdrfy%clcat ), ')' 366 WRITE(numout,*)' Mean wave period = ', TRIM(sn_rcv_wper%cldes ), ' (', TRIM(sn_rcv_wper%clcat ), ')' 367 WRITE(numout,*)' Mean wave number = ', TRIM(sn_rcv_wnum%cldes ), ' (', TRIM(sn_rcv_wnum%clcat ), ')' 368 WRITE(numout,*)' Stress frac adsorbed by waves = ', TRIM(sn_rcv_wstrf%cldes ), ' (', TRIM(sn_rcv_wstrf%clcat ), ')' 369 WRITE(numout,*)' Neutral surf drag coefficient = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')' 370 WRITE(numout,*)' Charnock coefficient = ', TRIM(sn_rcv_charn%cldes ), ' (', TRIM(sn_rcv_charn%clcat ), ')' 371 WRITE(numout,*)' Transport associated to Stokes drift grid u = ', TRIM(sn_rcv_tusd%cldes ), ' (', TRIM(sn_rcv_tusd%clcat ), ')' 372 WRITE(numout,*)' Transport associated to Stokes drift grid v = ', TRIM(sn_rcv_tvsd%cldes ), ' (', TRIM(sn_rcv_tvsd%clcat ), ')' 373 WRITE(numout,*)' Bernouilli pressure head = ', TRIM(sn_rcv_bhd%cldes ), ' (', TRIM(sn_rcv_bhd%clcat ), ')' 374 WRITE(numout,*)'Wave to ocean momentum flux and Net wave-supported stress = ', TRIM(sn_rcv_taw%cldes ), ' (', TRIM(sn_rcv_taw%clcat ), ')' 375 WRITE(numout,*)' Surface current to waves = ', TRIM(sn_snd_crtw%cldes ), ' (', TRIM(sn_snd_crtw%clcat ), ')' 376 WRITE(numout,*)' - referential = ', sn_snd_crtw%clvref 377 WRITE(numout,*)' - orientation = ', sn_snd_crtw%clvor 378 WRITE(numout,*)' - mesh = ', sn_snd_crtw%clvgrd 379 ENDIF 354 380 ! ! allocate sbccpl arrays 355 381 IF( sbc_cpl_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'sbc_cpl_alloc : unable to allocate arrays' ) … … 629 655 cpl_wper = .TRUE. 630 656 ENDIF 631 srcv(jpr_wfreq)%clname = 'O_WFreq' ! wave peak frequency632 IF( TRIM(sn_rcv_wfreq%cldes ) == 'coupled' ) THEN633 srcv(jpr_wfreq)%laction = .TRUE.634 cpl_wfreq = .TRUE.635 ENDIF636 657 srcv(jpr_wnum)%clname = 'O_WNum' ! mean wave number 637 658 IF( TRIM(sn_rcv_wnum%cldes ) == 'coupled' ) THEN … … 639 660 cpl_wnum = .TRUE. 640 661 ENDIF 641 srcv(jpr_tauwoc)%clname = 'O_TauOce' ! stress fraction adsorbed by the wave 642 IF( TRIM(sn_rcv_tauwoc%cldes ) == 'coupled' ) THEN 643 srcv(jpr_tauwoc)%laction = .TRUE. 644 cpl_tauwoc = .TRUE. 645 ENDIF 646 srcv(jpr_tauwx)%clname = 'O_Tauwx' ! ocean stress from wave in the x direction 647 srcv(jpr_tauwy)%clname = 'O_Tauwy' ! ocean stress from wave in the y direction 648 IF( TRIM(sn_rcv_tauw%cldes ) == 'coupled' ) THEN 649 srcv(jpr_tauwx)%laction = .TRUE. 650 srcv(jpr_tauwy)%laction = .TRUE. 651 cpl_tauw = .TRUE. 662 srcv(jpr_wstrf)%clname = 'O_WStrf' ! stress fraction adsorbed by the wave 663 IF( TRIM(sn_rcv_wstrf%cldes ) == 'coupled' ) THEN 664 srcv(jpr_wstrf)%laction = .TRUE. 665 cpl_wstrf = .TRUE. 652 666 ENDIF 653 667 srcv(jpr_wdrag)%clname = 'O_WDrag' ! neutral surface drag coefficient … … 656 670 cpl_wdrag = .TRUE. 657 671 ENDIF 658 IF( srcv(jpr_tauwoc)%laction .AND. srcv(jpr_tauwx)%laction .AND. srcv(jpr_tauwy)%laction ) & 659 CALL ctl_stop( 'More than one method for modifying the ocean stress has been selected ', & 660 '(sn_rcv_tauwoc=coupled and sn_rcv_tauw=coupled)' ) 672 srcv(jpr_charn)%clname = 'O_Charn' ! Chranock coefficient 673 IF( TRIM(sn_rcv_charn%cldes ) == 'coupled' ) THEN 674 srcv(jpr_charn)%laction = .TRUE. 675 cpl_charn = .TRUE. 676 ENDIF 677 srcv(jpr_bhd)%clname = 'O_Bhd' ! Bernoulli head. waves' induced surface pressure 678 IF( TRIM(sn_rcv_bhd%cldes ) == 'coupled' ) THEN 679 srcv(jpr_bhd)%laction = .TRUE. 680 cpl_bhd = .TRUE. 681 ENDIF 682 srcv(jpr_tusd)%clname = 'O_Tusd' ! zonal stokes transport 683 IF( TRIM(sn_rcv_tusd%cldes ) == 'coupled' ) THEN 684 srcv(jpr_tusd)%laction = .TRUE. 685 cpl_tusd = .TRUE. 686 ENDIF 687 srcv(jpr_tvsd)%clname = 'O_Tvsd' ! meridional stokes tranmport 688 IF( TRIM(sn_rcv_tvsd%cldes ) == 'coupled' ) THEN 689 srcv(jpr_tvsd)%laction = .TRUE. 690 cpl_tvsd = .TRUE. 691 ENDIF 692 693 srcv(jpr_twox)%clname = 'O_Twox' ! wave to ocean momentum flux in the u direction 694 srcv(jpr_twoy)%clname = 'O_Twoy' ! wave to ocean momentum flux in the v direction 695 srcv(jpr_tawx)%clname = 'O_Tawx' ! Net wave-supported stress in the u direction 696 srcv(jpr_tawy)%clname = 'O_Tawy' ! Net wave-supported stress in the v direction 697 IF( TRIM(sn_rcv_taw%cldes ) == 'coupled' ) THEN 698 srcv(jpr_twox)%laction = .TRUE. 699 srcv(jpr_twoy)%laction = .TRUE. 700 srcv(jpr_tawx)%laction = .TRUE. 701 srcv(jpr_tawy)%laction = .TRUE. 702 cpl_taw = .TRUE. 703 ENDIF 661 704 ! 662 705 ! ! ------------------------------- ! … … 1058 1101 ! initialisation of the coupler ! 1059 1102 ! ================================ ! 1060 1061 1103 CALL cpl_define(jprcv, jpsnd, nn_cplmodel) 1062 1104 … … 1071 1113 ENDIF 1072 1114 xcplmask(:,:,0) = 1. - SUM( xcplmask(:,:,1:nn_cplmodel), dim = 3 ) 1115 ! 1073 1116 ! 1074 1117 END SUBROUTINE sbc_cpl_init … … 1146 1189 IF( ncpl_qsr_freq /= 0) ncpl_qsr_freq = 86400 / ncpl_qsr_freq ! used by top 1147 1190 1191 IF ( ln_wave .AND. nn_components == 0 ) THEN 1192 ncpl_qsr_freq = 1; 1193 WRITE(numout,*) 'ncpl_qsr_freq is set to 1 when coupling NEMO with wave (without SAS) ' 1194 ENDIF 1148 1195 ENDIF 1149 1196 ! … … 1320 1367 IF( srcv(jpr_hsig)%laction ) hsw(:,:) = frcv(jpr_hsig)%z3(:,:,1) 1321 1368 ! 1322 ! ! ========================= !1323 ! ! Wave peak frequency !1324 ! ! ========================= !1325 IF( srcv(jpr_wfreq)%laction ) wfreq(:,:) = frcv(jpr_wfreq)%z3(:,:,1)1326 !1327 1369 ! ! ========================= ! 1328 1370 ! ! Vertical mixing Qiao ! … … 1331 1373 1332 1374 ! Calculate the 3D Stokes drift both in coupled and not fully uncoupled mode 1333 IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. srcv(jpr_wper)%laction&1334 .OR. srcv(jpr_hsig)%laction .OR. srcv(jpr_wfreq)%laction)THEN1375 IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. & 1376 srcv(jpr_wper)%laction .OR. srcv(jpr_hsig)%laction ) THEN 1335 1377 CALL sbc_stokes( Kmm ) 1336 1378 ENDIF … … 1339 1381 ! ! Stress adsorbed by waves ! 1340 1382 ! ! ========================= ! 1341 IF( srcv(jpr_tauwoc)%laction .AND. ln_tauwoc ) tauoc_wave(:,:) = frcv(jpr_tauwoc)%z3(:,:,1) 1342 1343 ! ! ========================= ! 1344 ! ! Stress component by waves ! 1345 ! ! ========================= ! 1346 IF( srcv(jpr_tauwx)%laction .AND. srcv(jpr_tauwy)%laction .AND. ln_tauw ) THEN 1347 tauw_x(:,:) = frcv(jpr_tauwx)%z3(:,:,1) 1348 tauw_y(:,:) = frcv(jpr_tauwy)%z3(:,:,1) 1349 ENDIF 1350 1383 IF( srcv(jpr_wstrf)%laction .AND. ln_tauoc ) tauoc_wave(:,:) = frcv(jpr_wstrf)%z3(:,:,1) 1384 ! 1351 1385 ! ! ========================= ! 1352 1386 ! ! Wave drag coefficient ! 1353 1387 ! ! ========================= ! 1354 1388 IF( srcv(jpr_wdrag)%laction .AND. ln_cdgw ) cdn_wave(:,:) = frcv(jpr_wdrag)%z3(:,:,1) 1355 1389 ! 1390 ! ! ========================= ! 1391 ! ! Chranock coefficient ! 1392 ! ! ========================= ! 1393 IF( srcv(jpr_charn)%laction .AND. ln_charn ) charn(:,:) = frcv(jpr_charn)%z3(:,:,1) 1394 ! 1395 ! ! ========================= ! 1396 ! ! net wave-supported stress ! 1397 ! ! ========================= ! 1398 IF( srcv(jpr_tawx)%laction .AND. ln_taw ) tawx(:,:) = frcv(jpr_tawx)%z3(:,:,1) 1399 IF( srcv(jpr_tawy)%laction .AND. ln_taw ) tawy(:,:) = frcv(jpr_tawy)%z3(:,:,1) 1400 ! 1401 ! ! ========================= ! 1402 ! !wave to ocean momentum flux! 1403 ! ! ========================= ! 1404 IF( srcv(jpr_twox)%laction .AND. ln_taw ) twox(:,:) = frcv(jpr_twox)%z3(:,:,1) 1405 IF( srcv(jpr_twoy)%laction .AND. ln_taw ) twoy(:,:) = frcv(jpr_twoy)%z3(:,:,1) 1406 ! 1407 ! ! ========================= ! 1408 ! ! wave TKE flux at sfc ! 1409 ! ! ========================= ! 1410 IF( srcv(jpr_phioc)%laction .AND. ln_phioc ) phioc(:,:) = frcv(jpr_phioc)%z3(:,:,1) 1411 ! 1412 ! ! ========================= ! 1413 ! ! Bernoulli head ! 1414 ! ! ========================= ! 1415 IF( srcv(jpr_bhd)%laction .AND. ln_bern_srfc ) bhd_wave(:,:) = frcv(jpr_bhd)%z3(:,:,1) 1416 ! 1417 ! ! ========================= ! 1418 ! ! Stokes transport u dir ! 1419 ! ! ========================= ! 1420 IF( srcv(jpr_tusd)%laction .AND. ln_breivikFV_2016 ) tusd(:,:) = frcv(jpr_tusd)%z3(:,:,1) 1421 ! 1422 ! ! ========================= ! 1423 ! ! Stokes transport v dir ! 1424 ! ! ========================= ! 1425 IF( srcv(jpr_tvsd)%laction .AND. ln_breivikFV_2016 ) tvsd(:,:) = frcv(jpr_tvsd)%z3(:,:,1) 1426 ! 1356 1427 ! Fields received by SAS when OASIS coupling 1357 1428 ! (arrays no more filled at sbcssm stage)
Note: See TracChangeset
for help on using the changeset viewer.