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 13007 – NEMO

Changeset 13007


Ignore:
Timestamp:
2020-06-02T18:21:37+02:00 (4 years ago)
Author:
cetlod
Message:

trunk:add mixing length parameterization depending on sea-ice thickness, see ticket #2476

Location:
NEMO/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/cfgs/SHARED/namelist_ref

    r12933 r13007  
    11341134   !                       !                 = 3 as =2 with distinct dissipative an mixing length scale 
    11351135   ln_mxl0     = .true.    !  surface mixing length scale = F(wind stress) (T) or not (F) 
     1136      nn_mxlice    = 0        ! type of scaling under sea-ice 
     1137                              !    = 0 no scaling under sea-ice 
     1138                              !    = 1 scaling with constant sea-ice thickness 
     1139                              !    = 2  scaling with mean sea-ice thickness ( only with SI3 sea-ice model ) 
     1140                              !    = 3  scaling with maximum sea-ice thickness 
     1141      rn_mxlice   = 10.       ! max constant ice thickness value when scaling under sea-ice ( nn_mxlice=1) 
    11361142   rn_mxl0     =   0.04    !  surface  buoyancy lenght scale minimum value 
    11371143   ln_drg      = .false.   !  top/bottom friction added as boundary condition of TKE 
  • NEMO/trunk/src/OCE/ZDF/zdftke.F90

    r12702 r13007  
    4545   USE zdfdrg         ! vertical physics: top/bottom drag coef. 
    4646   USE zdfmxl         ! vertical physics: mixed layer 
     47#if defined key_si3 
     48   USE ice, ONLY: hm_i, h_i 
     49#endif 
     50#if defined key_cice 
     51   USE sbc_ice, ONLY: h_i 
     52#endif 
    4753   ! 
    4854   USE in_out_manager ! I/O manager 
     
    422428      REAL(wp) ::   zrn2, zraug, zcoef, zav   ! local scalars 
    423429      REAL(wp) ::   zdku,   zdkv, zsqen       !   -      - 
    424       REAL(wp) ::   zemxl, zemlm, zemlp       !   -      - 
     430      REAL(wp) ::   zemxl, zemlm, zemlp, zmaxice       !   -      - 
    425431      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zmxlm, zmxld   ! 3D workspace 
    426432      !!-------------------------------------------------------------------- 
     
    436442      zmxld(:,:,:)  = rmxl_min 
    437443      ! 
    438       IF( ln_mxl0 ) THEN            ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rho0*g) 
    439          zraug = vkarmn * 2.e5_wp / ( rho0 * grav ) 
     444     IF( ln_mxl0 ) THEN            ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 
     445         ! 
     446         zraug = vkarmn * 2.e5_wp / ( rau0 * grav ) 
     447#if ! defined key_si3 && ! defined key_cice 
    440448         DO_2D_00_00 
    441             zmxlm(ji,jj,1) = MAX( rn_mxl0, zraug * taum(ji,jj) * tmask(ji,jj,1) ) 
     449            zmxlm(ji,jj,1) =  zraug * taum(ji,jj) * tmask(ji,jj,1) 
    442450         END_2D 
    443       ELSE  
     451#else 
     452         SELECT CASE( nn_mxlice )             ! Type of scaling under sea-ice 
     453         ! 
     454         CASE( 0 )                      ! No scaling under sea-ice 
     455            DO_2D_00_00 
     456               zmxlm(ji,jj,1) = zraug * taum(ji,jj) * tmask(ji,jj,1) 
     457            END_2D 
     458            ! 
     459         CASE( 1 )                           ! scaling with constant sea-ice thickness 
     460            DO_2D_00_00 
     461               zmxlm(ji,jj,1) =  ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * rn_mxlice ) * tmask(ji,jj,1) 
     462            END_2D 
     463            ! 
     464         CASE( 2 )                                 ! scaling with mean sea-ice thickness 
     465            DO_2D_00_00 
     466#if defined key_si3 
     467               zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * hm_i(ji,jj) * 2. ) * tmask(ji,jj,1) 
     468#elif defined key_cice 
     469               zmaxice = MAXVAL( h_i(ji,jj,:) ) 
     470               zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * zmaxice ) * tmask(ji,jj,1) 
     471#endif 
     472            END_2D 
     473            ! 
     474         CASE( 3 )                                 ! scaling with max sea-ice thickness 
     475            DO_2D_00_00 
     476               zmaxice = MAXVAL( h_i(ji,jj,:) ) 
     477               zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * zmaxice ) * tmask(ji,jj,1) 
     478            END_2D 
     479            ! 
     480         END SELECT 
     481#endif 
     482         ! 
     483         DO_2D_00_00 
     484            zmxlm(ji,jj,1) = MAX( rn_mxl0, zmxlm(ji,jj,1) ) 
     485         END_2D 
     486         ! 
     487      ELSE 
    444488         zmxlm(:,:,1) = rn_mxl0 
    445489      ENDIF 
     490 
    446491      ! 
    447492      DO_3D_00_00( 2, jpkm1 ) 
     
    547592      INTEGER             ::   ios 
    548593      !! 
    549       NAMELIST/namzdf_tke/ rn_ediff, rn_ediss , rn_ebb , rn_emin  ,          & 
    550          &                 rn_emin0, rn_bshear, nn_mxl , ln_mxl0  ,          & 
    551          &                 rn_mxl0 , nn_pdl   , ln_drg , ln_lc    , rn_lc,   & 
    552          &                 nn_etau , nn_htau  , rn_efr , rn_eice   
     594      NAMELIST/namzdf_tke/ rn_ediff, rn_ediss , rn_ebb   , rn_emin  ,  & 
     595         &                 rn_emin0, rn_bshear, nn_mxl   , ln_mxl0  ,  & 
     596         &                 rn_mxl0 , nn_mxlice, rn_mxlice,             & 
     597         &                 nn_pdl  , ln_drg   , ln_lc    , rn_lc,      & 
     598         &                 nn_etau , nn_htau  , rn_efr   , rn_eice   
    553599      !!---------------------------------------------------------------------- 
    554600      ! 
     
    576622         WRITE(numout,*) '      mixing length type                          nn_mxl    = ', nn_mxl 
    577623         WRITE(numout,*) '         surface mixing length = F(stress) or not    ln_mxl0   = ', ln_mxl0 
     624         IF( ln_mxl0 ) THEN 
     625            WRITE(numout,*) '      type of scaling under sea-ice               nn_mxlice = ', nn_mxlice 
     626            IF( nn_mxlice == 1 ) & 
     627            WRITE(numout,*) '      ice thickness when scaling under sea-ice    rn_mxlice = ', rn_mxlice 
     628         ENDIF          
    578629         WRITE(numout,*) '         surface  mixing length minimum value        rn_mxl0   = ', rn_mxl0 
    579630         WRITE(numout,*) '      top/bottom friction forcing flag            ln_drg    = ', ln_drg 
Note: See TracChangeset for help on using the changeset viewer.