Changeset 13540 for NEMO/branches/2020/r12377_ticket2386/src/ABL/sbcabl.F90
- Timestamp:
- 2020-09-29T12:41:06+02:00 (4 years ago)
- Location:
- NEMO/branches/2020/r12377_ticket2386
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/r12377_ticket2386
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEADext/AGRIF5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 8 9 9 # SETTE 10 ^/utils/CI/sette@ HEADsette10 ^/utils/CI/sette@13507 sette
-
- Property svn:externals
-
NEMO/branches/2020/r12377_ticket2386/src/ABL/sbcabl.F90
r12511 r13540 68 68 LOGICAL :: lluldl 69 69 NAMELIST/namsbc_abl/ cn_dir, cn_dom, cn_ablrst_in, cn_ablrst_out, & 70 & cn_ablrst_indir, cn_ablrst_outdir, 70 & cn_ablrst_indir, cn_ablrst_outdir, ln_rstart_abl, & 71 71 & ln_hpgls_frc, ln_geos_winds, nn_dyn_restore, & 72 72 & rn_ldyn_min , rn_ldyn_max, rn_ltra_min, rn_ltra_max, & 73 & nn_amxl, rn_ cm, rn_ct, rn_ce, rn_ceps, rn_Rod, rn_Ric, &73 & nn_amxl, rn_Cm, rn_Ct, rn_Ce, rn_Ceps, rn_Rod, rn_Ric, & 74 74 & ln_smth_pblh 75 75 !!--------------------------------------------------------------------- 76 76 77 REWIND( numnam_ref )! Namelist namsbc_abl in reference namelist : ABL parameters77 ! Namelist namsbc_abl in reference namelist : ABL parameters 78 78 READ ( numnam_ref, namsbc_abl, IOSTAT = ios, ERR = 901 ) 79 79 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_abl in reference namelist' ) 80 80 ! 81 REWIND( numnam_cfg )! Namelist namsbc_abl in configuration namelist : ABL parameters81 ! Namelist namsbc_abl in configuration namelist : ABL parameters 82 82 READ ( numnam_cfg, namsbc_abl, IOSTAT = ios, ERR = 902 ) 83 83 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_abl in configuration namelist' ) … … 166 166 rn_Sch = rn_ce / rn_cm 167 167 mxl_min = (avm_bak / rn_cm) / sqrt( tke_min ) 168 rn_Esfc = 1._wp / SQRT(rn_cm*rn_ceps) 169 rn_Lsfc = vkarmn * SQRT(SQRT(rn_cm*rn_ceps)) / rn_cm 168 170 169 171 IF(lwp) THEN … … 172 174 WRITE(numout,*) ' ~~~~~~~~~~~' 173 175 IF(nn_amxl==0) WRITE(numout,*) 'Deardorff 80 length-scale ' 174 IF(nn_amxl==1) WRITE(numout,*) 'length-scale based on the distance to the PBL height ' 176 IF(nn_amxl==1) WRITE(numout,*) 'Modified Deardorff 80 length-scale ' 177 IF(nn_amxl==2) WRITE(numout,*) 'Bougeault and Lacarrere length-scale ' 178 IF(nn_amxl==3) WRITE(numout,*) 'Rodier et al. length-scale ' 175 179 WRITE(numout,*) ' Minimum value of atmospheric TKE = ',tke_min,' m^2 s^-2' 176 180 WRITE(numout,*) ' Minimum value of atmospheric mixing length = ',mxl_min,' m' … … 179 183 WRITE(numout,*) ' Constant for Schmidt number = ',rn_Sch 180 184 WRITE(numout,*) ' Constant for TKE dissipation = ',rn_Ceps 185 WRITE(numout,*) ' Constant for TKE sfc boundary condition = ',rn_Esfc 186 WRITE(numout,*) ' Constant for mxl sfc boundary condition = ',rn_Lsfc 181 187 END IF 182 188 … … 203 209 ! ABL timestep 204 210 rDt_abl = nn_fsbc * rn_Dt 211 IF(lwp) WRITE(numout,*) ' ABL timestep = ', rDt_abl,' s' 205 212 206 213 ! Check parameters for dynamics … … 249 256 zcff = 2._wp * omega * SIN( rad * 90._wp ) !++ fmax 250 257 rest_eq(:,:) = SIN( 0.5_wp*rpi*( (fft_abl(:,:) - zcff) / zcff ) )**8 251 !!GS: alternative shape252 !rest_eq(:,:) = SIN( 0.5_wp*rpi*(zcff - ABS(ff_t(:,:))) / (zcff - 3.e-5) )**8253 !WHERE(ABS(ff_t(:,:)).LE.3.e-5) rest_eq(:,:) = 1._wp254 258 ELSE 255 259 rest_eq(:,:) = 1._wp … … 264 268 265 269 ! Initialize the time index for now time (nt_n) and after time (nt_a) 266 nt_n = 1 + MOD( nit000 , 2) 267 nt_a = 1 + MOD( nit000+1, 2) 270 nt_n = 1; nt_a = 2 268 271 269 272 ! initialize ABL from data or restart 270 IF( ln_rstart ) THEN273 IF( ln_rstart_abl ) THEN 271 274 CALL abl_rst_read 272 275 ELSE 273 276 CALL fld_read( nit000, nn_fsbc, sf ) ! input fields provided at the first time-step 274 277 275 u_abl(:,:,:,nt_n ) = sf(jp_wndi)%fnow(:,:,:)276 v_abl(:,:,:,nt_n ) = sf(jp_wndj)%fnow(:,:,:)278 u_abl(:,:,:,nt_n ) = sf(jp_wndi)%fnow(:,:,:) 279 v_abl(:,:,:,nt_n ) = sf(jp_wndj)%fnow(:,:,:) 277 280 tq_abl(:,:,:,nt_n,jp_ta) = sf(jp_tair)%fnow(:,:,:) 278 281 tq_abl(:,:,:,nt_n,jp_qa) = sf(jp_humi)%fnow(:,:,:) … … 281 284 avm_abl(:,:,: ) = avm_bak 282 285 avt_abl(:,:,: ) = avt_bak 283 mxl_abl(:,:,: ) = mxl_min284 286 pblh (:,: ) = ghw_abl( 3 ) !<-- assume that the pbl contains 3 grid points 285 287 u_abl (:,:,:,nt_a ) = 0._wp … … 287 289 tq_abl (:,:,:,nt_a,: ) = 0._wp 288 290 tke_abl(:,:,:,nt_a ) = 0._wp 291 292 mxlm_abl(:,:,: ) = mxl_min 293 mxld_abl(:,:,: ) = mxl_min 289 294 ENDIF 290 291 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)292 295 293 296 END SUBROUTINE sbc_abl_init … … 330 333 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 331 334 332 !!------------------------------------------------------------------------------------------- 333 !! 2 - Compute Cd x ||U||, Ch x ||U||, Ce x ||U||, and SSQ using now fields 334 !!------------------------------------------------------------------------------------------- 335 336 CALL blk_oce_1( kt, u_abl(:,:,2,nt_n ), v_abl(:,:,2,nt_n ), & ! <<= in 337 & tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa), & ! <<= in 338 & sf(jp_slp )%fnow(:,:,1) , sst_m, ssu_m, ssv_m , & ! <<= in 339 & sf(jp_qsr )%fnow(:,:,1) , sf(jp_qlw )%fnow(:,:,1) , & ! <<= in 340 & tsk_m, zssq, zcd_du, zsen, zevp ) ! =>> out 341 342 #if defined key_si3 343 CALL blk_ice_1( u_abl(:,:,2,nt_n ), v_abl(:,:,2,nt_n ), & ! <<= in 344 & tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa), & ! <<= in 345 & sf(jp_slp)%fnow(:,:,1) , u_ice, v_ice, tm_su , & ! <<= in 346 & pseni=zseni, pevpi=zevpi, pssqi=zssqi, pcd_dui=zcd_dui ) ! <<= out 347 #endif 348 349 !!------------------------------------------------------------------------------------------- 350 !! 3 - Advance ABL variables from now (n) to after (n+1) 351 !!------------------------------------------------------------------------------------------- 352 353 CALL abl_stp( kt, tsk_m, ssu_m, ssv_m, zssq, & ! <<= in 354 & sf(jp_wndi)%fnow(:,:,:), sf(jp_wndj)%fnow(:,:,:), & ! <<= in 355 & sf(jp_tair)%fnow(:,:,:), sf(jp_humi)%fnow(:,:,:), & ! <<= in 356 & sf(jp_slp )%fnow(:,:,1), & ! <<= in 357 & sf(jp_hpgi)%fnow(:,:,:), sf(jp_hpgj)%fnow(:,:,:), & ! <<= in 358 & zcd_du, zsen, zevp, & ! <=> in/out 359 & wndm, utau, vtau, taum & ! =>> out 360 #if defined key_si3 361 & , tm_su, u_ice, v_ice, zssqi, zcd_dui & ! <<= in 362 & , zseni, zevpi, wndm_ice, ato_i & ! <<= in 363 & , utau_ice, vtau_ice & ! =>> out 364 #endif 365 & ) 366 !!------------------------------------------------------------------------------------------- 367 !! 4 - Finalize flux computation using ABL variables at (n+1), nt_n corresponds to (n+1) since 368 !! time swap is done in abl_stp 369 !!------------------------------------------------------------------------------------------- 370 371 CALL blk_oce_2( tq_abl(:,:,2,nt_n,jp_ta), & 372 & sf(jp_qsr )%fnow(:,:,1) , sf(jp_qlw )%fnow(:,:,1), & 373 & sf(jp_prec)%fnow(:,:,1) , sf(jp_snow)%fnow(:,:,1), & 374 & tsk_m, zsen, zevp ) 375 376 CALL abl_rst_opn( kt ) ! Open abl restart file (if necessary) 377 IF( lrst_abl ) CALL abl_rst_write( kt ) ! -- abl restart file 378 379 #if defined key_si3 380 ! Avoid a USE abl in icesbc module 381 sf(jp_tair)%fnow(:,:,1) = tq_abl(:,:,2,nt_n,jp_ta); sf(jp_humi)%fnow(:,:,1) = tq_abl(:,:,2,nt_n,jp_qa) 382 #endif 335 IF( MOD( kt - 1, nn_fsbc ) == 0 ) THEN 336 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_uoatm)%fnow(:,:,1), sf(jp_voatm)%fnow(:,:,1), & ! <<= 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 383 390 384 391 END SUBROUTINE sbc_abl
Note: See TracChangeset
for help on using the changeset viewer.