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 8279 for branches/2017/wrk_OMP_test_for_Silvia – NEMO

Ignore:
Timestamp:
2017-07-04T17:46:48+02:00 (7 years ago)
Author:
mocavero
Message:

Implementation of OMP coarse-grained parallelization on ZDF new package

Location:
branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM
Files:
3 added
14 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/CONFIG/GYRE_PISCES/EXP00/namelist_cfg

    r7990 r8279  
    255255/ 
    256256!----------------------------------------------------------------------- 
     257&namomp        !   Open Multi-Processing 
     258!----------------------------------------------------------------------- 
     259/ 
     260!----------------------------------------------------------------------- 
    257261&namctl        !   Control prints & Benchmark 
    258262!----------------------------------------------------------------------- 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/CONFIG/SHARED/namelist_ref

    r7990 r8279  
    1212!!              7 - dynamics         (namdyn_adv, namdyn_vor, namdyn_hpg, namdyn_spg, namdyn_ldf) 
    1313!!              8 - Verical physics  (namzdf, namzdf_ric, namzdf_tke, namzdf_gls, namzdf_iwm) 
    14 !!              9 - miscellaneous    (nammpp, namctl) 
     14!!              9 - miscellaneous    (nammpp, namomp, namctl) 
    1515!!             10 - diagnostics      (namnc4, namtrd, namspr, namflo, namhsb, namsto) 
    1616!!             11 - Obs & Assim      (namobs, nam_asminc) 
     
    984984!!====================================================================== 
    985985!!   nammpp            Massively Parallel Processing                    ("key_mpp_mpi") 
     986!!   namomp            Open Multi-Processing 
    986987!!   namctl            Control prints  
    987988!!   namsto            Stochastic parametrization of EOS 
     
    9991000   jpnij       =   0       !  jpnij  number of local domains (set automatically if < 1) 
    10001001/ 
     1002!----------------------------------------------------------------------- 
     1003&namomp        !   Open Multi-Processing 
     1004!----------------------------------------------------------------------- 
     1005   jtni        =   1       !  jtni   number of openMP threads following i 
    10011006!----------------------------------------------------------------------- 
    10021007&namctl        !   Control prints  
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90

    r8055 r8279  
    9595!!gm                            and many acces in memory 
    9696          
    97          DO jj = k_Jstr, k_Jend        !==  R=zrau = (alpha / beta) (dk[t] / dk[s])  ==! 
    98             DO ji = k_Jstr, k_Iend 
     97         DO jj = tnldj, tnlej        !==  R=zrau = (alpha / beta) (dk[t] / dk[s])  ==! 
     98            DO ji = tnldi, tnlei 
    9999               zrw =   ( gdepw_n(ji,jj,jk  ) - gdept_n(ji,jj,jk) )   & 
    100100!!gm please, use e3w_n below  
     
    113113         END DO 
    114114 
    115          DO jj = k_Jstr, k_Jend          !==  indicators  ==! 
    116             DO ji = k_Jstr, k_Iend 
     115         DO jj = tnldj, tnlej          !==  indicators  ==! 
     116            DO ji = tnldi, tnlei 
    117117               ! stability indicator: msks=1 if rn2>0; 0 elsewhere 
    118118               IF( rn2(ji,jj,jk) + 1.e-12  <= 0. ) THEN   ;   zmsks(ji,jj) = 0._wp 
     
    145145         ! ------------------ 
    146146         ! Constant eddy coefficient: reset to the background value 
    147          DO jj = k_Jstr, k_Jend 
    148             DO ji = k_Jstr, k_Iend 
     147         DO jj = tnldj, tnlej 
     148            DO ji = tnldi, tnlei 
    149149               zinr = 1._wp / zrau(ji,jj) 
    150150               ! salt fingering 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90

    r8055 r8279  
    9898         ! 
    9999         DO jk = 1, jpkm1  
    100             DO jj = k_Jstr, k_Jend 
    101                DO ji = k_Jstr, k_Iend 
     100            DO jj = tnldj, tnlej 
     101               DO ji = tnldi, tnlei 
    102102                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN 
    103103                     p_avt(ji,jj,jk) = rn_evd * wmask(ji,jj,jk) 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90

    r8055 r8279  
    159159      ! Preliminary computing 
    160160 
    161       ustars2 = 0._wp   ;   ustarb2 = 0._wp   ;   psi  = 0._wp   ;   zwall_psi = 0._wp 
     161      ustars2(WRK_2D) = 0._wp   ;   ustarb2(WRK_2D) = 0._wp   ;   psi  = 0._wp   ;   zwall_psi = 0._wp 
    162162 
    163163 
    164164      ! Compute surface and bottom friction at T-points 
    165       DO jj = k_Jstr, k_Jend  
    166          DO ji = k_Istr, k_Iend 
     165      DO jj = tnldj, tnlej  
     166         DO ji = tnldi, tnlei 
    167167            ! 
    168168            ! surface friction 
     
    195195      ! 
    196196      DO jk = 2, jpkm1              !==  Compute dissipation rate  ==! 
    197          DO jj = k_Jstr, k_Jend  
    198             DO ji = k_Istr, k_Iend 
     197         DO jj = tnldj, tnlej  
     198            DO ji = tnldi, tnlei 
    199199               eps(ji,jj,jk)  = rc03 * en(ji,jj,jk) * SQRT( en(ji,jj,jk) ) / hmxl_n(ji,jj,jk) 
    200200            END DO 
     
    208208      IF( nn_clos == 0 ) THEN    ! Mellor-Yamada 
    209209         DO jk = 2, jpkm1 
    210             DO jj = k_Jstr, k_Jend  
    211                DO ji = k_Istr, k_Iend 
     210            DO jj = tnldj, tnlej  
     211               DO ji = tnldi, tnlei 
    212212                  zup   = hmxl_n(ji,jj,jk) * gdepw_n(ji,jj,mbkt(ji,jj)+1) 
    213213                  zdown = vkarmn * gdepw_n(ji,jj,jk) * ( -gdepw_n(ji,jj,jk) + gdepw_n(ji,jj,mbkt(ji,jj)+1) ) 
     
    233233 
    234234      DO jk = 2, jpkm1 
    235          DO jj = k_Jstr, k_Jend  
    236             DO ji = k_Istr, k_Iend 
     235         DO jj = tnldj, tnlej  
     236            DO ji = tnldi, tnlei 
    237237               ! 
    238238               buoy = - p_avt(ji,jj,jk) * rn2(ji,jj,jk)       ! stratif. destruction 
     
    329329         !                      ! en(ibot) = u*^2 / Co2 and hmxl_n(ibot) = rn_lmin 
    330330         !                      ! Balance between the production and the dissipation terms 
    331          DO jj = k_Jstr, k_Jend  
    332             DO ji = k_Istr, k_Iend 
     331         DO jj = tnldj, tnlej  
     332            DO ji = tnldi, tnlei 
    333333               ibot   = mbkt(ji,jj) + 1      ! k   bottom level of w-point 
    334334               ibotm1 = mbkt(ji,jj)          ! k-1 bottom level of w-point but >=1 
     
    350350      CASE ( 1 )             ! Neumman boundary condition 
    351351         !                       
    352          DO jj = k_Jstr, k_Jend  
    353             DO ji = k_Istr, k_Iend 
     352         DO jj = tnldj, tnlej  
     353            DO ji = tnldi, tnlei 
    354354               ibot   = mbkt(ji,jj) + 1      ! k   bottom level of w-point 
    355355               ibotm1 = mbkt(ji,jj)          ! k-1 bottom level of w-point but >=1 
     
    373373      ! 
    374374      DO jk = 2, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    375          DO jj = k_Jstr, k_Jend  
    376             DO ji = k_Istr, k_Iend 
     375         DO jj = tnldj, tnlej  
     376            DO ji = tnldi, tnlei 
    377377               z_elem_b(ji,jj,jk) = z_elem_b(ji,jj,jk) - z_elem_a(ji,jj,jk) * z_elem_c(ji,jj,jk-1) / z_elem_b(ji,jj,jk-1) 
    378378            END DO 
     
    380380      END DO 
    381381      DO jk = 2, jpk                               ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    382          DO jj = k_Jstr, k_Jend  
    383             DO ji = k_Istr, k_Iend 
     382         DO jj = tnldj, tnlej  
     383            DO ji = tnldi, tnlei 
    384384               z_elem_a(ji,jj,jk) = en(ji,jj,jk) - z_elem_a(ji,jj,jk) / z_elem_b(ji,jj,jk-1) * z_elem_a(ji,jj,jk-1) 
    385385            END DO 
     
    387387      END DO 
    388388      DO jk = jpk-1, 2, -1                         ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    389          DO jj = k_Jstr, k_Jend  
    390             DO ji = k_Istr, k_Iend 
     389         DO jj = tnldj, tnlej  
     390            DO ji = tnldi, tnlei 
    391391               en(ji,jj,jk) = ( z_elem_a(ji,jj,jk) - z_elem_c(ji,jj,jk) * en(ji,jj,jk+1) ) / z_elem_b(ji,jj,jk) 
    392392            END DO 
     
    406406      CASE( 0 )               ! k-kl  (Mellor-Yamada) 
    407407         DO jk = 2, jpkm1 
    408             DO jj = k_Jstr, k_Jend  
    409                DO ji = k_Istr, k_Iend 
     408            DO jj = tnldj, tnlej  
     409               DO ji = tnldi, tnlei 
    410410                  psi(ji,jj,jk)  = eb(ji,jj,jk) * hmxl_b(ji,jj,jk) 
    411411               END DO 
     
    415415      CASE( 1 )               ! k-eps 
    416416         DO jk = 2, jpkm1 
    417             DO jj = k_Jstr, k_Jend  
    418                DO ji = k_Istr, k_Iend 
     417            DO jj = tnldj, tnlej  
     418               DO ji = tnldi, tnlei 
    419419                  psi(ji,jj,jk)  = eps(ji,jj,jk) 
    420420               END DO 
     
    424424      CASE( 2 )               ! k-w 
    425425         DO jk = 2, jpkm1 
    426             DO jj = k_Jstr, k_Jend  
    427                DO ji = k_Istr, k_Iend 
     426            DO jj = tnldj, tnlej  
     427               DO ji = tnldi, tnlei 
    428428                  psi(ji,jj,jk)  = SQRT( eb(ji,jj,jk) ) / ( rc0 * hmxl_b(ji,jj,jk) ) 
    429429               END DO 
     
    433433      CASE( 3 )               ! generic 
    434434         DO jk = 2, jpkm1 
    435             DO jj = k_Jstr, k_Jend  
    436                DO ji = k_Istr, k_Iend 
     435            DO jj = tnldj, tnlej  
     436               DO ji = tnldi, tnlei 
    437437                  psi(ji,jj,jk)  = rc02 * eb(ji,jj,jk) * hmxl_b(ji,jj,jk)**rnn  
    438438               END DO 
     
    450450 
    451451      DO jk = 2, jpkm1 
    452          DO jj = k_Jstr, k_Jend  
    453             DO ji = k_Istr, k_Iend 
     452         DO jj = tnldj, tnlej  
     453            DO ji = tnldi, tnlei 
    454454               ! 
    455455               ! psi / k 
     
    548548         !                      ! en(ibot) = u*^2 / Co2 and hmxl_n(ibot) = vkarmn * rn_bfrz0 
    549549         !                      ! Balance between the production and the dissipation terms 
    550          DO jj = k_Jstr, k_Jend  
    551             DO ji = k_Istr, k_Iend 
     550         DO jj = tnldj, tnlej  
     551            DO ji = tnldi, tnlei 
    552552               ibot   = mbkt(ji,jj) + 1      ! k   bottom level of w-point 
    553553               ibotm1 = mbkt(ji,jj)          ! k-1 bottom level of w-point but >=1 
     
    569569      CASE ( 1 )             ! Neumman boundary condition 
    570570         !                       
    571          DO jj = k_Jstr, k_Jend  
    572             DO ji = k_Istr, k_Iend 
     571         DO jj = tnldj, tnlej  
     572            DO ji = tnldi, tnlei 
    573573               ibot   = mbkt(ji,jj) + 1      ! k   bottom level of w-point 
    574574               ibotm1 = mbkt(ji,jj)          ! k-1 bottom level of w-point but >=1 
     
    600600      ! 
    601601      DO jk = 2, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    602          DO jj = k_Jstr, k_Jend  
    603             DO ji = k_Istr, k_Iend 
     602         DO jj = tnldj, tnlej  
     603            DO ji = tnldi, tnlei 
    604604               z_elem_b(ji,jj,jk) = z_elem_b(ji,jj,jk) - z_elem_a(ji,jj,jk) * z_elem_c(ji,jj,jk-1) / z_elem_b(ji,jj,jk-1) 
    605605            END DO 
     
    607607      END DO 
    608608      DO jk = 2, jpk                               ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    609          DO jj = k_Jstr, k_Jend  
    610             DO ji = k_Istr, k_Iend 
     609         DO jj = tnldj, tnlej  
     610            DO ji = tnldi, tnlei 
    611611               z_elem_a(ji,jj,jk) = psi(ji,jj,jk) - z_elem_a(ji,jj,jk) / z_elem_b(ji,jj,jk-1) * z_elem_a(ji,jj,jk-1) 
    612612            END DO 
     
    614614      END DO 
    615615      DO jk = jpk-1, 2, -1                         ! Third recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    616          DO jj = k_Jstr, k_Jend  
    617             DO ji = k_Istr, k_Iend 
     616         DO jj = tnldj, tnlej  
     617            DO ji = tnldi, tnlei 
    618618               psi(ji,jj,jk) = ( z_elem_a(ji,jj,jk) - z_elem_c(ji,jj,jk) * psi(ji,jj,jk+1) ) / z_elem_b(ji,jj,jk) 
    619619            END DO 
     
    628628      CASE( 0 )               ! k-kl  (Mellor-Yamada) 
    629629         DO jk = 1, jpkm1 
    630             DO jj = k_Jstr, k_Jend  
    631                DO ji = k_Istr, k_Iend 
     630            DO jj = tnldj, tnlej  
     631               DO ji = tnldi, tnlei 
    632632                  eps(ji,jj,jk) = rc03 * en(ji,jj,jk) * en(ji,jj,jk) * SQRT( en(ji,jj,jk) ) / MAX( psi(ji,jj,jk), rn_epsmin) 
    633633               END DO 
     
    637637      CASE( 1 )               ! k-eps 
    638638         DO jk = 1, jpkm1 
    639             DO jj = k_Jstr, k_Jend  
    640                DO ji = k_Istr, k_Iend 
     639            DO jj = tnldj, tnlej  
     640               DO ji = tnldi, tnlei 
    641641                  eps(ji,jj,jk) = psi(ji,jj,jk) 
    642642               END DO 
     
    646646      CASE( 2 )               ! k-w 
    647647         DO jk = 1, jpkm1 
    648             DO jj = k_Jstr, k_Jend  
    649                DO ji = k_Istr, k_Iend 
     648            DO jj = tnldj, tnlej  
     649               DO ji = tnldi, tnlei 
    650650                  eps(ji,jj,jk) = rc04 * en(ji,jj,jk) * psi(ji,jj,jk)  
    651651               END DO 
     
    658658         zex2  = -1._wp / rnn 
    659659         DO jk = 1, jpkm1 
    660             DO jj = k_Jstr, k_Jend  
    661                DO ji = k_Istr, k_Iend 
     660            DO jj = tnldj, tnlej  
     661               DO ji = tnldi, tnlei 
    662662                  eps(ji,jj,jk) = zcoef * en(ji,jj,jk)**zex1 * psi(ji,jj,jk)**zex2 
    663663               END DO 
     
    670670      ! -------------------------------------------------- 
    671671      DO jk = 1, jpkm1 ! Note that this set boundary conditions on hmxl_n at the same time 
    672          DO jj = k_Jstr, k_Jend  
    673             DO ji = k_Istr, k_Iend 
     672         DO jj = tnldj, tnlej  
     673            DO ji = tnldi, tnlei 
    674674               ! limitation 
    675675               eps   (ji,jj,jk)  = MAX( eps(ji,jj,jk), rn_epsmin ) 
     
    690690      CASE ( 0 , 1 )             ! Galperin or Kantha-Clayson stability functions 
    691691         DO jk = 2, jpkm1 
    692             DO jj = k_Jstr, k_Jend  
    693                DO ji = k_Istr, k_Iend 
     692            DO jj = tnldj, tnlej  
     693               DO ji = tnldi, tnlei 
    694694                  ! zcof =  l²/q² 
    695695                  zcof = hmxl_b(ji,jj,jk) * hmxl_b(ji,jj,jk) / ( 2._wp*eb(ji,jj,jk) ) 
     
    711711      CASE ( 2, 3 )               ! Canuto stability functions 
    712712         DO jk = 2, jpkm1 
    713             DO jj = k_Jstr, k_Jend  
    714                DO ji = k_Istr, k_Iend 
     713            DO jj = tnldj, tnlej  
     714               DO ji = tnldi, tnlei 
    715715                  ! zcof =  l²/q² 
    716716                  zcof = hmxl_b(ji,jj,jk)*hmxl_b(ji,jj,jk) / ( 2._wp * eb(ji,jj,jk) ) 
     
    745745 
    746746!!gm should be done for ISF (top boundary cond.) 
    747       DO jj = k_Jstr, k_Jend  
    748          DO ji = k_Istr, k_Iend 
     747      DO jj = tnldj, tnlej  
     748         DO ji = tnldi, tnlei 
    749749            zstm(ji,jj,mbkt(ji,jj)+1) = zstm(ji,jj,mbkt(ji,jj)) 
    750750         END DO 
     
    754754      ! The computation below could be restrained to jk=2 to jpkm1 if GOTM style Dirichlet conditions are used 
    755755      DO jk = 1, jpk 
    756          DO jj = k_Jstr, k_Jend  
    757             DO ji = k_Istr, k_Iend 
     756         DO jj = tnldj, tnlej  
     757            DO ji = tnldi, tnlei 
    758758               zsqen         = SQRT( 2._wp * en(ji,jj,jk) ) * hmxl_n(ji,jj,jk) 
    759759               zav           = zsqen * zstt(ji,jj,jk) 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfiwm.F90

    r8055 r8279  
    150150      !                        !* Critical slope mixing: distribute energy over the time-varying ocean depth, 
    151151      !                                                 using an exponential decay from the seafloor. 
    152       DO jj = k_Jstr, k_Jend 
    153          DO ji = k_Istr, k_Iend     ! part independent of the level 
     152      DO jj = tnldj, tnlej 
     153         DO ji = tnldi, tnlei     ! part independent of the level 
    154154            zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1)       ! depth of the ocean 
    155155            zfact(ji,jj) = rau0 * (  1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) )  ) 
     
    158158      END DO 
    159159      DO jk = 2, jpkm1              ! complete with the level-dependent part 
    160          DO jj = k_Jstr, k_Jend 
    161             DO ji = k_Istr, k_Iend 
     160         DO jj = tnldj, tnlej 
     161            DO ji = tnldi, tnlei 
    162162               emix_iwm(ji,jj,jk) = zfact(ji,jj) * wmask(ji,jj,jk)                              &  
    163163                  &   * (  EXP( ( gde3w_n(ji,jj,jk  ) - zhdep(ji,jj) ) / hcri_iwm(ji,jj) )      & 
     
    185185         ! 
    186186         WHERE( zfact(WRK_2D) /= 0 )   zfact(WRK_2D) = epyc_iwm(WRK_2D) / ( rau0 * zfact(WRK_2D) ) 
    187 !         DO jj = k_Jstr, k_Jend 
    188 !            DO ji = k_Istr, k_Iend 
     187!         DO jj = tnldj, tnlej 
     188!            DO ji = tnldi, tnlei 
    189189!               IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rau0 * zfact(ji,jj) ) 
    190190!            END DO 
     
    203203         ! 
    204204         WHERE( zfact(WRK_2D) /= 0 )   zfact(WRK_2D) = epyc_iwm(WRK_2D) / ( rau0 * zfact(WRK_2D) ) 
    205 !         DO jj = k_Jstr, k_Jend 
    206 !            DO ji = k_Istr, k_Iend 
     205!         DO jj = tnldj, tnlej 
     206!            DO ji = tnldi, tnlei 
    207207!               IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rau0 * zfact(ji,jj) ) 
    208208!            END DO 
     
    224224!         zfact(WRK_2D)    = zfact(WRK_2D) + e3w_n(WRK_2D,jk) * SQRT(  MAX( 0._wp, rn2(WRK_2D,jk) )  ) 
    225225!         zwkb (WRK_2D,jk) = zfact(WRK_2D) 
    226          DO jj = k_Jstr, k_Jend 
    227             DO ji = k_Istr, k_Iend 
     226         DO jj = tnldj, tnlej 
     227            DO ji = tnldi, tnlei 
    228228               zztemp = zfact(ji,jj) + e3w_n(ji,jj,jk) * SQRT(  MAX( 0._wp, rn2(ji,jj,jk) )  ) 
    229229               zfact(ji,jj)    = zztemp 
     
    234234      ! 
    235235      DO jk = 2, jpkm1 
    236          DO jj = k_Jstr, k_Jend 
    237             DO ji = k_Istr, k_Iend 
     236         DO jj = tnldj, tnlej 
     237            DO ji = tnldi, tnlei 
    238238               IF( zfact(ji,jj) /= 0 )   zwkb(ji,jj,jk) = zhdep(ji,jj) * ( zfact(ji,jj) - zwkb(ji,jj,jk) )   & 
    239239                  &                                     * wmask(ji,jj,jk) / zfact(ji,jj) 
     
    245245      zweight(WRK_3D) = 0._wp 
    246246      DO jk = 2, jpkm1 
    247          zweight(WRK_2D,jk) = MAX( 0._wp, rn2(WRK_2D,jk) ) * hbot_iwm(:,:)     & 
     247         zweight(WRK_2D,jk) = MAX( 0._wp, rn2(WRK_2D,jk) ) * hbot_iwm(WRK_2D)  & 
    248248            &               * (  EXP( -zwkb(WRK_2D,jk  ) / hbot_iwm(WRK_2D) )  & 
    249249            &                  - EXP( -zwkb(WRK_2D,jk-1) / hbot_iwm(WRK_2D) )  ) 
     
    256256      ! 
    257257      WHERE( zfact(WRK_2D) /= 0 )   zfact(WRK_2D) = ebot_iwm(WRK_2D) / ( rau0 * zfact(WRK_2D) ) 
    258 !      DO jj = k_Jstr, k_Jend 
    259 !         DO ji = k_Istr, k_Iend 
     258!      DO jj = tnldj, tnlej 
     259!         DO ji = tnldi, tnlei 
    260260!            IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = ebot_iwm(ji,jj) / ( rau0 * zfact(ji,jj) ) 
    261261!         END DO 
     
    290290      IF( ln_mevar ) THEN              ! Variable mixing efficiency case : modify zav_wave in the 
    291291         DO jk = 2, jpkm1              ! energetic (Reb > 480) and buoyancy-controlled (Reb <10.224 ) regimes 
    292             DO jj = k_Jstr, k_Jend 
    293                DO ji = k_Istr, k_Iend 
     292            DO jj = tnldj, tnlej 
     293               DO ji = tnldi, tnlei 
    294294                  IF( zReb(ji,jj,jk) > 480.00_wp ) THEN 
    295295                     zav_wave(ji,jj,jk) = 3.6515_wp * znu_w(ji,jj,jk) * SQRT( zReb(ji,jj,jk) ) 
     
    310310!!gm used of glosum 3D.... 
    311311         DO jk = 2, jpkm1 
    312             DO jj = k_Jstr, k_Jend 
    313                DO ji = k_Istr, k_Iend 
     312            DO jj = tnldj, tnlej 
     313               DO ji = tnldi, tnlei 
    314314                  zztemp = zztemp + e3w_n(ji,jj,jk) * e1e2t(ji,jj)   & 
    315315                     &         * MAX( 0._wp, rn2(ji,jj,jk) ) * zav_wave(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj) 
     
    317317            END DO 
    318318         END DO 
    319          IF( lk_mpp )   CALL mpp_sum( zztemp ) 
     319!         IF( lk_mpp )   CALL mpp_sum( zztemp ) 
    320320         zztemp = rau0 * zztemp ! Global integral of rauo * Kz * N^2 = power contributing to mixing  
    321321         ! 
     
    335335      IF( ln_tsdiff ) THEN          !* Option for differential mixing of salinity and temperature 
    336336         DO jk = 2, jpkm1              ! Calculate S/T diffusivity ratio as a function of Reb 
    337             DO jj = k_Jstr, k_Jend 
    338                DO ji = k_Istr, k_Iend 
     337            DO jj = tnldj, tnlej 
     338               DO ji = tnldi, tnlei 
    339339                  zav_ratio(ji,jj,jk) = ( 0.505_wp + 0.495_wp *                                                                  & 
    340340                      &   TANH(    0.92_wp * (   LOG10(  MAX( 1.e-20_wp, zReb(ji,jj,jk) * 5._wp * r1_6 )  ) - 0.60_wp   )    )   & 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfphy.F90

    r8055 r8279  
    3232   USE lbclnk         ! lateral boundary conditions 
    3333   USE lib_mpp        ! distribued memory computing 
     34#if defined key_omp 
     35   USE dom_omp        ! omp threads decomposition of MPI subdomain 
     36#endif 
    3437 
    3538   IMPLICIT NONE 
     
    4750 
    4851   LOGICAL ::   l_zdfsh2   ! shear production term flag (=F for CST, =T otherwise (i.e. TKE, GLS, RIC)) 
     52   INTEGER :: ARG_2D 
    4953 
    5054   !! * Substitutions 
     
    216220      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    217221      ! 
    218       INTEGER ::   ji, jj, jk   ! dummy loop indice 
     222      INTEGER :: jk   ! dummy loop indice 
    219223!!OMP      REAL(wp), DIMENSION(WRK_3D) ::   zsh2   ! shear production 
    220224      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zsh2   ! shear production 
    221225      !! --------------------------------------------------------------------- 
    222226      !       
    223 !!OMP ===>>>>   Open-MP   to be defined elsewhere    
    224       ! 
    225       INTEGER ::   ARG_2D 
    226       ! 
     227      ! 
     228      IF (kt==nn_it000) THEN 
     229#ifdef key_omp 
     230         CALL tile_dec_2D 
     231#else 
    227232#if defined key_vectopt_loop 
    228       k_Istr = 1   ;   k_Iend = jpi 
     233         tnldi = 1   ;   tnlei = jpi 
    229234#else 
    230       k_Istr = 2   ;   k_Iend = jpim1 
     235         tnldi = 2   ;   tnlei = jpim1 
    231236#endif 
    232       k_Jstr = 2   ;   k_Jend = jpjm1 
    233       ! 
    234 !!OMP <<<<===   end 
    235        
     237         tnldj = 2   ;   tnlej = jpjm1 
     238#endif 
     239      END IF 
     240      ! 
     241      CALL zdf_bfr( kt )                        !* bottom friction (if quadratic) 
     242      ! 
     243!$OMP PARALLEL PRIVATE(zsh2) 
    236244      ALLOCATE( zsh2(WRK_3D) ) 
    237        
    238        
    239       ! 
    240       CALL zdf_bfr( kt )                        !* bottom friction (if quadratic) 
    241       ! 
    242  
    243245      !                          !==  Kz from chosen turbulent closure  ==!   (avm_k, avt_k) 
    244        
    245246      IF( l_zdfsh2 )   &                        !* shear production at w-points (energy conserving form) 
    246247         CALL zdf_sh2( ARG_2D, ub, vb, un, vn, avm_k,   &   ! <<== in  fields 
     
    248249 
    249250      ! 
     251!$OMP BARRIER 
    250252      SELECT CASE ( nzdf_phy )                  !* Vertical eddy viscosity and diffusivity coefficients at w-points 
    251253      CASE( np_RIC )   ;   CALL zdf_ric( ARG_2D, kt, gdept_n, zsh2, avm_k, avt_k )         ! Richardson number dependent Kz 
     
    257259!!gm         avm_k(WRK_3D) = rn_avm0 * wmask(WRK_3D) 
    258260      END SELECT 
     261      ! 
     262      DEALLOCATE( zsh2 ) 
    259263      !   
    260264      !                          !==  ocean Kz  ==!   (avt, avs, avm) 
     
    271275      ! 
    272276      IF( ln_zdfevd )   CALL zdf_evd( ARG_2D, kt, avm, avt )      !* convection: enhanced vertical eddy diffusivity 
    273       ! 
     277 
    274278      !                                         !* double diffusive mixing 
    275279      IF( ln_zdfddm ) THEN                            ! update avt and compute avs 
     
    282286      IF( ln_zdfswm )   CALL zdf_swm( ARG_2D, kt, avm, avt, avs )   ! surface  wave (Qiao et al. 2004)  
    283287      IF( ln_zdfiwm )   CALL zdf_iwm( ARG_2D, kt, avm, avt, avs )   ! internal wave (de Lavergne et al 2017) 
    284  
     288!$OMP END PARALLEL 
     289      ! 
    285290 
    286291      !                                         !* Lateral boundary conditions (sign unchanged) 
     
    301306      ENDIF 
    302307      ! 
    303       DEALLOCATE( zsh2 ) 
    304       ! 
    305308   END SUBROUTINE zdf_phy 
    306309 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfric.F90

    r8056 r8279  
    164164      !                       !==  avm and avt = F(Richardson number)  ==! 
    165165      DO jk = 2, jpkm1 
    166          DO jj = k_Jstr, k_Jend 
    167             DO ji = k_Jstr, k_Iend        ! coefficient = F(richardson number) (avm-weighted Ri) 
     166         DO jj = tnldj, tnlej 
     167            DO ji = tnldi, tnlei        ! coefficient = F(richardson number) (avm-weighted Ri) 
    168168               zcfRi = 1._wp / (  1._wp + rn_alp * MAX(  0._wp , p_avm(ji,jj,jk) * rn2(ji,jj,jk) / ( p_sh2(ji,jj,jk) + 1.e-20 ) )  ) 
    169169               zav   = rn_avmri * zcfRi**nn_ric 
     
    180180      IF( ln_mldw ) THEN      !==  set a minimum value in the Ekman layer  ==! 
    181181         ! 
    182          DO jj = k_Jstr, k_Jend     !* Ekman depth 
    183             DO ji = k_Jstr, k_Iend 
     182         DO jj = tnldj, tnlej     !* Ekman depth 
     183            DO ji = tnldi, tnlei 
    184184               zustar = SQRT( taum(ji,jj) * r1_rau0 ) 
    185185               zed    = rn_ekmfc * zustar / ( ABS( ff_t(ji,jj) ) + rsmall )     ! Ekman depth 
     
    188188         END DO 
    189189         DO jk = 2, jpkm1           !* minimum mixing coeff. within the Ekman layer 
    190             DO jj = k_Jstr, k_Jend 
    191                DO ji = k_Jstr, k_Iend 
     190            DO jj = tnldj, tnlej 
     191               DO ji = tnldi, tnlei 
    192192                  IF( pdept(ji,jj,jk) < zh_ekm(ji,jj) ) THEN 
    193193                     p_avm(ji,jj,jk) = MAX(  p_avm(ji,jj,jk), rn_wvmix  ) * wmask(ji,jj,jk) 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfsh2.F90

    r8055 r8279  
    6262      ! 
    6363      DO jk = 2, jpkm1 
    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 
     64         DO jj = tnldj-1, tnlej      !* 2 x shear production at uw- and vw-points (energy conserving form) 
     65            DO ji = tnldi-1, tnlei 
    6666               zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 
    6767                  &         * (   pun(ji,jj,jk-1) -   pun(ji,jj,jk) ) & 
     
    7272            END DO 
    7373         END DO 
    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) 
     74         DO jj = tnldj, tnlej        !* shear production at w-point 
     75            DO ji = tnldi, tnlei           ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 
    7676               p_sh2(ji,jj,jk) = 0.25 * (   ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) )   & 
    7777                  &                       + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) )   ) 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfswm.F90

    r8055 r8279  
    6464      zcoef = 1._wp * 0.353553_wp 
    6565      DO jk = 2, jpkm1 
    66          DO jj = k_Jstr, k_Jend 
    67             DO ji = k_Istr, k_Iend 
     66         DO jj = tnldj, tnlej 
     67            DO ji = tnldi, tnlei 
    6868               zqb = zcoef * hsw(ji,jj) * tsd2d(ji,jj) * EXP( -3. * wnum(ji,jj) * gdepw_n(ji,jj,jk) ) * wmask(ji,jj,jk) 
    6969               ! 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r8056 r8279  
    220220      ! 
    221221      IF( nn_timing == 1 )  CALL timing_start('tke_tke') 
     222 
    222223      ! 
    223224      zbbrau = rn_ebb / rau0       ! Local constant initialisation 
     
    231232      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    232233      IF ( ln_isfcav ) THEN 
    233          DO jj = k_Jstr, k_Jend            ! en(mikt(ji,jj))   = rn_emin 
    234             DO ji = k_Istr, k_Iend 
     234         DO jj = tnldj, tnlej            ! en(mikt(ji,jj))   = rn_emin 
     235            DO ji = tnldi, tnlei 
    235236               en(ji,jj,mikt(ji,jj)) = rn_emin * tmask(ji,jj,1) 
    236237            END DO 
    237238         END DO 
    238239      END IF 
    239       DO jj = k_Jstr, k_Jend            ! en(1)   = rn_ebb taum / rau0  (min value rn_emin0) 
    240          DO ji = k_Istr, k_Iend 
     240      DO jj = tnldj, tnlej            ! en(1)   = rn_ebb taum / rau0  (min value rn_emin0) 
     241         DO ji = tnldi, tnlei 
    241242            en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) * tmask(ji,jj,1) 
    242243         END DO 
     
    254255      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    255256      !                     en(bot)   = (rn_ebb0/rau0)*0.5*sqrt(u_botfr^2+v_botfr^2) (min value rn_emin) 
    256 !!    DO jj = k_Jstr, k_Jend 
    257 !!       DO ji = k_Jstr, k_Iend 
     257!!    DO jj = tnldj, tnlej 
     258!!       DO ji = tnldj, tnlei 
    258259!!          ztx2 = bfrua(ji-1,jj) * ub(ji-1,jj,mbku(ji-1,jj)) + & 
    259260!!                 bfrua(ji  ,jj) * ub(ji  ,jj,mbku(ji  ,jj) ) 
     
    281282         imlc(WRK_2D) = mbkt(WRK_2D) + 1       ! Initialization to the number of w ocean point (=2 over land) 
    282283         DO jk = jpkm1, 2, -1 
    283             DO jj = k_Jstr, k_Jend               ! Last w-level at which zpelc>=0.5*us*us  
    284                DO ji = k_Istr, k_Iend            !      with us=0.016*wind(starting from jpk-1) 
     284            DO jj = tnldj, tnlej               ! Last w-level at which zpelc>=0.5*us*us  
     285               DO ji = tnldi, tnlei            !      with us=0.016*wind(starting from jpk-1) 
    285286                  zus  = zcof * taum(ji,jj) 
    286287                  IF( zpelc(ji,jj,jk) > zus )   imlc(ji,jj) = jk 
     
    289290         END DO 
    290291         !                               ! finite LC depth 
    291          DO jj = k_Jstr, k_Jend  
    292             DO ji = k_Istr, k_Iend 
     292         DO jj = tnldj, tnlej  
     293            DO ji = tnldi, tnlei 
    293294               zhlc(ji,jj) = pdepw(ji,jj,imlc(ji,jj)) 
    294295            END DO 
     
    296297         zcof = 0.016 / SQRT( zrhoa * zcdrag ) 
    297298         DO jk = 2, jpkm1         !* TKE Langmuir circulation source term added to en 
    298             DO jj = k_Jstr, k_Jend 
    299                DO ji = k_Istr, k_Iend 
     299            DO jj = tnldj, tnlej 
     300               DO ji = tnldi, tnlei 
    300301                  zus  = zcof * SQRT( taum(ji,jj) )           ! Stokes drift 
    301302                  !                                           ! vertical velocity due to LC 
     
    320321      IF( nn_pdl == 1 ) THEN      !* Prandtl number = F( Ri ) 
    321322         DO jk = 2, jpkm1 
    322             DO jj = k_Jstr, k_Jend 
    323                DO ji = k_Istr, k_Iend 
     323            DO jj = tnldj, tnlej 
     324               DO ji = tnldi, tnlei 
    324325                  !                             ! local Richardson number 
    325326                  zri = MAX( rn2b(ji,jj,jk), 0._wp ) * p_avm(ji,jj,jk) / ( p_sh2(ji,jj,jk) + rn_bshear ) 
     
    332333      !          
    333334      DO jk = 2, jpkm1           !* Matrix and right hand side in en 
    334          DO jj = k_Jstr, k_Jend 
    335             DO ji = k_Istr, k_Iend 
     335         DO jj = tnldj, tnlej 
     336            DO ji = tnldi, tnlei 
    336337               zcof   = zfact1 * tmask(ji,jj,jk) 
    337338               !                                   ! A minimum of 2.e-5 m2/s is imposed on TKE vertical 
     
    356357      !                          !* Matrix inversion from level 2 (tke prescribed at level 1) 
    357358      DO jk = 3, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    358          DO jj = k_Jstr, k_Jend 
    359             DO ji = k_Istr, k_Iend 
     359         DO jj = tnldj, tnlej 
     360            DO ji = tnldi, tnlei 
    360361               zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 
    361362            END DO 
    362363         END DO 
    363364      END DO 
    364       DO jj = k_Jstr, k_Jend                             ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    365          DO ji = k_Istr, k_Iend 
     365      DO jj = tnldj, tnlej                             ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
     366         DO ji = tnldi, tnlei 
    366367            zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1)    ! Surface boudary conditions on tke 
    367368         END DO 
    368369      END DO 
    369370      DO jk = 3, jpkm1 
    370          DO jj = k_Jstr, k_Jend 
    371             DO ji = k_Istr, k_Iend 
     371         DO jj = tnldj, tnlej 
     372            DO ji = tnldi, tnlei 
    372373               zd_lw(ji,jj,jk) = en(ji,jj,jk) - zd_lw(ji,jj,jk) / zdiag(ji,jj,jk-1) *zd_lw(ji,jj,jk-1) 
    373374            END DO 
    374375         END DO 
    375376      END DO 
    376       DO jj = k_Jstr, k_Jend                             ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    377          DO ji = k_Istr, k_Iend 
     377      DO jj = tnldj, tnlej                             ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
     378         DO ji = tnldi, tnlei 
    378379            en(ji,jj,jpkm1) = zd_lw(ji,jj,jpkm1) / zdiag(ji,jj,jpkm1) 
    379380         END DO 
    380381      END DO 
    381382      DO jk = jpk-2, 2, -1 
    382          DO jj = k_Jstr, k_Jend 
    383             DO ji = k_Istr, k_Iend 
     383         DO jj = tnldj, tnlej 
     384            DO ji = tnldi, tnlei 
    384385               en(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * en(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 
    385386            END DO 
     
    387388      END DO 
    388389      DO jk = 2, jpkm1                             ! set the minimum value of tke 
    389          DO jj = k_Jstr, k_Jend 
    390             DO ji = k_Istr, k_Iend 
     390         DO jj = tnldj, tnlej 
     391            DO ji = tnldi, tnlei 
    391392               en(ji,jj,jk) = MAX( en(ji,jj,jk), rn_emin ) * wmask(ji,jj,jk) 
    392393            END DO 
     
    402403      IF( nn_etau == 1 ) THEN           !* penetration below the mixed layer (rn_efr fraction) 
    403404         DO jk = 2, jpkm1 
    404             DO jj = k_Jstr, k_Jend 
    405                DO ji = k_Istr, k_Iend 
     405            DO jj = tnldj, tnlej 
     406               DO ji = tnldi, tnlei 
    406407                  en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -pdepw(ji,jj,jk) / htau(ji,jj) )   & 
    407408                     &                                 * MAX(0.,1._wp - 2.*fr_i(ji,jj) )  * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     
    410411         END DO 
    411412      ELSEIF( nn_etau == 2 ) THEN       !* act only at the base of the mixed layer (jk=nmln)  (rn_efr fraction) 
    412          DO jj = k_Jstr, k_Jend 
    413             DO ji = k_Istr, k_Iend 
     413         DO jj = tnldj, tnlej 
     414            DO ji = tnldi, tnlei 
    414415               jk = nmln(ji,jj) 
    415416               en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -pdepw(ji,jj,jk) / htau(ji,jj) )   & 
     
    419420      ELSEIF( nn_etau == 3 ) THEN       !* penetration belox the mixed layer (HF variability) 
    420421         DO jk = 2, jpkm1 
    421             DO jj = k_Jstr, k_Jend 
    422                DO ji = k_Istr, k_Iend 
     422            DO jj = tnldj, tnlej 
     423               DO ji = tnldi, tnlei 
    423424                  ztx2 = utau(ji-1,jj  ) + utau(ji,jj) 
    424425                  zty2 = vtau(ji  ,jj-1) + vtau(ji,jj) 
     
    433434      ENDIF 
    434435      ! 
     436 
    435437      IF( nn_timing == 1 )  CALL timing_stop('tke_tke') 
    436438      ! 
     
    498500      IF( ln_mxl0 ) THEN            ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 
    499501         zraug = vkarmn * 2.e5_wp / ( rau0 * grav ) 
    500          DO jj = k_Jstr, k_Jend 
    501             DO ji = k_Istr, k_Iend 
     502         DO jj = tnldj, tnlej 
     503            DO ji = tnldi, tnlei 
    502504               zmxlm(ji,jj,1) = MAX( rn_mxl0, zraug * taum(ji,jj) * tmask(ji,jj,1) ) 
    503505            END DO 
     
    508510      ! 
    509511      DO jk = 2, jpkm1              ! interior value : l=sqrt(2*e/n^2) 
    510          DO jj = k_Jstr, k_Jend 
    511             DO ji = k_Istr, k_Iend 
     512         DO jj = tnldj, tnlej 
     513            DO ji = tnldi, tnlei 
    512514               zrn2 = MAX( rn2(ji,jj,jk), rsmall ) 
    513515               zmxlm(ji,jj,jk) = MAX(  rmxl_min,  SQRT( 2._wp * en(ji,jj,jk) / zrn2 )  ) 
     
    527529      CASE ( 0 )           ! bounded by the distance to surface and bottom 
    528530         DO jk = 2, jpkm1 
    529             DO jj = k_Jstr, k_Jend 
    530                DO ji = k_Istr, k_Iend 
     531            DO jj = tnldj, tnlej 
     532               DO ji = tnldi, tnlei 
    531533                  zemxl = MIN( pdepw(ji,jj,jk) - pdepw(ji,jj,mikt(ji,jj)), zmxlm(ji,jj,jk),   & 
    532534                  &            pdepw(ji,jj,mbkt(ji,jj)+1) - pdepw(ji,jj,jk) ) 
     
    540542      CASE ( 1 )           ! bounded by the vertical scale factor 
    541543         DO jk = 2, jpkm1 
    542             DO jj = k_Jstr, k_Jend 
    543                DO ji = k_Istr, k_Iend 
     544            DO jj = tnldj, tnlej 
     545               DO ji = tnldi, tnlei 
    544546                  zemxl = MIN( p_e3w(ji,jj,jk), zmxlm(ji,jj,jk) ) 
    545547                  zmxlm(ji,jj,jk) = zemxl 
     
    551553      CASE ( 2 )           ! |dk[xml]| bounded by e3t : 
    552554         DO jk = 2, jpkm1         ! from the surface to the bottom : 
    553             DO jj = k_Jstr, k_Jend 
    554                DO ji = k_Istr, k_Iend 
     555            DO jj = tnldj, tnlej 
     556               DO ji = tnldi, tnlei 
    555557                  zmxlm(ji,jj,jk) = MIN( zmxlm(ji,jj,jk-1) + p_e3t(ji,jj,jk-1), zmxlm(ji,jj,jk) ) 
    556558               END DO 
     
    558560         END DO 
    559561         DO jk = jpkm1, 2, -1     ! from the bottom to the surface : 
    560             DO jj = k_Jstr, k_Jend 
    561                DO ji = k_Istr, k_Iend 
     562            DO jj = tnldj, tnlej 
     563               DO ji = tnldi, tnlei 
    562564                  zemxl = MIN( zmxlm(ji,jj,jk+1) + p_e3t(ji,jj,jk+1), zmxlm(ji,jj,jk) ) 
    563565                  zmxlm(ji,jj,jk) = zemxl 
     
    569571      CASE ( 3 )           ! lup and ldown, |dk[xml]| bounded by e3t : 
    570572         DO jk = 2, jpkm1         ! from the surface to the bottom : lup 
    571             DO jj = k_Jstr, k_Jend 
    572                DO ji = k_Istr, k_Iend 
     573            DO jj = tnldj, tnlej 
     574               DO ji = tnldi, tnlei 
    573575                  zmxld(ji,jj,jk) = MIN( zmxld(ji,jj,jk-1) + p_e3t(ji,jj,jk-1), zmxlm(ji,jj,jk) ) 
    574576               END DO 
     
    576578         END DO 
    577579         DO jk = jpkm1, 2, -1     ! from the bottom to the surface : ldown 
    578             DO jj = k_Jstr, k_Jend 
    579                DO ji = k_Istr, k_Iend 
     580            DO jj = tnldj, tnlej 
     581               DO ji = tnldi, tnlei 
    580582                  zmxlm(ji,jj,jk) = MIN( zmxlm(ji,jj,jk+1) + p_e3t(ji,jj,jk+1), zmxlm(ji,jj,jk) ) 
    581583               END DO 
     
    583585         END DO 
    584586         DO jk = 2, jpkm1 
    585             DO jj = k_Jstr, k_Jend 
    586                DO ji = k_Istr, k_Iend 
     587            DO jj = tnldj, tnlej 
     588               DO ji = tnldi, tnlei 
    587589                  zemlm = MIN ( zmxld(ji,jj,jk),  zmxlm(ji,jj,jk) ) 
    588590                  zemlp = SQRT( zmxld(ji,jj,jk) * zmxlm(ji,jj,jk) ) 
     
    600602      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    601603      DO jk = 1, jpkm1            !* vertical eddy viscosity & diffivity at w-points 
    602          DO jj = k_Jstr, k_Jend 
    603             DO ji = k_Istr, k_Iend 
     604         DO jj = tnldj, tnlej 
     605            DO ji = tnldi, tnlei 
    604606               zsqen = SQRT( en(ji,jj,jk) ) 
    605607               zav   = rn_ediff * zmxlm(ji,jj,jk) * zsqen 
     
    614616      IF( nn_pdl == 1 ) THEN      !* Prandtl number case: update avt 
    615617         DO jk = 2, jpkm1 
    616             DO jj = k_Jstr, k_Jend 
    617                DO ji = k_Istr, k_Iend 
     618            DO jj = tnldj, tnlej 
     619               DO ji = tnldi, tnlei 
    618620                  p_avt(ji,jj,jk)   = MAX( apdlr(ji,jj,jk) * p_avt(ji,jj,jk), avtb_2d(ji,jj) * avtb(jk) ) * tmask(ji,jj,jk) 
    619621              END DO 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/domain_substitute.h90

    r8055 r8279  
    44   !! ** purpose :   local Sub-Domain: arguments, dimension & semi-column loops 
    55   !!---------------------------------------------------------------------- 
    6 #define ARG_2D   k_Istr, k_Iend, k_Jstr, k_Jend 
     6#define ARG_2D   tnldi, tnlei, tnldj, tnlej 
    77 
    8 #define WRK_2D             k_Istr:k_Iend,k_Jstr:k_Jend 
    9 #define WRK_2De(s,e)       k_Istr s:k_Iend e,k_Jstr s:k_Jend e 
     8#define WRK_2D             tnldi:tnlei,tnldj:tnlej 
     9#define WRK_2De(s,e)       tnldi s:tnlei e,tnldj s:tnlej e 
    1010 
    11 #define WRK_3D             k_Istr:k_Iend,k_Jstr:k_Jend,1:jpk 
    12 #define WRK_3De(s,e,t,b)   k_Istr s:k_Iend e,k_Jstr s:k_Jend e,1 t:jpk t 
     11#define WRK_3D             tnldi:tnlei,tnldj:tnlej,1:jpk 
     12#define WRK_3De(s,e,t,b)   tnldi s:tnlei e,tnldj s:tnlej e,1 t:jpk t 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/SETTE/prepare_job.sh

    r7753 r8279  
    9494JOB_FILE=$5 
    9595NXIO_PROC=$6 
     96NOMP_THR=$7 
    9697 
    9798# export EXE_DIR. This directory is used to execute model  
     
    293294                                echo NB_PROC_NODE ${NB_PROC_NODE} 
    294295                                ;; 
     296                        ifort_athena_*) 
     297                                NB_PROC_NODE=$(( 16 / NOMP_THR )) 
     298                                ;; 
    295299         *) 
    296300            NB_NODES=${NB_PROC} 
     
    305309             -e"s/TOTAL_NPROCS/${TOTAL_NPROCS}/" \ 
    306310             -e"s/NPROCS/${NB_PROC}/" \ 
     311             -e"s/OMP_NTHR/${NOMP_THR}/" \ 
    307312             -e"s/NXIOPROCS/${NXIO_PROC}/" \ 
    308313             -e"s:DEF_SETTE_DIR:${SETTE_DIR}:" -e"s:DEF_INPUT_DIR:${INPUT_DIR}:" \ 
     
    321326              XC40_METO*) 
    322327                    cat run_sette_test.job | sed -e"s/SELECT/${SELECT}/" > run_sette_test1.job 
     328                    mv run_sette_test1.job run_sette_test.job 
     329                    ;; 
     330              ifort_athena_*) 
     331                    cat run_sette_test.job | sed -e"s/NPROC_NODE/${NB_PROC_NODE}/" > run_sette_test1.job 
    323332                    mv run_sette_test1.job run_sette_test.job 
    324333                    ;; 
  • branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/SETTE/sette.sh

    r8055 r8279  
    3636#                      "yes" to run in MPMD (detached) mode with stand-alone IO servers 
    3737#                      "no"  to run in SPMD (attached) mode without separate IO servers  
     38# USING_OMP         : flag to control the use of OpenMP parallelization 
    3839# NUM_XIOSERVERS    : number of stand-alone IO servers to employ 
    3940#                     set to zero if USING_MPMD="no" 
     
    8889# 
    8990# Compiler among those in NEMOGCM/ARCH 
    90 COMPILER=X64_ADA 
    91  
    92 export BATCH_COMMAND_PAR="llsubmit" 
     91# 
     92COMPILER=ifort_athena_xios_omp 
     93 
     94export BATCH_COMMAND_PAR="bsub < " 
    9395export BATCH_COMMAND_SEQ=$BATCH_COMMAND_PAR 
    9496export INTERACT_FLAG="no" 
    9597export MPIRUN_FLAG="yes" 
    9698export USING_XIOS="yes" 
     99export USING_OMP="yes" 
    97100# 
    98101export DEL_KEYS="key_iomput" 
     
    119122   echo "Incompatible choices. MPMD mode requires the XIOS server" 
    120123   exit 
     124fi 
     125# 
     126# Settings which control the hybrid parallel execution 
     127# 
     128OMP_NTHR=1 
     129ADD_OMP_KEY="" 
     130if [ ${USING_OMP} == "yes" ] 
     131 then 
     132   OMP_NTHR=4 
     133   ADD_OMP_KEY="key_omp" 
    121134fi 
    122135 
     
    152165    export TEST_NAME="LONG" 
    153166    cd ${CONFIG_DIR0} 
    154     . ./makenemo -m ${CMP_NAM} -n GYREPIS_LONG -r GYRE_PISCES -j 8 del_key ${DEL_KEYS} 
     167    if [ ${USING_OMP} == "yes" ] 
     168    then 
     169       . ./makenemo -m ${CMP_NAM} -n GYREPIS_LONG_omp -r GYRE_PISCES -j 8 add_key ${ADD_OMP_KEY} del_key ${DEL_KEYS} 
     170    else 
     171       . ./makenemo -m ${CMP_NAM} -n GYREPIS_LONG_mpi -r GYRE_PISCES -j 8 del_key ${DEL_KEYS} 
     172    fi 
    155173    cd ${SETTE_DIR} 
    156174    . ./param.cfg 
     
    161179    if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 
    162180    cd ${EXE_DIR}   
     181    set_namelist namelist_cfg nn_GYRE 12 
     182    set_namelist namelist_cfg ln_bench .true. 
    163183    set_namelist namelist_cfg cn_exp \"GYREPIS_LONG\" 
    164184    set_namelist namelist_cfg nn_it000 1 
     
    169189    set_namelist namelist_cfg ln_read_cfg .false. 
    170190    set_namelist namelist_cfg nn_fwb 0 
    171     set_namelist namelist_cfg jpni 4 
    172     set_namelist namelist_cfg jpnj 8 
    173     set_namelist namelist_cfg jpnij 32 
    174     if [ ${USING_MPMD} == "yes" ] ; then 
    175        set_xio_using_server iodef.xml true 
    176     else 
    177        set_xio_using_server iodef.xml false 
    178     fi 
    179     cd ${SETTE_DIR} 
    180     . ./prepare_job.sh input_GYRE.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 
     191    set_namelist namelist_cfg jpni 8 
     192    set_namelist namelist_cfg jpnj 4 
     193    set_namelist namelist_cfg jpnij 32 
     194    set_namelist namelist_cfg jtni 2      # to be set when using OpenMP 
     195    if [ ${USING_MPMD} == "yes" ] ; then 
     196       set_xio_using_server iodef.xml true 
     197    else 
     198       set_xio_using_server iodef.xml false 
     199    fi 
     200    cd ${SETTE_DIR} 
     201    . ./prepare_job.sh input_GYRE.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} ${OMP_NTHR} 
    181202 
    182203    cd ${SETTE_DIR} 
     
    184205    . ./prepare_exe_dir.sh 
    185206    cd ${EXE_DIR} 
     207    set_namelist namelist_cfg nn_GYRE 12 
     208    set_namelist namelist_cfg ln_bench .true. 
    186209    set_namelist namelist_cfg cn_exp \"GYREPIS_SHORT\" 
    187210    set_namelist namelist_cfg nn_it000 61 
     
    194217    set_namelist namelist_cfg ln_read_cfg .false. 
    195218    set_namelist namelist_cfg nn_fwb 0 
    196     set_namelist namelist_cfg jpni 4 
    197     set_namelist namelist_cfg jpnj 8 
    198     set_namelist namelist_cfg jpnij 32 
     219    set_namelist namelist_cfg jpni 8 
     220    set_namelist namelist_cfg jpnj 4 
     221    set_namelist namelist_cfg jpnij 32 
     222    set_namelist namelist_cfg jtni 2      # to be set when using OpenMP 
    199223    set_namelist namelist_top_cfg ln_rsttr .true. 
    200224    set_namelist namelist_top_cfg nn_rsttr 2 
     
    218242    fi 
    219243    cd ${SETTE_DIR} 
    220     . ./prepare_job.sh input_GYRE.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 
     244    . ./prepare_job.sh input_GYRE.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} ${OMP_NTHR} 
    221245    cd ${SETTE_DIR} 
    222246    . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 
     
    227251    export TEST_NAME="REPRO_4_8" 
    228252    cd ${CONFIG_DIR0} 
    229     . ./makenemo -m ${CMP_NAM} -n GYREPIS_32 -r GYRE_PISCES -j 8 del_key ${DEL_KEYS} 
    230     cd ${SETTE_DIR} 
    231     . ./param.cfg 
    232     . ./all_functions.sh 
    233     . ./prepare_exe_dir.sh 
    234     JOB_FILE=${EXE_DIR}/run_job.sh 
    235     NPROC=32 
    236     if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 
    237     cd ${EXE_DIR} 
     253    if [ ${USING_OMP} == "yes" ] 
     254    then 
     255       . ./makenemo -m ${CMP_NAM} -n GYREPIS_32_omp -r GYRE_PISCES -j 8 add_key ${ADD_OMP_KEY} del_key ${DEL_KEYS} 
     256    else 
     257       . ./makenemo -m ${CMP_NAM} -n GYREPIS_32_mpi -r GYRE_PISCES -j 8 del_key ${DEL_KEYS} 
     258    fi 
     259    cd ${SETTE_DIR} 
     260    . ./param.cfg 
     261    . ./all_functions.sh 
     262    . ./prepare_exe_dir.sh 
     263    JOB_FILE=${EXE_DIR}/run_job.sh 
     264    NPROC=32 
     265    if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 
     266    cd ${EXE_DIR} 
     267    set_namelist namelist_cfg nn_GYRE 12 
     268    set_namelist namelist_cfg ln_bench .true. 
    238269    set_namelist namelist_cfg cn_exp \"GYREPIS_48\" 
    239270    set_namelist namelist_cfg nn_it000 1 
     
    247278    set_namelist namelist_cfg jpnj 8 
    248279    set_namelist namelist_cfg jpnij 32 
    249     if [ ${USING_MPMD} == "yes" ] ; then 
    250        set_xio_using_server iodef.xml true 
    251     else 
    252        set_xio_using_server iodef.xml false 
    253     fi 
    254     cd ${SETTE_DIR} 
    255     . ./prepare_job.sh input_GYRE.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 
     280    set_namelist namelist_cfg jtni 2      # to be set when using OpenMP 
     281    if [ ${USING_MPMD} == "yes" ] ; then 
     282       set_xio_using_server iodef.xml true 
     283    else 
     284       set_xio_using_server iodef.xml false 
     285    fi 
     286    cd ${SETTE_DIR} 
     287    . ./prepare_job.sh input_GYRE.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} ${OMP_NTHR} 
    256288    cd ${SETTE_DIR} 
    257289    . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 
     
    264296    if [ -f ${JOB_FILE} ] ; then \rm ${JOB_FILE} ; fi 
    265297    cd ${EXE_DIR} 
     298    set_namelist namelist_cfg nn_GYRE 12 
     299    set_namelist namelist_cfg ln_bench .true. 
    266300    set_namelist namelist_cfg cn_exp \"GYREPIS_84\" 
    267301    set_namelist namelist_cfg nn_it000 1 
     
    275309    set_namelist namelist_cfg jpnj 4 
    276310    set_namelist namelist_cfg jpnij 32 
    277     if [ ${USING_MPMD} == "yes" ] ; then 
    278        set_xio_using_server iodef.xml true 
    279     else 
    280        set_xio_using_server iodef.xml false 
    281     fi 
    282     cd ${SETTE_DIR} 
    283     . ./prepare_job.sh input_GYRE.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} 
     311    set_namelist namelist_cfg jtni 2      # to be set when using OpenMP 
     312    if [ ${USING_MPMD} == "yes" ] ; then 
     313       set_xio_using_server iodef.xml true 
     314    else 
     315       set_xio_using_server iodef.xml false 
     316    fi 
     317    cd ${SETTE_DIR} 
     318    . ./prepare_job.sh input_GYRE.cfg $NPROC ${TEST_NAME} ${MPIRUN_FLAG} ${JOB_FILE} ${NUM_XIOSERVERS} ${OMP_NTHR} 
    284319    cd ${SETTE_DIR} 
    285320    . ./fcm_job.sh $NPROC ${JOB_FILE} ${INTERACT_FLAG} ${MPIRUN_FLAG} 
Note: See TracChangeset for help on using the changeset viewer.