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/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90 – 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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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) 
Note: See TracChangeset for help on using the changeset viewer.