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 8093 for branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90 – NEMO

Ignore:
Timestamp:
2017-05-30T10:13:14+02:00 (7 years ago)
Author:
gm
Message:

#1880 (HPC-09) - step-6: prepare some forthcoming evolutions (ZDF modules mainly)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90

    r7991 r8093  
    1919   USE domvvl         ! ocean space and time domain : variable volume layer 
    2020   USE zdf_oce        ! ocean vertical physics 
    21    USE zdfsh2         ! vertical physics: shear production term of TKE 
    22    USE zdfbfr         ! bottom friction (only for rn_bfrz0) 
     21!!gm old 
     22   USE zdfbfr  , ONLY : rn_tfrz0, rn_bfrz0   ! top/bottom roughness 
     23!!gm new 
     24   USE zdfdrg  , ONLY : r_z0_top , r_z0_bot   ! top/bottom roughness 
     25   USE zdfdrg  , ONLY : rCdU_top , rCdU_bot   ! top/bottom friction 
     26!!gm 
    2327   USE sbc_oce        ! surface boundary condition: ocean 
    2428   USE phycst         ! physical constants 
    2529   USE zdfmxl         ! mixed layer 
    26    USE sbcwave ,  ONLY: hsw   ! significant wave height 
     30   USE sbcwave , ONLY : hsw   ! significant wave height 
    2731   ! 
    2832   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     
    4549   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hmxl_n    !: now mixing length 
    4650   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   zwall   !: wall function 
    47    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustars2 !: Squared surface velocity scale at T-points 
    48    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustarb2 !: Squared bottom  velocity scale at T-points 
     51   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustar2_surf !: Squared surface velocity scale at T-points 
     52   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustar2_top  !: Squared top     velocity scale at T-points 
     53   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustar2_bot  !: Squared bottom  velocity scale at T-points 
    4954 
    5055   !                              !! ** Namelist  namzdf_gls  ** 
     
    101106   REAL(wp) ::   rsc_tke, rsc_psi, rpsi1, rpsi2, rpsi3, rsc_psi0  !     -           -           -        - 
    102107   REAL(wp) ::   rpsi3m, rpsi3p, rpp, rmm, rnn                    !     -           -           -        - 
     108   ! 
     109   REAL(wp) ::   r2_3 = 2._wp/3._wp   ! constant=2/3 
    103110 
    104111   !! * Substitutions 
     
    115122      !!                ***  FUNCTION zdf_gls_alloc  *** 
    116123      !!---------------------------------------------------------------------- 
    117       ALLOCATE( hmxl_n(jpi,jpj,jpk) , ustars2(jpi,jpj) ,       & 
    118          &      zwall (jpi,jpj,jpk) , ustarb2(jpi,jpj) ,  STAT= zdf_gls_alloc ) 
     124      ALLOCATE( hmxl_n(jpi,jpj,jpk) , ustar2_surf(jpi,jpj) ,                     & 
     125         &      zwall (jpi,jpj,jpk) , ustar2_top (jpi,jpj) , ustar2_bot(jpi,jpj) , STAT= zdf_gls_alloc ) 
    119126         ! 
    120127      IF( lk_mpp             )   CALL mpp_sum ( zdf_gls_alloc ) 
     
    123130 
    124131 
    125    SUBROUTINE zdf_gls( kt ) 
     132   SUBROUTINE zdf_gls( kt, p_sh2, p_avm, p_avt ) 
    126133      !!---------------------------------------------------------------------- 
    127134      !!                   ***  ROUTINE zdf_gls  *** 
     
    130137      !!              coefficients using the GLS turbulent closure scheme. 
    131138      !!---------------------------------------------------------------------- 
    132       INTEGER, INTENT(in) ::   kt ! ocean time step 
    133       INTEGER  ::   ji, jj, jk, ibot, ibotm1, dir  ! dummy loop arguments 
    134       REAL(wp) ::   zesh2, zsigpsi, zcoef, zex1, zex2   ! local scalars 
    135       REAL(wp) ::   ztx2, zty2, zup, zdown, zcof        !   -      -  
    136       REAL(wp) ::   zratio, zrn2, zflxb, sh             !   -      - 
     139      INTEGER                   , INTENT(in   ) ::   kt             ! ocean time step 
     140      REAL(wp), DIMENSION(:,:,:), INTENT(in   ) ::   p_sh2          ! shear production term 
     141      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   p_avm, p_avt   !  momentum and tracer Kz (w-points) 
     142      ! 
     143      INTEGER  ::   ji, jj, jk    ! dummy loop arguments 
     144      INTEGER  ::   ibot, ibotm1  ! local integers 
     145      INTEGER  ::   itop, itopp1  !   -       - 
     146      REAL(wp) ::   zesh2, zsigpsi, zcoef, zex1 , zex2  ! local scalars 
     147      REAL(wp) ::   ztx2, zty2, zup, zdown, zcof, zdir  !   -      -  
     148      REAL(wp) ::   zratio, zrn2, zflxb, sh     , z_en  !   -      - 
    137149      REAL(wp) ::   prod, buoy, diss, zdiss, sm         !   -      - 
    138       REAL(wp) ::   gh, gm, shr, dif, zsqen, zav        !   -      - 
    139       REAL(wp), POINTER, DIMENSION(:,:  ) ::   zdep 
    140       REAL(wp), POINTER, DIMENSION(:,:  ) ::   zkar 
    141       REAL(wp), POINTER, DIMENSION(:,:  ) ::   zflxs       ! Turbulence fluxed induced by internal waves  
    142       REAL(wp), POINTER, DIMENSION(:,:  ) ::   zhsro       ! Surface roughness (surface waves) 
    143       REAL(wp), POINTER, DIMENSION(:,:,:) ::   eb          ! tke at time before 
    144       REAL(wp), POINTER, DIMENSION(:,:,:) ::   hmxl_b      ! mixing length at time before 
    145       REAL(wp), POINTER, DIMENSION(:,:,:) ::   shear       ! vertical shear 
    146       REAL(wp), POINTER, DIMENSION(:,:,:) ::   eps         ! dissipation rate 
    147       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zwall_psi   ! Wall function use in the wb case (ln_sigpsi) 
    148       REAL(wp), POINTER, DIMENSION(:,:,:) ::   psi         ! psi at time now 
    149       REAL(wp), POINTER, DIMENSION(:,:,:) ::   z_elem_a    ! element of the first  matrix diagonal 
    150       REAL(wp), POINTER, DIMENSION(:,:,:) ::   z_elem_b    ! element of the second matrix diagonal 
    151       REAL(wp), POINTER, DIMENSION(:,:,:) ::   z_elem_c    ! element of the third  matrix diagonal 
    152       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zstt, zstm  ! stability function on tracer and momentum 
     150      REAL(wp) ::   gh, gm, shr, dif, zsqen, zavt, zavm !   -      - 
     151      REAL(wp), DIMENSION(jpi,jpj)     ::   zdep 
     152      REAL(wp), DIMENSION(jpi,jpj)     ::   zkar 
     153      REAL(wp), DIMENSION(jpi,jpj)     ::   zflxs       ! Turbulence fluxed induced by internal waves  
     154      REAL(wp), DIMENSION(jpi,jpj)     ::   zhsro       ! Surface roughness (surface waves) 
     155      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   eb          ! tke at time before 
     156      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   hmxl_b      ! mixing length at time before 
     157      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   eps         ! dissipation rate 
     158      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zwall_psi   ! Wall function use in the wb case (ln_sigpsi) 
     159      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   psi         ! psi at time now 
     160      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   z_elem_a    ! element of the first  matrix diagonal 
     161      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   z_elem_b    ! element of the second matrix diagonal 
     162      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   z_elem_c    ! element of the third  matrix diagonal 
     163      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zstt, zstm  ! stability function on tracer and momentum 
    153164      !!-------------------------------------------------------------------- 
    154165      ! 
    155166      IF( nn_timing == 1 )   CALL timing_start('zdf_gls') 
    156167      ! 
    157       CALL wrk_alloc( jpi,jpj,       zdep, zkar, zflxs, zhsro ) 
    158       CALL wrk_alloc( jpi,jpj,jpk,   eb, hmxl_b, shear, eps, zwall_psi, z_elem_a, z_elem_b, z_elem_c, psi ) 
    159       CALL wrk_alloc( jpi,jpj,jpk,   zstt, zstm ) 
    160  
    161168      ! Preliminary computing 
    162169 
    163       ustars2 = 0._wp   ;   ustarb2 = 0._wp   ;   psi  = 0._wp   ;   zwall_psi = 0._wp 
    164  
    165       ! restore before values computed GLS alone 
    166       avt(:,:,:) = avt_k(:,:,:) 
    167       avm(:,:,:) = avm_k(:,:,:) 
    168  
    169       ! Compute surface and bottom friction at T-points 
     170      ustar2_surf(:,:) = 0._wp   ;         psi(:,:,:) = 0._wp    
     171      ustar2_top (:,:) = 0._wp   ;   zwall_psi(:,:,:) = 0._wp 
     172      ustar2_bot (:,:) = 0._wp 
     173       
     174 
     175 
     176      ! Compute surface, top and bottom friction at T-points 
    170177      DO jj = 2, jpjm1           
    171178         DO ji = fs_2, fs_jpim1   ! vector opt.          
    172179            ! 
    173180            ! surface friction 
    174             ustars2(ji,jj) = r1_rau0 * taum(ji,jj) * tmask(ji,jj,1) 
     181            ustar2_surf(ji,jj) = r1_rau0 * taum(ji,jj) * tmask(ji,jj,1) 
    175182            !    
     183!!gm old 
    176184            ! bottom friction (explicit before friction)         
    177185            ! Note that we chose here not to bound the friction as in dynbfr)    
     
    180188            zty2 = (  bfrva(ji,jj)  * vb(ji,jj,mbkv(ji,jj)) + bfrva(ji,jj-1) * vb(ji,jj-1,mbkv(ji,jj-1))  )   &          
    181189               & * ( 1._wp - 0.5_wp * vmask(ji,jj,1) * vmask(ji,jj-1,1)  )       
    182             ustarb2(ji,jj) = SQRT( ztx2 * ztx2 + zty2 * zty2 ) * tmask(ji,jj,1)          
     190            ustar2_bot(ji,jj) = SQRT( ztx2 * ztx2 + zty2 * zty2 ) * tmask(ji,jj,1)          
    183191         END DO          
    184192      END DO     
    185  
     193!!gm new 
     194!!gm Rq we may add here r_ke0(_top/_bot) ?  ==>> think about that... 
     195!          ! bottom friction (explicit before friction) 
     196!          zmsku = ( 2._wp - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 
     197!          zmskv = ( 2._wp - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) )     ! (CAUTION: CdU<0) 
     198!          ustar2_bot(ji,jj) = - rCdU_bot(ji,jj) * SQRT(  ( zmsku*( ub(ji,jj,mbkt(ji,jj))+ub(ji-1,jj,mbkt(ji,jj)) ) )**2 
     199!             &                                         + ( zmskv*( vb(ji,jj,mbkt(ji,jj))+vb(ji,jj-1,mbkt(ji,jj)) ) )**2  ) 
     200!       END DO 
     201!    END DO 
     202!    IF( ln_isfcav ) THEN       !top friction 
     203!       DO jj = 2, jpjm1 
     204!          DO ji = fs_2, fs_jpim1   ! vector opt. 
     205!             zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 
     206!             zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) )     ! (CAUTION: CdU<0) 
     207!             ustar2_top(ji,jj) = - rCdU_top(ji,jj) * SQRT(  ( zmsku*( ub(ji,jj,mikt(ji,jj))+ub(ji-1,jj,mikt(ji,jj)) ) )**2 
     208!                &                                         + ( zmskv*( vb(ji,jj,mikt(ji,jj))+vb(ji,jj-1,mikt(ji,jj)) ) )**2  ) 
     209!          END DO 
     210!       END DO 
     211!    ENDIF 
     212!!gm 
    186213      SELECT CASE ( nn_z0_met )      !==  Set surface roughness length  ==! 
    187214      CASE ( 0 )                          ! Constant roughness           
    188215         zhsro(:,:) = rn_hsro 
    189216      CASE ( 1 )             ! Standard Charnock formula 
    190          zhsro(:,:) = MAX(rsbc_zs1 * ustars2(:,:), rn_hsro) 
     217         zhsro(:,:) = MAX( rsbc_zs1 * ustar2_surf(:,:) , rn_hsro ) 
    191218      CASE ( 2 )             ! Roughness formulae according to Rascle et al., Ocean Modelling (2008) 
    192219!!gm         zcof = 2._wp * 0.6_wp / 28._wp 
    193 !!gm         zdep(:,:)  = 30._wp * TANH(  zcof/ SQRT( MAX(ustars2(:,:),rsmall) )  )      ! Wave age (eq. 10) 
    194          zdep(:,:)  = 30.*TANH(2.*0.3/(28.*SQRT(MAX(ustars2(:,:),rsmall))))             ! Wave age (eq. 10) 
    195          zhsro(:,:) = MAX(rsbc_zs2 * ustars2(:,:) * zdep(:,:)**1.5, rn_hsro) ! zhsro = rn_frac_hs * Hsw (eq. 11) 
     220!!gm         zdep(:,:)  = 30._wp * TANH(  zcof/ SQRT( MAX(ustar2_surf(:,:),rsmall) )  )      ! Wave age (eq. 10) 
     221         zdep (:,:) = 30.*TANH( 2.*0.3/(28.*SQRT(MAX(ustar2_surf(:,:),rsmall))) )            ! Wave age (eq. 10) 
     222         zhsro(:,:) = MAX(rsbc_zs2 * ustar2_surf(:,:) * zdep(:,:)**1.5, rn_hsro) ! zhsro = rn_frac_hs * Hsw (eq. 11) 
    196223      CASE ( 3 )             ! Roughness given by the wave model (coupled or read in file) 
    197224!!gm  BUG missing a multiplicative coefficient.... 
    198225         zhsro(:,:) = hsw(:,:) 
    199226      END SELECT 
    200  
    201       !                             !==  Compute shear and dissipation rate  ==! 
    202       CALL zdf_sh2( shear ) 
    203  
    204  
     227      ! 
    205228      DO jk = 2, jpkm1              !==  Compute dissipation rate  ==! 
    206229         DO jj = 1, jpjm1 
     
    245268            DO ji = 2, jpim1 
    246269               ! 
    247                buoy = - avt(ji,jj,jk) * rn2(ji,jj,jk)       ! stratif. destruction 
     270               buoy = - p_avt(ji,jj,jk) * rn2(ji,jj,jk)     ! stratif. destruction 
    248271               ! 
    249272               diss = eps(ji,jj,jk)                         ! dissipation 
    250273               ! 
    251                dir = 0.5_wp + SIGN( 0.5_wp, shear(ji,jj,jk) + buoy )   ! dir =1(=0) if shear(ji,jj,jk)+buoy >0(<0) 
    252                ! 
    253                zesh2 = dir*(shear(ji,jj,jk)+buoy)+(1._wp-dir)*shear(ji,jj,jk)          ! production term 
    254                zdiss = dir*(diss/en(ji,jj,jk))   +(1._wp-dir)*(diss-buoy)/en(ji,jj,jk) ! dissipation term 
     274               zdir = 0.5_wp + SIGN( 0.5_wp, p_sh2(ji,jj,jk) + buoy )   ! zdir =1(=0) if shear(ji,jj,jk)+buoy >0(<0) 
     275               ! 
     276               zesh2 = zdir*(p_sh2(ji,jj,jk)+buoy)+(1._wp-zdir)*p_sh2(ji,jj,jk)          ! production term 
     277               zdiss = zdir*(diss/en(ji,jj,jk))   +(1._wp-zdir)*(diss-buoy)/en(ji,jj,jk) ! dissipation term 
     278!!gm better coding, identical results 
     279!               zesh2 =   p_sh2(ji,jj,jk) + zdir*buoy               ! production term 
     280!               zdiss = ( diss - (1._wp-zdir)*buoy ) / en(ji,jj,jk) ! dissipation term 
     281!!gm 
    255282               ! 
    256283               ! Compute a wall function from 1. to rsc_psi*zwall/rsc_psi0 
     
    269296               zcof = rfact_tke * tmask(ji,jj,jk) 
    270297               !                                               ! lower diagonal 
    271                z_elem_a(ji,jj,jk) = zcof * ( avm(ji,jj,jk  ) + avm(ji,jj,jk-1) ) / ( e3t_n(ji,jj,jk-1) * e3w_n(ji,jj,jk) ) 
     298               z_elem_a(ji,jj,jk) = zcof * ( p_avm(ji,jj,jk  ) + p_avm(ji,jj,jk-1) ) / ( e3t_n(ji,jj,jk-1) * e3w_n(ji,jj,jk) ) 
    272299               !                                               ! upper diagonal 
    273                z_elem_c(ji,jj,jk) = zcof * ( avm(ji,jj,jk+1) + avm(ji,jj,jk  ) ) / ( e3t_n(ji,jj,jk  ) * e3w_n(ji,jj,jk) ) 
     300               z_elem_c(ji,jj,jk) = zcof * ( p_avm(ji,jj,jk+1) + p_avm(ji,jj,jk  ) ) / ( e3t_n(ji,jj,jk  ) * e3w_n(ji,jj,jk) ) 
    274301               !                                               ! diagonal 
    275302               z_elem_b(ji,jj,jk) = 1._wp - z_elem_a(ji,jj,jk) - z_elem_c(ji,jj,jk)  + rdt * zdiss * wmask(ji,jj,jk)  
     
    293320      CASE ( 0 )             ! Dirichlet case 
    294321      ! First level 
    295       en(:,:,1) = rc02r * ustars2(:,:) * (1._wp + rsbc_tke1)**(2._wp/3._wp) 
     322      en(:,:,1) = rc02r * ustar2_surf(:,:) * (1._wp + rsbc_tke1)**r2_3 
    296323      en(:,:,1) = MAX(en(:,:,1), rn_emin)  
    297324      z_elem_a(:,:,1) = en(:,:,1) 
     
    300327      !  
    301328      ! One level below 
    302       en(:,:,2) = rc02r * ustars2(:,:) * (1._wp + rsbc_tke1 * ((zhsro(:,:)+gdepw_n(:,:,2)) & 
     329      en(:,:,2) = rc02r * ustar2_surf(:,:) * (1._wp + rsbc_tke1 * ((zhsro(:,:)+gdepw_n(:,:,2)) & 
    303330         &               / zhsro(:,:) )**(1.5_wp*ra_sf))**(2._wp/3._wp) 
    304331      en(:,:,2) = MAX(en(:,:,2), rn_emin ) 
     
    311338      ! 
    312339      ! Dirichlet conditions at k=1 
    313       en(:,:,1)       = rc02r * ustars2(:,:) * (1._wp + rsbc_tke1)**(2._wp/3._wp) 
     340      en(:,:,1)       = rc02r * ustar2_surf(:,:) * (1._wp + rsbc_tke1)**r2_3 
    314341      en(:,:,1)       = MAX(en(:,:,1), rn_emin)       
    315342      z_elem_a(:,:,1) = en(:,:,1) 
     
    322349      z_elem_a(:,:,2) = 0._wp 
    323350      zkar(:,:)       = (rl_sf + (vkarmn-rl_sf)*(1.-exp(-rtrans*gdept_n(:,:,1)/zhsro(:,:)) )) 
    324       zflxs(:,:)      = rsbc_tke2 * ustars2(:,:)**1.5_wp * zkar(:,:) & 
     351      zflxs(:,:)      = rsbc_tke2 * ustar2_surf(:,:)**1.5_wp * zkar(:,:) & 
    325352          &                       * ((zhsro(:,:)+gdept_n(:,:,1)) / zhsro(:,:) )**(1.5_wp*ra_sf) 
    326353 
     
    340367         DO jj = 2, jpjm1 
    341368            DO ji = fs_2, fs_jpim1   ! vector opt. 
     369!!gm This means that bottom and ocean w-level above have a specified "en" value.   Sure ???? 
     370!!   With thick deep ocean level thickness, this may be quite large, no ??? 
     371!!   in particular in ocean cavities where top stratification can be large... 
    342372               ibot   = mbkt(ji,jj) + 1      ! k   bottom level of w-point 
    343373               ibotm1 = mbkt(ji,jj)          ! k-1 bottom level of w-point but >=1 
    344374               ! 
    345                ! Bottom level Dirichlet condition: 
    346                z_elem_a(ji,jj,ibot  ) = 0._wp 
    347                z_elem_c(ji,jj,ibot  ) = 0._wp 
    348                z_elem_b(ji,jj,ibot  ) = 1._wp 
    349                en(ji,jj,ibot  ) = MAX( rc02r * ustarb2(ji,jj), rn_emin ) 
    350                ! 
    351                ! Just above last level, Dirichlet condition again 
    352                z_elem_a(ji,jj,ibotm1) = 0._wp 
    353                z_elem_c(ji,jj,ibotm1) = 0._wp 
    354                z_elem_b(ji,jj,ibotm1) = 1._wp 
    355                en(ji,jj,ibotm1) = MAX( rc02r * ustarb2(ji,jj), rn_emin )  
    356             END DO 
    357          END DO 
     375               z_en =  MAX( rc02r * ustar2_bot(ji,jj), rn_emin ) 
     376               ! 
     377               ! Dirichlet condition applied at:  
     378               !     Bottom level (ibot)      &      Just above it (ibotm1)    
     379               z_elem_a(ji,jj,ibot) = 0._wp   ;   z_elem_a(ji,jj,ibotm1) = 0._wp 
     380               z_elem_c(ji,jj,ibot) = 0._wp   ;   z_elem_c(ji,jj,ibotm1) = 0._wp 
     381               z_elem_b(ji,jj,ibot) = 1._wp   ;   z_elem_b(ji,jj,ibotm1) = 1._wp 
     382               en      (ji,jj,ibot) = z_en    ;   en      (ji,jj,ibotm1) = z_en 
     383            END DO 
     384         END DO 
     385!!gm new 
     386!         IF( ln_isfcav) THEN     ! top boundary   (ocean cavity) 
     387!            DO jj = 2, jpjm1 
     388!               DO ji = fs_2, fs_jpim1   ! vector opt. 
     389!                  itop   = mikt(ji,jj)       ! k   top w-point 
     390!                  itopp1 = mikt(ji,jj) + 1   ! k+1 1st w-point below the top one 
     391!                  !                                                ! mask at the ocean surface points 
     392!                  z_en = MAX( rc02r * ustar2_top(ji,jj), rn_emin ) * ( 1._wp - tmask(ji,jj,1) ) 
     393!                  ! 
     394!                  ! Dirichlet condition applied at:  
     395!                  !     top level (itop)         &      Just below it (itopp1)    
     396!                  z_elem_a(ji,jj,itop) = 0._wp   ;   z_elem_a(ji,jj,ipotm1) = 0._wp 
     397!                  z_elem_c(ji,jj,itop) = 0._wp   ;   z_elem_c(ji,jj,itopp1) = 0._wp 
     398!                  z_elem_b(ji,jj,itop) = 1._wp   ;   z_elem_b(ji,jj,itopp1) = 1._wp 
     399!                  en      (ji,jj,itop) = zen     ;   en      (ji,jj,itopp1) = z_en 
     400!               END DO 
     401!            END DO 
     402!         ENDIF 
     403!!gm 
    358404         ! 
    359405      CASE ( 1 )             ! Neumman boundary condition 
     
    364410               ibotm1 = mbkt(ji,jj)          ! k-1 bottom level of w-point but >=1 
    365411               ! 
     412               z_en =  MAX( rc02r * ustar2_bot(ji,jj), rn_emin ) 
     413               ! 
    366414               ! Bottom level Dirichlet condition: 
    367                z_elem_a(ji,jj,ibot) = 0._wp 
    368                z_elem_c(ji,jj,ibot) = 0._wp 
    369                z_elem_b(ji,jj,ibot) = 1._wp 
    370                en(ji,jj,ibot) = MAX( rc02r * ustarb2(ji,jj), rn_emin ) 
    371                ! 
    372                ! Just above last level: Neumann condition 
    373                z_elem_b(ji,jj,ibotm1) = z_elem_b(ji,jj,ibotm1) + z_elem_c(ji,jj,ibotm1)   ! Remove z_elem_c from z_elem_b 
    374                z_elem_c(ji,jj,ibotm1) = 0._wp 
    375             END DO 
    376          END DO 
     415               !     Bottom level (ibot)      &      Just above it (ibotm1)    
     416               !         Dirichlet            !         Neumann 
     417               z_elem_a(ji,jj,ibot) = 0._wp   !   ! Remove z_elem_c from z_elem_b 
     418               z_elem_b(ji,jj,ibot) = 1._wp   ;   z_elem_b(ji,jj,ibotm1) = z_elem_b(ji,jj,ibotm1) + z_elem_c(ji,jj,ibotm1) 
     419               z_elem_c(ji,jj,ibot) = 0._wp   ;   z_elem_c(ji,jj,ibotm1) = 0._wp 
     420            END DO 
     421         END DO 
     422!!gm new 
     423!         IF( ln_isfcav) THEN     ! top boundary   (ocean cavity) 
     424!            DO jj = 2, jpjm1 
     425!               DO ji = fs_2, fs_jpim1   ! vector opt. 
     426!                  itop   = mikt(ji,jj)       ! k   top w-point 
     427!                  itopp1 = mikt(ji,jj) + 1   ! k+1 1st w-point below the top one 
     428!                  !                                                ! mask at the ocean surface points 
     429!                  z_en = MAX( rc02r * ustar2_top(ji,jj), rn_emin ) * ( 1._wp - tmask(ji,jj,1) ) 
     430!                  ! 
     431!                  ! Bottom level Dirichlet condition: 
     432!                  !     Bottom level (ibot)      &      Just above it (ibotm1)    
     433!                  !         Dirichlet            !         Neumann 
     434!                  z_elem_a(ji,jj,itop) = 0._wp   !   ! Remove z_elem_c from z_elem_b 
     435!                  z_elem_b(ji,jj,itop) = 1._wp   ;   z_elem_b(ji,jj,itopp1) = z_elem_b(ji,jj,itopp1) + z_elem_c(ji,jj,itopp1) 
     436!                  z_elem_c(ji,jj,itop) = 0._wp   ;   z_elem_c(ji,jj,itopp1) = 0._wp 
     437!               END DO 
     438!            END DO 
     439!         ENDIF 
     440!!gm 
    377441         ! 
    378442      END SELECT 
     
    465529               zratio = psi(ji,jj,jk) / eb(ji,jj,jk)  
    466530               ! 
    467                ! psi3+ : stable : B=-KhN²<0 => N²>0 if rn2>0 dir = 1 (stable) otherwise dir = 0 (unstable) 
    468                dir = 0.5_wp + SIGN( 0.5_wp, rn2(ji,jj,jk) ) 
    469                ! 
    470                rpsi3 = dir * rpsi3m + ( 1._wp - dir ) * rpsi3p 
     531               ! psi3+ : stable : B=-KhN²<0 => N²>0 if rn2>0 zdir = 1 (stable) otherwise zdir = 0 (unstable) 
     532               zdir = 0.5_wp + SIGN( 0.5_wp, rn2(ji,jj,jk) ) 
     533               ! 
     534               rpsi3 = zdir * rpsi3m + ( 1._wp - zdir ) * rpsi3p 
    471535               ! 
    472536               ! shear prod. - stratif. destruction 
    473                prod = rpsi1 * zratio * shear(ji,jj,jk) 
     537               prod = rpsi1 * zratio * p_sh2(ji,jj,jk) 
    474538               ! 
    475539               ! stratif. destruction 
    476                buoy = rpsi3 * zratio * (- avt(ji,jj,jk) * rn2(ji,jj,jk) ) 
     540               buoy = rpsi3 * zratio * (- p_avt(ji,jj,jk) * rn2(ji,jj,jk) ) 
    477541               ! 
    478542               ! shear prod. - stratif. destruction 
    479543               diss = rpsi2 * zratio * zwall(ji,jj,jk) * eps(ji,jj,jk) 
    480544               ! 
    481                dir = 0.5_wp + SIGN( 0.5_wp, prod + buoy )   ! dir =1(=0) if shear(ji,jj,jk)+buoy >0(<0) 
    482                ! 
    483                zesh2 = dir * ( prod + buoy )          + (1._wp - dir ) * prod                        ! production term 
    484                zdiss = dir * ( diss / psi(ji,jj,jk) ) + (1._wp - dir ) * (diss-buoy) / psi(ji,jj,jk) ! dissipation term 
     545               zdir = 0.5_wp + SIGN( 0.5_wp, prod + buoy )   ! zdir =1(=0) if shear(ji,jj,jk)+buoy >0(<0) 
     546               ! 
     547               zesh2 = zdir * ( prod + buoy )          + (1._wp - zdir ) * prod                        ! production term 
     548               zdiss = zdir * ( diss / psi(ji,jj,jk) ) + (1._wp - zdir ) * (diss-buoy) / psi(ji,jj,jk) ! dissipation term 
    485549               !                                                         
    486550               ! building the matrix 
    487551               zcof = rfact_psi * zwall_psi(ji,jj,jk) * tmask(ji,jj,jk) 
    488552               !                                               ! lower diagonal 
    489                z_elem_a(ji,jj,jk) = zcof * ( avm(ji,jj,jk  ) + avm(ji,jj,jk-1) ) / ( e3t_n(ji,jj,jk-1) * e3w_n(ji,jj,jk) ) 
     553               z_elem_a(ji,jj,jk) = zcof * ( p_avm(ji,jj,jk  ) + p_avm(ji,jj,jk-1) ) / ( e3t_n(ji,jj,jk-1) * e3w_n(ji,jj,jk) ) 
    490554               !                                               ! upper diagonal 
    491                z_elem_c(ji,jj,jk) = zcof * ( avm(ji,jj,jk+1) + avm(ji,jj,jk  ) ) / ( e3t_n(ji,jj,jk  ) * e3w_n(ji,jj,jk) ) 
     555               z_elem_c(ji,jj,jk) = zcof * ( p_avm(ji,jj,jk+1) + p_avm(ji,jj,jk  ) ) / ( e3t_n(ji,jj,jk  ) * e3w_n(ji,jj,jk) ) 
    492556               !                                               ! diagonal 
    493557               z_elem_b(ji,jj,jk) = 1._wp - z_elem_a(ji,jj,jk) - z_elem_c(ji,jj,jk) + rdt * zdiss * wmask(ji,jj,jk) 
     
    506570      ! 
    507571      CASE ( 0 )             ! Dirichlet boundary conditions 
    508       ! 
    509       ! Surface value 
    510       zdep(:,:)       = zhsro(:,:) * rl_sf ! Cosmetic 
    511       psi (:,:,1)     = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
    512       z_elem_a(:,:,1) = psi(:,:,1) 
    513       z_elem_c(:,:,1) = 0._wp 
    514       z_elem_b(:,:,1) = 1._wp 
    515       ! 
    516       ! One level below 
    517       zkar(:,:)       = (rl_sf + (vkarmn-rl_sf)*(1._wp-exp(-rtrans*gdepw_n(:,:,2)/zhsro(:,:) ))) 
    518       zdep(:,:)       = (zhsro(:,:) + gdepw_n(:,:,2)) * zkar(:,:) 
    519       psi (:,:,2)     = rc0**rpp * en(:,:,2)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
    520       z_elem_a(:,:,2) = 0._wp 
    521       z_elem_c(:,:,2) = 0._wp 
    522       z_elem_b(:,:,2) = 1._wp 
    523       !  
    524       ! 
     572         ! 
     573         ! Surface value 
     574         zdep    (:,:)   = zhsro(:,:) * rl_sf ! Cosmetic 
     575         psi     (:,:,1) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
     576         z_elem_a(:,:,1) = psi(:,:,1) 
     577         z_elem_c(:,:,1) = 0._wp 
     578         z_elem_b(:,:,1) = 1._wp 
     579         ! 
     580         ! One level below 
     581         zkar    (:,:)   = (rl_sf + (vkarmn-rl_sf)*(1._wp-exp(-rtrans*gdepw_n(:,:,2)/zhsro(:,:) ))) 
     582         zdep    (:,:)   = (zhsro(:,:) + gdepw_n(:,:,2)) * zkar(:,:) 
     583         psi     (:,:,2) = rc0**rpp * en(:,:,2)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
     584         z_elem_a(:,:,2) = 0._wp 
     585         z_elem_c(:,:,2) = 0._wp 
     586         z_elem_b(:,:,2) = 1._wp 
     587         !  
    525588      CASE ( 1 )             ! Neumann boundary condition on d(psi)/dz 
    526       ! 
    527       ! Surface value: Dirichlet 
    528       zdep(:,:)       = zhsro(:,:) * rl_sf 
    529       psi (:,:,1)     = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
    530       z_elem_a(:,:,1) = psi(:,:,1) 
    531       z_elem_c(:,:,1) = 0._wp 
    532       z_elem_b(:,:,1) = 1._wp 
    533       ! 
    534       ! Neumann condition at k=2 
    535       z_elem_b(:,:,2) = z_elem_b(:,:,2) +  z_elem_a(:,:,2) ! Remove z_elem_a from z_elem_b 
    536       z_elem_a(:,:,2) = 0._wp 
    537       ! 
    538       ! Set psi vertical flux at the surface: 
    539       zkar(:,:) = rl_sf + (vkarmn-rl_sf)*(1._wp-exp(-rtrans*gdept_n(:,:,1)/zhsro(:,:) )) ! Lengh scale slope 
    540       zdep(:,:) = ((zhsro(:,:) + gdept_n(:,:,1)) / zhsro(:,:))**(rmm*ra_sf) 
    541       zflxs(:,:) = (rnn + rsbc_tke1 * (rnn + rmm*ra_sf) * zdep(:,:))*(1._wp + rsbc_tke1*zdep(:,:))**(2._wp*rmm/3._wp-1_wp) 
    542       zdep(:,:) =  rsbc_psi1 * (zwall_psi(:,:,1)*avm(:,:,1)+zwall_psi(:,:,2)*avm(:,:,2)) * & 
    543              & ustars2(:,:)**rmm * zkar(:,:)**rnn * (zhsro(:,:) + gdept_n(:,:,1))**(rnn-1.) 
    544       zflxs(:,:) = zdep(:,:) * zflxs(:,:) 
    545       psi(:,:,2) = psi(:,:,2) + zflxs(:,:) / e3w_n(:,:,2) 
    546       !    
    547       ! 
     589         ! 
     590         ! Surface value: Dirichlet 
     591         zdep    (:,:)   = zhsro(:,:) * rl_sf 
     592         psi     (:,:,1) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
     593         z_elem_a(:,:,1) = psi(:,:,1) 
     594         z_elem_c(:,:,1) = 0._wp 
     595         z_elem_b(:,:,1) = 1._wp 
     596         ! 
     597         ! Neumann condition at k=2 
     598         z_elem_b(:,:,2) = z_elem_b(:,:,2) +  z_elem_a(:,:,2) ! Remove z_elem_a from z_elem_b 
     599         z_elem_a(:,:,2) = 0._wp 
     600         ! 
     601         ! Set psi vertical flux at the surface: 
     602         zkar (:,:)   = rl_sf + (vkarmn-rl_sf)*(1._wp-exp(-rtrans*gdept_n(:,:,1)/zhsro(:,:) )) ! Lengh scale slope 
     603         zdep (:,:)   = ((zhsro(:,:) + gdept_n(:,:,1)) / zhsro(:,:))**(rmm*ra_sf) 
     604         zflxs(:,:)   = (rnn + rsbc_tke1 * (rnn + rmm*ra_sf) * zdep(:,:))*(1._wp + rsbc_tke1*zdep(:,:))**(2._wp*rmm/3._wp-1_wp) 
     605         zdep (:,:)   = rsbc_psi1 * (zwall_psi(:,:,1)*avm(:,:,1)+zwall_psi(:,:,2)*avm(:,:,2)) * & 
     606            &           ustar2_surf(:,:)**rmm * zkar(:,:)**rnn * (zhsro(:,:) + gdept_n(:,:,1))**(rnn-1.) 
     607         zflxs(:,:)   = zdep(:,:) * zflxs(:,:) 
     608         psi  (:,:,2) = psi(:,:,2) + zflxs(:,:) / e3w_n(:,:,2) 
     609         ! 
    548610      END SELECT 
    549611 
     
    552614      ! 
    553615      SELECT CASE ( nn_bc_bot ) 
    554       ! 
    555616      ! 
    556617      CASE ( 0 )             ! Dirichlet  
     
    597658               ! Set psi vertical flux at the bottom: 
    598659               zdep(ji,jj) = rn_bfrz0 + 0.5_wp*e3t_n(ji,jj,ibotm1) 
    599                zflxb = rsbc_psi2 * ( avm(ji,jj,ibot) + avm(ji,jj,ibotm1) )   & 
     660               zflxb = rsbc_psi2 * ( p_avm(ji,jj,ibot) + p_avm(ji,jj,ibotm1) )   & 
    600661                  &  * (0.5_wp*(en(ji,jj,ibot)+en(ji,jj,ibotm1)))**rmm * zdep(ji,jj)**(rnn-1._wp) 
    601662               psi(ji,jj,ibotm1) = psi(ji,jj,ibotm1) + zflxb / e3w_n(ji,jj,ibotm1) 
     
    730791                  gh = gh * rf6 
    731792                  ! Gm =  M²l²/q² Shear number 
    732                   shr = shear(ji,jj,jk) / MAX( avm(ji,jj,jk), rsmall ) 
     793                  shr = p_sh2(ji,jj,jk) / MAX( p_avm(ji,jj,jk), rsmall ) 
    733794                  gm = MAX( shr * zcof , 1.e-10 ) 
    734795                  gm = gm * rf6 
     
    765826         DO jj = 2, jpjm1 
    766827            DO ji = fs_2, fs_jpim1   ! vector opt. 
    767                zsqen         = SQRT( 2._wp * en(ji,jj,jk) ) * hmxl_n(ji,jj,jk) 
    768                zav           = zsqen * zstt(ji,jj,jk) 
    769                avt(ji,jj,jk) = MAX( zav, avtb(jk) ) * wmask(ji,jj,jk) ! apply mask for zdfmxl routine 
    770                zav           = zsqen * zstm(ji,jj,jk) 
    771                avm(ji,jj,jk) = MAX( zav, avmb(jk) )                   ! Note that avm is not masked at the surface and the bottom 
     828               zsqen = SQRT( 2._wp * en(ji,jj,jk) ) * hmxl_n(ji,jj,jk) 
     829               zavt  = zsqen * zstt(ji,jj,jk) 
     830               zavm  = zsqen * zstm(ji,jj,jk) 
     831               p_avt(ji,jj,jk) = MAX( zavt, avtb(jk) ) * wmask(ji,jj,jk) ! apply mask for zdfmxl routine 
     832               p_avm(ji,jj,jk) = MAX( zavm, avmb(jk) )                   ! Note that avm is not masked at the surface and the bottom 
    772833            END DO 
    773834         END DO 
    774835      END DO 
    775836      avt(:,:,1)  = 0._wp 
    776 !!gm I'm sure this is needed to compute the shear term at next time-step 
    777       CALL lbc_lnk( avm, 'W', 1. )   ;   CALL lbc_lnk( avt, 'W', 1. ) 
    778837      ! 
    779838      IF(ln_ctl) THEN 
     
    781840         CALL prt_ctl( tab3d_1=avm, clinfo1=' gls  - m: ', ovlap=1, kdim=jpk ) 
    782841      ENDIF 
    783       ! 
    784       avt_k(:,:,:) = avt(:,:,:)      !==  store avt, avm values computed by GLS only  ==! 
    785       avm_k(:,:,:) = avm(:,:,:) 
    786       ! 
    787       IF( lrst_oce )   CALL gls_rst( kt, 'WRITE' )     ! write the GLS info in the restart file 
    788       ! 
    789       CALL wrk_dealloc( jpi,jpj,       zdep, zkar, zflxs, zhsro ) 
    790       CALL wrk_dealloc( jpi,jpj,jpk,   eb, hmxl_b, shear, eps, zwall_psi, z_elem_a, z_elem_b, z_elem_c, psi ) 
    791       CALL wrk_dealloc( jpi,jpj,jpk,   zstt, zstm ) 
    792842      ! 
    793843      IF( nn_timing == 1 )   CALL timing_stop('zdf_gls') 
     
    837887      IF(lwp) THEN                     !* Control print 
    838888         WRITE(numout,*) 
    839          WRITE(numout,*) 'zdf_gls_init : gls turbulent closure scheme' 
     889         WRITE(numout,*) 'zdf_gls_init : GLS turbulent closure scheme' 
    840890         WRITE(numout,*) '~~~~~~~~~~~~' 
    841891         WRITE(numout,*) '   Namelist namzdf_gls : set gls mixing parameters' 
     
    854904         WRITE(numout,*) '      Type of closure                               nn_clos        = ', nn_clos 
    855905         WRITE(numout,*) '      Surface roughness (m)                         rn_hsro        = ', rn_hsro 
     906!!gm old 
     907         WRITE(numout,*) '      top    roughness (m) (nambfr namelist)        rn_tfrz0       = ', rn_tfrz0 
    856908         WRITE(numout,*) '      Bottom roughness (m) (nambfr namelist)        rn_bfrz0       = ', rn_bfrz0 
     909!!gm new 
     910!         WRITE(numout,*) '   Namelist namdrg_top/_bot used values:' 
     911!         WRITE(numout,*) '      top    ocean cavity roughness (m)             rn_z0(_top)   = ', r_z0_top 
     912!         WRITE(numout,*) '      Bottom seafloor     roughness (m)             rn_z0(_bot)   = ', r_z0_bot 
     913!!gm 
     914         WRITE(numout,*) 
    857915      ENDIF 
    858916 
     
    861919 
    862920      !                                !* Check of some namelist values 
    863       IF( nn_bc_surf < 0 .OR. nn_bc_surf > 1 ) CALL ctl_stop( 'zdf_gls_init: bad flag: nn_bc_surf is 0 or 1' ) 
    864       IF( nn_bc_surf < 0 .OR. nn_bc_surf > 1 ) CALL ctl_stop( 'zdf_gls_init: bad flag: nn_bc_surf is 0 or 1' ) 
    865       IF( nn_z0_met < 0 .OR. nn_z0_met > 3 ) CALL ctl_stop( 'zdf_gls_init: bad flag: nn_z0_met is 0, 1, 2 or 3' ) 
    866       IF( nn_z0_met == 3 .AND. .NOT.ln_wave ) CALL ctl_stop( 'zdf_gls_init: nn_z0_met=3 requires ln_wave=T' ) 
    867       IF( nn_stab_func  < 0 .OR. nn_stab_func  > 3 ) CALL ctl_stop( 'zdf_gls_init: bad flag: nn_stab_func is 0, 1, 2 and 3' ) 
    868       IF( nn_clos       < 0 .OR. nn_clos       > 3 ) CALL ctl_stop( 'zdf_gls_init: bad flag: nn_clos is 0, 1, 2 or 3' ) 
     921      IF( nn_bc_surf < 0   .OR. nn_bc_surf   > 1 )  CALL ctl_stop( 'zdf_gls_init: bad flag: nn_bc_surf is 0 or 1' ) 
     922      IF( nn_bc_surf < 0   .OR. nn_bc_surf   > 1 )  CALL ctl_stop( 'zdf_gls_init: bad flag: nn_bc_surf is 0 or 1' ) 
     923      IF( nn_z0_met  < 0   .OR. nn_z0_met    > 3 )  CALL ctl_stop( 'zdf_gls_init: bad flag: nn_z0_met is 0, 1, 2 or 3' ) 
     924      IF( nn_z0_met == 3  .AND. .NOT.ln_wave     )  CALL ctl_stop( 'zdf_gls_init: nn_z0_met=3 requires ln_wave=T' ) 
     925      IF( nn_stab_func < 0 .OR. nn_stab_func > 3 )  CALL ctl_stop( 'zdf_gls_init: bad flag: nn_stab_func is 0, 1, 2 and 3' ) 
     926      IF( nn_clos      < 0 .OR. nn_clos      > 3 )  CALL ctl_stop( 'zdf_gls_init: bad flag: nn_clos is 0, 1, 2 or 3' ) 
    869927 
    870928      SELECT CASE ( nn_clos )          !* set the parameters for the chosen closure 
     
    872930      CASE( 0 )                              ! k-kl  (Mellor-Yamada) 
    873931         ! 
    874          IF(lwp) WRITE(numout,*) 'The choosen closure is k-kl closed to the classical Mellor-Yamada' 
     932         IF(lwp) WRITE(numout,*) '   ==>>   k-kl closure chosen (i.e. closed to the classical Mellor-Yamada)' 
     933         IF(lwp) WRITE(numout,*) 
    875934         rpp     = 0._wp 
    876935         rmm     = 1._wp 
     
    890949      CASE( 1 )                              ! k-eps 
    891950         ! 
    892          IF(lwp) WRITE(numout,*) 'The choosen closure is k-eps' 
     951         IF(lwp) WRITE(numout,*) '   ==>>   k-eps closure chosen' 
     952         IF(lwp) WRITE(numout,*) 
    893953         rpp     =  3._wp 
    894954         rmm     =  1.5_wp 
     
    908968      CASE( 2 )                              ! k-omega 
    909969         ! 
    910          IF(lwp) WRITE(numout,*) 'The choosen closure is k-omega' 
     970         IF(lwp) WRITE(numout,*) '   ==>>   k-omega closure chosen' 
     971         IF(lwp) WRITE(numout,*) 
    911972         rpp     = -1._wp 
    912973         rmm     =  0.5_wp 
     
    926987      CASE( 3 )                              ! generic 
    927988         ! 
    928          IF(lwp) WRITE(numout,*) 'The choosen closure is generic' 
     989         IF(lwp) WRITE(numout,*) '   ==>>   generic closure chosen' 
     990         IF(lwp) WRITE(numout,*) 
    929991         rpp     = 2._wp 
    930992         rmm     = 1._wp 
     
    9491011      CASE ( 0 )                             ! Galperin stability functions 
    9501012         ! 
    951          IF(lwp) WRITE(numout,*) 'Stability functions from Galperin' 
     1013         IF(lwp) WRITE(numout,*) '   ==>>   Stability functions from Galperin' 
    9521014         rc2     =  0._wp 
    9531015         rc3     =  0._wp 
     
    9611023      CASE ( 1 )                             ! Kantha-Clayson stability functions 
    9621024         ! 
    963          IF(lwp) WRITE(numout,*) 'Stability functions from Kantha-Clayson' 
     1025         IF(lwp) WRITE(numout,*) '   ==>>   Stability functions from Kantha-Clayson' 
    9641026         rc2     =  0.7_wp 
    9651027         rc3     =  0.2_wp 
     
    9731035      CASE ( 2 )                             ! Canuto A stability functions 
    9741036         ! 
    975          IF(lwp) WRITE(numout,*) 'Stability functions from Canuto A' 
     1037         IF(lwp) WRITE(numout,*) '   ==>>   Stability functions from Canuto A' 
    9761038         rs0 = 1.5_wp * rl1 * rl5*rl5 
    9771039         rs1 = -rl4*(rl6+rl7) + 2._wp*rl4*rl5*(rl1-(1._wp/3._wp)*rl2-rl3) + 1.5_wp*rl1*rl5*rl8 
     
    9971059      CASE ( 3 )                             ! Canuto B stability functions 
    9981060         ! 
    999          IF(lwp) WRITE(numout,*) 'Stability functions from Canuto B' 
     1061         IF(lwp) WRITE(numout,*) '   ==>>   Stability functions from Canuto B' 
    10001062         rs0 = 1.5_wp * rm1 * rm5*rm5 
    10011063         rs1 = -rm4 * (rm6+rm7) + 2._wp * rm4*rm5*(rm1-(1._wp/3._wp)*rm2-rm3) + 1.5_wp * rm1*rm5*rm8 
     
    10521114      IF(lwp) THEN                     !* Control print 
    10531115         WRITE(numout,*) 
    1054          WRITE(numout,*) 'Limit values' 
    1055          WRITE(numout,*) '~~~~~~~~~~~~' 
    1056          WRITE(numout,*) 'Parameter  m = ',rmm 
    1057          WRITE(numout,*) 'Parameter  n = ',rnn 
    1058          WRITE(numout,*) 'Parameter  p = ',rpp 
    1059          WRITE(numout,*) 'rpsi1   = ',rpsi1 
    1060          WRITE(numout,*) 'rpsi2   = ',rpsi2 
    1061          WRITE(numout,*) 'rpsi3m  = ',rpsi3m 
    1062          WRITE(numout,*) 'rpsi3p  = ',rpsi3p 
    1063          WRITE(numout,*) 'rsc_tke = ',rsc_tke 
    1064          WRITE(numout,*) 'rsc_psi = ',rsc_psi 
    1065          WRITE(numout,*) 'rsc_psi0 = ',rsc_psi0 
    1066          WRITE(numout,*) 'rc0     = ',rc0 
     1116         WRITE(numout,*) '   Limit values :' 
     1117         WRITE(numout,*) '      Parameter  m = ', rmm 
     1118         WRITE(numout,*) '      Parameter  n = ', rnn 
     1119         WRITE(numout,*) '      Parameter  p = ', rpp 
     1120         WRITE(numout,*) '      rpsi1    = ', rpsi1 
     1121         WRITE(numout,*) '      rpsi2    = ', rpsi2 
     1122         WRITE(numout,*) '      rpsi3m   = ', rpsi3m 
     1123         WRITE(numout,*) '      rpsi3p   = ', rpsi3p 
     1124         WRITE(numout,*) '      rsc_tke  = ', rsc_tke 
     1125         WRITE(numout,*) '      rsc_psi  = ', rsc_psi 
     1126         WRITE(numout,*) '      rsc_psi0 = ', rsc_psi0 
     1127         WRITE(numout,*) '      rc0      = ', rc0 
    10671128         WRITE(numout,*) 
    1068          WRITE(numout,*) 'Shear free turbulence parameters:' 
    1069          WRITE(numout,*) 'rcm_sf  = ',rcm_sf 
    1070          WRITE(numout,*) 'ra_sf   = ',ra_sf 
    1071          WRITE(numout,*) 'rl_sf   = ',rl_sf 
    1072          WRITE(numout,*) 
     1129         WRITE(numout,*) '   Shear free turbulence parameters:' 
     1130         WRITE(numout,*) '      rcm_sf   = ', rcm_sf 
     1131         WRITE(numout,*) '      ra_sf    = ', ra_sf 
     1132         WRITE(numout,*) '      rl_sf    = ', rl_sf 
    10731133      ENDIF 
    10741134 
     
    10901150      ! 
    10911151      !                                !* Wall proximity function 
    1092       zwall (:,:,:) = 1._wp * tmask(:,:,:) 
     1152!!gm tmask or wmask ???? 
     1153      zwall(:,:,:) = 1._wp * tmask(:,:,:) 
    10931154 
    10941155      !                                !* read or initialize all required files   
     
    11331194               CALL iom_get( numror, jpdom_autoglo, 'hmxl_n', hmxl_n ) 
    11341195            ELSE                         
    1135                IF(lwp) WRITE(numout,*) ' ===>>>> : previous run without gls scheme, en and hmxl_n computed by iterative loop' 
     1196               IF(lwp) WRITE(numout,*) 
     1197               IF(lwp) WRITE(numout,*) '   ==>>   previous run without GLS scheme, set en and hmxl_n to background values' 
    11361198               en    (:,:,:) = rn_emin 
    11371199               hmxl_n(:,:,:) = 0.05_wp 
    1138                avt_k (:,:,:) = avt(:,:,:) 
    1139                avm_k (:,:,:) = avm(:,:,:) 
    1140                DO jit = nit000 + 1, nit000 + 10   ;   CALL zdf_gls( jit )   ;   END DO 
     1200               ! avt_k, avm_k already set to the background value in zdf_phy_init 
    11411201            ENDIF 
    11421202         ELSE                                   !* Start from rest 
    1143             IF(lwp) WRITE(numout,*) ' ===>>>> : Initialisation of en and hmxl_n by background values' 
     1203            IF(lwp) WRITE(numout,*) 
     1204            IF(lwp) WRITE(numout,*) '   ==>>   start from rest, set en and hmxl_n by background values' 
    11441205            en    (:,:,:) = rn_emin 
    11451206            hmxl_n(:,:,:) = 0.05_wp 
    1146             DO jk = 1, jpk 
    1147                avt_k(:,:,jk) = avtb(jk) * wmask(:,:,jk) 
    1148                avm_k(:,:,jk) = avmb(jk) * wmask(:,:,jk) 
    1149             END DO 
     1207            ! avt_k, avm_k already set to the background value in zdf_phy_init 
    11501208         ENDIF 
    11511209         ! 
Note: See TracChangeset for help on using the changeset viewer.