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/dynzdf.F90 – 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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.