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 8055 for branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfsh2.F90 – NEMO

Ignore:
Timestamp:
2017-05-20T13:49:38+02:00 (7 years ago)
Author:
gm
Message:

wrk_OMP: 2nd step: add OMP processor distribution in ZDF package

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfsh2.F90

    r7997 r8055  
    55   !!===================================================================== 
    66   !! History :   -   !  2014-10  (A. Barthelemy, G. Madec)  original code 
    7    !!   NEMO     4.0  !  2017-04  (G. Madec)  remove u-,v-pts avm 
     7   !!   NEMO     4.0  !  2017-04  (G. Madec)  remove u-,v-pts avm + ready for coarse-grained Open-MP 
    88   !!---------------------------------------------------------------------- 
    99 
     
    1111   !!   zdf_sh2       : compute mixing the shear production term of TKE 
    1212   !!---------------------------------------------------------------------- 
    13    USE oce            ! ocean: shared variables 
    1413   USE dom_oce        ! domain: ocean 
    15    USE zdf_oce        ! vertical physics: variables 
    1614   ! 
    1715   USE in_out_manager ! I/O manager 
     
    2321 
    2422   PUBLIC   zdf_sh2        ! called by zdftke, zdfglf, and zdfric 
    25     
     23 
     24   !! * Substitutions 
     25#  include "domain_substitute.h90"    
    2626   !!---------------------------------------------------------------------- 
    2727   !! NEMO/OPA 4.0 , NEMO Consortium (2017) 
     
    3131CONTAINS 
    3232 
    33    SUBROUTINE zdf_sh2(  psh2  )  
     33   SUBROUTINE zdf_sh2( ARG_2D, pub, pvb, pun, pvn, p_avm, p_sh2  )  
    3434      !!---------------------------------------------------------------------- 
    3535      !!                   ***  ROUTINE zdf_sh2  *** 
     
    4646      !!                NB: wet-point only horizontal averaging of shear 
    4747      !! 
    48       !! ** Action  : - psh2 shear prod. term at w-point (interior ocean domain only) 
    49       !! 
     48      !! ** Action  : - p_sh2 shear prod. term at w-point (inner domain only) 
     49      !!                                                   ***** 
    5050      !! References :   Bruchard, OM 2002 
    5151      !! --------------------------------------------------------------------- 
    52       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(  out) ::   psh2   ! shear production of TKE (w-points) 
     52      INTEGER                    , INTENT(in   ) ::   ARG_2D               ! inner domain start-end i-indices 
     53      REAL(wp), DIMENSION(:,:,:) , INTENT(in   ) ::   pub, pvb, pun, pvn   ! before, now horizontal velocities 
     54      REAL(wp), DIMENSION(:,:,:) , INTENT(in   ) ::   p_avm                ! vertical eddy viscosity (w-points) 
     55      REAL(wp), DIMENSION(WRK_3D), INTENT(  out) ::   p_sh2                ! shear production of TKE (w-points) 
    5356      ! 
    54       INTEGER  ::   ji, jj, jk   ! dummy loop arguments 
    55       REAL(wp), DIMENSION(jpi,jpj) ::   zsh2u, zsh2v   ! 2D workspace 
     57      INTEGER  ::   ji, jj, jk                           ! dummy loop indices 
     58      REAL(wp), DIMENSION(WRK_2De(-1,)) ::   zsh2u, zsh2v   ! 2D workspace 
    5659      !!-------------------------------------------------------------------- 
     60      ! 
    5761      IF( nn_timing == 1 )  CALL timing_start('zdf_sh2') 
    5862      ! 
    5963      DO jk = 2, jpkm1 
    60          DO jj = 1, jpjm1        !* 2 x shear production at uw- and vw-points (energy conserving form) 
    61             DO ji = 1, jpim1 
    62                zsh2u(ji,jj) = ( avm(ji+1,jj,jk) + avm(ji,jj,jk) ) & 
    63                   &         * (  un(ji,jj,jk-1) -  un(ji,jj,jk) ) & 
    64                   &         * (  ub(ji,jj,jk-1) -  ub(ji,jj,jk) ) / ( e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) ) * wumask(ji,jj,jk)  
    65                zsh2v(ji,jj) = ( avm(ji,jj+1,jk) + avm(ji,jj,jk) ) & 
    66                   &         * (  vn(ji,jj,jk-1) -  vn(ji,jj,jk) ) & 
    67                   &         * (  vb(ji,jj,jk-1) -  vb(ji,jj,jk) ) / ( e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) ) * wvmask(ji,jj,jk) 
     64         DO jj = k_Jstr-1, k_Jend      !* 2 x shear production at uw- and vw-points (energy conserving form) 
     65            DO ji = k_Istr-1, k_Iend 
     66               zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 
     67                  &         * (   pun(ji,jj,jk-1) -   pun(ji,jj,jk) ) & 
     68                  &         * (   pub(ji,jj,jk-1) -   pub(ji,jj,jk) ) / ( e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) ) * wumask(ji,jj,jk) 
     69               zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) ) & 
     70                  &         * (   pvn(ji,jj,jk-1) -   pvn(ji,jj,jk) ) & 
     71                  &         * (   pvb(ji,jj,jk-1) -   pvb(ji,jj,jk) ) / ( e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) ) * wvmask(ji,jj,jk) 
    6872            END DO 
    6973         END DO 
    70          DO jj = 2, jpjm1        !* shear production at w-point 
    71             DO ji = 2, jpim1           ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 
    72                psh2(ji,jj,jk) = 0.25 * (   ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) )   & 
    73                   &                      + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) )   ) 
     74         DO jj = k_Jstr, k_Jend        !* shear production at w-point 
     75            DO ji = k_Jstr, k_Iend           ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 
     76               p_sh2(ji,jj,jk) = 0.25 * (   ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) )   & 
     77                  &                       + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) )   ) 
    7478            END DO 
    7579         END DO 
Note: See TracChangeset for help on using the changeset viewer.