Changeset 12799
- Timestamp:
- 2020-04-23T10:11:38+02:00 (3 years ago)
- Location:
- NEMO/branches/2020/dev_r12563_ASINTER-06_ABL_improvement/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12563_ASINTER-06_ABL_improvement/src/ABL/ablmod.F90
r12749 r12799 18 18 USE dom_oce, ONLY : tmask 19 19 USE sbc_oce, ONLY : ght_abl, ghw_abl, e3t_abl, e3w_abl, jpka, jpkam1, rhoa 20 USE sbcblk ! use rn_?fac 20 USE sbcblk ! use rn_?fac, cdn_oce 21 21 USE sbcblk_phy ! use some physical constants for flux computation 22 22 ! … … 102 102 #endif 103 103 ! 104 REAL(wp), DIMENSION(1:jpi,1:jpj ):: zwnd_i, zwnd_j105 REAL(wp), DIMENSION(1:jpi ,2:jpka ):: zCF106 ! 107 REAL(wp), DIMENSION(1:jpi ,1:jpka ):: z_elem_a108 REAL(wp), DIMENSION(1:jpi ,1:jpka ):: z_elem_b109 REAL(wp), DIMENSION(1:jpi ,1:jpka ):: z_elem_c104 REAL(wp), DIMENSION(1:jpi,1:jpj ) :: zwnd_i, zwnd_j 105 REAL(wp), DIMENSION(1:jpi ,2:jpka) :: zCF 106 ! 107 REAL(wp), DIMENSION(1:jpi ,1:jpka) :: z_elem_a 108 REAL(wp), DIMENSION(1:jpi ,1:jpka) :: z_elem_b 109 REAL(wp), DIMENSION(1:jpi ,1:jpka) :: z_elem_c 110 110 ! 111 111 INTEGER :: ji, jj, jk, jtra, jbak ! dummy loop indices … … 351 351 #if defined key_si3 352 352 zztmp1 = zztmp1 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pcd_du_ice(ji, jj) 353 zzice = 0.5_wp * ( pssu_ice(ji-1, jj) + pssu_ice(ji, jj) ) * rn_vfac353 zzice = 0.5_wp * ( pssu_ice(ji-1, jj) + pssu_ice(ji, jj) ) * rn_vfac 354 354 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pcd_du_ice(ji, jj) * zzice 355 355 #endif … … 425 425 #if defined key_si3 426 426 zztmp1 = zztmp1 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pcd_du_ice(ji, jj) 427 zzice = 0.5_wp * ( pssv_ice(ji, jj) + pssv_ice(ji, jj-1) ) * rn_vfac427 zzice = 0.5_wp * ( pssv_ice(ji, jj) + pssv_ice(ji, jj-1) ) * rn_vfac 428 428 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pcd_du_ice(ji, jj) * zzice 429 429 #endif … … 624 624 625 625 IF(sn_cfctl%l_prtctl) THEN 626 CALL prt_ctl( tab2d_1=p wndm , clinfo1=' abl_stp: wndm : ' )627 CALL prt_ctl( tab2d_1=ptaui , clinfo1=' abl_stp: utau : ')628 CALL prt_ctl( tab2d_ 2=ptauj , clinfo2= 'vtau: ' )626 CALL prt_ctl( tab2d_1=ptaui , clinfo1=' abl_stp: utau : ', mask1=umask, & 627 & tab2d_2=ptauj , clinfo2=' vtau : ', mask2=vmask ) 628 CALL prt_ctl( tab2d_1=pwndm , clinfo1=' abl_stp: wndm : ' ) 629 629 ENDIF 630 630 … … 647 647 CALL lbc_lnk_multi( 'ablmod', ptaui_ice, 'U', -1., ptauj_ice, 'V', -1. ) 648 648 ! 649 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=ptaui_ice , clinfo1=' abl_stp: putaui : ' & 650 & , tab2d_2=ptauj_ice , clinfo2=' pvtaui : ' ) 649 IF(sn_cfctl%l_prtctl) THEN 650 CALL prt_ctl( tab2d_1=ptaui_ice , clinfo1=' abl_stp: utau_ice : ', mask1=umask, & 651 & tab2d_2=ptauj_ice , clinfo2=' vtau_ice : ', mask2=vmask ) 652 END IF 651 653 #endif 652 654 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< … … 722 724 ! Compute vertical shear 723 725 DO jk = 2, jpkam1 724 DO ji = 1, jpi726 DO ji = 1, jpi 725 727 zcff = 1.0_wp / e3w_abl( jk )**2 726 728 zdU = zcff* Avm_abl(ji,jj,jk) * (u_abl( ji, jj, jk+1, tind)-u_abl( ji, jj, jk , tind) )**2 … … 889 891 DO jk = 2, jpkam1 890 892 DO ji = 1, jpi 891 zbuoy 893 zbuoy = MAX( zbn2(ji, jj, jk), rsmall ) 892 894 mxlm_abl( ji, jj, jk ) = MAX( mxl_min, & 893 & SQRT( 2._wp * tke_abl( ji, jj, jk, nt_a ) / zbuoy ) 895 & SQRT( 2._wp * tke_abl( ji, jj, jk, nt_a ) / zbuoy ) ) 894 896 END DO 895 897 END DO -
NEMO/branches/2020/dev_r12563_ASINTER-06_ABL_improvement/src/ABL/sbcabl.F90
r12770 r12799 209 209 ! ABL timestep 210 210 rDt_abl = nn_fsbc * rn_Dt 211 IF(lwp) WRITE(numout,*) ' ABL timestep = ', rDt_abl,' s' 211 212 212 213 ! Check parameters for dynamics … … 294 295 ENDIF 295 296 296 rhoa(:,:) = rho_air( tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa), sf(jp_slp)%fnow(:,:,1) ) !!GS: rhoa must be (re)computed here here to avoid division by zero in blk_ice_1 (TBI)297 298 297 END SUBROUTINE sbc_abl_init 299 298 … … 335 334 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 336 335 337 !!------------------------------------------------------------------------------------------- 338 !! 2 - Compute Cd x ||U||, Ch x ||U||, Ce x ||U||, and SSQ using now fields 339 !!------------------------------------------------------------------------------------------- 340 341 CALL blk_oce_1( kt, u_abl(:,:,2,nt_n ), v_abl(:,:,2,nt_n ), & ! <<= in 342 & tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa), & ! <<= in 343 & sf(jp_slp )%fnow(:,:,1) , sst_m, ssu_m, ssv_m , & ! <<= in 344 & sf(jp_qsr )%fnow(:,:,1) , sf(jp_qlw )%fnow(:,:,1) , & ! <<= in 345 & tsk_m, zssq, zcd_du, zsen, zevp ) ! =>> out 346 347 #if defined key_si3 348 CALL blk_ice_1( u_abl(:,:,2,nt_n ), v_abl(:,:,2,nt_n ), & ! <<= in 349 & tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa), & ! <<= in 350 & sf(jp_slp)%fnow(:,:,1) , u_ice, v_ice, tm_su , & ! <<= in 351 & pseni=zseni, pevpi=zevpi, pssqi=zssqi, pcd_dui=zcd_dui ) ! <<= out 352 #endif 353 354 !!------------------------------------------------------------------------------------------- 355 !! 3 - Advance ABL variables from now (n) to after (n+1) 356 !!------------------------------------------------------------------------------------------- 357 358 CALL abl_stp( kt, tsk_m, ssu_m, ssv_m, zssq, & ! <<= in 359 & sf(jp_wndi)%fnow(:,:,:), sf(jp_wndj)%fnow(:,:,:), & ! <<= in 360 & sf(jp_tair)%fnow(:,:,:), sf(jp_humi)%fnow(:,:,:), & ! <<= in 361 & sf(jp_slp )%fnow(:,:,1), & ! <<= in 362 & sf(jp_hpgi)%fnow(:,:,:), sf(jp_hpgj)%fnow(:,:,:), & ! <<= in 363 & zcd_du, zsen, zevp, & ! <=> in/out 364 & wndm, utau, vtau, taum & ! =>> out 365 #if defined key_si3 366 & , tm_su, u_ice, v_ice, zssqi, zcd_dui & ! <<= in 367 & , zseni, zevpi, wndm_ice, ato_i & ! <<= in 368 & , utau_ice, vtau_ice & ! =>> out 369 #endif 370 & ) 371 !!------------------------------------------------------------------------------------------- 372 !! 4 - Finalize flux computation using ABL variables at (n+1), nt_n corresponds to (n+1) since 373 !! time swap is done in abl_stp 374 !!------------------------------------------------------------------------------------------- 375 376 CALL blk_oce_2( tq_abl(:,:,2,nt_n,jp_ta), & 377 & sf(jp_qsr )%fnow(:,:,1) , sf(jp_qlw )%fnow(:,:,1), & 378 & sf(jp_prec)%fnow(:,:,1) , sf(jp_snow)%fnow(:,:,1), & 379 & tsk_m, zsen, zevp ) 380 381 CALL abl_rst_opn( kt ) ! Open abl restart file (if necessary) 382 IF( lrst_abl ) CALL abl_rst_write( kt ) ! -- abl restart file 383 384 #if defined key_si3 385 ! Avoid a USE abl in icesbc module 386 sf(jp_tair)%fnow(:,:,1) = tq_abl(:,:,2,nt_n,jp_ta); sf(jp_humi)%fnow(:,:,1) = tq_abl(:,:,2,nt_n,jp_qa) 387 #endif 336 IF( MOD( kt - 1, nn_fsbc ) == 0 ) THEN 337 338 !!------------------------------------------------------------------------------------------- 339 !! 2 - Compute Cd x ||U||, Ch x ||U||, Ce x ||U||, and SSQ using now fields 340 !!------------------------------------------------------------------------------------------- 341 342 CALL blk_oce_1( kt, u_abl(:,:,2,nt_n ), v_abl(:,:,2,nt_n ), & ! <<= in 343 & tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa), & ! <<= in 344 & sf(jp_slp )%fnow(:,:,1) , sst_m, ssu_m, ssv_m , & ! <<= in 345 & sf(jp_qsr )%fnow(:,:,1) , sf(jp_qlw )%fnow(:,:,1) , & ! <<= in 346 & tsk_m, zssq, zcd_du, zsen, zevp ) ! =>> out 347 348 #if defined key_si3 349 CALL blk_ice_1( u_abl(:,:,2,nt_n ), v_abl(:,:,2,nt_n ), & ! <<= in 350 & tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa), & ! <<= in 351 & sf(jp_slp)%fnow(:,:,1) , u_ice, v_ice, tm_su , & ! <<= in 352 & pseni=zseni, pevpi=zevpi, pssqi=zssqi, pcd_dui=zcd_dui ) ! <<= out 353 #endif 354 355 !!------------------------------------------------------------------------------------------- 356 !! 3 - Advance ABL variables from now (n) to after (n+1) 357 !!------------------------------------------------------------------------------------------- 358 359 CALL abl_stp( kt, tsk_m, ssu_m, ssv_m, zssq, & ! <<= in 360 & sf(jp_wndi)%fnow(:,:,:), sf(jp_wndj)%fnow(:,:,:), & ! <<= in 361 & sf(jp_tair)%fnow(:,:,:), sf(jp_humi)%fnow(:,:,:), & ! <<= in 362 & sf(jp_slp )%fnow(:,:,1), & ! <<= in 363 & sf(jp_hpgi)%fnow(:,:,:), sf(jp_hpgj)%fnow(:,:,:), & ! <<= in 364 & zcd_du, zsen, zevp, & ! <=> in/out 365 & wndm, utau, vtau, taum & ! =>> out 366 #if defined key_si3 367 & , tm_su, u_ice, v_ice, zssqi, zcd_dui & ! <<= in 368 & , zseni, zevpi, wndm_ice, ato_i & ! <<= in 369 & , utau_ice, vtau_ice & ! =>> out 370 #endif 371 & ) 372 !!------------------------------------------------------------------------------------------- 373 !! 4 - Finalize flux computation using ABL variables at (n+1), nt_n corresponds to (n+1) since 374 !! time swap is done in abl_stp 375 !!------------------------------------------------------------------------------------------- 376 377 CALL blk_oce_2( tq_abl(:,:,2,nt_n,jp_ta), & 378 & sf(jp_qsr )%fnow(:,:,1) , sf(jp_qlw )%fnow(:,:,1), & 379 & sf(jp_prec)%fnow(:,:,1) , sf(jp_snow)%fnow(:,:,1), & 380 & tsk_m, zsen, zevp ) 381 382 CALL abl_rst_opn( kt ) ! Open abl restart file (if necessary) 383 IF( lrst_abl ) CALL abl_rst_write( kt ) ! -- abl restart file 384 385 #if defined key_si3 386 ! Avoid a USE abl in icesbc module 387 sf(jp_tair)%fnow(:,:,1) = tq_abl(:,:,2,nt_n,jp_ta); sf(jp_humi)%fnow(:,:,1) = tq_abl(:,:,2,nt_n,jp_qa) 388 #endif 389 END IF 388 390 389 391 END SUBROUTINE sbc_abl -
NEMO/branches/2020/dev_r12563_ASINTER-06_ABL_improvement/src/OCE/IOM/iom.F90
r12489 r12799 1193 1193 & 'we accept this case, even if there is a possible mix-up between z and time dimension' ) 1194 1194 idmspc = idmspc - 1 1195 ELSE 1196 CALL ctl_stop( TRIM(clinfo), 'To keep iom lisibility, when reading a '//clrankpv//'D array,' , & 1197 & 'we do not accept data with '//cldmspc//' spatial dimensions', & 1198 & 'Use ncwa -a to suppress the unnecessary dimensions' ) 1195 !!GS: possibility to read 3D ABL atmopsheric forcing and use 1st level to force BULK simulation 1196 !ELSE 1197 ! CALL ctl_stop( TRIM(clinfo), 'To keep iom lisibility, when reading a '//clrankpv//'D array,', & 1198 ! & 'we do not accept data with '//cldmspc//' spatial dimensions' , & 1199 ! & 'Use ncwa -a to suppress the unnecessary dimensions' ) 1199 1200 ENDIF 1200 1201 ENDIF -
NEMO/branches/2020/dev_r12563_ASINTER-06_ABL_improvement/src/OCE/SBC/sbcblk.F90
r12588 r12799 658 658 659 659 IF( ln_abl ) THEN !== ABL formulation ==! multiplication by rho_air and turbulent fluxes computation done in ablstp 660 !! FL do we need this multiplication by tmask ... ???661 660 DO_2D_11_11 662 zztmp = zU_zu(ji,jj) !* tmask(ji,jj,1)661 zztmp = zU_zu(ji,jj) 663 662 wndm(ji,jj) = zztmp ! Store zU_zu in wndm to compute ustar2 in ablmod 664 663 pcd_du(ji,jj) = zztmp * zcd_oce(ji,jj) 665 664 psen(ji,jj) = zztmp * zch_oce(ji,jj) 666 665 pevp(ji,jj) = zztmp * zce_oce(ji,jj) 666 rhoa(ji,jj) = rho_air( ptair(ji,jj), phumi(ji,jj), pslp(ji,jj) ) 667 667 END_2D 668 668 ELSE !== BLK formulation ==! turbulent fluxes computation
Note: See TracChangeset
for help on using the changeset viewer.