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 9490 for branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN – NEMO

Ignore:
Timestamp:
2018-04-23T10:44:07+02:00 (6 years ago)
Author:
gm
Message:

#2075 - dev_merge_2017: scale-aware setting of lateral viscous and diffusive coefficient

Location:
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv.F90

    r9190 r9490  
    9898      !!---------------------------------------------------------------------- 
    9999      ! 
     100      IF(lwp) THEN 
     101         WRITE(numout,*) 
     102         WRITE(numout,*) 'dyn_adv_init : choice/control of the momentum advection scheme' 
     103         WRITE(numout,*) '~~~~~~~~~~~~' 
     104      ENDIF 
     105      ! 
    100106      REWIND( numnam_ref )              ! Namelist namdyn_adv in reference namelist : Momentum advection scheme 
    101107      READ  ( numnam_ref, namdyn_adv, IOSTAT = ios, ERR = 901) 
     
    107113 
    108114      IF(lwp) THEN                    ! Namelist print 
    109          WRITE(numout,*) 
    110          WRITE(numout,*) 'dyn_adv_init : choice/control of the momentum advection scheme' 
    111          WRITE(numout,*) '~~~~~~~~~~~~' 
    112115         WRITE(numout,*) '   Namelist namdyn_adv : chose a advection formulation & scheme for momentum' 
    113116         WRITE(numout,*) '      linear dynamics : no momentum advection          ln_dynadv_NONE = ', ln_dynadv_NONE 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90

    r9168 r9490  
    5353   PUBLIC   dyn_hpg_init   ! routine called by opa module 
    5454 
    55    !                                 !!* Namelist namdyn_hpg : hydrostatic pressure gradient 
    56    LOGICAL , PUBLIC ::   ln_hpg_zco   !: z-coordinate - full steps 
    57    LOGICAL , PUBLIC ::   ln_hpg_zps   !: z-coordinate - partial steps (interpolation) 
    58    LOGICAL , PUBLIC ::   ln_hpg_sco   !: s-coordinate (standard jacobian formulation) 
    59    LOGICAL , PUBLIC ::   ln_hpg_djc   !: s-coordinate (Density Jacobian with Cubic polynomial) 
    60    LOGICAL , PUBLIC ::   ln_hpg_prj   !: s-coordinate (Pressure Jacobian scheme) 
    61    LOGICAL , PUBLIC ::   ln_hpg_isf   !: s-coordinate similar to sco modify for isf 
    62  
    63    INTEGER , PUBLIC ::   nhpg  =  0   ! = 0 to 7, type of pressure gradient scheme used ! (deduced from ln_hpg_... flags) (PUBLIC for TAM) 
     55   !                                !!* Namelist namdyn_hpg : hydrostatic pressure gradient 
     56   LOGICAL, PUBLIC ::   ln_hpg_zco   !: z-coordinate - full steps 
     57   LOGICAL, PUBLIC ::   ln_hpg_zps   !: z-coordinate - partial steps (interpolation) 
     58   LOGICAL, PUBLIC ::   ln_hpg_sco   !: s-coordinate (standard jacobian formulation) 
     59   LOGICAL, PUBLIC ::   ln_hpg_djc   !: s-coordinate (Density Jacobian with Cubic polynomial) 
     60   LOGICAL, PUBLIC ::   ln_hpg_prj   !: s-coordinate (Pressure Jacobian scheme) 
     61   LOGICAL, PUBLIC ::   ln_hpg_isf   !: s-coordinate similar to sco modify for isf 
     62 
     63   !                                !! Flag to control the type of hydrostatic pressure gradient 
     64   INTEGER, PARAMETER ::   np_ERROR  =-10   ! error in specification of lateral diffusion 
     65   INTEGER, PARAMETER ::   np_zco    =  0   ! z-coordinate - full steps 
     66   INTEGER, PARAMETER ::   np_zps    =  1   ! z-coordinate - partial steps (interpolation) 
     67   INTEGER, PARAMETER ::   np_sco    =  2   ! s-coordinate (standard jacobian formulation) 
     68   INTEGER, PARAMETER ::   np_djc    =  3   ! s-coordinate (Density Jacobian with Cubic polynomial) 
     69   INTEGER, PARAMETER ::   np_prj    =  4   ! s-coordinate (Pressure Jacobian scheme) 
     70   INTEGER, PARAMETER ::   np_isf    =  5   ! s-coordinate similar to sco modify for isf 
     71   ! 
     72   INTEGER, PUBLIC ::   nhpg         !: type of pressure gradient scheme used ! (deduced from ln_hpg_... flags) (PUBLIC for TAM) 
    6473 
    6574   !! * Substitutions 
     
    95104      ! 
    96105      SELECT CASE ( nhpg )      ! Hydrostatic pressure gradient computation 
    97       CASE (  0 )   ;   CALL hpg_zco    ( kt )      ! z-coordinate 
    98       CASE (  1 )   ;   CALL hpg_zps    ( kt )      ! z-coordinate plus partial steps (interpolation) 
    99       CASE (  2 )   ;   CALL hpg_sco    ( kt )      ! s-coordinate (standard jacobian formulation) 
    100       CASE (  3 )   ;   CALL hpg_djc    ( kt )      ! s-coordinate (Density Jacobian with Cubic polynomial) 
    101       CASE (  4 )   ;   CALL hpg_prj    ( kt )      ! s-coordinate (Pressure Jacobian scheme) 
    102       CASE (  5 )   ;   CALL hpg_isf    ( kt )      ! s-coordinate similar to sco modify for ice shelf 
     106      CASE ( np_zco )   ;   CALL hpg_zco    ( kt )      ! z-coordinate 
     107      CASE ( np_zps )   ;   CALL hpg_zps    ( kt )      ! z-coordinate plus partial steps (interpolation) 
     108      CASE ( np_sco )   ;   CALL hpg_sco    ( kt )      ! s-coordinate (standard jacobian formulation) 
     109      CASE ( np_djc )   ;   CALL hpg_djc    ( kt )      ! s-coordinate (Density Jacobian with Cubic polynomial) 
     110      CASE ( np_prj )   ;   CALL hpg_prj    ( kt )      ! s-coordinate (Pressure Jacobian scheme) 
     111      CASE ( np_isf )   ;   CALL hpg_isf    ( kt )      ! s-coordinate similar to sco modify for ice shelf 
    103112      END SELECT 
    104113      ! 
     
    179188      ENDIF 
    180189      ! 
    181       !                               ! Set nhpg from ln_hpg_... flags 
    182       IF( ln_hpg_zco )   nhpg = 0 
    183       IF( ln_hpg_zps )   nhpg = 1 
    184       IF( ln_hpg_sco )   nhpg = 2 
    185       IF( ln_hpg_djc )   nhpg = 3 
    186       IF( ln_hpg_prj )   nhpg = 4 
    187       IF( ln_hpg_isf )   nhpg = 5 
    188       ! 
    189       !                               ! Consistency check 
     190      !                               ! Set nhpg from ln_hpg_... flags & consistency check 
     191      nhpg   = np_ERROR 
    190192      ioptio = 0 
    191       IF( ln_hpg_zco )   ioptio = ioptio + 1 
    192       IF( ln_hpg_zps )   ioptio = ioptio + 1 
    193       IF( ln_hpg_sco )   ioptio = ioptio + 1 
    194       IF( ln_hpg_djc )   ioptio = ioptio + 1 
    195       IF( ln_hpg_prj )   ioptio = ioptio + 1 
    196       IF( ln_hpg_isf )   ioptio = ioptio + 1 
     193      IF( ln_hpg_zco ) THEN   ;   nhpg = np_zco   ;   ioptio = ioptio +1   ;   ENDIF 
     194      IF( ln_hpg_zps ) THEN   ;   nhpg = np_zps   ;   ioptio = ioptio +1   ;   ENDIF 
     195      IF( ln_hpg_sco ) THEN   ;   nhpg = np_sco   ;   ioptio = ioptio +1   ;   ENDIF 
     196      IF( ln_hpg_djc ) THEN   ;   nhpg = np_djc   ;   ioptio = ioptio +1   ;   ENDIF 
     197      IF( ln_hpg_prj ) THEN   ;   nhpg = np_prj   ;   ioptio = ioptio +1   ;   ENDIF 
     198      IF( ln_hpg_isf ) THEN   ;   nhpg = np_isf   ;   ioptio = ioptio +1   ;   ENDIF 
     199      ! 
    197200      IF( ioptio /= 1 )   CALL ctl_stop( 'NO or several hydrostatic pressure gradient options used' ) 
    198201      !  
     202      IF(lwp) THEN 
     203         WRITE(numout,*) 
     204         SELECT CASE( nhpg ) 
     205         CASE( np_zco )   ;   WRITE(numout,*) '   ==>>>   z-coord. - full steps ' 
     206         CASE( np_zps )   ;   WRITE(numout,*) '   ==>>>   z-coord. - partial steps (interpolation)' 
     207         CASE( np_sco )   ;   WRITE(numout,*) '   ==>>>   s-coord. (standard jacobian formulation)' 
     208         CASE( np_djc )   ;   WRITE(numout,*) '   ==>>>   s-coord. (Density Jacobian: Cubic polynomial)' 
     209         CASE( np_prj )   ;   WRITE(numout,*) '   ==>>>   s-coord. (Pressure Jacobian: Cubic polynomial)' 
     210         CASE( np_isf )   ;   WRITE(numout,*) '   ==>>>   s-coord. (standard jacobian formulation) for isf' 
     211         END SELECT 
     212         WRITE(numout,*) 
     213      ENDIF 
    199214      !                           
    200215      IF ( .NOT. ln_isfcav ) THEN     !--- no ice shelf load 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf.F90

    r9190 r9490  
    1717   USE phycst         ! physical constants 
    1818   USE ldfdyn         ! lateral diffusion: eddy viscosity coef. 
    19    USE ldfslp         ! lateral diffusion: slopes of mixing orientation 
    2019   USE dynldf_lap_blp ! lateral mixing   (dyn_ldf_lap & dyn_ldf_blp routines) 
    2120   USE dynldf_iso     ! lateral mixing                 (dyn_ldf_iso routine ) 
     
    3433   PUBLIC   dyn_ldf       ! called by step module  
    3534   PUBLIC   dyn_ldf_init  ! called by opa  module  
    36  
    37    !                      ! Parameter to control the type of lateral viscous operator 
    38    INTEGER, PARAMETER, PUBLIC ::   np_ERROR  =-10   !: error in setting the operator 
    39    INTEGER, PARAMETER, PUBLIC ::   np_no_ldf = 00   !: without operator (i.e. no lateral viscous trend) 
    40    !                          !!      laplacian     !    bilaplacian    ! 
    41    INTEGER, PARAMETER, PUBLIC ::   np_lap    = 10   ,   np_blp    = 20  !: iso-level operator 
    42    INTEGER, PARAMETER, PUBLIC ::   np_lap_i  = 11                       !: iso-neutral or geopotential operator 
    43  
    44    INTEGER, PUBLIC ::   nldf   !: type of lateral diffusion used defined from ln_dynldf_... (namlist logicals) 
    4535 
    4636   !! * Substitutions 
     
    7262      ENDIF 
    7363 
    74       SELECT CASE ( nldf )                       ! compute lateral mixing trend and add it to the general trend 
     64      SELECT CASE ( nldf_dyn )                   ! compute lateral mixing trend and add it to the general trend 
    7565      ! 
    76       CASE ( np_lap   )    ;   CALL dyn_ldf_lap  ( kt, ub, vb, ua, va, 1 )      ! iso-level    laplacian 
    77       CASE ( np_lap_i )    ;   CALL dyn_ldf_iso  ( kt )                         ! rotated      laplacian 
    78       CASE ( np_blp   )    ;   CALL dyn_ldf_blp  ( kt, ub, vb, ua, va    )      ! iso-level bi-laplacian 
     66      CASE ( np_lap   )    ;   CALL dyn_ldf_lap( kt, ub, vb, ua, va, 1 )      ! iso-level    laplacian 
     67      CASE ( np_lap_i )    ;   CALL dyn_ldf_iso( kt )                         ! rotated      laplacian 
     68      CASE ( np_blp   )    ;   CALL dyn_ldf_blp( kt, ub, vb, ua, va    )      ! iso-level bi-laplacian 
    7969      ! 
    8070      END SELECT 
     
    10191      !! ** Purpose :   initializations of the horizontal ocean dynamics physics 
    10292      !!---------------------------------------------------------------------- 
    103       INTEGER ::   ioptio, ierr   ! temporary integers  
    104       !!---------------------------------------------------------------------- 
    10593      ! 
    106       !                                !==  Namelist nam_dynldf  ==!   already read in ldfdyn module 
    107       ! 
    108       IF(lwp) THEN                     !== Namelist print  ==! 
     94      IF(lwp) THEN                     !==  Namelist print  ==! 
    10995         WRITE(numout,*) 
    11096         WRITE(numout,*) 'dyn_ldf_init : Choice of the lateral diffusive operator on dynamics' 
    11197         WRITE(numout,*) '~~~~~~~~~~~~' 
    112          WRITE(numout,*) '   Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)' 
    113          WRITE(numout,*) '      Type of operator' 
    114          WRITE(numout,*) '         no explicit diffusion       ln_dynldf_NONE = ', ln_dynldf_NONE 
    115          WRITE(numout,*) '         laplacian operator          ln_dynldf_lap  = ', ln_dynldf_lap 
    116          WRITE(numout,*) '         bilaplacian operator        ln_dynldf_blp  = ', ln_dynldf_blp 
    117          WRITE(numout,*) '      Direction of action' 
    118          WRITE(numout,*) '         iso-level                   ln_dynldf_lev  = ', ln_dynldf_lev 
    119          WRITE(numout,*) '         horizontal (geopotential)   ln_dynldf_hor  = ', ln_dynldf_hor 
    120          WRITE(numout,*) '         iso-neutral                 ln_dynldf_iso  = ', ln_dynldf_iso 
    121       ENDIF 
    122       !                                !==  use of lateral operator or not  ==! 
    123       nldf = np_ERROR 
    124       ioptio = 0 
    125       IF( ln_dynldf_NONE ) THEN   ;   nldf = np_no_ldf   ;   ioptio = ioptio + 1   ;   ENDIF 
    126       IF( ln_dynldf_lap  ) THEN   ;                          ioptio = ioptio + 1   ;   ENDIF 
    127       IF( ln_dynldf_blp  ) THEN   ;                          ioptio = ioptio + 1   ;   ENDIF 
    128       IF( ioptio /= 1    )   CALL ctl_stop( 'dyn_ldf_init: use ONE of the 3 operator options (NONE/lap/blp)' ) 
    129       ! 
    130       IF(.NOT.ln_dynldf_NONE ) THEN    !==  direction ==>> type of operator  ==! 
    131          ioptio = 0 
    132          IF( ln_dynldf_lev )   ioptio = ioptio + 1 
    133          IF( ln_dynldf_hor )   ioptio = ioptio + 1 
    134          IF( ln_dynldf_iso )   ioptio = ioptio + 1 
    135          IF( ioptio /= 1   )   CALL ctl_stop( 'dyn_ldf_init: use ONE of the 3 direction options (level/hor/iso)' ) 
     98         WRITE(numout,*) '   Namelist namdyn_ldf: already read in ldfdyn module' 
     99         WRITE(numout,*) '      see ldf_dyn_init report for lateral mixing parameters' 
     100         WRITE(numout,*) 
    136101         ! 
    137          !                             ! Set nldf, the type of lateral diffusion, from ln_dynldf_... logicals 
    138          ierr = 0 
    139          IF( ln_dynldf_lap ) THEN         ! laplacian operator 
    140             IF( ln_zco ) THEN                ! z-coordinate 
    141                IF ( ln_dynldf_lev )   nldf = np_lap     ! iso-level = horizontal (no rotation) 
    142                IF ( ln_dynldf_hor )   nldf = np_lap     ! iso-level = horizontal (no rotation) 
    143                IF ( ln_dynldf_iso )   nldf = np_lap_i   ! iso-neutral            (   rotation) 
    144             ENDIF 
    145             IF( ln_zps ) THEN                ! z-coordinate with partial step 
    146                IF ( ln_dynldf_lev )   nldf = np_lap     ! iso-level              (no rotation) 
    147                IF ( ln_dynldf_hor )   nldf = np_lap     ! iso-level              (no rotation) 
    148                IF ( ln_dynldf_iso )   nldf = np_lap_i   ! iso-neutral            (   rotation) 
    149             ENDIF 
    150             IF( ln_sco ) THEN                ! s-coordinate 
    151                IF ( ln_dynldf_lev )   nldf = np_lap     ! iso-level = horizontal (no rotation) 
    152                IF ( ln_dynldf_hor )   nldf = np_lap_i   ! horizontal             (   rotation) 
    153                IF ( ln_dynldf_iso )   nldf = np_lap_i   ! iso-neutral            (   rotation) 
    154             ENDIF 
    155          ENDIF 
    156          ! 
    157          IF( ln_dynldf_blp ) THEN         ! bilaplacian operator 
    158             IF( ln_zco ) THEN                ! z-coordinate 
    159                IF( ln_dynldf_lev )   nldf = np_blp     ! iso-level = horizontal (no rotation) 
    160                IF( ln_dynldf_hor )   nldf = np_blp     ! iso-level = horizontal (no rotation) 
    161                IF( ln_dynldf_iso )   ierr = 2          ! iso-neutral            (   rotation) 
    162             ENDIF 
    163             IF( ln_zps ) THEN                ! z-coordinate with partial step 
    164                IF( ln_dynldf_lev )   nldf = np_blp     ! iso-level              (no rotation) 
    165                IF( ln_dynldf_hor )   nldf = np_blp     ! iso-level              (no rotation) 
    166                IF( ln_dynldf_iso )   ierr = 2          ! iso-neutral            (   rotation) 
    167             ENDIF 
    168             IF( ln_sco ) THEN                ! s-coordinate 
    169                IF( ln_dynldf_lev )   nldf = np_blp     ! iso-level              (no rotation) 
    170                IF( ln_dynldf_hor )   ierr = 2          ! horizontal             (   rotation) 
    171                IF( ln_dynldf_iso )   ierr = 2          ! iso-neutral            (   rotation) 
    172             ENDIF 
    173          ENDIF 
    174          ! 
    175          IF( ierr == 2 )   CALL ctl_stop( 'rotated bi-laplacian operator does not exist' ) 
    176          ! 
    177          IF( nldf == np_lap_i )   l_ldfslp = .TRUE.      ! rotation require the computation of the slopes 
    178          ! 
    179       ENDIF 
    180  
    181       IF(lwp) THEN 
    182          WRITE(numout,*) 
    183          IF( nldf == np_no_ldf )   WRITE(numout,*) '   ==>>>   NO lateral viscosity' 
    184          IF( nldf == np_lap    )   WRITE(numout,*) '   ==>>>   iso-level laplacian operator' 
    185          IF( nldf == np_lap_i  )   WRITE(numout,*) '   ==>>>   rotated laplacian operator with iso-level background' 
    186          IF( nldf == np_blp    )   WRITE(numout,*) '   ==>>>   iso-level bi-laplacian operator' 
     102         SELECT CASE( nldf_dyn )             ! print the choice of operator 
     103         CASE( np_no_ldf )   ;   WRITE(numout,*) '   ==>>>   NO lateral viscosity' 
     104         CASE( np_lap    )   ;   WRITE(numout,*) '   ==>>>   iso-level laplacian operator' 
     105         CASE( np_lap_i  )   ;   WRITE(numout,*) '   ==>>>   rotated laplacian operator with iso-level background' 
     106         CASE( np_blp    )   ;   WRITE(numout,*) '   ==>>>   iso-level bi-laplacian operator' 
     107         END SELECT 
    187108      ENDIF 
    188109      ! 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_iso.F90

    r9124 r9490  
    108108      REAL(wp) ::   zabe1, zmskt, zmkt, zuav, zuwslpi, zuwslpj   ! local scalars 
    109109      REAL(wp) ::   zabe2, zmskf, zmkf, zvav, zvwslpi, zvwslpj   !   -      - 
    110       REAL(wp) ::   zcof0, zcof1, zcof2, zcof3, zcof4            !   -      - 
     110      REAL(wp) ::   zcof0, zcof1, zcof2, zcof3, zcof4, zaht_0    !   -      - 
    111111      REAL(wp), DIMENSION(jpi,jpj) ::   ziut, zivf, zdku, zdk1u  ! 2D workspace 
    112112      REAL(wp), DIMENSION(jpi,jpj) ::   zjuf, zjvt, zdkv, zdk1v  !  -      - 
     
    139139         ! 
    140140       ENDIF 
    141  
     141          
     142      zaht_0 = 0.5_wp * rn_Ud * rn_Ld                  ! aht_0 from namtra_ldf = zaht_max 
     143       
    142144      !                                                ! =============== 
    143145      DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    174176                     &                 + umask(ji-1,jj,jk+1)+umask(ji,jj,jk  ) , 1._wp ) 
    175177 
    176                   zcof1 = - rn_aht_0 * e2t(ji,jj) * zmskt * 0.5  * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) ) 
     178                  zcof1 = - zaht_0 * e2t(ji,jj) * zmskt * 0.5  * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) ) 
    177179    
    178180                  ziut(ji,jj) = (  zabe1 * ( ub(ji,jj,jk) - ub(ji-1,jj,jk) )    & 
     
    189191                     &                 + umask(ji-1,jj,jk+1) + umask(ji,jj,jk  ) , 1._wp ) 
    190192 
    191                   zcof1 = - rn_aht_0 * e2t(ji,jj) * zmskt * 0.5  * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) ) 
     193                  zcof1 = - zaht_0 * e2t(ji,jj) * zmskt * 0.5  * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) ) 
    192194 
    193195                  ziut(ji,jj) = (  zabe1 * ( ub(ji,jj,jk) - ub(ji-1,jj,jk) )   & 
     
    206208                  &                 + umask(ji,jj+1,jk+1)+umask(ji,jj,jk  ) , 1._wp ) 
    207209 
    208                zcof2 = - rn_aht_0 * e1f(ji,jj) * zmskf * 0.5  * ( vslp(ji+1,jj,jk) + vslp(ji,jj,jk) ) 
     210               zcof2 = - zaht_0 * e1f(ji,jj) * zmskf * 0.5  * ( vslp(ji+1,jj,jk) + vslp(ji,jj,jk) ) 
    209211 
    210212               zjuf(ji,jj) = (  zabe2 * ( ub(ji,jj+1,jk) - ub(ji,jj,jk) )   & 
     
    227229                  &                + vmask(ji+1,jj,jk+1)+vmask(ji,jj,jk  ) , 1._wp ) 
    228230 
    229                zcof1 = - rn_aht_0 * e2f(ji,jj) * zmskf * 0.5 * ( uslp(ji,jj+1,jk) + uslp(ji,jj,jk) ) 
     231               zcof1 = - zaht_0 * e2f(ji,jj) * zmskf * 0.5 * ( uslp(ji,jj+1,jk) + uslp(ji,jj,jk) ) 
    230232 
    231233               zivf(ji,jj) = (  zabe1 * ( vb(ji+1,jj,jk) - vb(ji,jj,jk) )    & 
     
    244246                     &                + vmask(ji,jj-1,jk+1)+vmask(ji,jj,jk  ) , 1._wp ) 
    245247 
    246                   zcof2 = - rn_aht_0 * e1t(ji,jj) * zmskt * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) ) 
     248                  zcof2 = - zaht_0 * e1t(ji,jj) * zmskt * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) ) 
    247249 
    248250                  zjvt(ji,jj) = (  zabe2 * ( vb(ji,jj,jk) - vb(ji,jj-1,jk) )    & 
     
    259261                     &           + vmask(ji,jj-1,jk+1)+vmask(ji,jj,jk  ), 1. ) 
    260262 
    261                   zcof2 = - rn_aht_0 * e1t(ji,jj) * zmskt * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) ) 
     263                  zcof2 = - zaht_0 * e1t(ji,jj) * zmskt * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) ) 
    262264 
    263265                  zjvt(ji,jj) = (  zabe2 * ( vb(ji,jj,jk) - vb(ji,jj-1,jk) )   & 
     
    335337         DO jk = 2, jpkm1 
    336338            DO ji = 2, jpim1 
    337                zcof0 = 0.5_wp * rn_aht_0 * umask(ji,jj,jk) 
     339               zcof0 = 0.5_wp * zaht_0 * umask(ji,jj,jk) 
    338340               ! 
    339341               zuwslpi = zcof0 * ( wslpi(ji+1,jj,jk) + wslpi(ji,jj,jk) ) 
     
    353355                  &                   + zdj1u(ji,jk  ) + zdju (ji  ,jk  )  ) 
    354356               ! vertical mixing coefficient (akzu) 
    355                ! Note: zcof0 include rn_aht_0, so divided by rn_aht_0 to obtain slp^2 * rn_aht_0 
    356                akzu(ji,jj,jk) = ( zuwslpi * zuwslpi + zuwslpj * zuwslpj ) / rn_aht_0 
     357               ! Note: zcof0 include zaht_0, so divided by zaht_0 to obtain slp^2 * zaht_0 
     358               akzu(ji,jj,jk) = ( zuwslpi * zuwslpi + zuwslpj * zuwslpj ) / zaht_0 
    357359            END DO 
    358360         END DO 
     
    361363         DO jk = 2, jpkm1 
    362364            DO ji = 2, jpim1 
    363                zcof0 = 0.5_wp * rn_aht_0 * vmask(ji,jj,jk) 
     365               zcof0 = 0.5_wp * zaht_0 * vmask(ji,jj,jk) 
    364366               ! 
    365367               zvwslpi = zcof0 * ( wslpi(ji,jj+1,jk) + wslpi(ji,jj,jk) ) 
     
    379381                  &                   + zdjv (ji,jk  ) + zdj1v(ji  ,jk  )  ) 
    380382               ! vertical mixing coefficient (akzv) 
    381                ! Note: zcof0 include rn_aht_0, so divided by rn_aht_0 to obtain slp^2 * rn_aht_0 
    382                akzv(ji,jj,jk) = ( zvwslpi * zvwslpi + zvwslpj * zvwslpj ) / rn_aht_0 
     383               ! Note: zcof0 include zaht_0, so divided by zaht_0 to obtain slp^2 * zaht_0 
     384               akzv(ji,jj,jk) = ( zvwslpi * zvwslpi + zvwslpj * zvwslpj ) / zaht_0 
    383385            END DO 
    384386         END DO 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf.F90

    r9250 r9490  
    1919   USE zdfdrg         ! vertical physics: top/bottom drag coef. 
    2020   USE dynadv    ,ONLY: ln_dynadv_vec    ! dynamics: advection form 
    21    USE dynldf    ,ONLY: nldf, np_lap_i   ! dynamics: type of lateral mixing  
    2221   USE dynldf_iso,ONLY: akzu, akzv       ! dynamics: vertical component of rotated lateral mixing  
    23    USE ldfdyn         ! lateral diffusion: eddy viscosity coef. 
     22   USE ldfdyn         ! lateral diffusion: eddy viscosity coef. and type of operator 
    2423   USE trd_oce        ! trends: ocean variables 
    2524   USE trddyn         ! trend manager: dynamics 
     
    156155      !                    !* Matrix construction 
    157156      zdt = r2dt * 0.5 
    158       IF( nldf == np_lap_i ) THEN   ! rotated lateral mixing: add its vertical mixing (akzu) 
     157      SELECT CASE( nldf_dyn ) 
     158      CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu) 
    159159         DO jk = 1, jpkm1 
    160160            DO jj = 2, jpjm1  
     
    171171            END DO 
    172172         END DO 
    173       ELSE                          ! standard case 
     173      CASE DEFAULT               ! iso-level lateral mixing 
    174174         DO jk = 1, jpkm1 
    175175            DO jj = 2, jpjm1  
     
    184184            END DO 
    185185         END DO 
    186       ENDIF 
     186      END SELECT 
    187187      ! 
    188188      DO jj = 2, jpjm1     !* Surface boundary conditions 
     
    274274      !                       !* Matrix construction 
    275275      zdt = r2dt * 0.5 
    276       IF( nldf == np_lap_i ) THEN   ! rotated lateral mixing: add its vertical mixing (akzu) 
     276      SELECT CASE( nldf_dyn ) 
     277      CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu) 
    277278         DO jk = 1, jpkm1 
    278279            DO jj = 2, jpjm1    
    279280               DO ji = fs_2, fs_jpim1   ! vector opt. 
    280281                  ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,jk) + r_vvl * e3v_a(ji,jj,jk)   ! after scale factor at T-point 
    281                   zzwi = - zdt * ( avm(ji,jj+1,jk  )+ avm(ji,jj,jk  ) + akzv(ji,jj,jk  ) )   & 
     282                  zzwi = - zdt * ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) + akzv(ji,jj,jk  ) )   & 
    282283                     &         / ( ze3va * e3vw_n(ji,jj,jk  ) ) * wvmask(ji,jj,jk  ) 
    283                   zzws = - zdt * ( avm(ji,jj+1,jk+1)+ avm(ji,jj,jk+1) + akzv(ji,jj,jk+1) )   & 
     284                  zzws = - zdt * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) + akzv(ji,jj,jk+1) )   & 
    284285                     &         / ( ze3va * e3vw_n(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 
    285286                  zwi(ji,jj,jk) = zzwi * wvmask(ji,jj,jk  ) 
     
    289290            END DO 
    290291         END DO 
    291       ELSE                          ! standard case 
     292      CASE DEFAULT               ! iso-level lateral mixing 
    292293         DO jk = 1, jpkm1 
    293294            DO jj = 2, jpjm1    
    294295               DO ji = fs_2, fs_jpim1   ! vector opt. 
    295296                  ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,jk) + r_vvl * e3v_a(ji,jj,jk)   ! after scale factor at T-point 
    296                   zzwi = - zdt * ( avm(ji,jj+1,jk  )+ avm(ji,jj,jk  ) ) / ( ze3va * e3vw_n(ji,jj,jk  ) ) * wvmask(ji,jj,jk  ) 
    297                   zzws = - zdt * ( avm(ji,jj+1,jk+1)+ avm(ji,jj,jk+1) ) / ( ze3va * e3vw_n(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 
     297                  zzwi = - zdt * ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) ) / ( ze3va * e3vw_n(ji,jj,jk  ) ) * wvmask(ji,jj,jk  ) 
     298                  zzws = - zdt * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) ) / ( ze3va * e3vw_n(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 
    298299                  zwi(ji,jj,jk) = zzwi * wvmask(ji,jj,jk  ) 
    299300                  zws(ji,jj,jk) = zzws * wvmask(ji,jj,jk+1) 
     
    302303            END DO 
    303304         END DO 
    304       ENDIF 
     305      END SELECT 
    305306      ! 
    306307      DO jj = 2, jpjm1        !* Surface boundary conditions 
Note: See TracChangeset for help on using the changeset viewer.