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 10030 for NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF – NEMO

Ignore:
Timestamp:
2018-08-03T10:18:16+02:00 (6 years ago)
Author:
gm
Message:

#1911 (ENHANCE-04): RK3 branch - step II.3 remove e3uw_$ e3vw_$, except e3.w_0 and use only after e3 in dyn/trazdf

Location:
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfosm.F90

    r9939 r10030  
    247247      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zviscos ! viscosity 
    248248      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdiffut ! t-diffusivity 
     249       
     250      REAL(wp)                     ::   ze3uw_BN, ze3vw_BN   ! use for e3uw, e3vw computation 
     251      REAL(wp), DIMENSION(jpi,jpj) ::   zsshu_hB, zsshv_hB   ! at Before and Now time-step 
     252      REAL(wp), DIMENSION(jpi,jpj) ::   zsshu_hN, zsshv_hN    
    249253 
    250254      ! For debugging 
     
    12351239 
    12361240! KPP-style Ri# mixing 
    1237        IF( ln_kpprimix) THEN 
    1238           DO jk = 2, jpkm1           !* Shear production at uw- and vw-points (energy conserving form) 
    1239              DO jj = 1, jpjm1 
    1240                 DO ji = 1, jpim1   ! vector opt. 
    1241                    z3du(ji,jj,jk) = 0.5 * (  un(ji,jj,jk-1) -  un(ji  ,jj,jk) )   & 
    1242                         &                 * (  ub(ji,jj,jk-1) -  ub(ji  ,jj,jk) ) * wumask(ji,jj,jk) & 
    1243                         &                 / (  e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) ) 
    1244                    z3dv(ji,jj,jk) = 0.5 * (  vn(ji,jj,jk-1) -  vn(ji,jj  ,jk) )   & 
    1245                         &                 * (  vb(ji,jj,jk-1) -  vb(ji,jj  ,jk) ) * wvmask(ji,jj,jk) & 
    1246                         &                 / (  e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) ) 
     1241      IF( ln_kpprimix) THEN 
     1242         !  
     1243         IF( ln_linssh ) THEN      !==      linear ssh case  ==! 
     1244            DO jk = 2, jpkm1           !* Shear production at uw- and vw-points (energy conserving form) 
     1245               DO jj = 1, jpjm1 
     1246                  DO ji = 1, jpim1   ! vector opt. 
     1247                     ze3uw_BN = e3uw_0(ji,jj,jk) * e3uw_0(ji,jj,jk) 
     1248                     ze3vw_BN = e3vw_0(ji,jj,jk) * e3vw_0(ji,jj,jk) 
     1249                     z3du(ji,jj,jk) = 0.5 * (  un(ji,jj,jk-1) -  un(ji,jj,jk) )            & 
     1250                        &                 * (  ub(ji,jj,jk-1) -  ub(ji,jj,jk) ) / ze3uw_BN * wumask(ji,jj,jk) 
     1251                     z3dv(ji,jj,jk) = 0.5 * (  vn(ji,jj,jk-1) -  vn(ji,jj,jk) )            & 
     1252                        &                 * (  vb(ji,jj,jk-1) -  vb(ji,jj,jk) ) / ze3vw_BN * wvmask(ji,jj,jk) 
     1253                   END DO 
    12471254                END DO 
    1248              END DO 
    1249           END DO 
    1250       ! 
     1255            END DO 
     1256         ELSE                       !==  Non linear ssh case  ==! 
     1257            DO jj = 1, jpjm1 
     1258               DO ji = 1, jpim1 
     1259                  zsshu_hB(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj  ,Nbb) ) * r1_hu_0(ji,jj) * ssumask(ji,jj) 
     1260                  zsshv_hB(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji  ,jj+1,Nbb) ) * r1_hv_0(ji,jj) * ssvmask(ji,jj) 
     1261                  zsshu_hN(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji+1,jj  ,Nnn) ) * r1_hu_0(ji,jj) * ssumask(ji,jj) 
     1262                  zsshv_hN(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji  ,jj+1,Nnn) ) * r1_hv_0(ji,jj) * ssvmask(ji,jj) 
     1263               END DO 
     1264            END DO 
     1265            ! 
     1266            DO jk = 2, jpkm1           !* Shear production at uw- and vw-points (energy conserving form) 
     1267               DO jj = 1, jpjm1 
     1268                  DO ji = 1, jpim1   ! vector opt. 
     1269                     ze3uw_BN = e3uw_0(ji,jj,jk) * e3uw_0(ji,jj,jk) * ( 1._wp + zsshu_hB(ji,jj) * wumask(ji,jj,jk) )   & 
     1270                        &                                           * ( 1._wp + zsshu_hN(ji,jj) * wumask(ji,jj,jk) ) 
     1271                     ze3vw_BN = e3vw_0(ji,jj,jk) * e3vw_0(ji,jj,jk) * ( 1._wp + zsshu_hB(ji,jj) * wvmask(ji,jj,jk) )   & 
     1272                        &                                           * ( 1._wp + zsshu_hN(ji,jj) * wvmask(ji,jj,jk) ) 
     1273                     z3du(ji,jj,jk) = 0.5 * (  un(ji,jj,jk-1) -  un(ji,jj,jk) )            & 
     1274                        &                 * (  ub(ji,jj,jk-1) -  ub(ji,jj,jk) ) / ze3uw_BN * wumask(ji,jj,jk) 
     1275                     z3dv(ji,jj,jk) = 0.5 * (  vn(ji,jj,jk-1) -  vn(ji,jj,jk) )            & 
     1276                        &                 * (  vb(ji,jj,jk-1) -  vb(ji,jj,jk) ) / ze3vw_BN * wvmask(ji,jj,jk) 
     1277                   END DO 
     1278                END DO 
     1279            END DO 
     1280         ENDIF 
     1281         ! 
    12511282         DO jk = 2, jpkm1 
    12521283            DO jj = 2, jpjm1 
     
    12621293                END DO 
    12631294             END DO 
    1264           END DO 
    1265  
    1266           DO jj = 2, jpjm1 
    1267              DO ji = 2, jpim1 
    1268                 DO jk = ibld(ji,jj) + 1, jpkm1 
    1269                    zdiffut(ji,jj,jk) = zrimix(ji,jj,jk)*rn_difri 
    1270                    zviscos(ji,jj,jk) = zrimix(ji,jj,jk)*rn_difri 
    1271                 END DO 
    1272              END DO 
    1273           END DO 
    1274  
     1295         END DO 
     1296         ! 
     1297         DO jj = 2, jpjm1 
     1298            DO ji = 2, jpim1 
     1299               DO jk = ibld(ji,jj) + 1, jpkm1 
     1300                  zdiffut(ji,jj,jk) = zrimix(ji,jj,jk)*rn_difri 
     1301                  zviscos(ji,jj,jk) = zrimix(ji,jj,jk)*rn_difri 
     1302               END DO 
     1303            END DO 
     1304         END DO 
     1305         ! 
    12751306       END IF ! ln_kpprimix = .true. 
    12761307 
     
    17081739         DO jj = 2, jpjm1 
    17091740            DO ji = 2, jpim1 
    1710                ua(ji,jj,jk) =  ua(ji,jj,jk)                      & 
    1711                   &                 - (  ghamu(ji,jj,jk  )  & 
    1712                   &                    - ghamu(ji,jj,jk+1) ) / e3u_n(ji,jj,jk) 
    1713                va(ji,jj,jk) =  va(ji,jj,jk)                      & 
    1714                   &                 - (  ghamv(ji,jj,jk  )  & 
    1715                   &                    - ghamv(ji,jj,jk+1) ) / e3v_n(ji,jj,jk) 
     1741               ua(ji,jj,jk) = ua(ji,jj,jk) - (  ghamu(ji,jj,jk) - ghamu(ji,jj,jk+1) ) / e3u_n(ji,jj,jk) 
     1742               va(ji,jj,jk) = va(ji,jj,jk) - (  ghamv(ji,jj,jk) - ghamv(ji,jj,jk+1) ) / e3v_n(ji,jj,jk) 
    17161743            END DO 
    17171744         END DO 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfphy.F90

    r9598 r10030  
    246246      ! 
    247247      IF( l_zdfsh2 )   &         !* shear production at w-points (energy conserving form) 
    248          CALL zdf_sh2( ub, vb, un, vn, avm_k,   &     ! <<== in 
    249             &                           zsh2    )     ! ==>> out : shear production 
     248         CALL zdf_sh2( ssh, ub, vb, un, vn, avm_k,   &     ! <<== in 
     249            &                                zsh2    )     ! ==>> out : shear production 
    250250      ! 
    251251      SELECT CASE ( nzdf_phy )                  !* Vertical eddy viscosity and diffusivity coefficients at w-points 
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfsh2.F90

    r9598 r10030  
    66   !! History :   -   !  2014-10  (A. Barthelemy, G. Madec)  original code 
    77   !!   NEMO     4.0  !  2017-04  (G. Madec)  remove u-,v-pts avm 
     8   !!            5.0  !  2018-08  (G. Madec)  local calculation of e3uw e3vw 
    89   !!---------------------------------------------------------------------- 
    910 
     
    2829CONTAINS 
    2930 
    30    SUBROUTINE zdf_sh2( pub, pvb, pun, pvn, p_avm, p_sh2  )  
     31   SUBROUTINE zdf_sh2( pssh, pub, pvb, pun, pvn, p_avm, p_sh2  )  
    3132      !!---------------------------------------------------------------------- 
    3233      !!                   ***  ROUTINE zdf_sh2  *** 
     
    4748      !! References :   Bruchard, OM 2002 
    4849      !! --------------------------------------------------------------------- 
     50      REAL(wp), DIMENSION(:,:,:) , INTENT(in   ) ::   pssh                 ! sea surface height 
    4951      REAL(wp), DIMENSION(:,:,:) , INTENT(in   ) ::   pub, pvb, pun, pvn   ! before, now horizontal velocities 
    5052      REAL(wp), DIMENSION(:,:,:) , INTENT(in   ) ::   p_avm                ! vertical eddy viscosity (w-points) 
    5153      REAL(wp), DIMENSION(:,:,:) , INTENT(  out) ::   p_sh2                ! shear production of TKE (w-points) 
    5254      ! 
    53       INTEGER  ::   ji, jj, jk   ! dummy loop arguments 
    54       REAL(wp), DIMENSION(jpi,jpj) ::   zsh2u, zsh2v   ! 2D workspace 
     55      INTEGER ::   ji, jj, jk           ! dummy loop arguments 
     56      REAL(wp)::   ze3uw_BN, ze3vw_BN   ! local real 
     57      REAL(wp), DIMENSION(jpi,jpj) ::   zsh2u   , zsh2v     ! 2D workspace 
     58      REAL(wp), DIMENSION(jpi,jpj) ::   zsshu_hB, zsshv_hB  ! 2D workspace 
     59      REAL(wp), DIMENSION(jpi,jpj) ::   zsshu_hN, zsshv_hN 
    5560      !!-------------------------------------------------------------------- 
    5661      ! 
    57       DO jk = 2, jpkm1 
    58          DO jj = 1, jpjm1        !* 2 x shear production at uw- and vw-points (energy conserving form) 
     62      IF( ln_linssh ) THEN       !==  linear ssh case  ==! 
     63         DO jk = 2, jpkm1 
     64            DO jj = 1, jpjm1        !* 2 x shear production at uw- and vw-points (energy conserving form) 
     65               DO ji = 1, jpim1 
     66                  ze3uw_BN = e3uw_0(ji,jj,jk) * e3uw_0(ji,jj,jk) 
     67                  ze3vw_BN = e3vw_0(ji,jj,jk) * e3vw_0(ji,jj,jk) 
     68                  ! 
     69                  zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) )            & 
     70                     &         * (   pun(ji,jj,jk-1) -   pun(ji,jj,jk) )            & 
     71                     &         * (   pub(ji,jj,jk-1) -   pub(ji,jj,jk) ) / ze3uw_BN * wumask(ji,jj,jk) 
     72                  zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) )            & 
     73                     &         * (   pvn(ji,jj,jk-1) -   pvn(ji,jj,jk) )            & 
     74                     &         * (   pvb(ji,jj,jk-1) -   pvb(ji,jj,jk) ) / ze3vw_BN * wvmask(ji,jj,jk) 
     75               END DO 
     76            END DO 
     77            DO jj = 2, jpjm1        !* shear production at w-point 
     78               DO ji = 2, jpim1           ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 
     79                  p_sh2(ji,jj,jk) = 0.25 * (   ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) )   & 
     80                     &                       + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) )   ) 
     81               END DO 
     82            END DO 
     83         END DO  
     84         ! 
     85      ELSE                       !==  Non linear ssh case  ==! 
     86         DO jj = 1, jpjm1 
    5987            DO ji = 1, jpim1 
    60                zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 
    61                   &         * (   pun(ji,jj,jk-1) -   pun(ji,jj,jk) ) & 
    62                   &         * (   pub(ji,jj,jk-1) -   pub(ji,jj,jk) ) / ( e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) ) * wumask(ji,jj,jk) 
    63                zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) ) & 
    64                   &         * (   pvn(ji,jj,jk-1) -   pvn(ji,jj,jk) ) & 
    65                   &         * (   pvb(ji,jj,jk-1) -   pvb(ji,jj,jk) ) / ( e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) ) * wvmask(ji,jj,jk) 
     88               zsshu_hB(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nbb) + pssh(ji+1,jj  ,Nbb) ) * r1_hu_0(ji,jj) * ssumask(ji,jj) 
     89               zsshv_hB(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nbb) + pssh(ji  ,jj+1,Nbb) ) * r1_hv_0(ji,jj) * ssvmask(ji,jj) 
     90               zsshu_hN(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nnn) + pssh(ji+1,jj  ,Nnn) ) * r1_hu_0(ji,jj) * ssumask(ji,jj) 
     91               zsshv_hN(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nnn) + pssh(ji  ,jj+1,Nnn) ) * r1_hv_0(ji,jj) * ssvmask(ji,jj) 
    6692            END DO 
    6793         END DO 
    68          DO jj = 2, jpjm1        !* shear production at w-point 
    69             DO ji = 2, jpim1           ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 
    70                p_sh2(ji,jj,jk) = 0.25 * (   ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) )   & 
    71                   &                       + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) )   ) 
     94         ! 
     95         DO jk = 2, jpkm1 
     96            DO jj = 1, jpjm1        !* 2 x shear production at uw- and vw-points (energy conserving form) 
     97               DO ji = 1, jpim1 
     98                  ze3uw_BN = e3uw_0(ji,jj,jk) * e3uw_0(ji,jj,jk) * ( 1._wp + zsshu_hB(ji,jj) * wumask(ji,jj,jk) )   & 
     99                     &                                           * ( 1._wp + zsshu_hN(ji,jj) * wumask(ji,jj,jk) ) 
     100                  ze3vw_BN = e3vw_0(ji,jj,jk) * e3vw_0(ji,jj,jk) * ( 1._wp + zsshu_hB(ji,jj) * wvmask(ji,jj,jk) )   & 
     101                     &                                           * ( 1._wp + zsshu_hN(ji,jj) * wvmask(ji,jj,jk) ) 
     102                  zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 
     103                     &         * (   pun(ji,jj,jk-1) -   pun(ji,jj,jk) ) & 
     104                     &         * (   pub(ji,jj,jk-1) -   pub(ji,jj,jk) ) / ze3uw_BN * wumask(ji,jj,jk) 
     105                  zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) ) & 
     106                     &         * (   pvn(ji,jj,jk-1) -   pvn(ji,jj,jk) ) & 
     107                     &         * (   pvb(ji,jj,jk-1) -   pvb(ji,jj,jk) ) / ze3vw_BN * wvmask(ji,jj,jk) 
     108               END DO 
    72109            END DO 
    73          END DO 
    74       END DO  
     110            DO jj = 2, jpjm1        !* shear production at w-point 
     111               DO ji = 2, jpim1           ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 
     112                  p_sh2(ji,jj,jk) = 0.25 * (   ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) )   & 
     113                     &                       + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) )   ) 
     114               END DO 
     115            END DO 
     116         END DO  
     117      ENDIF 
    75118      ! 
    76119   END SUBROUTINE zdf_sh2 
Note: See TracChangeset for help on using the changeset viewer.