Changeset 12991 for NEMO/branches/2020/dev_r12702_ASINTER-02_emanuelaclementi_Waves/src/OCE/SBC/sbccpl.F90
- Timestamp:
- 2020-05-29T12:58:31+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12702_ASINTER-02_emanuelaclementi_Waves/src/OCE/SBC/sbccpl.F90
r12620 r12991 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-05 (G. Madec, E. Clementi) wave coupling updates 10 11 !!---------------------------------------------------------------------- 11 12 … … 102 103 INTEGER, PARAMETER :: jpr_fraqsr = 42 ! fraction of solar net radiation absorbed in the first ocean level 103 104 INTEGER, PARAMETER :: jpr_mslp = 43 ! mean sea level pressure 104 INTEGER, PARAMETER :: jpr_hsig = 44 ! Hsig 105 INTEGER, PARAMETER :: jpr_phioc = 45 ! Wave=>ocean energy flux 106 INTEGER, PARAMETER :: jpr_sdrftx = 46 ! Stokes drift on grid 1 107 INTEGER, PARAMETER :: jpr_sdrfty = 47 ! Stokes drift on grid 2 105 !** surface wave coupling ** 106 INTEGER, PARAMETER :: jpr_hsig = 44 ! Hsig 107 INTEGER, PARAMETER :: jpr_phioc = 45 ! Wave=>ocean energy flux 108 INTEGER, PARAMETER :: jpr_sdrftx = 46 ! Stokes drift on grid 1 109 INTEGER, PARAMETER :: jpr_sdrfty = 47 ! Stokes drift on grid 2 108 110 INTEGER, PARAMETER :: jpr_wper = 48 ! Mean wave period 109 111 INTEGER, PARAMETER :: jpr_wnum = 49 ! Mean wavenumber 110 INTEGER, PARAMETER :: jpr_ tauwoc= 50 ! Stress fraction adsorbed by waves112 INTEGER, PARAMETER :: jpr_wstrf = 50 ! Stress fraction adsorbed by waves 111 113 INTEGER, PARAMETER :: jpr_wdrag = 51 ! Neutral surface drag coefficient 112 INTEGER, PARAMETER :: jpr_isf = 52 113 INTEGER, PARAMETER :: jpr_icb = 53 114 INTEGER, PARAMETER :: jpr_wfreq = 54 ! Wave peak frequency 115 INTEGER, PARAMETER :: jpr_tauwx = 55 ! x component of the ocean stress from waves 116 INTEGER, PARAMETER :: jpr_tauwy = 56 ! y component of the ocean stress from waves 117 INTEGER, PARAMETER :: jpr_ts_ice = 57 ! Sea ice surface temp 118 119 INTEGER, PARAMETER :: jprcv = 57 ! total number of fields received 114 INTEGER, PARAMETER :: jpr_charn = 52 ! Chranock coefficient 115 INTEGER, PARAMETER :: jpr_twox = 53 ! wave to ocean momentum flux 116 INTEGER, PARAMETER :: jpr_twoy = 54 ! wave to ocean momentum flux 117 INTEGER, PARAMETER :: jpr_tawx = 55 ! net wave-supported stress 118 INTEGER, PARAMETER :: jpr_tawy = 56 ! net wave-supported stress 119 INTEGER, PARAMETER :: jpr_bhd = 57 ! Bernoulli head. waves' induced surface pressure 120 INTEGER, PARAMETER :: jpr_tusd = 58 ! zonal stokes transport 121 INTEGER, PARAMETER :: jpr_tvsd = 59 ! meridional stokes tranmport 122 INTEGER, PARAMETER :: jpr_isf = 60 123 INTEGER, PARAMETER :: jpr_icb = 61 124 INTEGER, PARAMETER :: jpr_ts_ice = 62 ! Sea ice surface temp 125 126 INTEGER, PARAMETER :: jprcv = 62 ! total number of fields received 120 127 121 128 INTEGER, PARAMETER :: jps_fice = 1 ! ice fraction sent to the atmosphere … … 172 179 & sn_snd_thick1, sn_snd_cond, sn_snd_mpnd , sn_snd_sstfrz, sn_snd_ttilyr 173 180 ! ! Received from the atmosphere 174 TYPE(FLD_C) :: sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_ tauw, sn_rcv_dqnsdt, sn_rcv_qsr, &181 TYPE(FLD_C) :: sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr, & 175 182 & sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf, sn_rcv_ts_ice 176 183 TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp, sn_rcv_icb, sn_rcv_isf 177 ! Send to waves184 ! ! Send to waves 178 185 TYPE(FLD_C) :: sn_snd_ifrac, sn_snd_crtw, sn_snd_wlev 179 ! Received from waves180 TYPE(FLD_C) :: sn_rcv_hsig, sn_rcv_phioc, sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper, sn_rcv_wnum, sn_rcv_tauwoc,&181 sn_rcv_wdrag, sn_rcv_wfreq186 ! ! Received from waves 187 TYPE(FLD_C) :: sn_rcv_hsig, sn_rcv_phioc, sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper, sn_rcv_wnum, & 188 & sn_rcv_wstrf, sn_rcv_wdrag, sn_rcv_charn, sn_rcv_taw, sn_rcv_bhd, sn_rcv_tusd, sn_rcv_tvsd 182 189 ! ! Other namelist parameters 183 190 INTEGER :: nn_cplmodel ! Maximum number of models to/from which NEMO is potentialy sending/receiving data … … 248 255 REAL(wp), DIMENSION(jpi,jpj) :: zacs, zaos 249 256 !! 250 NAMELIST/namsbc_cpl/ sn_snd_temp , sn_snd_alb , sn_snd_thick, sn_snd_crt , sn_snd_co2 , & 251 & sn_snd_ttilyr, sn_snd_cond , sn_snd_mpnd , sn_snd_sstfrz, sn_snd_thick1, & 252 & sn_snd_ifrac , sn_snd_crtw , sn_snd_wlev , sn_rcv_hsig , sn_rcv_phioc, & 253 & sn_rcv_w10m , sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr , & 254 & sn_rcv_sdrfx , sn_rcv_sdrfy , sn_rcv_wper , sn_rcv_wnum , sn_rcv_tauwoc, & 257 NAMELIST/namsbc_cpl/ sn_snd_temp , sn_snd_alb , sn_snd_thick, sn_snd_crt , sn_snd_co2 , & 258 & sn_snd_ttilyr, sn_snd_cond , sn_snd_mpnd , sn_snd_sstfrz, sn_snd_thick1, & 259 & sn_snd_ifrac , sn_snd_crtw , sn_snd_wlev , sn_rcv_hsig , sn_rcv_phioc, & 260 & sn_rcv_w10m , sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr , & 261 & sn_rcv_sdrfx , sn_rcv_sdrfy , sn_rcv_wper , sn_rcv_wnum , sn_rcv_wstrf, & 262 & sn_rcv_charn , sn_rcv_taw , sn_rcv_bhd , sn_rcv_tusd , sn_rcv_tvsd, & 255 263 & sn_rcv_wdrag , sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal , & 256 264 & sn_rcv_iceflx, sn_rcv_co2 , nn_cplmodel , ln_usecplmask, sn_rcv_mslp , & 257 & sn_rcv_icb , sn_rcv_isf , sn_rcv_ wfreq , sn_rcv_tauw, nn_cats_cpl , &258 & sn_rcv_ts_ice 265 & sn_rcv_icb , sn_rcv_isf , sn_rcv_ts_ice, nn_cats_cpl 266 259 267 260 268 !!--------------------------------------------------------------------- … … 294 302 WRITE(numout,*)' sea ice heat fluxes = ', TRIM(sn_rcv_iceflx%cldes), ' (', TRIM(sn_rcv_iceflx%clcat), ')' 295 303 WRITE(numout,*)' atm co2 = ', TRIM(sn_rcv_co2%cldes ), ' (', TRIM(sn_rcv_co2%clcat ), ')' 304 WRITE(numout,*)' Sea ice surface skin temperature= ', TRIM(sn_rcv_ts_ice%cldes), ' (', TRIM(sn_rcv_ts_ice%clcat), ')' 305 WRITE(numout,*)' surface waves:' 296 306 WRITE(numout,*)' significant wave heigth = ', TRIM(sn_rcv_hsig%cldes ), ' (', TRIM(sn_rcv_hsig%clcat ), ')' 297 307 WRITE(numout,*)' wave to oce energy flux = ', TRIM(sn_rcv_phioc%cldes ), ' (', TRIM(sn_rcv_phioc%clcat ), ')' … … 300 310 WRITE(numout,*)' Mean wave period = ', TRIM(sn_rcv_wper%cldes ), ' (', TRIM(sn_rcv_wper%clcat ), ')' 301 311 WRITE(numout,*)' Mean wave number = ', TRIM(sn_rcv_wnum%cldes ), ' (', TRIM(sn_rcv_wnum%clcat ), ')' 302 WRITE(numout,*)' Wave peak frequency = ', TRIM(sn_rcv_wfreq%cldes ), ' (', TRIM(sn_rcv_wfreq%clcat ), ')' 303 WRITE(numout,*)' Stress frac adsorbed by waves = ', TRIM(sn_rcv_tauwoc%cldes), ' (', TRIM(sn_rcv_tauwoc%clcat ), ')' 304 WRITE(numout,*)' Stress components by waves = ', TRIM(sn_rcv_tauw%cldes ), ' (', TRIM(sn_rcv_tauw%clcat ), ')' 312 WRITE(numout,*)' Stress frac adsorbed by waves = ', TRIM(sn_rcv_wstrf%cldes ), ' (', TRIM(sn_rcv_wstrf%clcat ), ')' 305 313 WRITE(numout,*)' Neutral surf drag coefficient = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')' 306 WRITE(numout,*)' Sea ice surface skin temperature= ', TRIM(sn_rcv_ts_ice%cldes), ' (', TRIM(sn_rcv_ts_ice%clcat), ')'314 WRITE(numout,*)' Charnock coefficient = ', TRIM(sn_rcv_charn%cldes ), ' (', TRIM(sn_rcv_charn%clcat ), ')' 307 315 WRITE(numout,*)' sent fields (multiple ice categories)' 308 316 WRITE(numout,*)' surface temperature = ', TRIM(sn_snd_temp%cldes ), ' (', TRIM(sn_snd_temp%clcat ), ')' … … 605 613 cpl_wper = .TRUE. 606 614 ENDIF 607 srcv(jpr_wfreq)%clname = 'O_WFreq' ! wave peak frequency608 IF( TRIM(sn_rcv_wfreq%cldes ) == 'coupled' ) THEN609 srcv(jpr_wfreq)%laction = .TRUE.610 cpl_wfreq = .TRUE.611 ENDIF612 615 srcv(jpr_wnum)%clname = 'O_WNum' ! mean wave number 613 616 IF( TRIM(sn_rcv_wnum%cldes ) == 'coupled' ) THEN … … 615 618 cpl_wnum = .TRUE. 616 619 ENDIF 617 srcv(jpr_tauwoc)%clname = 'O_TauOce' ! stress fraction adsorbed by the wave 618 IF( TRIM(sn_rcv_tauwoc%cldes ) == 'coupled' ) THEN 619 srcv(jpr_tauwoc)%laction = .TRUE. 620 cpl_tauwoc = .TRUE. 621 ENDIF 622 srcv(jpr_tauwx)%clname = 'O_Tauwx' ! ocean stress from wave in the x direction 623 srcv(jpr_tauwy)%clname = 'O_Tauwy' ! ocean stress from wave in the y direction 624 IF( TRIM(sn_rcv_tauw%cldes ) == 'coupled' ) THEN 625 srcv(jpr_tauwx)%laction = .TRUE. 626 srcv(jpr_tauwy)%laction = .TRUE. 627 cpl_tauw = .TRUE. 620 srcv(jpr_wstrf)%clname = 'O_WStrf' ! stress fraction adsorbed by the wave 621 IF( TRIM(sn_rcv_wstrf%cldes ) == 'coupled' ) THEN 622 srcv(jpr_wstrf)%laction = .TRUE. 623 cpl_wstrf = .TRUE. 628 624 ENDIF 629 625 srcv(jpr_wdrag)%clname = 'O_WDrag' ! neutral surface drag coefficient … … 632 628 cpl_wdrag = .TRUE. 633 629 ENDIF 634 IF( srcv(jpr_tauwoc)%laction .AND. srcv(jpr_tauwx)%laction .AND. srcv(jpr_tauwy)%laction ) & 635 CALL ctl_stop( 'More than one method for modifying the ocean stress has been selected ', & 636 '(sn_rcv_tauwoc=coupled and sn_rcv_tauw=coupled)' ) 630 srcv(jpr_charn)%clname = 'O_Charn' ! neutral surface drag coefficient 631 IF( TRIM(sn_rcv_charn%cldes ) == 'coupled' ) THEN 632 srcv(jpr_charn)%laction = .TRUE. 633 cpl_charn = .TRUE. 634 ENDIF 635 srcv(jpr_bhd)%clname = 'O_Bhd' ! neutral surface drag coefficient 636 IF( TRIM(sn_rcv_bhd%cldes ) == 'coupled' ) THEN 637 srcv(jpr_bhd)%laction = .TRUE. 638 cpl_bhd = .TRUE. 639 ENDIF 640 srcv(jpr_tusd)%clname = 'O_Tusd' ! neutral surface drag coefficient 641 IF( TRIM(sn_rcv_tusd%cldes ) == 'coupled' ) THEN 642 srcv(jpr_tusd)%laction = .TRUE. 643 cpl_tusd = .TRUE. 644 ENDIF 645 srcv(jpr_tvsd)%clname = 'O_Tvsd' ! neutral surface drag coefficient 646 IF( TRIM(sn_rcv_tvsd%cldes ) == 'coupled' ) THEN 647 srcv(jpr_tvsd)%laction = .TRUE. 648 cpl_tvsd = .TRUE. 649 ENDIF 650 651 srcv(jpr_twox)%clname = 'O_Twox' ! wave to ocean momentum flux in the u direction 652 srcv(jpr_twoy)%clname = 'O_Twoy' ! wave to ocean momentum flux in the v direction 653 srcv(jpr_tawx)%clname = 'O_Tawx' ! Net wave-supported stress in the u direction 654 srcv(jpr_tawy)%clname = 'O_Tawy' ! Net wave-supported stress in the v direction 655 IF( TRIM(sn_rcv_taw%cldes ) == 'coupled' ) THEN 656 srcv(jpr_twox)%laction = .TRUE. 657 srcv(jpr_twoy)%laction = .TRUE. 658 srcv(jpr_tawx)%laction = .TRUE. 659 srcv(jpr_tawy)%laction = .TRUE. 660 cpl_taw = .TRUE. 661 ENDIF 637 662 ! 638 663 ! ! ------------------------------- ! … … 1043 1068 ENDIF 1044 1069 xcplmask(:,:,0) = 1. - SUM( xcplmask(:,:,1:nn_cplmodel), dim = 3 ) 1070 ! 1045 1071 ! 1046 1072 END SUBROUTINE sbc_cpl_init … … 1118 1144 IF( ncpl_qsr_freq /= 0) ncpl_qsr_freq = 86400 / ncpl_qsr_freq ! used by top 1119 1145 1146 IF ( ln_wave .AND. nn_components == 0 ) THEN 1147 ncpl_qsr_freq = 1; 1148 WRITE(numout,*) 'ncpl_qsr_freq is set to 1 when coupling NEMO with wave (without SAS) ' 1149 ENDIF 1120 1150 ENDIF 1121 1151 ! … … 1280 1310 IF( srcv(jpr_hsig)%laction ) hsw(:,:) = frcv(jpr_hsig)%z3(:,:,1) 1281 1311 ! 1282 ! ! ========================= !1283 ! ! Wave peak frequency !1284 ! ! ========================= !1285 IF( srcv(jpr_wfreq)%laction ) wfreq(:,:) = frcv(jpr_wfreq)%z3(:,:,1)1286 !1287 1312 ! ! ========================= ! 1288 1313 ! ! Vertical mixing Qiao ! … … 1291 1316 1292 1317 ! Calculate the 3D Stokes drift both in coupled and not fully uncoupled mode 1293 IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. srcv(jpr_wper)%laction&1294 .OR. srcv(jpr_hsig)%laction .OR. srcv(jpr_wfreq)%laction)THEN1318 IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. & 1319 srcv(jpr_wper)%laction .OR. srcv(jpr_hsig)%laction ) THEN 1295 1320 CALL sbc_stokes( Kmm ) 1296 1321 ENDIF … … 1299 1324 ! ! Stress adsorbed by waves ! 1300 1325 ! ! ========================= ! 1301 IF( srcv(jpr_tauwoc)%laction .AND. ln_tauwoc ) tauoc_wave(:,:) = frcv(jpr_tauwoc)%z3(:,:,1) 1302 1303 ! ! ========================= ! 1304 ! ! Stress component by waves ! 1305 ! ! ========================= ! 1306 IF( srcv(jpr_tauwx)%laction .AND. srcv(jpr_tauwy)%laction .AND. ln_tauw ) THEN 1307 tauw_x(:,:) = frcv(jpr_tauwx)%z3(:,:,1) 1308 tauw_y(:,:) = frcv(jpr_tauwy)%z3(:,:,1) 1309 ENDIF 1310 1326 IF( srcv(jpr_wstrf)%laction .AND. ln_tauoc ) tauoc_wave(:,:) = frcv(jpr_wstrf)%z3(:,:,1) 1327 ! 1311 1328 ! ! ========================= ! 1312 1329 ! ! Wave drag coefficient ! 1313 1330 ! ! ========================= ! 1314 1331 IF( srcv(jpr_wdrag)%laction .AND. ln_cdgw ) cdn_wave(:,:) = frcv(jpr_wdrag)%z3(:,:,1) 1315 1332 ! 1333 ! ! ========================= ! 1334 ! ! Wave drag coefficient ! 1335 ! ! ========================= ! 1336 IF( srcv(jpr_charn)%laction .AND. ln_charn ) charn(:,:) = frcv(jpr_charn)%z3(:,:,1) 1337 ! 1338 ! 1339 IF( srcv(jpr_tawx)%laction .AND. ln_taw ) tawx(:,:) = frcv(jpr_tawx)%z3(:,:,1) 1340 IF( srcv(jpr_tawy)%laction .AND. ln_taw ) tawy(:,:) = frcv(jpr_tawy)%z3(:,:,1) 1341 IF( srcv(jpr_twox)%laction .AND. ln_taw ) twox(:,:) = frcv(jpr_twox)%z3(:,:,1) 1342 IF( srcv(jpr_twoy)%laction .AND. ln_taw ) twoy(:,:) = frcv(jpr_twoy)%z3(:,:,1) 1343 ! 1344 ! ! ========================= ! 1345 ! ! wave TKE flux at sfc ! 1346 ! ! ========================= ! 1347 IF( srcv(jpr_phioc)%laction .AND. ln_phioc ) phioc(:,:) = frcv(jpr_phioc)%z3(:,:,1) 1348 ! 1349 ! ! ========================= ! 1350 ! ! Bernoulli head ! 1351 ! ! ========================= ! 1352 IF( srcv(jpr_bhd)%laction .AND. ln_bern_srfc ) bhd_wave(:,:) = frcv(jpr_bhd)%z3(:,:,1) 1353 ! 1354 ! ! ========================= ! 1355 ! ! Stokes transport u dir ! 1356 ! ! ========================= ! 1357 IF( srcv(jpr_tusd)%laction .AND. ln_breivikFV_2016 ) tusd(:,:) = frcv(jpr_tusd)%z3(:,:,1) 1358 ! 1359 ! ! ========================= ! 1360 ! ! Stokes transport v dir ! 1361 ! ! ========================= ! 1362 IF( srcv(jpr_tvsd)%laction .AND. ln_breivikFV_2016 ) tvsd(:,:) = frcv(jpr_tvsd)%z3(:,:,1) 1363 ! 1316 1364 ! Fields received by SAS when OASIS coupling 1317 1365 ! (arrays no more filled at sbcssm stage)
Note: See TracChangeset
for help on using the changeset viewer.