New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 13540 for NEMO/branches/2020/r12377_ticket2386/src/ABL/sbcabl.F90 – NEMO

Ignore:
Timestamp:
2020-09-29T12:41:06+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2386: update to latest trunk

Location:
NEMO/branches/2020/r12377_ticket2386
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/r12377_ticket2386

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
        88 
        99# SETTE 
        10 ^/utils/CI/sette@HEAD         sette 
         10^/utils/CI/sette@13507        sette 
  • NEMO/branches/2020/r12377_ticket2386/src/ABL/sbcabl.F90

    r12511 r13540  
    6868      LOGICAL            ::   lluldl 
    6969      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,      & 
    7171         &                 ln_hpgls_frc, ln_geos_winds, nn_dyn_restore,           & 
    7272         &                 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, & 
    7474         &                 ln_smth_pblh 
    7575      !!--------------------------------------------------------------------- 
    7676 
    77       REWIND( numnam_ref )              ! Namelist namsbc_abl in reference namelist : ABL parameters 
     77                                        ! Namelist namsbc_abl in reference namelist : ABL parameters 
    7878      READ  ( numnam_ref, namsbc_abl, IOSTAT = ios, ERR = 901 ) 
    7979901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_abl in reference namelist' ) 
    8080      ! 
    81       REWIND( numnam_cfg )              ! Namelist namsbc_abl in configuration namelist : ABL parameters 
     81                                        ! Namelist namsbc_abl in configuration namelist : ABL parameters 
    8282      READ  ( numnam_cfg, namsbc_abl, IOSTAT = ios, ERR = 902 ) 
    8383902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_abl in configuration namelist' ) 
     
    166166      rn_Sch  = rn_ce / rn_cm 
    167167      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 
    168170 
    169171      IF(lwp) THEN 
     
    172174         WRITE(numout,*) '    ~~~~~~~~~~~' 
    173175         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 '    
    175179         WRITE(numout,*) ' Minimum value of atmospheric TKE           = ',tke_min,' m^2 s^-2' 
    176180         WRITE(numout,*) ' Minimum value of atmospheric mixing length = ',mxl_min,' m' 
     
    179183         WRITE(numout,*) ' Constant for Schmidt number                = ',rn_Sch 
    180184         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 
    181187      END IF 
    182188 
     
    203209      ! ABL timestep 
    204210      rDt_abl = nn_fsbc * rn_Dt 
     211      IF(lwp) WRITE(numout,*) ' ABL timestep = ', rDt_abl,' s' 
    205212 
    206213      ! Check parameters for dynamics 
     
    249256         zcff         = 2._wp * omega * SIN( rad * 90._wp )   !++ fmax 
    250257         rest_eq(:,:) = SIN( 0.5_wp*rpi*( (fft_abl(:,:) - zcff) / zcff ) )**8 
    251          !!GS: alternative shape 
    252          !rest_eq(:,:) = SIN( 0.5_wp*rpi*(zcff - ABS(ff_t(:,:))) / (zcff - 3.e-5) )**8 
    253          !WHERE(ABS(ff_t(:,:)).LE.3.e-5) rest_eq(:,:) = 1._wp 
    254258      ELSE 
    255259         rest_eq(:,:) = 1._wp 
     
    264268 
    265269      ! 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 
    268271 
    269272      ! initialize ABL from data or restart 
    270       IF( ln_rstart ) THEN 
     273      IF( ln_rstart_abl ) THEN 
    271274         CALL abl_rst_read 
    272275      ELSE 
    273276         CALL fld_read( nit000, nn_fsbc, sf ) ! input fields provided at the first time-step 
    274277 
    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(:,:,:) 
    277280         tq_abl(:,:,:,nt_n,jp_ta) = sf(jp_tair)%fnow(:,:,:) 
    278281         tq_abl(:,:,:,nt_n,jp_qa) = sf(jp_humi)%fnow(:,:,:) 
     
    281284         avm_abl(:,:,:          ) = avm_bak 
    282285         avt_abl(:,:,:          ) = avt_bak 
    283          mxl_abl(:,:,:          ) = mxl_min 
    284286         pblh   (:,:            ) = ghw_abl( 3 )  !<-- assume that the pbl contains 3 grid points 
    285287         u_abl  (:,:,:,nt_a     ) = 0._wp 
     
    287289         tq_abl (:,:,:,nt_a,:   ) = 0._wp 
    288290         tke_abl(:,:,:,nt_a     ) = 0._wp 
     291 
     292         mxlm_abl(:,:,:         ) = mxl_min 
     293         mxld_abl(:,:,:         ) = mxl_min 
    289294      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) 
    292295 
    293296   END SUBROUTINE sbc_abl_init 
     
    330333      CALL fld_read( kt, nn_fsbc, sf )             ! input fields provided at the current time-step 
    331334 
    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 
    383390 
    384391   END SUBROUTINE sbc_abl 
Note: See TracChangeset for help on using the changeset viewer.