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 9176 for branches/UKMO/dev_r5518_GO6_package_OMP/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90 – NEMO

Ignore:
Timestamp:
2018-01-04T13:30:03+01:00 (6 years ago)
Author:
andmirek
Message:

#2001: OMP directives

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_GO6_package_OMP/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r6498 r9176  
    227227      REAL(wp) ::   zbbrau, zesh2                   ! temporary scalars 
    228228      REAL(wp) ::   zfact1, zfact2, zfact3          !    -         - 
    229       REAL(wp) ::   ztx2  , zty2  , zcof            !    -         - 
    230       REAL(wp) ::   ztau  , zdif                    !    -         - 
     229      REAL(wp) ::   ztx2  , zty2  , zcof, zcofa     !    -         - 
     230      REAL(wp) ::   ztau  , zdif, zdifa             !    -         - 
    231231      REAL(wp) ::   zus   , zwlc  , zind            !    -         - 
    232232      REAL(wp) ::   zzd_up, zzd_lw                  !    -         - 
     
    253253      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    254254      IF ( ln_isfcav ) THEN 
     255!$OMP PARALLEL DO 
    255256         DO jj = 2, jpjm1            ! en(mikt(ji,jj))   = rn_emin 
    256257            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    259260         END DO 
    260261      END IF 
     262!$OMP PARALLEL DO 
    261263      DO jj = 2, jpjm1            ! en(1)   = rn_ebb taum / rau0  (min value rn_emin0) 
    262264         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    296298         !                        !* total energy produce by LC : cumulative sum over jk 
    297299         zpelc(:,:,1) =  MAX( rn2b(:,:,1), 0._wp ) * fsdepw(:,:,1) * fse3w(:,:,1) 
     300!$OMP PARALLEL 
    298301         DO jk = 2, jpk 
    299             zpelc(:,:,jk)  = zpelc(:,:,jk-1) + MAX( rn2b(:,:,jk), 0._wp ) * fsdepw(:,:,jk) * fse3w(:,:,jk) 
    300          END DO 
     302!$OMP DO 
     303            DO jj = 1, jpj 
     304                  zpelc(:,jj,jk)  = zpelc(:,jj,jk-1) + MAX( rn2b(:,jj,jk), 0._wp ) * fsdepw(:,jj,jk) * fse3w(:,jj,jk) 
     305            END DO 
     306!$OMP END DO 
     307         END DO 
     308!$OMP END PARALLEL 
    301309         !                        !* finite Langmuir Circulation depth 
    302310         zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) 
     311         zcofa = 0.016 / SQRT( zrhoa * zcdrag ) 
    303312         imlc(:,:) = mbkt(:,:) + 1       ! Initialization to the number of w ocean point (=2 over land) 
     313!$OMP PARALLEL SHARED(imlc) 
    304314         DO jk = jpkm1, 2, -1 
     315!$OMP DO PRIVATE(zus) 
    305316            DO jj = 1, jpj               ! Last w-level at which zpelc>=0.5*us*us  
    306317               DO ji = 1, jpi            !      with us=0.016*wind(starting from jpk-1) 
     
    309320               END DO 
    310321            END DO 
     322!$OMP END DO 
    311323         END DO 
    312324         !                               ! finite LC depth 
     325!$OMP DO 
    313326         DO jj = 1, jpj  
    314327            DO ji = 1, jpi 
     
    316329            END DO 
    317330         END DO 
    318          zcof = 0.016 / SQRT( zrhoa * zcdrag ) 
    319 !CDIR NOVERRCHK 
     331!$OMP END DO 
     332!         zcof = 0.016 / SQRT( zrhoa * zcdrag ) 
     333!$OMP DO PRIVATE(zus, zind, zwlc) 
    320334         DO jk = 2, jpkm1         !* TKE Langmuir circulation source term added to en 
    321 !CDIR NOVERRCHK 
    322             DO jj = 2, jpjm1 
    323 !CDIR NOVERRCHK 
    324                DO ji = fs_2, fs_jpim1   ! vector opt. 
    325                   zus  = zcof * SQRT( taum(ji,jj) )           ! Stokes drift 
     335            DO jj = 2, jpjm1 
     336               DO ji = fs_2, fs_jpim1   ! vector opt. 
     337                  zus  = zcofa * SQRT( taum(ji,jj) )           ! Stokes drift 
    326338                  !                                           ! vertical velocity due to LC 
    327339                  zind = 0.5 - SIGN( 0.5, fsdepw(ji,jj,jk) - zhlc(ji,jj) ) 
     
    333345            END DO 
    334346         END DO 
     347!$OMP END DO 
     348!$OMP END PARALLEL 
    335349         ! 
    336350      ENDIF 
     
    343357      !                     ! zdiag : diagonal zd_up : upper diagonal zd_lw : lower diagonal 
    344358      ! 
     359!$OMP PARALLEL DO 
    345360      DO jk = 2, jpkm1           !* Shear production at uw- and vw-points (energy conserving form) 
    346361         DO jj = 1, jpj                 ! here avmu, avmv used as workspace 
     
    358373      END DO 
    359374      ! 
     375!$OMP PARALLEL DO PRIVATE(zcof, zzd_up, zzd_lw, zesh2) 
    360376      DO jk = 2, jpkm1           !* Matrix and right hand side in en 
    361377         DO jj = 2, jpjm1 
     
    390406      END DO 
    391407      !                          !* Matrix inversion from level 2 (tke prescribed at level 1) 
     408!$OMP PARALLEL 
    392409      DO jk = 3, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
     410!$OMP DO  
    393411         DO jj = 2, jpjm1 
    394412            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    396414            END DO 
    397415         END DO 
    398       END DO 
     416!$OMP END DO 
     417      END DO 
     418!$OMP END PARALLEL 
    399419      ! 
    400420      ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
     421!$OMP PARALLEL DO 
    401422      DO jj = 2, jpjm1 
    402423         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    404425         END DO 
    405426      END DO 
     427!$OMP PARALLEL 
    406428      DO jk = 3, jpkm1 
     429!$OMP DO 
    407430         DO jj = 2, jpjm1 
    408431            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    410433            END DO 
    411434         END DO 
    412       END DO 
     435!$OMP END DO 
     436      END DO 
     437!$OMP END PARALLEL 
    413438      ! 
    414439      ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
     440!$OMP PARALLEL DO 
    415441      DO jj = 2, jpjm1 
    416442         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    418444         END DO 
    419445      END DO 
     446!$OMP PARALLEL 
    420447      DO jk = jpk-2, 2, -1 
     448!$OMP DO 
    421449         DO jj = 2, jpjm1 
    422450            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    424452            END DO 
    425453         END DO 
    426       END DO 
     454!$OMP END DO 
     455      END DO 
     456!$OMP END PARALLEL 
     457!$OMP PARALLEL DO 
    427458      DO jk = 2, jpkm1                             ! set the minimum value of tke 
    428459         DO jj = 2, jpjm1 
     
    440471      !                            !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    441472      IF( nn_htau == 2 ) THEN           !* mixed-layer depth dependant length scale 
     473!$OMP PARALLEL DO 
    442474         DO jj = 2, jpjm1 
    443475            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    452484      ! 
    453485      IF( nn_etau == 1 ) THEN           !* penetration below the mixed layer (rn_efr fraction) 
     486!$OMP PARALLEL DO 
    454487         DO jk = 2, jpkm1 
    455488            DO jj = 2, jpjm1 
     
    461494         END DO 
    462495      ELSEIF( nn_etau == 2 ) THEN       !* act only at the base of the mixed layer (jk=nmln)  (rn_efr fraction) 
     496!$OMP PARALLEL DO PRIVATE(jk) 
    463497         DO jj = 2, jpjm1 
    464498            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    469503         END DO 
    470504      ELSEIF( nn_etau == 3 ) THEN       !* penetration belox the mixed layer (HF variability) 
    471 !CDIR NOVERRCHK 
     505!$OMP PARALLEL DO PRIVATE(ztx2, zty2, ztau, zdif, zdifa) 
    472506         DO jk = 2, jpkm1 
    473 !CDIR NOVERRCHK 
    474             DO jj = 2, jpjm1 
    475 !CDIR NOVERRCHK 
     507            DO jj = 2, jpjm1 
    476508               DO ji = fs_2, fs_jpim1   ! vector opt. 
    477509                  ztx2 = utau(ji-1,jj  ) + utau(ji,jj) 
    478510                  zty2 = vtau(ji  ,jj-1) + vtau(ji,jj) 
    479511                  ztau = 0.5_wp * SQRT( ztx2 * ztx2 + zty2 * zty2 ) * tmask(ji,jj,1)    ! module of the mean stress  
    480                   zdif = taum(ji,jj) - ztau                            ! mean of modulus - modulus of the mean  
    481                   zdif = rhftau_scl * MAX( 0._wp, zdif + rhftau_add )  ! apply some modifications... 
     512                  zdifa = taum(ji,jj) - ztau                            ! mean of modulus - modulus of the mean  
     513                  zdif = rhftau_scl * MAX( 0._wp, zdifa + rhftau_add )  ! apply some modifications... 
    482514                  en(ji,jj,jk) = en(ji,jj,jk) + zbbrau * zdif * EXP( -fsdepw(ji,jj,jk) / htau(ji,jj) )   & 
    483515                     &                        * ( 1._wp - fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     
    487519      ELSEIF( nn_etau == 4 ) THEN       !* column integral independant of htau (rn_efr must be scaled up) 
    488520         IF( nn_htau == 2 ) THEN        ! efr dependant on time-varying htau  
     521!$OMP PARALLEL DO 
    489522            DO jj = 2, jpjm1 
    490523               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    493526            END DO 
    494527         ENDIF 
     528!$OMP PARALLEL DO 
    495529         DO jk = 2, jpkm1 
    496530            DO jj = 2, jpjm1 
     
    504538      CALL lbc_lnk( en, 'W', 1. )      ! Lateral boundary conditions (sign unchanged) 
    505539      ! 
     540!$OMP PARALLEL DO 
    506541      DO jk = 2, jpkm1                             ! TKE budget: near-inertial waves term   
    507542         DO jj = 2, jpjm1   
     
    580615      ! 
    581616      IF( ln_mxl0 ) THEN            ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 
     617!$OMP PARALLEL DO PRIVATE(zraug) 
    582618         DO jj = 2, jpjm1 
    583619            DO ji = fs_2, fs_jpim1 
     
    590626      ENDIF 
    591627      ! 
    592 !CDIR NOVERRCHK 
     628!$OMP PARALLEL DO PRIVATE(zrn2) 
    593629      DO jk = 2, jpkm1              ! interior value : l=sqrt(2*e/n^2) 
    594 !CDIR NOVERRCHK 
    595630         DO jj = 2, jpjm1 
    596 !CDIR NOVERRCHK 
    597631            DO ji = fs_2, fs_jpim1   ! vector opt. 
    598632               zrn2 = MAX( rn2(ji,jj,jk), rsmall ) 
     
    611645      ! where wmask = 0 set zmxlm == fse3w 
    612646      CASE ( 0 )           ! bounded by the distance to surface and bottom 
     647!$OMP PARALLEL DO PRIVATE(zemxl) 
    613648         DO jk = 2, jpkm1 
    614649            DO jj = 2, jpjm1 
     
    624659         ! 
    625660      CASE ( 1 )           ! bounded by the vertical scale factor 
     661!$OMP PARALLEL DO PRIVATE(zemxl) 
    626662         DO jk = 2, jpkm1 
    627663            DO jj = 2, jpjm1 
     
    635671         ! 
    636672      CASE ( 2 )           ! |dk[xml]| bounded by e3t : 
     673!$OMP PARALLEL 
    637674         DO jk = 2, jpkm1         ! from the surface to the bottom : 
     675!$OMP DO 
    638676            DO jj = 2, jpjm1 
    639677               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    643681         END DO 
    644682         DO jk = jpkm1, 2, -1     ! from the bottom to the surface : 
     683!$OMP DO PRIVATE(zemxl) 
    645684            DO jj = 2, jpjm1 
    646685               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    651690            END DO 
    652691         END DO 
     692!$OMP END PARALLEL 
    653693         ! 
    654694      CASE ( 3 )           ! lup and ldown, |dk[xml]| bounded by e3t : 
     695!$OMP PARALLEL 
    655696         DO jk = 2, jpkm1         ! from the surface to the bottom : lup 
     697!$OMP DO 
    656698            DO jj = 2, jpjm1 
    657699               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    661703         END DO 
    662704         DO jk = jpkm1, 2, -1     ! from the bottom to the surface : ldown 
     705!$OMP DO 
    663706            DO jj = 2, jpjm1 
    664707               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    667710            END DO 
    668711         END DO 
    669 !CDIR NOVERRCHK 
     712!$OMP DO PRIVATE(zemlm, zemlp) 
    670713         DO jk = 2, jpkm1 
    671 !CDIR NOVERRCHK 
    672             DO jj = 2, jpjm1 
    673 !CDIR NOVERRCHK 
     714            DO jj = 2, jpjm1 
    674715               DO ji = fs_2, fs_jpim1   ! vector opt. 
    675716                  zemlm = MIN ( zmxld(ji,jj,jk),  zmxlm(ji,jj,jk) ) 
     
    680721            END DO 
    681722         END DO 
     723!$OMP END PARALLEL 
    682724         ! 
    683725      END SELECT 
     
    691733      !                     !  Vertical eddy viscosity and diffusivity  (avmu, avmv, avt) 
    692734      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    693 !CDIR NOVERRCHK 
    694735      DO jk = 1, jpkm1            !* vertical eddy viscosity & diffivity at w-points 
    695 !CDIR NOVERRCHK 
    696736         DO jj = 2, jpjm1 
    697 !CDIR NOVERRCHK 
    698737            DO ji = fs_2, fs_jpim1   ! vector opt. 
    699738               zsqen = SQRT( en(ji,jj,jk) ) 
     
    894933      ENDIF 
    895934      !                               !* set vertical eddy coef. to the background value 
     935!$OMP PARALLEL DO 
    896936      DO jk = 1, jpk 
    897937         avt (:,:,jk) = avtb(jk) * wmask (:,:,jk) 
     
    959999        ELSE                                   !* Start from rest 
    9601000           en(:,:,:) = rn_emin * tmask(:,:,:) 
     1001!$OMP PARALLEL DO 
    9611002           DO jk = 1, jpk                           ! set the Kz to the background value 
    9621003              avt (:,:,jk) = avtb(jk) * wmask (:,:,jk) 
Note: See TracChangeset for help on using the changeset viewer.