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 13942 for NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF – NEMO

Ignore:
Timestamp:
2020-12-01T17:14:18+01:00 (4 years ago)
Author:
jchanut
Message:

Merged with trunk @13787

Location:
NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep

    • Property svn:externals
      •  

        old new  
        88 
        99# SETTE 
        10 ^/utils/CI/sette@13292        sette 
         10^/utils/CI/sette@13559        sette 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF/zdfddm.F90

    r13295 r13942  
    9494!!gm                            and many acces in memory 
    9595          
    96          DO_2D( 1, 1, 1, 1 ) 
     96         DO_2D( 1, 1, 1, 1 )           !==  R=zrau = (alpha / beta) (dk[t] / dk[s])  ==! 
    9797            zrw =   ( gdepw(ji,jj,jk  ,Kmm) - gdept(ji,jj,jk,Kmm) )   & 
    9898!!gm please, use e3w at Kmm below  
     
    110110         END_2D 
    111111 
    112          DO_2D( 1, 1, 1, 1 ) 
     112         DO_2D( 1, 1, 1, 1 )           !==  indicators  ==! 
    113113            ! stability indicator: msks=1 if rn2>0; 0 elsewhere 
    114114            IF( rn2(ji,jj,jk) + 1.e-12  <= 0. ) THEN   ;   zmsks(ji,jj) = 0._wp 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF/zdfdrg.F90

    r13295 r13942  
    3232   USE lib_mpp        ! distributed memory computing 
    3333   USE prtctl         ! Print control 
     34   USE sbc_oce , ONLY : nn_ice  
    3435 
    3536   IMPLICIT NONE 
     
    4142 
    4243   !                                 !!* Namelist namdrg: nature of drag coefficient namelist * 
    43    LOGICAL          ::   ln_OFF       ! free-slip       : Cd = 0 
     44   LOGICAL , PUBLIC ::   ln_drg_OFF   ! free-slip       : Cd = 0 
    4445   LOGICAL          ::   ln_lin       !     linear  drag: Cd = Cd0_lin 
    4546   LOGICAL          ::   ln_non_lin   ! non-linear  drag: Cd = Cd0_nl |U| 
    4647   LOGICAL          ::   ln_loglayer  ! logarithmic drag: Cd = vkarmn/log(z/z0) 
    4748   LOGICAL , PUBLIC ::   ln_drgimp    ! implicit top/bottom friction flag 
    48  
     49   LOGICAL , PUBLIC ::   ln_drgice_imp ! implicit ice-ocean drag  
    4950   !                                 !!* Namelist namdrg_top & _bot: TOP or BOTTOM coefficient namelist * 
    5051   REAL(wp)         ::   rn_Cd0       !: drag coefficient                                           [ - ] 
     
    226227      INTEGER   ::   ios, ioptio   ! local integers 
    227228      !! 
    228       NAMELIST/namdrg/ ln_OFF, ln_lin, ln_non_lin, ln_loglayer, ln_drgimp 
     229      NAMELIST/namdrg/ ln_drg_OFF, ln_lin, ln_non_lin, ln_loglayer, ln_drgimp, ln_drgice_imp 
    229230      !!---------------------------------------------------------------------- 
    230231      ! 
     
    237238      IF(lwm) WRITE ( numond, namdrg ) 
    238239      ! 
     240      IF ( ln_drgice_imp .AND.   nn_ice /= 2  )   ln_drgice_imp = .FALSE. 
     241      ! 
    239242      IF(lwp) THEN 
    240243         WRITE(numout,*) 
     
    242245         WRITE(numout,*) '~~~~~~~~~~~~' 
    243246         WRITE(numout,*) '   Namelist namdrg : top/bottom friction choices' 
    244          WRITE(numout,*) '      free-slip       : Cd = 0                  ln_OFF      = ', ln_OFF  
     247         WRITE(numout,*) '      free-slip       : Cd = 0                  ln_drg_OFF  = ', ln_drg_OFF  
    245248         WRITE(numout,*) '      linear  drag    : Cd = Cd0                ln_lin      = ', ln_lin 
    246249         WRITE(numout,*) '      non-linear  drag: Cd = Cd0_nl |U|         ln_non_lin  = ', ln_non_lin 
    247250         WRITE(numout,*) '      logarithmic drag: Cd = vkarmn/log(z/z0)   ln_loglayer = ', ln_loglayer 
    248251         WRITE(numout,*) '      implicit friction                         ln_drgimp   = ', ln_drgimp 
     252         WRITE(numout,*) '      implicit ice-ocean drag                   ln_drgice_imp  =', ln_drgice_imp 
    249253      ENDIF 
    250254      ! 
    251255      ioptio = 0                       ! set ndrg and control check 
    252       IF( ln_OFF      ) THEN   ;   ndrg = np_OFF        ;   ioptio = ioptio + 1   ;   ENDIF 
     256      IF( ln_drg_OFF  ) THEN   ;   ndrg = np_OFF        ;   ioptio = ioptio + 1   ;   ENDIF 
    253257      IF( ln_lin      ) THEN   ;   ndrg = np_lin        ;   ioptio = ioptio + 1   ;   ENDIF 
    254258      IF( ln_non_lin  ) THEN   ;   ndrg = np_non_lin    ;   ioptio = ioptio + 1   ;   ENDIF 
     
    257261      IF( ioptio /= 1 )   CALL ctl_stop( 'zdf_drg_init: Choose ONE type of drag coef in namdrg' ) 
    258262      ! 
     263      IF ( ln_drgice_imp.AND.(.NOT.ln_drgimp) ) &  
     264         &                CALL ctl_stop( 'zdf_drg_init: ln_drgice_imp=T requires ln_drgimp=T' ) 
    259265      ! 
    260266      !                     !==  BOTTOM drag setting  ==!   (applied at seafloor) 
     
    263269      CALL drg_init( 'BOTTOM'   , mbkt       ,                                         &   ! <== in 
    264270         &           r_Cdmin_bot, r_Cdmax_bot, r_z0_bot, r_ke0_bot, rCd0_bot, rCdU_bot )   ! ==> out 
    265  
    266271      ! 
    267272      !                     !==  TOP drag setting  ==!   (applied at the top of ocean cavities) 
    268273      ! 
    269       IF( ln_isfcav ) THEN              ! Ocean cavities: top friction setting 
    270          ALLOCATE( rCd0_top(jpi,jpj), rCdU_top(jpi,jpj) ) 
     274      IF( ln_isfcav.OR.ln_drgice_imp ) THEN              ! Ocean cavities: top friction setting 
     275         ALLOCATE( rCdU_top(jpi,jpj) ) 
     276      ENDIF 
     277      ! 
     278      IF( ln_isfcav ) THEN 
     279         ALLOCATE( rCd0_top(jpi,jpj)) 
    271280         CALL drg_init( 'TOP   '   , mikt       ,                                         &   ! <== in 
    272281            &           r_Cdmin_top, r_Cdmax_top, r_z0_top, r_ke0_top, rCd0_top, rCdU_top )   ! ==> out 
     
    374383      IF(ll_bot)   zmsk_boost(:,:) = zmsk_boost(:,:) * ssmask(:,:)                         ! x seafloor mask 
    375384      ! 
     385      l_log_not_linssh = .FALSE.    ! default definition 
    376386      ! 
    377387      SELECT CASE( ndrg ) 
     
    422432            l_log_not_linssh = .FALSE.    !- don't update Cd at each time step 
    423433            ! 
    424             DO_2D( 1, 1, 1, 1 ) 
     434            DO_2D( 1, 1, 1, 1 )              ! pCd0 = mask (and boosted) logarithmic drag coef. 
    425435               zzz =  0.5_wp * e3t_0(ji,jj,k_mk(ji,jj)) 
    426436               zcd = (  vkarmn / LOG( zzz / rn_z0 )  )**2 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF/zdfgls.F90

    r13295 r13942  
    1919   USE dom_oce        ! ocean space and time domain 
    2020   USE domvvl         ! ocean space and time domain : variable volume layer 
     21   USE zdfdrg  , ONLY : ln_drg_OFF            ! top/bottom free-slip flag 
    2122   USE zdfdrg  , ONLY : r_z0_top , r_z0_bot   ! top/bottom roughness 
    2223   USE zdfdrg  , ONLY : rCdU_top , rCdU_bot   ! top/bottom friction 
     
    5354   INTEGER  ::   nn_bc_bot         ! bottom boundary condition (=0/1) 
    5455   INTEGER  ::   nn_z0_met         ! Method for surface roughness computation 
     56   INTEGER  ::   nn_z0_ice         ! Roughness accounting for sea ice 
    5557   INTEGER  ::   nn_stab_func      ! stability functions G88, KC or Canuto (=0/1/2) 
    5658   INTEGER  ::   nn_clos           ! closure 0/1/2/3 MY82/k-eps/k-w/gen 
     
    6163   REAL(wp) ::   rn_crban          ! Craig and Banner constant for surface breaking waves mixing 
    6264   REAL(wp) ::   rn_hsro           ! Minimum surface roughness 
     65   REAL(wp) ::   rn_hsri           ! Ice ocean roughness 
    6366   REAL(wp) ::   rn_frac_hs        ! Fraction of wave height as surface roughness (if nn_z0_met > 1)  
    6467 
     
    152155      REAL(wp), DIMENSION(jpi,jpj)     ::   zflxs       ! Turbulence fluxed induced by internal waves  
    153156      REAL(wp), DIMENSION(jpi,jpj)     ::   zhsro       ! Surface roughness (surface waves) 
     157      REAL(wp), DIMENSION(jpi,jpj)     ::   zice_fra    ! Tapering of wave breaking under sea ice 
    154158      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   eb          ! tke at time before 
    155159      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   hmxl_b      ! mixing length at time before 
     
    167171      ustar2_bot (:,:) = 0._wp 
    168172 
     173      SELECT CASE ( nn_z0_ice ) 
     174      CASE( 0 )   ;   zice_fra(:,:) = 0._wp 
     175      CASE( 1 )   ;   zice_fra(:,:) =        TANH( fr_i(:,:) * 10._wp ) 
     176      CASE( 2 )   ;   zice_fra(:,:) =              fr_i(:,:) 
     177      CASE( 3 )   ;   zice_fra(:,:) = MIN( 4._wp * fr_i(:,:) , 1._wp ) 
     178      END SELECT 
     179       
    169180      ! Compute surface, top and bottom friction at T-points 
    170       DO_2D( 0, 0, 0, 0 ) 
    171          ! 
    172          ! surface friction 
    173          ustar2_surf(ji,jj) = r1_rho0 * taum(ji,jj) * tmask(ji,jj,1) 
    174          !    
    175 !!gm Rq we may add here r_ke0(_top/_bot) ?  ==>> think about that... 
    176        ! bottom friction (explicit before friction) 
    177        zmsku = ( 2._wp - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 
    178        zmskv = ( 2._wp - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) )     ! (CAUTION: CdU<0) 
    179        ustar2_bot(ji,jj) = - rCdU_bot(ji,jj) * SQRT(  ( zmsku*( uu(ji,jj,mbkt(ji,jj),Kbb)+uu(ji-1,jj,mbkt(ji,jj),Kbb) ) )**2  & 
    180           &                                         + ( zmskv*( vv(ji,jj,mbkt(ji,jj),Kbb)+vv(ji,jj-1,mbkt(ji,jj),Kbb) ) )**2  ) 
     181      DO_2D( 0, 0, 0, 0 )          !==  surface ocean friction 
     182         ustar2_surf(ji,jj) = r1_rho0 * taum(ji,jj) * tmask(ji,jj,1)   ! surface friction 
    181183      END_2D 
    182       IF( ln_isfcav ) THEN       !top friction 
    183          DO_2D( 0, 0, 0, 0 ) 
    184             zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 
    185             zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) )     ! (CAUTION: CdU<0) 
    186             ustar2_top(ji,jj) = - rCdU_top(ji,jj) * SQRT(  ( zmsku*( uu(ji,jj,mikt(ji,jj),Kbb)+uu(ji-1,jj,mikt(ji,jj),Kbb) ) )**2  & 
    187                &                                         + ( zmskv*( vv(ji,jj,mikt(ji,jj),Kbb)+vv(ji,jj-1,mikt(ji,jj),Kbb) ) )**2  ) 
     184      ! 
     185      !!gm Rq we may add here r_ke0(_top/_bot) ?  ==>> think about that... 
     186      !     
     187      IF( .NOT.ln_drg_OFF ) THEN     !== top/bottom friction   (explicit before friction) 
     188         DO_2D( 0, 0, 0, 0 )         ! bottom friction (explicit before friction) 
     189            zmsku = ( 2._wp - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 
     190            zmskv = ( 2._wp - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) )     ! (CAUTION: CdU<0) 
     191            ustar2_bot(ji,jj) = - rCdU_bot(ji,jj) * SQRT(  ( zmsku*( uu(ji,jj,mbkt(ji,jj),Kbb)+uu(ji-1,jj,mbkt(ji,jj),Kbb) ) )**2  & 
     192               &                                         + ( zmskv*( vv(ji,jj,mbkt(ji,jj),Kbb)+vv(ji,jj-1,mbkt(ji,jj),Kbb) ) )**2  ) 
    188193         END_2D 
     194         IF( ln_isfcav ) THEN 
     195            DO_2D( 0, 0, 0, 0 )      ! top friction 
     196               zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 
     197               zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) )     ! (CAUTION: CdU<0) 
     198               ustar2_top(ji,jj) = - rCdU_top(ji,jj) * SQRT(  ( zmsku*( uu(ji,jj,mikt(ji,jj),Kbb)+uu(ji-1,jj,mikt(ji,jj),Kbb) ) )**2  & 
     199                  &                                         + ( zmskv*( vv(ji,jj,mikt(ji,jj),Kbb)+vv(ji,jj-1,mikt(ji,jj),Kbb) ) )**2  ) 
     200            END_2D 
     201         ENDIF 
    189202      ENDIF 
    190203    
     
    204217      END SELECT 
    205218      ! 
    206       DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
     219      ! adapt roughness where there is sea ice 
     220      zhsro(:,:) = ( (1._wp-zice_fra(:,:)) * zhsro(:,:) + zice_fra(:,:) * rn_hsri )*tmask(:,:,1)  + (1._wp - tmask(:,:,1))*rn_hsro 
     221      ! 
     222      DO_3D( 0, 0, 0, 0, 2, jpkm1 )  !==  Compute dissipation rate  ==! 
    207223         eps(ji,jj,jk)  = rc03 * en(ji,jj,jk) * SQRT( en(ji,jj,jk) ) / hmxl_n(ji,jj,jk) 
    208224      END_3D 
     
    288304      CASE ( 0 )             ! Dirichlet boundary condition (set e at k=1 & 2)  
    289305      ! First level 
    290       en   (:,:,1) = MAX(  rn_emin , rc02r * ustar2_surf(:,:) * (1._wp + rsbc_tke1)**r2_3  ) 
     306      en   (:,:,1) = MAX(  rn_emin , rc02r * ustar2_surf(:,:) * (1._wp + (1._wp-zice_fra(:,:))*rsbc_tke1)**r2_3  ) 
    291307      zd_lw(:,:,1) = en(:,:,1) 
    292308      zd_up(:,:,1) = 0._wp 
     
    294310      !  
    295311      ! One level below 
    296       en   (:,:,2) =  MAX(  rc02r * ustar2_surf(:,:) * (  1._wp + rsbc_tke1 * ((zhsro(:,:)+gdepw(:,:,2,Kmm))  & 
    297          &                 / zhsro(:,:) )**(1.5_wp*ra_sf)  )**(2._wp/3._wp)                      , rn_emin   ) 
     312      en   (:,:,2) =  MAX(  rc02r * ustar2_surf(:,:) * (  1._wp + (1._wp-zice_fra(:,:))*rsbc_tke1 * ((zhsro(:,:)+gdepw(:,:,2,Kmm)) & 
     313         &                 / zhsro(:,:) )**(1.5_wp*ra_sf)  )**(2._wp/3._wp) , rn_emin   ) 
    298314      zd_lw(:,:,2) = 0._wp  
    299315      zd_up(:,:,2) = 0._wp 
     
    304320      ! 
    305321      ! Dirichlet conditions at k=1 
    306       en   (:,:,1) = MAX(  rc02r * ustar2_surf(:,:) * (1._wp + rsbc_tke1)**r2_3 , rn_emin  ) 
     322      en   (:,:,1) = MAX(  rc02r * ustar2_surf(:,:) * (1._wp + (1._wp-zice_fra(:,:))*rsbc_tke1)**r2_3 , rn_emin  ) 
    307323      zd_lw(:,:,1) = en(:,:,1) 
    308324      zd_up(:,:,1) = 0._wp 
     
    311327      ! at k=2, set de/dz=Fw 
    312328      !cbr 
    313       zdiag(:,:,2) = zdiag(:,:,2) +  zd_lw(:,:,2) ! Remove zd_lw from zdiag 
    314       zd_lw(:,:,2) = 0._wp 
     329      DO_2D( 0, 0, 0, 0 )   ! zdiag zd_lw not defined/used on the halo 
     330         zdiag(ji,jj,2) = zdiag(ji,jj,2) +  zd_lw(ji,jj,2) ! Remove zd_lw from zdiag 
     331         zd_lw(ji,jj,2) = 0._wp 
     332      END_2D 
    315333      zkar (:,:)   = (rl_sf + (vkarmn-rl_sf)*(1.-EXP(-rtrans*gdept(:,:,1,Kmm)/zhsro(:,:)) )) 
    316       zflxs(:,:)   = rsbc_tke2 * ustar2_surf(:,:)**1.5_wp * zkar(:,:) & 
     334      zflxs(:,:)   = rsbc_tke2 * (1._wp-zice_fra(:,:)) * ustar2_surf(:,:)**1.5_wp * zkar(:,:) & 
    317335          &                    * (  ( zhsro(:,:)+gdept(:,:,1,Kmm) ) / zhsro(:,:)  )**(1.5_wp*ra_sf) 
    318336!!gm why not   :                        * ( 1._wp + gdept(:,:,1,Kmm) / zhsro(:,:) )**(1.5_wp*ra_sf) 
     
    400418      ! ---------------------------------------------------------- 
    401419      ! 
    402       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     420      DO_3D( 0, 0, 0, 0, 2, jpkm1 )                ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    403421         zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 
    404422      END_3D 
    405       DO_3D( 0, 0, 0, 0, 2, jpk ) 
     423      DO_3D( 0, 0, 0, 0, 2, jpkm1 )                ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    406424         zd_lw(ji,jj,jk) = en(ji,jj,jk) - zd_lw(ji,jj,jk) / zdiag(ji,jj,jk-1) * zd_lw(ji,jj,jk-1) 
    407425      END_3D 
    408       DO_3DS( 0, 0, 0, 0, jpk-1, 2, -1 ) 
     426      DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 )           ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    409427         en(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * en(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 
    410428      END_3D 
     
    521539         ! 
    522540         ! Neumann condition at k=2 
    523          zdiag(:,:,2) = zdiag(:,:,2) +  zd_lw(:,:,2) ! Remove zd_lw from zdiag 
    524          zd_lw(:,:,2) = 0._wp 
     541         DO_2D( 0, 0, 0, 0 )   ! zdiag zd_lw not defined/used on the halo 
     542            zdiag(ji,jj,2) = zdiag(ji,jj,2) +  zd_lw(ji,jj,2) ! Remove zd_lw from zdiag 
     543            zd_lw(ji,jj,2) = 0._wp 
     544         END_2D 
    525545         ! 
    526546         ! Set psi vertical flux at the surface: 
    527547         zkar (:,:)   = rl_sf + (vkarmn-rl_sf)*(1._wp-EXP(-rtrans*gdept(:,:,1,Kmm)/zhsro(:,:) )) ! Lengh scale slope 
    528548         zdep (:,:)   = ((zhsro(:,:) + gdept(:,:,1,Kmm)) / zhsro(:,:))**(rmm*ra_sf) 
    529          zflxs(:,:)   = (rnn + rsbc_tke1 * (rnn + rmm*ra_sf) * zdep(:,:))*(1._wp + rsbc_tke1*zdep(:,:))**(2._wp*rmm/3._wp-1_wp) 
     549         zflxs(:,:)   = (rnn + (1._wp-zice_fra(:,:))*rsbc_tke1 * (rnn + rmm*ra_sf) * zdep(:,:)) & 
     550            &           *(1._wp + (1._wp-zice_fra(:,:))*rsbc_tke1*zdep(:,:))**(2._wp*rmm/3._wp-1_wp) 
    530551         zdep (:,:)   = rsbc_psi1 * (zwall_psi(:,:,1)*p_avm(:,:,1)+zwall_psi(:,:,2)*p_avm(:,:,2)) * & 
    531552            &           ustar2_surf(:,:)**rmm * zkar(:,:)**rnn * (zhsro(:,:) + gdept(:,:,1,Kmm))**(rnn-1.) 
     
    593614      ! ---------------- 
    594615      ! 
    595       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     616      DO_3D( 0, 0, 0, 0, 2, jpkm1 )                ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    596617         zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 
    597618      END_3D 
    598       DO_3D( 0, 0, 0, 0, 2, jpk ) 
     619      DO_3D( 0, 0, 0, 0, 2, jpkm1 )                ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    599620         zd_lw(ji,jj,jk) = psi(ji,jj,jk) - zd_lw(ji,jj,jk) / zdiag(ji,jj,jk-1) * zd_lw(ji,jj,jk-1) 
    600621      END_3D 
    601       DO_3DS( 0, 0, 0, 0, jpk-1, 2, -1 ) 
     622      DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 )           ! Third recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    602623         psi(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * psi(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 
    603624      END_3D 
     
    635656      ! Limit dissipation rate under stable stratification 
    636657      ! -------------------------------------------------- 
    637       DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     658      DO_3D( 0, 0, 0, 0, 1, jpkm1 )   ! Note that this set boundary conditions on hmxl_n at the same time 
    638659         ! limitation 
    639660         eps   (ji,jj,jk)  = MAX( eps(ji,jj,jk), rn_epsmin ) 
     
    700721      ! default value, in case jpk > mbkt(ji,jj)+1. Not needed but avoid a bug when looking for undefined values (-fpe0) 
    701722      zstm(:,:,jpk) = 0.   
    702       DO_2D( 0, 0, 0, 0 ) 
     723      DO_2D( 0, 0, 0, 0 )             ! update bottom with good values 
    703724         zstm(ji,jj,mbkt(ji,jj)+1) = zstm(ji,jj,mbkt(ji,jj)) 
    704725      END_2D 
     
    750771      REAL(wp)::   zcr   ! local scalar 
    751772      !! 
    752       NAMELIST/namzdf_gls/rn_emin, rn_epsmin, ln_length_lim, & 
    753          &            rn_clim_galp, ln_sigpsi, rn_hsro,      & 
    754          &            rn_crban, rn_charn, rn_frac_hs,        & 
    755          &            nn_bc_surf, nn_bc_bot, nn_z0_met,     & 
     773      NAMELIST/namzdf_gls/rn_emin, rn_epsmin, ln_length_lim,       & 
     774         &            rn_clim_galp, ln_sigpsi, rn_hsro, rn_hsri,   & 
     775         &            rn_crban, rn_charn, rn_frac_hs,              & 
     776         &            nn_bc_surf, nn_bc_bot, nn_z0_met, nn_z0_ice, & 
    756777         &            nn_stab_func, nn_clos 
    757778      !!---------------------------------------------------------- 
     
    779800         WRITE(numout,*) '      Charnock coefficient                          rn_charn       = ', rn_charn 
    780801         WRITE(numout,*) '      Surface roughness formula                     nn_z0_met      = ', nn_z0_met 
     802         WRITE(numout,*) '      surface wave breaking under ice               nn_z0_ice      = ', nn_z0_ice 
     803         SELECT CASE( nn_z0_ice ) 
     804         CASE( 0 )   ;   WRITE(numout,*) '   ==>>>   no impact of ice cover on surface wave breaking' 
     805         CASE( 1 )   ;   WRITE(numout,*) '   ==>>>   roughness uses rn_hsri and is weigthed by 1-TANH( fr_i(:,:) * 10 )' 
     806         CASE( 2 )   ;   WRITE(numout,*) '   ==>>>   roughness uses rn_hsri and is weighted by 1-fr_i(:,:)' 
     807         CASE( 3 )   ;   WRITE(numout,*) '   ==>>>   roughness uses rn_hsri and is weighted by 1-MIN( 1, 4 * fr_i(:,:) )' 
     808         CASE DEFAULT 
     809            CALL ctl_stop( 'zdf_gls_init: wrong value for nn_z0_ice, should be 0,1,2, or 3') 
     810         END SELECT 
    781811         WRITE(numout,*) '      Wave height frac. (used if nn_z0_met=2)       rn_frac_hs     = ', rn_frac_hs 
    782812         WRITE(numout,*) '      Stability functions                           nn_stab_func   = ', nn_stab_func 
    783813         WRITE(numout,*) '      Type of closure                               nn_clos        = ', nn_clos 
    784814         WRITE(numout,*) '      Surface roughness (m)                         rn_hsro        = ', rn_hsro 
    785          WRITE(numout,*) 
    786          WRITE(numout,*) '   Namelist namdrg_top/_bot:   used values:' 
    787          WRITE(numout,*) '      top    ocean cavity roughness (m)             rn_z0(_top)   = ', r_z0_top 
    788          WRITE(numout,*) '      Bottom seafloor     roughness (m)             rn_z0(_bot)   = ', r_z0_bot 
     815         WRITE(numout,*) '      Ice-ocean roughness (used if nn_z0_ice/=0)    rn_hsri        = ', rn_hsri 
    789816         WRITE(numout,*) 
    790817      ENDIF 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF/zdfiwm.F90

    r13295 r13942  
    146146            zemx_iwm (ji,jj,1) = 0._wp   ;   zemx_iwm (ji,jj,jpk) = 0._wp 
    147147         END_2D 
    148          zemx_iwm (           1:nn_hls,:,:) = 0._wp   ;   zemx_iwm (:,           1:nn_hls,:) = 0._wp 
    149          zemx_iwm (jpi-nn_hls+1:jpi   ,:,:) = 0._wp   ;   zemx_iwm (:,jpj-nn_hls+1:   jpj,:) = 0._wp 
    150148      ENDIF 
    151149      IF( iom_use("av_ratio") ) THEN 
     
    153151            zav_ratio(ji,jj,1) = 0._wp   ;   zav_ratio(ji,jj,jpk) = 0._wp 
    154152         END_2D 
    155          zav_ratio(           1:nn_hls,:,:) = 0._wp   ;   zav_ratio(:,           1:nn_hls,:) = 0._wp 
    156          zav_ratio(jpi-nn_hls+1:jpi   ,:,:) = 0._wp   ;   zav_ratio(:,jpj-nn_hls+1:   jpj,:) = 0._wp 
    157       ENDIF 
    158       IF( iom_use("av_wave") ) THEN 
     153      ENDIF 
     154      IF( iom_use("av_wave") .OR. sn_cfctl%l_prtctl ) THEN 
    159155         DO_2D( 0, 0, 0, 0 ) 
    160156            zav_wave (ji,jj,1) = 0._wp   ;   zav_wave (ji,jj,jpk) = 0._wp 
    161157         END_2D 
    162          zav_wave(           1:nn_hls,:,:) = 0._wp   ;   zav_wave(:,           1:nn_hls,:) = 0._wp 
    163          zav_wave(jpi-nn_hls+1:jpi   ,:,:) = 0._wp   ;   zav_wave(:,jpj-nn_hls+1:   jpj,:) = 0._wp 
    164158      ENDIF 
    165159      ! 
     
    170164      !                       !* Critical slope mixing: distribute energy over the time-varying ocean depth, 
    171165      !                                                 using an exponential decay from the seafloor. 
    172       DO_2D( 0, 0, 0, 0 ) 
     166      DO_2D( 0, 0, 0, 0 )             ! part independent of the level 
    173167         zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1)       ! depth of the ocean 
    174168         zfact(ji,jj) = rho0 * (  1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) )  ) 
     
    176170      END_2D 
    177171!!gm gde3w ==>>>  check for ssh taken into account.... seem OK gde3w_n=gdept(:,:,:,Kmm) - ssh(:,:,Kmm) 
    178       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     172      DO_3D( 0, 0, 0, 0, 2, jpkm1 )   ! complete with the level-dependent part 
    179173         IF ( zfact(ji,jj) == 0._wp .OR. wmask(ji,jj,jk) == 0._wp ) THEN   ! optimization 
    180174            zemx_iwm(ji,jj,jk) = 0._wp 
     
    299293      END_3D 
    300294      ! 
    301       IF( ln_mevar ) THEN              ! Variable mixing efficiency case : modify zav_wave in the 
    302          DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     295      IF( ln_mevar ) THEN                ! Variable mixing efficiency case : modify zav_wave in the 
     296         DO_3D( 0, 0, 0, 0, 2, jpkm1 )   ! energetic (Reb > 480) and buoyancy-controlled (Reb <10.224 ) regimes 
    303297            IF( zReb(ji,jj,jk) > 480.00_wp ) THEN 
    304298               zav_wave(ji,jj,jk) = 3.6515_wp * znu_w(ji,jj,jk) * SQRT( zReb(ji,jj,jk) ) 
     
    309303      ENDIF 
    310304      ! 
    311       DO_3D( 0, 0, 0, 0, 2, jpkm1 )          ! Bound diffusivity by molecular value and 100 cm2/s 
     305      DO_3D( 0, 0, 0, 0, 2, jpkm1 )      ! Bound diffusivity by molecular value and 100 cm2/s 
    312306         zav_wave(ji,jj,jk) = MIN(  MAX( 1.4e-7_wp, zav_wave(ji,jj,jk) ), 1.e-2_wp  ) * wmask(ji,jj,jk) 
    313307      END_3D 
     
    336330      !                          ! ----------------------- ! 
    337331      !       
    338       IF( ln_tsdiff ) THEN          !* Option for differential mixing of salinity and temperature 
     332      IF( ln_tsdiff ) THEN                !* Option for differential mixing of salinity and temperature 
    339333         ztmp1 = 0.505_wp + 0.495_wp * TANH( 0.92_wp * ( LOG10( 1.e-20_wp ) - 0.60_wp ) ) 
    340          DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     334         DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! Calculate S/T diffusivity ratio as a function of Reb 
    341335            ztmp2 = zReb(ji,jj,jk) * 5._wp * r1_6 
    342336            IF ( ztmp2 > 1.e-20_wp .AND. wmask(ji,jj,jk) == 1._wp ) THEN 
     
    353347         END_3D 
    354348         ! 
    355       ELSE                          !* update momentum & tracer diffusivity with wave-driven mixing 
     349      ELSE                                !* update momentum & tracer diffusivity with wave-driven mixing 
    356350         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    357351            p_avs(ji,jj,jk) = p_avs(ji,jj,jk) + zav_wave(ji,jj,jk) 
     
    361355      ENDIF 
    362356 
    363       !                             !* output internal wave-driven mixing coefficient 
     357      !                                   !* output internal wave-driven mixing coefficient 
    364358      CALL iom_put( "av_wave", zav_wave ) 
    365                                     !* output useful diagnostics: Kz*N^2 ,  
     359                                          !* output useful diagnostics: Kz*N^2 ,  
    366360!!gm Kz*N2 should take into account the ratio avs/avt if it is used.... (see diaar5) 
    367                                     !  vertical integral of rho0 * Kz * N^2 , energy density (zemx_iwm) 
     361                                          !  vertical integral of rho0 * Kz * N^2 , energy density (zemx_iwm) 
    368362      IF( iom_use("bflx_iwm") .OR. iom_use("pcmap_iwm") ) THEN 
    369363         ALLOCATE( z2d(jpi,jpj) , z3d(jpi,jpj,jpk) ) 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF/zdfmxl.F90

    r13295 r13942  
    9696      ! 
    9797      ! w-level of the mixing and mixed layers 
    98       nmln(:,:)  = nlb10               ! Initialization to the number of w ocean point 
    99       hmlp(:,:)  = 0._wp               ! here hmlp used as a dummy variable, integrating vertically N^2 
    100       zN2_c = grav * rho_c * r1_rho0   ! convert density criteria into N^2 criteria 
    101       DO_3D( 1, 1, 1, 1, nlb10, jpkm1 ) 
     98      nmln(:,:)  = nlb10                  ! Initialization to the number of w ocean point 
     99      hmlp(:,:)  = 0._wp                  ! here hmlp used as a dummy variable, integrating vertically N^2 
     100      zN2_c = grav * rho_c * r1_rho0      ! convert density criteria into N^2 criteria 
     101      DO_3D( 1, 1, 1, 1, nlb10, jpkm1 )   ! Mixed layer level: w-level 
    102102         ikt = mbkt(ji,jj) 
    103103         hmlp(ji,jj) =   & 
     
    107107      ! 
    108108      ! w-level of the turbocline and mixing layer (iom_use) 
    109       imld(:,:) = mbkt(:,:) + 1        ! Initialization to the number of w ocean point 
    110       DO_3DS( 1, 1, 1, 1, jpkm1, nlb10, -1 ) 
     109      imld(:,:) = mbkt(:,:) + 1                ! Initialization to the number of w ocean point 
     110      DO_3DS( 1, 1, 1, 1, jpkm1, nlb10, -1 )   ! from the bottom to nlb10 
    111111         IF( avt (ji,jj,jk) < avt_c * wmask(ji,jj,jk) )   imld(ji,jj) = jk      ! Turbocline  
    112112      END_3D 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF/zdfosm.F90

    r13295 r13942  
    11841184! KPP-style Ri# mixing 
    11851185       IF( ln_kpprimix) THEN 
    1186           DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
     1186          DO_3D( 1, 0, 1, 0, 2, jpkm1 )      !* Shear production at uw- and vw-points (energy conserving form) 
    11871187             z3du(ji,jj,jk) = 0.5 * (  uu(ji,jj,jk-1,Kmm) -  uu(ji  ,jj,jk,Kmm) )   & 
    11881188                  &                 * (  uu(ji,jj,jk-1,Kbb) -  uu(ji  ,jj,jk,Kbb) ) * wumask(ji,jj,jk) & 
     
    15161516     ! 
    15171517     hbl(:,:)  = 0._wp              ! here hbl used as a dummy variable, integrating vertically N^2 
    1518      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     1518     DO_3D( 1, 1, 1, 1, 1, jpkm1 )  ! Mixed layer level: w-level 
    15191519        ikt = mbkt(ji,jj) 
    15201520        hbl(ji,jj) = hbl(ji,jj) + MAX( rn2(ji,jj,jk) , 0._wp ) * e3w(ji,jj,jk,Kmm) 
     
    16291629      !code saving tracer trends removed, replace with trdmxl_oce 
    16301630 
    1631       DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     1631      DO_3D( 0, 0, 0, 0, 1, jpkm1 )       ! add non-local u and v fluxes 
    16321632         puu(ji,jj,jk,Krhs) =  puu(ji,jj,jk,Krhs)                      & 
    16331633            &                 - (  ghamu(ji,jj,jk  )  & 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF/zdfphy.F90

    r13226 r13942  
    2828   USE sbc_oce        ! surface module (only for nn_isf in the option compatibility test) 
    2929   USE sbcrnf         ! surface boundary condition: runoff variables 
     30   USE sbc_ice        ! sea ice drag 
    3031#if defined key_agrif 
    3132   USE agrif_oce_interp   ! interpavm 
     
    253254      ENDIF 
    254255      ! 
     256#if defined key_si3 
     257      IF ( ln_drgice_imp) THEN 
     258         IF ( ln_isfcav ) THEN 
     259            rCdU_top(:,:) = rCdU_top(:,:) + ssmask(:,:) * tmask(:,:,1) * rCdU_ice(:,:) 
     260         ELSE 
     261            rCdU_top(:,:) = rCdU_ice(:,:) 
     262         ENDIF 
     263      ENDIF 
     264#endif 
     265      !  
    255266      !                       !==  Kz from chosen turbulent closure  ==!   (avm_k, avt_k) 
    256267      ! 
     
    326337      ! 
    327338   END SUBROUTINE zdf_phy 
     339 
     340 
    328341   INTEGER FUNCTION zdf_phy_alloc() 
    329342      !!---------------------------------------------------------------------- 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF/zdfric.F90

    r13295 r13942  
    160160      ! 
    161161      !                       !==  avm and avt = F(Richardson number)  ==! 
    162       DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
     162      DO_3D( 1, 0, 1, 0, 2, jpkm1 )       ! coefficient = F(richardson number) (avm-weighted Ri) 
    163163         zcfRi = 1._wp / (  1._wp + rn_alp * MAX(  0._wp , avm(ji,jj,jk) * rn2(ji,jj,jk) / ( p_sh2(ji,jj,jk) + 1.e-20 ) )  ) 
    164164         zav   = rn_avmri * zcfRi**nn_ric 
     
    173173      IF( ln_mldw ) THEN      !==  set a minimum value in the Ekman layer  ==! 
    174174         ! 
    175          DO_2D( 0, 0, 0, 0 ) 
     175         DO_2D( 0, 0, 0, 0 )             !* Ekman depth 
    176176            zustar = SQRT( taum(ji,jj) * r1_rho0 ) 
    177177            zhek   = rn_ekmfc * zustar / ( ABS( ff_t(ji,jj) ) + rsmall )   ! Ekman depth 
    178178            zh_ekm(ji,jj) = MAX(  rn_mldmin , MIN( zhek , rn_mldmax )  )   ! set allowed range 
    179179         END_2D 
    180          DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     180         DO_3D( 0, 0, 0, 0, 2, jpkm1 )   !* minimum mixing coeff. within the Ekman layer 
    181181            IF( gdept(ji,jj,jk,Kmm) < zh_ekm(ji,jj) ) THEN 
    182182               p_avm(ji,jj,jk) = MAX(  p_avm(ji,jj,jk), rn_wvmix  ) * wmask(ji,jj,jk) 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF/zdfsh2.F90

    r13295 r13942  
    6060      ! 
    6161      DO jk = 2, jpkm1 
    62          DO_2D( 1, 0, 1, 0 ) 
     62         DO_2D( 1, 0, 1, 0 )     !* 2 x shear production at uw- and vw-points (energy conserving form) 
    6363            zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 
    6464               &         * (   uu(ji,jj,jk-1,Kmm) -   uu(ji,jj,jk,Kmm) ) & 
     
    7272               &         * wvmask(ji,jj,jk) 
    7373         END_2D 
    74          DO_2D( 0, 0, 0, 0 ) 
     74         DO_2D( 0, 0, 0, 0 )     !* shear production at w-point ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 
    7575            p_sh2(ji,jj,jk) = 0.25 * (   ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) )   & 
    7676               &                       + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) )   ) 
  • NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/src/OCE/ZDF/zdftke.F90

    r13295 r13942  
    2828   !!            3.6  !  2014-11  (P. Mathiot) add ice shelf capability 
    2929   !!            4.0  !  2017-04  (G. Madec)  remove CPP ddm key & avm at t-point only  
    30    !!             -   !  2017-05  (G. Madec)  add top/bottom friction as boundary condition (ln_drg) 
     30   !!             -   !  2017-05  (G. Madec)  add top/bottom friction as boundary condition 
    3131   !!---------------------------------------------------------------------- 
    3232 
     
    6868   !                      !!** Namelist  namzdf_tke  ** 
    6969   LOGICAL  ::   ln_mxl0   ! mixing length scale surface value as function of wind stress or not 
     70   INTEGER  ::   nn_mxlice ! type of scaling under sea-ice (=0/1/2/3) 
     71   REAL(wp) ::   rn_mxlice ! ice thickness value when scaling under sea-ice 
    7072   INTEGER  ::   nn_mxl    ! type of mixing length (=0/1/2/3) 
    7173   REAL(wp) ::   rn_mxl0   ! surface  min value of mixing length (kappa*z_o=0.4*0.1 m)  [m] 
    72    INTEGER  ::      nn_mxlice ! type of scaling under sea-ice 
    73    REAL(wp) ::      rn_mxlice ! max constant ice thickness value when scaling under sea-ice ( nn_mxlice=1) 
    7474   INTEGER  ::   nn_pdl    ! Prandtl number or not (ratio avt/avm) (=0/1) 
    7575   REAL(wp) ::   rn_ediff  ! coefficient for avt: avt=rn_ediff*mxl*sqrt(e) 
     
    7979   REAL(wp) ::   rn_emin0  ! surface minimum value of tke   [m2/s2] 
    8080   REAL(wp) ::   rn_bshear ! background shear (>0) currently a numerical threshold (do not change it) 
    81    LOGICAL  ::   ln_drg    ! top/bottom friction forcing flag  
    8281   INTEGER  ::   nn_etau   ! type of depth penetration of surface tke (=0/1/2/3) 
    8382   INTEGER  ::      nn_htau   ! type of tke profile of penetration (=0/1) 
    8483   REAL(wp) ::      rn_efr    ! fraction of TKE surface value which penetrates in the ocean 
    85    REAL(wp) ::      rn_eice   ! =0 ON below sea-ice, =4 OFF when ice fraction > 1/4    
    8684   LOGICAL  ::   ln_lc     ! Langmuir cells (LC) as a source term of TKE or not 
    8785   REAL(wp) ::      rn_lc     ! coef to compute vertical velocity of Langmuir cells 
     86   INTEGER  ::   nn_eice   ! attenutaion of langmuir & surface wave breaking under ice (=0/1/2/3)    
    8887 
    8988   REAL(wp) ::   ri_cri    ! critic Richardson number (deduced from rn_ediff and rn_ediss values) 
     
    200199      REAL(wp), DIMENSION(:,:,:) , INTENT(in   ) ::   p_avm, p_avt   ! vertical eddy viscosity & diffusivity (w-points) 
    201200      ! 
    202       INTEGER ::   ji, jj, jk              ! dummy loop arguments 
     201      INTEGER ::   ji, jj, jk                  ! dummy loop arguments 
    203202      REAL(wp) ::   zetop, zebot, zmsku, zmskv ! local scalars 
    204203      REAL(wp) ::   zrhoa  = 1.22              ! Air density kg/m3 
    205204      REAL(wp) ::   zcdrag = 1.5e-3            ! drag coefficient 
    206       REAL(wp) ::   zbbrau, zri                ! local scalars 
    207       REAL(wp) ::   zfact1, zfact2, zfact3     !   -         - 
    208       REAL(wp) ::   ztx2  , zty2  , zcof       !   -         - 
    209       REAL(wp) ::   ztau  , zdif               !   -         - 
    210       REAL(wp) ::   zus   , zwlc  , zind       !   -         - 
    211       REAL(wp) ::   zzd_up, zzd_lw             !   -         - 
     205      REAL(wp) ::   zbbrau, zbbirau, zri       ! local scalars 
     206      REAL(wp) ::   zfact1, zfact2, zfact3     !   -      - 
     207      REAL(wp) ::   ztx2  , zty2  , zcof       !   -      - 
     208      REAL(wp) ::   ztau  , zdif               !   -      - 
     209      REAL(wp) ::   zus   , zwlc  , zind       !   -      - 
     210      REAL(wp) ::   zzd_up, zzd_lw             !   -      - 
    212211      INTEGER , DIMENSION(jpi,jpj)     ::   imlc 
    213       REAL(wp), DIMENSION(jpi,jpj)     ::   zhlc, zfr_i 
     212      REAL(wp), DIMENSION(jpi,jpj)     ::   zice_fra, zhlc, zus3 
    214213      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zpelc, zdiag, zd_up, zd_lw 
    215214      !!-------------------------------------------------------------------- 
    216215      ! 
    217       zbbrau = rn_ebb / rho0       ! Local constant initialisation 
    218       zfact1 = -.5_wp * rn_Dt  
    219       zfact2 = 1.5_wp * rn_Dt * rn_ediss 
    220       zfact3 = 0.5_wp       * rn_ediss 
     216      zbbrau  = rn_ebb / rho0       ! Local constant initialisation 
     217      zbbirau = 3.75_wp / rho0 
     218      zfact1  = -.5_wp * rn_Dt  
     219      zfact2  = 1.5_wp * rn_Dt * rn_ediss 
     220      zfact3  = 0.5_wp         * rn_ediss 
     221      ! 
     222      ! ice fraction considered for attenuation of langmuir & wave breaking 
     223      SELECT CASE ( nn_eice ) 
     224      CASE( 0 )   ;   zice_fra(:,:) = 0._wp 
     225      CASE( 1 )   ;   zice_fra(:,:) =        TANH( fr_i(:,:) * 10._wp ) 
     226      CASE( 2 )   ;   zice_fra(:,:) =              fr_i(:,:) 
     227      CASE( 3 )   ;   zice_fra(:,:) = MIN( 4._wp * fr_i(:,:) , 1._wp ) 
     228      END SELECT 
    221229      ! 
    222230      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    223231      !                     !  Surface/top/bottom boundary condition on tke 
    224232      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    225       !  
    226       DO_2D( 0, 0, 0, 0 ) 
     233      ! 
     234      DO_2D( 0, 0, 0, 0 )         ! en(1)   = rn_ebb taum / rau0  (min value rn_emin0) 
     235!! clem: this should be the right formulation but it makes the model unstable unless drags are calculated implicitly 
     236!!       one way around would be to increase zbbirau  
     237!!          en(ji,jj,1) = MAX( rn_emin0, ( ( 1._wp - fr_i(ji,jj) ) * zbbrau + & 
     238!!             &                                     fr_i(ji,jj)   * zbbirau ) * taum(ji,jj) ) * tmask(ji,jj,1) 
    227239         en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) * tmask(ji,jj,1) 
    228240      END_2D 
     
    236248      ! Note that stress averaged is done using an wet-only calculation of u and v at t-point like in zdfsh2 
    237249      ! 
    238       IF( ln_drg ) THEN       !== friction used as top/bottom boundary condition on TKE 
    239          ! 
    240          DO_2D( 0, 0, 0, 0 ) 
     250      IF( .NOT.ln_drg_OFF ) THEN    !== friction used as top/bottom boundary condition on TKE 
     251         ! 
     252         DO_2D( 0, 0, 0, 0 )        ! bottom friction 
    241253            zmsku = ( 2. - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 
    242254            zmskv = ( 2. - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) 
     
    246258            en(ji,jj,mbkt(ji,jj)+1) = MAX( zebot, rn_emin ) * ssmask(ji,jj) 
    247259         END_2D 
    248          IF( ln_isfcav ) THEN       ! top friction 
    249             DO_2D( 0, 0, 0, 0 ) 
     260         IF( ln_isfcav ) THEN 
     261            DO_2D( 0, 0, 0, 0 )     ! top friction 
    250262               zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 
    251263               zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) 
     
    274286         zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) 
    275287         imlc(:,:) = mbkt(:,:) + 1       ! Initialization to the number of w ocean point (=2 over land) 
    276          DO_3DS( 1, 1, 1, 1, jpkm1, 2, -1 ) 
    277             zus  = zcof * taum(ji,jj) 
     288         DO_3DS( 1, 1, 1, 1, jpkm1, 2, -1 )   ! Last w-level at which zpelc>=0.5*us*us  
     289            zus = zcof * taum(ji,jj)          !      with us=0.016*wind(starting from jpk-1) 
    278290            IF( zpelc(ji,jj,jk) > zus )   imlc(ji,jj) = jk 
    279291         END_3D 
     
    285297         DO_2D( 0, 0, 0, 0 ) 
    286298            zus  = zcof * SQRT( taum(ji,jj) )           ! Stokes drift 
    287             zfr_i(ji,jj) = ( 1._wp - 4._wp * fr_i(ji,jj) ) * zus * zus * zus * tmask(ji,jj,1) ! zus > 0. ok 
    288             IF (zfr_i(ji,jj) < 0. ) zfr_i(ji,jj) = 0. 
     299            zus3(ji,jj) = MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * zus * zus * zus * tmask(ji,jj,1) ! zus > 0. ok 
    289300         END_2D 
    290          DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    291             IF ( zfr_i(ji,jj) /= 0. ) THEN                
    292                ! vertical velocity due to LC    
     301         DO_3D( 0, 0, 0, 0, 2, jpkm1 )                  !* TKE Langmuir circulation source term added to en 
     302            IF ( zus3(ji,jj) /= 0._wp ) THEN                
    293303               IF ( gdepw(ji,jj,jk,Kmm) - zhlc(ji,jj) < 0 .AND. wmask(ji,jj,jk) /= 0. ) THEN 
    294304                  !                                           ! vertical velocity due to LC 
    295                   zwlc = rn_lc * SIN( rpi * gdepw(ji,jj,jk,Kmm) / zhlc(ji,jj) )   ! warning: optimization: zus^3 is in zfr_i 
     305                  zwlc = rn_lc * SIN( rpi * gdepw(ji,jj,jk,Kmm) / zhlc(ji,jj) ) 
    296306                  !                                           ! TKE Langmuir circulation source term 
    297                   en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * zfr_i(ji,jj) * ( zwlc * zwlc * zwlc ) / zhlc(ji,jj) 
     307                  en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * zus3(ji,jj) * ( zwlc * zwlc * zwlc ) / zhlc(ji,jj) 
    298308               ENDIF 
    299309            ENDIF 
     
    309319      !                     ! zdiag : diagonal zd_up : upper diagonal zd_lw : lower diagonal 
    310320      ! 
    311       IF( nn_pdl == 1 ) THEN      !* Prandtl number = F( Ri ) 
     321      IF( nn_pdl == 1 ) THEN          !* Prandtl number = F( Ri ) 
    312322         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    313323            !                             ! local Richardson number 
     
    322332      ENDIF 
    323333      !          
    324       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     334      DO_3D( 0, 0, 0, 0, 2, jpkm1 )   !* Matrix and right hand side in en 
    325335         zcof   = zfact1 * tmask(ji,jj,jk) 
    326336         !                                   ! A minimum of 2.e-5 m2/s is imposed on TKE vertical 
    327337         !                                   ! eddy coefficient (ensure numerical stability) 
    328338         zzd_up = zcof * MAX(  p_avm(ji,jj,jk+1) + p_avm(ji,jj,jk  ) , 2.e-5_wp  )   &  ! upper diagonal 
    329             &          /    (  e3t(ji,jj,jk  ,Kmm)   & 
    330             &                * e3w(ji,jj,jk  ,Kmm)  ) 
     339            &          /    (  e3t(ji,jj,jk  ,Kmm) * e3w(ji,jj,jk  ,Kmm)  ) 
    331340         zzd_lw = zcof * MAX(  p_avm(ji,jj,jk  ) + p_avm(ji,jj,jk-1) , 2.e-5_wp  )   &  ! lower diagonal 
    332             &          /    (  e3t(ji,jj,jk-1,Kmm)   & 
    333             &                * e3w(ji,jj,jk  ,Kmm)  ) 
     341            &          /    (  e3t(ji,jj,jk-1,Kmm) * e3w(ji,jj,jk  ,Kmm)  ) 
    334342         ! 
    335343         zd_up(ji,jj,jk) = zzd_up            ! Matrix (zdiag, zd_up, zd_lw) 
     
    344352      END_3D 
    345353      !                          !* Matrix inversion from level 2 (tke prescribed at level 1) 
    346       DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 
     354      DO_3D( 0, 0, 0, 0, 3, jpkm1 )                ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    347355         zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 
    348356      END_3D 
    349       DO_2D( 0, 0, 0, 0 ) 
     357      DO_2D( 0, 0, 0, 0 )                          ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    350358         zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1)    ! Surface boudary conditions on tke 
    351359      END_2D 
     
    353361         zd_lw(ji,jj,jk) = en(ji,jj,jk) - zd_lw(ji,jj,jk) / zdiag(ji,jj,jk-1) *zd_lw(ji,jj,jk-1) 
    354362      END_3D 
    355       DO_2D( 0, 0, 0, 0 ) 
     363      DO_2D( 0, 0, 0, 0 )                          ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    356364         en(ji,jj,jpkm1) = zd_lw(ji,jj,jpkm1) / zdiag(ji,jj,jpkm1) 
    357365      END_2D 
     
    359367         en(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * en(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 
    360368      END_3D 
    361       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     369      DO_3D( 0, 0, 0, 0, 2, jpkm1 )                ! set the minimum value of tke 
    362370         en(ji,jj,jk) = MAX( en(ji,jj,jk), rn_emin ) * wmask(ji,jj,jk) 
    363371      END_3D 
     
    368376!!gm BUG : in the exp  remove the depth of ssh !!! 
    369377!!gm       i.e. use gde3w in argument (gdepw(:,:,:,Kmm)) 
    370        
    371        
     378      ! 
     379      ! penetration is partly switched off below sea-ice if nn_eice/=0 
     380      ! 
    372381      IF( nn_etau == 1 ) THEN           !* penetration below the mixed layer (rn_efr fraction) 
    373          DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     382         DO_3D( 0, 0, 0, 0, 2, jpkm1 )  
    374383            en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -gdepw(ji,jj,jk,Kmm) / htau(ji,jj) )   & 
    375                &                                 * MAX(0.,1._wp - rn_eice *fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     384               &                                 * MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    376385         END_3D 
    377386      ELSEIF( nn_etau == 2 ) THEN       !* act only at the base of the mixed layer (jk=nmln)  (rn_efr fraction) 
     
    379388            jk = nmln(ji,jj) 
    380389            en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -gdepw(ji,jj,jk,Kmm) / htau(ji,jj) )   & 
    381                &                                 * MAX(0.,1._wp - rn_eice *fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     390               &                                 * MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    382391         END_2D 
    383392      ELSEIF( nn_etau == 3 ) THEN       !* penetration belox the mixed layer (HF variability) 
     
    389398            zdif = rhftau_scl * MAX( 0._wp, zdif + rhftau_add )  ! apply some modifications... 
    390399            en(ji,jj,jk) = en(ji,jj,jk) + zbbrau * zdif * EXP( -gdepw(ji,jj,jk,Kmm) / htau(ji,jj) )   & 
    391                &                        * MAX(0.,1._wp - rn_eice *fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     400               &                        * MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    392401         END_3D 
    393402      ENDIF 
     
    451460      zmxlm(:,:,:)  = rmxl_min     
    452461      zmxld(:,:,:)  = rmxl_min 
    453       ! 
     462      !  
    454463     IF( ln_mxl0 ) THEN            ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rho0*g) 
    455464         ! 
    456465         zraug = vkarmn * 2.e5_wp / ( rho0 * grav ) 
    457466#if ! defined key_si3 && ! defined key_cice 
    458          DO_2D( 0, 0, 0, 0 ) 
     467         DO_2D( 0, 0, 0, 0 )                  ! No sea-ice 
    459468            zmxlm(ji,jj,1) =  zraug * taum(ji,jj) * tmask(ji,jj,1) 
    460469         END_2D 
     
    467476            END_2D 
    468477            ! 
    469          CASE( 1 )                           ! scaling with constant sea-ice thickness 
     478         CASE( 1 )                      ! scaling with constant sea-ice thickness 
    470479            DO_2D( 0, 0, 0, 0 ) 
    471                zmxlm(ji,jj,1) =  ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * rn_mxlice ) * tmask(ji,jj,1) 
     480               zmxlm(ji,jj,1) =  ( ( 1._wp - fr_i(ji,jj) ) * zraug * taum(ji,jj) + & 
     481                  &                          fr_i(ji,jj)   * rn_mxlice           ) * tmask(ji,jj,1) 
    472482            END_2D 
    473483            ! 
    474          CASE( 2 )                                 ! scaling with mean sea-ice thickness 
     484         CASE( 2 )                      ! scaling with mean sea-ice thickness 
    475485            DO_2D( 0, 0, 0, 0 ) 
    476486#if defined key_si3 
    477                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) 
     487               zmxlm(ji,jj,1) = ( ( 1._wp - fr_i(ji,jj) ) * zraug * taum(ji,jj) + & 
     488                  &                         fr_i(ji,jj)   * hm_i(ji,jj) * 2._wp ) * tmask(ji,jj,1) 
    478489#elif defined key_cice 
    479490               zmaxice = MAXVAL( h_i(ji,jj,:) ) 
    480                zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * zmaxice ) * tmask(ji,jj,1) 
     491               zmxlm(ji,jj,1) = ( ( 1._wp - fr_i(ji,jj) ) * zraug * taum(ji,jj) + & 
     492                  &                         fr_i(ji,jj)   * zmaxice             ) * tmask(ji,jj,1) 
    481493#endif 
    482494            END_2D 
    483495            ! 
    484          CASE( 3 )                                 ! scaling with max sea-ice thickness 
     496         CASE( 3 )                      ! scaling with max sea-ice thickness 
    485497            DO_2D( 0, 0, 0, 0 ) 
    486498               zmaxice = MAXVAL( h_i(ji,jj,:) ) 
    487                zmxlm(ji,jj,1) = ( ( 1. - fr_i(ji,jj) ) * zraug * taum(ji,jj) + fr_i(ji,jj) * zmaxice ) * tmask(ji,jj,1) 
     499               zmxlm(ji,jj,1) = ( ( 1._wp - fr_i(ji,jj) ) * zraug * taum(ji,jj) + & 
     500                  &                         fr_i(ji,jj)   * zmaxice             ) * tmask(ji,jj,1) 
    488501            END_2D 
    489502            ! 
     
    533546         ! 
    534547      CASE ( 2 )           ! |dk[xml]| bounded by e3t : 
    535          DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     548         DO_3D( 0, 0, 0, 0, 2, jpkm1 )        ! from the surface to the bottom : 
    536549            zmxlm(ji,jj,jk) =   & 
    537550               &    MIN( zmxlm(ji,jj,jk-1) + e3t(ji,jj,jk-1,Kmm), zmxlm(ji,jj,jk) ) 
    538551         END_3D 
    539          DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 ) 
     552         DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 )   ! from the bottom to the surface : 
    540553            zemxl = MIN( zmxlm(ji,jj,jk+1) + e3t(ji,jj,jk+1,Kmm), zmxlm(ji,jj,jk) ) 
    541554            zmxlm(ji,jj,jk) = zemxl 
     
    544557         ! 
    545558      CASE ( 3 )           ! lup and ldown, |dk[xml]| bounded by e3t : 
    546          DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     559         DO_3D( 0, 0, 0, 0, 2, jpkm1 )        ! from the surface to the bottom : lup 
    547560            zmxld(ji,jj,jk) =    & 
    548561               &    MIN( zmxld(ji,jj,jk-1) + e3t(ji,jj,jk-1,Kmm), zmxlm(ji,jj,jk) ) 
    549562         END_3D 
    550          DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 ) 
     563         DO_3DS( 0, 0, 0, 0, jpkm1, 2, -1 )   ! from the bottom to the surface : ldown 
    551564            zmxlm(ji,jj,jk) =   & 
    552565               &    MIN( zmxlm(ji,jj,jk+1) + e3t(ji,jj,jk+1,Kmm), zmxlm(ji,jj,jk) ) 
     
    564577      !                     !  Vertical eddy viscosity and diffusivity  (avm and avt) 
    565578      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    566       DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     579      DO_3D( 0, 0, 0, 0, 1, jpkm1 )   !* vertical eddy viscosity & diffivity at w-points 
    567580         zsqen = SQRT( en(ji,jj,jk) ) 
    568581         zav   = rn_ediff * zmxlm(ji,jj,jk) * zsqen 
     
    573586      ! 
    574587      ! 
    575       IF( nn_pdl == 1 ) THEN      !* Prandtl number case: update avt 
     588      IF( nn_pdl == 1 ) THEN          !* Prandtl number case: update avt 
    576589         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    577590            p_avt(ji,jj,jk)   = MAX( apdlr(ji,jj,jk) * p_avt(ji,jj,jk), avtb_2d(ji,jj) * avtb(jk) ) * wmask(ji,jj,jk) 
     
    610623         &                 rn_emin0, rn_bshear, nn_mxl   , ln_mxl0  ,  & 
    611624         &                 rn_mxl0 , nn_mxlice, rn_mxlice,             & 
    612          &                 nn_pdl  , ln_drg   , ln_lc    , rn_lc,      & 
    613          &                 nn_etau , nn_htau  , rn_efr   , rn_eice   
     625         &                 nn_pdl  , ln_lc    , rn_lc    ,             & 
     626         &                 nn_etau , nn_htau  , rn_efr   , nn_eice   
    614627      !!---------------------------------------------------------------------- 
    615628      ! 
     
    637650         WRITE(numout,*) '      mixing length type                          nn_mxl    = ', nn_mxl 
    638651         WRITE(numout,*) '         surface mixing length = F(stress) or not    ln_mxl0   = ', ln_mxl0 
     652         WRITE(numout,*) '         surface  mixing length minimum value        rn_mxl0   = ', rn_mxl0 
    639653         IF( ln_mxl0 ) THEN 
    640654            WRITE(numout,*) '      type of scaling under sea-ice               nn_mxlice = ', nn_mxlice 
    641655            IF( nn_mxlice == 1 ) & 
    642656            WRITE(numout,*) '      ice thickness when scaling under sea-ice    rn_mxlice = ', rn_mxlice 
    643          ENDIF          
    644          WRITE(numout,*) '         surface  mixing length minimum value        rn_mxl0   = ', rn_mxl0 
    645          WRITE(numout,*) '      top/bottom friction forcing flag            ln_drg    = ', ln_drg 
     657            SELECT CASE( nn_mxlice )             ! Type of scaling under sea-ice 
     658            CASE( 0 )   ;   WRITE(numout,*) '   ==>>>   No scaling under sea-ice' 
     659            CASE( 1 )   ;   WRITE(numout,*) '   ==>>>   scaling with constant sea-ice thickness' 
     660            CASE( 2 )   ;   WRITE(numout,*) '   ==>>>   scaling with mean sea-ice thickness' 
     661            CASE( 3 )   ;   WRITE(numout,*) '   ==>>>   scaling with max sea-ice thickness' 
     662            CASE DEFAULT 
     663               CALL ctl_stop( 'zdf_tke_init: wrong value for nn_mxlice, should be 0,1,2,3 or 4') 
     664            END SELECT 
     665         ENDIF 
    646666         WRITE(numout,*) '      Langmuir cells parametrization              ln_lc     = ', ln_lc 
    647667         WRITE(numout,*) '         coef to compute vertical velocity of LC     rn_lc  = ', rn_lc 
     
    649669         WRITE(numout,*) '          type of tke penetration profile            nn_htau   = ', nn_htau 
    650670         WRITE(numout,*) '          fraction of TKE that penetrates            rn_efr    = ', rn_efr 
    651          WRITE(numout,*) '          below sea-ice:  =0 ON                      rn_eice   = ', rn_eice 
    652          WRITE(numout,*) '          =4 OFF when ice fraction > 1/4   ' 
    653          IF( ln_drg ) THEN 
    654             WRITE(numout,*) 
    655             WRITE(numout,*) '   Namelist namdrg_top/_bot:   used values:' 
    656             WRITE(numout,*) '      top    ocean cavity roughness (m)          rn_z0(_top)= ', r_z0_top 
    657             WRITE(numout,*) '      Bottom seafloor     roughness (m)          rn_z0(_bot)= ', r_z0_bot 
    658          ENDIF 
     671         WRITE(numout,*) '      langmuir & surface wave breaking under ice  nn_eice = ', nn_eice 
     672         SELECT CASE( nn_eice )  
     673         CASE( 0 )   ;   WRITE(numout,*) '   ==>>>   no impact of ice cover on langmuir & surface wave breaking' 
     674         CASE( 1 )   ;   WRITE(numout,*) '   ==>>>   weigthed by 1-TANH( fr_i(:,:) * 10 )' 
     675         CASE( 2 )   ;   WRITE(numout,*) '   ==>>>   weighted by 1-fr_i(:,:)' 
     676         CASE( 3 )   ;   WRITE(numout,*) '   ==>>>   weighted by 1-MIN( 1, 4 * fr_i(:,:) )' 
     677         CASE DEFAULT 
     678            CALL ctl_stop( 'zdf_tke_init: wrong value for nn_eice, should be 0,1,2, or 3') 
     679         END SELECT       
    659680         WRITE(numout,*) 
    660681         WRITE(numout,*) '   ==>>>   critical Richardson nb with your parameters  ri_cri = ', ri_cri 
Note: See TracChangeset for help on using the changeset viewer.