- Timestamp:
- 2020-04-23T10:11:38+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note: See TracChangeset
for help on using the changeset viewer.