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

Ignore:
Timestamp:
2017-04-29T17:24:54+02:00 (7 years ago)
Author:
gm
Message:

#1880 (HPC-09): OPA remove avmu, avmv from zdf modules + move CALL tke(gls)_rst & gls_rst in zdftke(gls) + rename zdftmx and zdfqiao

File:
1 edited

Legend:

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

    r7953 r7990  
    22   !!====================================================================== 
    33   !!                      ***  MODULE  zdfphy  *** 
    4    !! Ocean physics :   manager of vertical mixing parametrizations 
     4   !! Vertical ocean physics :   manager of all vertical physics packages 
    55   !!====================================================================== 
    66   !! History :  4.0  !  2017-04  (G. Madec)  original code 
     
    88 
    99   !!---------------------------------------------------------------------- 
    10    !!   zdf_phy_init  : initialization of all vertical physics pakages 
     10   !!   zdf_phy_init  : initialization of all vertical physics packages 
    1111   !!   zdf_phy       : upadate at each time-step the vertical mixing coeff.  
    1212   !!---------------------------------------------------------------------- 
    13    USE par_oce        ! mesh and scale factors 
    14    USE zdf_oce        ! TKE vertical mixing           
     13   USE par_oce        ! ocean parameters 
     14   USE zdf_oce        ! vertical physics: shared variables          
     15   USE zdfbfr         ! vertical physics: bottom friction 
     16   USE zdfric         ! vertical physics: Richardson vertical mixing    
     17   USE zdftke         ! vertical physics: TKE vertical mixing 
     18   USE zdfgls         ! vertical physics: GLS vertical mixing 
     19   USE zdfddm         ! vertical physics: double diffusion mixing       
     20   USE zdfevd         ! vertical physics: convection via enhanced vertical diffusion   
     21   USE zdfiwm         ! vertical physics: internal wave-induced mixing   
     22   USE zdfswm         ! vertical physics: surface  wave-induced mixing 
     23   USE zdfmxl         ! vertical physics: mixed layer 
     24   USE tranpc         ! convection: non penetrative adjustment 
     25   USE trc_oce        ! variables shared between passive tracer & ocean            
    1526   USE sbc_oce        ! surface module (only for nn_isf in the option compatibility test) 
    16    USE zdfbfr         ! bottom friction 
    17    USE zdftke         ! TKE vertical mixing 
    18    USE zdfgls         ! GLS vertical mixing 
    19    USE zdfric         ! Richardson vertical mixing    
    20    USE zdfddm         ! double diffusion mixing       
    21    USE zdfevd         ! enhanced vertical diffusion 
    22    USE zdftmx         ! internal tide-induced mixing 
    23    USE zdfqiao          !Qiao module wave induced mixing   (zdf_qiao routine) 
    24    USE zdfmxl           ! Mixed-layer depth                (zdf_mxl routine) 
    25    USE tranpc         ! convection: non penetrative adjustment 
    2627   USE sbcrnf         ! surface boundary condition: runoff variables 
    2728   ! 
    2829   USE in_out_manager ! I/O manager 
    2930   USE iom            ! IOM library 
     31   USE lbclnk         ! lateral boundary conditions 
    3032   USE lib_mpp        ! distribued memory computing 
    3133 
     
    3335   PRIVATE 
    3436 
    35    PUBLIC   zdf_phy_init   ! routine called by nemogcm.F90 
    36    PUBLIC   zdf_phy        ! routine called by step.F90 
    37     
    38     
    39    !!---------------------------------------------------------------------- 
    40    !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
     37   PUBLIC   zdf_phy_init  ! called by nemogcm.F90 
     38   PUBLIC   zdf_phy       ! called by step.F90 
     39 
     40   INTEGER ::   nzdf_phy   ! type of vertical closure used  
     41   !                       ! associated indicators 
     42   INTEGER, PARAMETER ::   np_CST = 1   ! Constant Kz 
     43   INTEGER, PARAMETER ::   np_RIC = 2   ! Richardson number dependent Kz 
     44   INTEGER, PARAMETER ::   np_TKE = 3   ! Turbulente Kinetic Eenergy closure scheme for Kz 
     45   INTEGER, PARAMETER ::   np_GLS = 4   ! Generic Length Scale closure scheme for Kz 
     46       
     47   !!---------------------------------------------------------------------- 
     48   !! NEMO/OPA 4.0 , NEMO Consortium (2017) 
    4149   !! $Id$ 
    4250   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    5159      !! 
    5260      !! ** Method  :   Read namelist namzdf, control logicals  
     61      !!                set horizontal shape and vertical profile of background mixing coef. 
    5362      !!---------------------------------------------------------------------- 
    5463      INTEGER ::   ioptio, ios   ! local integers 
     
    5867         &             ln_zdfnpc, nn_npc , nn_npcp,                  &     ! convection : npc 
    5968         &             ln_zdfddm, rn_avts, rn_hsbfr,                 &     ! double diffusion 
    60          &             ln_zdftmx,                                    &     ! tidal mixing 
    61          &             ln_zdfqiao,                                   &     ! surface wave-induced mixing 
     69         &             ln_zdfswm,                                    &     ! surface  wave-induced mixing 
     70         &             ln_zdfiwm,                                    &     ! internal  -      -      - 
    6271         &             ln_zdfexp, nn_zdfexp,                         &     ! time-stepping 
    6372         &             rn_avm0, rn_avt0, nn_avb, nn_havtb                  ! coefficients 
    64  
    65  
    66 !!org      NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp,  & 
    67 !!org         &        ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp,       & 
    68 !!org         &        ln_zdfqiao 
    69       !!---------------------------------------------------------------------- 
    70  
     73      !!---------------------------------------------------------------------- 
     74      ! 
     75      !                           !==  Namelist  ==! 
    7176      REWIND( numnam_ref )              ! Namelist namzdf in reference namelist : Vertical mixing parameters 
    7277      READ  ( numnam_ref, namzdf, IOSTAT = ios, ERR = 901) 
    73 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf in reference namelist', lwp ) 
    74  
     78901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namzdf in reference namelist', lwp ) 
     79      ! 
    7580      REWIND( numnam_cfg )              ! Namelist namzdf in reference namelist : Vertical mixing parameters 
    7681      READ  ( numnam_cfg, namzdf, IOSTAT = ios, ERR = 902 ) 
    77 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf in configuration namelist', lwp ) 
    78       IF(lwm) WRITE ( numond, namzdf ) 
    79  
    80       IF(lwp) THEN               !* Parameter print 
     82902   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namzdf in configuration namelist', lwp ) 
     83      IF(lwm)   WRITE ( numond, namzdf ) 
     84      ! 
     85      IF(lwp) THEN                      ! Parameter print 
    8186         WRITE(numout,*) 
    82          WRITE(numout,*) 'zdf_phy_init : vertical physics' 
    83          WRITE(numout,*) '~~~~~~~~' 
     87         WRITE(numout,*) 'zdf_phy_init: vertical physics' 
     88         WRITE(numout,*) '~~~~~~~~~~~~' 
    8489         WRITE(numout,*) '   Namelist namzdf : set vertical mixing mixing parameters' 
    8590         WRITE(numout,*) '      vertical closure scheme' 
     
    98103         WRITE(numout,*) '         maximum avs for dd mixing                 rn_avts = ', rn_avts 
    99104         WRITE(numout,*) '         heat/salt buoyancy flux ratio             rn_hsbfr= ', rn_hsbfr 
    100          WRITE(numout,*) '      surface wave-induced mixing                ln_zdfqiao= ', ln_zdfqiao                                          ! surface wave induced mixing 
    101          WRITE(numout,*) '      tidal mixing                               ln_zdftmx = ', ln_zdftmx 
    102          WRITE(numout,*) '      time splitting / backward scheme           ln_zdfexp = ', ln_zdfexp 
     105         WRITE(numout,*) '      gravity wave-induced mixing' 
     106         WRITE(numout,*) '         surface  wave (Qiao et al 2010)         ln_zdfswm = ', ln_zdfswm                                          ! surface wave induced mixing 
     107         WRITE(numout,*) '         internal wave (de Lavergne et al 2017)  ln_zdfiwm = ', ln_zdfiwm 
     108         WRITE(numout,*) '      time-steping scheme' 
     109         WRITE(numout,*) '         time splitting (T) / implicit (F)       ln_zdfexp = ', ln_zdfexp 
    103110         WRITE(numout,*) '         number of sub-time step (ln_zdfexp=T)   nn_zdfexp = ', nn_zdfexp 
    104111         WRITE(numout,*) '      coefficients : ' 
    105          WRITE(numout,*) '      vertical eddy viscosity             rn_avm0   = ', rn_avm0 
    106          WRITE(numout,*) '      vertical eddy diffusivity           rn_avt0   = ', rn_avt0 
    107          WRITE(numout,*) '      constant background or profile      nn_avb    = ', nn_avb 
    108          WRITE(numout,*) '      horizontal variation for avtb       nn_havtb  = ', nn_havtb 
    109       ENDIF 
    110  
    111 !!gm      IF(ln_zdfddm) THEN                    ! double diffusive mixing' 
    112 !         avs(:,:,:) = rn_avt0 * wmask(:,:,:)  
    113 !!gm      ENDIF 
    114  
    115       !                          !* Parameter & logical controls 
    116       !                          !  ---------------------------- 
    117       ! 
    118       !                               ! ... check of vertical mixing scheme on tracers 
    119       !                                              ==> will be done in trazdf module 
    120       ! 
    121       !                               ! ... check of mixing coefficient 
    122       IF(lwp) WRITE(numout,*) 
    123       IF(lwp) WRITE(numout,*) '   vertical mixing option :' 
    124       ioptio = 0 
    125       IF( ln_zdfcst ) THEN 
    126          IF(lwp) WRITE(numout,*) '      constant eddy diffusion coefficients' 
    127          ioptio = ioptio+1 
    128       ENDIF 
    129       IF( ln_zdfric ) THEN 
    130          IF(lwp) WRITE(numout,*) '      Richardson dependent eddy coefficients' 
    131          ioptio = ioptio+1 
    132       ENDIF 
    133       IF( ln_zdftke ) THEN 
    134          IF(lwp) WRITE(numout,*) '      TKE dependent eddy coefficients' 
    135          ioptio = ioptio+1 
    136       ENDIF 
    137       IF( ln_zdfgls ) THEN 
    138          IF(lwp) WRITE(numout,*) '      GLS dependent eddy coefficients' 
    139          ioptio = ioptio+1 
    140       ENDIF 
    141       IF( ioptio == 0 .OR. ioptio > 1 )   & 
    142          &   CALL ctl_stop( ' one and only one vertical diffusion option has to be defined ' ) 
    143       IF( ( ln_zdfric .OR. ln_zdfgls ) .AND. ln_isfcav )   & 
    144          &   CALL ctl_stop( ' only zdfcst and zdftke were tested with ice shelves cavities ' ) 
    145       ! 
    146       !                               ! ... Convection 
    147       IF(lwp) WRITE(numout,*) 
    148       IF(lwp) WRITE(numout,*) '   convection :' 
    149       ! 
    150 #if defined key_top 
    151       IF( ln_zdfnpc )   CALL ctl_stop( ' zdf_phy_init: npc scheme is not working with key_top' ) 
    152 #endif 
    153       ! 
    154       ioptio = 0 
    155       IF( ln_zdfnpc ) THEN 
    156          IF(lwp) WRITE(numout,*) '      use non penetrative convective scheme' 
    157          ioptio = ioptio+1 
    158       ENDIF 
    159       IF( ln_zdfevd ) THEN 
    160          IF(lwp) WRITE(numout,*) '      use enhanced vertical dif. scheme' 
    161          ioptio = ioptio+1 
    162       ENDIF 
    163       IF( ln_zdftke ) THEN 
    164          IF(lwp) WRITE(numout,*) '      use the 1.5 turbulent closure' 
    165       ENDIF 
    166       IF( ln_zdfgls ) THEN 
    167          IF(lwp) WRITE(numout,*) '      use the GLS closure scheme' 
    168       ENDIF 
    169       IF ( ioptio > 1 )   CALL ctl_stop( ' chose between ln_zdfnpc and ln_zdfevd' ) 
    170       IF( ioptio == 0 .AND. .NOT.( ln_zdftke .OR. ln_zdfgls ) )           & 
    171          CALL ctl_stop( ' except for TKE or GLS physics, a convection scheme is',   & 
    172          &              ' required: ln_zdfevd or ln_zdfnpc logicals' ) 
    173  
    174       !                               !* Background eddy viscosity and diffusivity profil 
    175       IF( nn_avb == 0 ) THEN                ! Define avmb, avtb from namelist parameter 
     112         WRITE(numout,*) '         vertical eddy viscosity                 rn_avm0   = ', rn_avm0 
     113         WRITE(numout,*) '         vertical eddy diffusivity               rn_avt0   = ', rn_avt0 
     114         WRITE(numout,*) '         constant background or profile          nn_avb    = ', nn_avb 
     115         WRITE(numout,*) '         horizontal variation for avtb           nn_havtb  = ', nn_havtb 
     116      ENDIF 
     117 
     118      !                          !==  Background eddy viscosity and diffusivity  ==! 
     119      IF( nn_avb == 0 ) THEN             ! Define avmb, avtb from namelist parameter 
    176120         avmb(:) = rn_avm0 
    177121         avtb(:) = rn_avt0                      
    178       ELSE                                  ! Background profile of avt (fit a theoretical/observational profile (Krauss 1990) 
     122      ELSE                               ! Background profile of avt (fit a theoretical/observational profile (Krauss 1990) 
    179123         avmb(:) = rn_avm0 
    180124         avtb(:) = rn_avt0 + ( 3.e-4_wp - 2._wp * rn_avt0 ) * 1.e-4_wp * gdepw_1d(:)   ! m2/s 
    181125         IF(ln_sco .AND. lwp)   CALL ctl_warn( 'avtb profile not valid in sco' ) 
    182126      ENDIF 
    183       ! 
    184       IF( ln_rstart ) THEN                  !  Read avmb, avtb in restart (if exist) 
    185          ! if ln_traadv_cen, avmb, avtb have been modified in traadv_cen2 module.  
    186          ! To ensure the restartability, avmb & avtb are written in the restart  
    187          ! file in traadv_cen2 end read here.  
    188          IF( iom_varid( numror, 'avmb', ldstop = .FALSE. ) > 0 ) THEN 
    189             CALL iom_get( numror, jpdom_unknown, 'avmb', avmb ) 
    190             CALL iom_get( numror, jpdom_unknown, 'avtb', avtb ) 
    191          ENDIF 
    192       ENDIF 
    193       !                                     ! 2D shape of the avtb 
    194       avtb_2d(:,:) = 1.e0                        ! uniform  
    195       ! 
    196       IF( nn_havtb == 1 ) THEN                   ! decrease avtb in the equatorial band 
    197            !  -15S -5S : linear decrease from avt0 to avt0/10. 
    198            !  -5S  +5N : cst value avt0/10. 
    199            !   5N  15N : linear increase from avt0/10, to avt0 
     127      !                                  ! 2D shape of the avtb 
     128      avtb_2d(:,:) = 1._wp                   ! uniform  
     129      ! 
     130      IF( nn_havtb == 1 ) THEN               ! decrease avtb by a factor of ten in the equatorial band 
     131           !                                 !   -15S -5S : linear decrease from avt0 to avt0/10. 
     132           !                                 !   -5S  +5N : cst value avt0/10. 
     133           !                                 !    5N  15N : linear increase from avt0/10, to avt0 
    200134           WHERE(-15. <= gphit .AND. gphit < -5 )   avtb_2d = (1.  - 0.09 * (gphit + 15.)) 
    201135           WHERE( -5. <= gphit .AND. gphit <  5 )   avtb_2d =  0.1 
     
    203137      ENDIF 
    204138      ! 
    205  
    206 !!gm moved into zdf_phy_init 
    207 ! 
    208                             CALL zdf_bfr_init      ! bottom friction 
    209  
    210       ioptio = 0                 !==  type of vertical turbulent closure  ==!    (set nzdfphy) 
    211       ! 
    212 !      IF( ln_zdfcst ) THEN   ;   ioptio = ioptio + 1   ;    nzdf_phy = np_CST   ;   ENDIF 
    213 !      IF( ln_zdfric ) THEN   ;   ioptio = ioptio + 1   ;    nzdf_phy = np_RIC   ;   CALL zdf_ric_init   ;   ENDIF 
    214 !      IF( ln_zdftke ) THEN   ;   ioptio = ioptio + 1   ;    nzdf_phy = np_TKE   ;   CALL zdf_tke_init   ;   ENDIF 
    215 !      IF( ln_zdfgls ) THEN   ;   ioptio = ioptio + 1   ;    nzdf_phy = np_GLS   ;   CALL zdf_gls_init   ;   ENDIF 
    216  
    217  
    218       ! 
    219       IF( ln_zdfric     )   CALL zdf_ric_init      ! Richardson number dependent Kz 
    220       IF( ln_zdftke     )   CALL zdf_tke_init      ! TKE closure scheme 
    221       IF( ln_zdfgls     )   CALL zdf_gls_init      ! GLS closure scheme 
    222       IF( ln_zdftmx     )   CALL zdf_tmx_init      ! tidal vertical mixing 
    223 !!gm 
     139      !                                   ! set 1st/last level Av to zero one for all 
     140      avt(:,:,1) = 0._wp   ;   avs(:,:,1) = 0._wp   ;   avm(:,:,1) = 0._wp 
     141 
     142      !                          !==  Convection  ==! 
     143      ! 
     144      IF( ln_zdfnpc .AND. ln_zdfevd )   CALL ctl_stop( 'zdf_phy_init: chose between ln_zdfnpc and ln_zdfevd' ) 
     145      IF( lk_top    .AND. ln_zdfnpc )   CALL ctl_stop( 'zdf_phy_init: npc scheme is not working with key_top' ) 
     146      IF(lwp) THEN 
     147         WRITE(numout,*) 
     148         IF    ( ln_zdfnpc ) THEN  ;   WRITE(numout,*) '      convection: use non penetrative convective scheme' 
     149         ELSEIF( ln_zdfevd ) THEN  ;   WRITE(numout,*) '      convection: use enhanced vertical diffusion scheme' 
     150         ELSE                      ;   WRITE(numout,*) '      convection: no specific scheme used' 
     151         ENDIF 
     152      ENDIF 
     153 
     154      IF(lwp) THEN               !==  Double Diffusion Mixing parameterization  ==!   (ddm) 
     155         WRITE(numout,*) 
     156         IF( ln_zdfddm ) THEN   ;   WRITE(numout,*) '      use double diffusive mixing: avs /= avt' 
     157         ELSE                   ;   WRITE(numout,*) '      No  double diffusive mixing: avs = avt' 
     158         ENDIF 
     159      ENDIF 
     160 
     161      !                          !==  type of vertical turbulent closure  ==!    (set nzdf_phy) 
     162      ioptio = 0  
     163      IF( ln_zdfcst ) THEN   ;   ioptio = ioptio + 1   ;    nzdf_phy = np_CST   ;   ENDIF 
     164      IF( ln_zdfric ) THEN   ;   ioptio = ioptio + 1   ;    nzdf_phy = np_RIC   ;   CALL zdf_ric_init   ;   ENDIF 
     165      IF( ln_zdftke ) THEN   ;   ioptio = ioptio + 1   ;    nzdf_phy = np_TKE   ;   CALL zdf_tke_init   ;   ENDIF 
     166      IF( ln_zdfgls ) THEN   ;   ioptio = ioptio + 1   ;    nzdf_phy = np_GLS   ;   CALL zdf_gls_init   ;   ENDIF 
     167      ! 
     168      IF( ioptio /= 1 )    CALL ctl_stop( 'zdf_phy_init: one and only one vertical diffusion option has to be defined ' ) 
     169      IF( ln_isfcav ) THEN 
     170      IF( ln_zdfric .OR. ln_zdfgls )    CALL ctl_stop( 'zdf_phy_init: zdfric and zdfgls never tested with ice shelves cavities ' ) 
     171      ENDIF 
     172 
     173      !                          !== gravity wave-driven mixing  ==! 
     174      IF( ln_zdfiwm )   CALL zdf_iwm_init       ! internal wave-driven mixing 
     175      IF( ln_zdfswm )   CALL zdf_swm_init       ! surface  wave-driven mixing 
     176 
     177      !                          !== bottom friction  ==! 
     178      CALL zdf_bfr_init 
     179      ! 
     180      !                          !== time-stepping  ==! 
     181      ! Check/update of time stepping done in dynzdf_init/trazdf_init 
     182      !!gm move it here ? 
    224183      ! 
    225184   END SUBROUTINE zdf_phy_init 
    226185 
    227186 
    228    SUBROUTINE zdf_phy( kstp ) 
     187   SUBROUTINE zdf_phy( kt ) 
    229188      !!---------------------------------------------------------------------- 
    230189      !!                     ***  ROUTINE zdf_phy  *** 
     
    238197      !!                bottom stress.....                               <<<<====verifier ! 
    239198      !!---------------------------------------------------------------------- 
    240       INTEGER, INTENT(in) ::   kstp   ! ocean time-step index 
    241       ! 
    242       INTEGER ::   ji, jj, jk    ! dummy loop indice 
    243       !!---------------------------------------------------------------------- 
    244       ! 
    245                          CALL zdf_bfr( kstp )         ! bottom friction (if quadratic) 
    246       !                                               ! Vertical eddy viscosity and diffusivity coefficients 
    247       IF( ln_zdfric  )   CALL zdf_ric ( kstp )             ! Richardson number dependent Kz 
    248       IF( ln_zdftke  )   CALL zdf_tke ( kstp )             ! TKE closure scheme for Kz 
    249       IF( ln_zdfgls  )   CALL zdf_gls ( kstp )             ! GLS closure scheme for Kz 
    250       IF( ln_zdfqiao )   CALL zdf_qiao( kstp )             ! Qiao vertical mixing  
    251       ! 
    252       IF( ln_zdfcst  ) THEN                                ! Constant Kz (reset avt, avm[uv] to the background value) 
    253          avt (:,:,:) = rn_avt0 * wmask (:,:,:) 
    254          avm (:,:,:) = rn_avm0 * wmask (:,:,:) 
    255          avmu(:,:,:) = rn_avm0 * wumask(:,:,:) 
    256          avmv(:,:,:) = rn_avm0 * wvmask(:,:,:) 
    257       ENDIF 
    258       ! 
    259       IF( ln_rnf_mouth ) THEN                         ! increase diffusivity at rivers mouths 
    260          DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2._wp * rn_avt_rnf * rnfmsk(:,:) * tmask(:,:,jk)   ;   END DO 
    261       ENDIF 
    262       ! 
    263       IF( ln_zdfevd  )   CALL zdf_evd( kstp )         ! enhanced vertical eddy diffusivity 
    264       ! 
    265       IF( ln_zdfddm  ) THEN                           ! double diffusive mixing 
    266                          CALL zdf_ddm( kstp ) 
    267       ELSE                                            ! avs=avt 
    268          DO jk = 2, jpkm1   ;   avs(:,:,jk) = avt(:,:,jk)   ;   END DO 
    269       ENDIF 
    270       ! 
    271       IF( ln_zdftmx  )   CALL zdf_tmx( kstp )         ! tidal vertical mixing 
    272  
    273                          CALL zdf_mxl( kstp )         ! mixed layer depth 
    274  
     199      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     200      ! 
     201      INTEGER ::   ji, jj, jk   ! dummy loop indice 
     202      !! --------------------------------------------------------------------- 
     203      ! 
     204      CALL zdf_bfr( kt )                        !* bottom friction (if quadratic) 
     205      !                        
     206      SELECT CASE ( nzdf_phy )                  !* Vertical eddy viscosity and diffusivity coefficients at w-points 
     207      CASE( np_RIC )   ;   CALL zdf_ric( kt )         ! Richardson number dependent Kz 
     208      CASE( np_TKE )   ;   CALL zdf_tke( kt )         ! TKE closure scheme for Kz 
     209      CASE( np_GLS )   ;   CALL zdf_gls( kt )         ! GLS closure scheme for Kz 
     210      CASE( np_CST )                                  ! Constant Kz (reset avt, avm to the background value) 
     211         avt(2:jpim1,2:jpjm1,1:jpkm1) = rn_avt0 * wmask(2:jpim1,2:jpjm1,1:jpkm1) 
     212         avm(2:jpim1,2:jpjm1,1:jpkm1) = rn_avm0 * wmask(2:jpim1,2:jpjm1,1:jpkm1) 
     213      END SELECT 
     214      ! 
     215      IF( ln_rnf_mouth ) THEN                   !* increase diffusivity at rivers mouths 
     216         DO jk = 2, nkrnf 
     217            avt(:,:,jk) = avt(:,:,jk) + 2._wp * rn_avt_rnf * rnfmsk(:,:) * wmask(:,:,jk) 
     218         END DO 
     219      ENDIF 
     220      ! 
     221      IF( ln_zdfevd )   CALL zdf_evd( kt )      !* convection: enhanced vertical eddy diffusivity 
     222      ! 
     223      !                                         !* double diffusive mixing 
     224      IF( ln_zdfddm ) THEN                            ! update avt and compute avs 
     225                        CALL zdf_ddm( kt ) 
     226      ELSE                                            ! same mixing on all tracers 
     227         avs(2:jpim1,2:jpjm1,1:jpkm1) = avt(2:jpim1,2:jpjm1,1:jpkm1) 
     228      ENDIF 
     229      ! 
     230      !                                         !* wave-induced mixing  
     231      IF( ln_zdfswm )   CALL zdf_swm( kt )            ! surface  wave (Qiao et al. 2004)  
     232      IF( ln_zdfiwm )   CALL zdf_iwm( kt )            ! internal wave (de Lavergne et al 2017) 
     233 
     234 
     235      !                                         !* Lateral boundary conditions (sign unchanged) 
     236      CALL lbc_lnk( avm, 'W', 1. ) 
     237      CALL lbc_lnk( avt, 'W', 1. ) 
     238      CALL lbc_lnk( avs, 'W', 1. ) 
     239      ! 
     240!!gm  ===>>>   TO BE REMOVED  
     241      DO jk = 1, jpkm1            !* vertical eddy viscosity at wu- and wv-points 
     242         DO jj = 2, jpjm1 
     243            DO ji = 2, jpim1 
     244               avmu(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk) + avm(ji+1,jj  ,jk) ) * wumask(ji,jj,jk) 
     245               avmv(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk) + avm(ji  ,jj+1,jk) ) * wvmask(ji,jj,jk) 
     246            END DO 
     247         END DO 
     248      END DO 
     249      CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. )      ! Lateral boundary conditions 
     250!!gm end 
     251 
     252 
     253      CALL zdf_mxl( kt )                        !* mixed layer depth, and level 
     254 
     255!!gm  !==>> to be moved in zdftke & zdfgls     
    275256                                                      ! write TKE or GLS information in the restart file 
    276       IF( lrst_oce .AND. ln_zdftke )   CALL tke_rst( kstp, 'WRITE' ) 
    277       IF( lrst_oce .AND. ln_zdfgls )   CALL gls_rst( kstp, 'WRITE' ) 
    278       ! 
     257      IF( lrst_oce .AND. ln_zdftke )   CALL tke_rst( kt, 'WRITE' ) 
     258      IF( lrst_oce .AND. ln_zdfgls )   CALL gls_rst( kt, 'WRITE' ) 
     259      !       
    279260   END SUBROUTINE zdf_phy 
    280261 
Note: See TracChangeset for help on using the changeset viewer.