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 7753 for trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90 – NEMO

Ignore:
Timestamp:
2017-03-03T12:46:59+01:00 (7 years ago)
Author:
mocavero
Message:

Reverting trunk to remove OpenMP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r7698 r7753  
    171171      !!---------------------------------------------------------------------- 
    172172      INTEGER, INTENT(in) ::   kt   ! ocean time step 
    173       INTEGER             ::   jk, jj, ji   
    174173      !!---------------------------------------------------------------------- 
    175174      ! 
     
    180179      ! 
    181180      IF( kt /= nit000 ) THEN   ! restore before value to compute tke 
    182 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    183          DO jk = 1, jpk 
    184             DO jj = 1, jpj 
    185                DO ji = 1, jpi 
    186                   avt (ji,jj,jk) = avt_k (ji,jj,jk)  
    187                   avm (ji,jj,jk) = avm_k (ji,jj,jk)  
    188                   avmu(ji,jj,jk) = avmu_k(ji,jj,jk)  
    189                   avmv(ji,jj,jk) = avmv_k(ji,jj,jk)  
    190                END DO 
    191             END DO 
    192          END DO 
     181         avt (:,:,:) = avt_k (:,:,:)  
     182         avm (:,:,:) = avm_k (:,:,:)  
     183         avmu(:,:,:) = avmu_k(:,:,:)  
     184         avmv(:,:,:) = avmv_k(:,:,:)  
    193185      ENDIF  
    194186      ! 
     
    197189      CALL tke_avn      ! now avt, avm, avmu, avmv 
    198190      ! 
    199 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    200          DO jk = 1, jpk 
    201             DO jj = 1, jpj 
    202                DO ji = 1, jpi 
    203                   avt_k (ji,jj,jk) = avt (ji,jj,jk)  
    204                   avm_k (ji,jj,jk) = avm (ji,jj,jk)  
    205                   avmu_k(ji,jj,jk) = avmu(ji,jj,jk)  
    206                   avmv_k(ji,jj,jk) = avmv(ji,jj,jk)  
    207                END DO 
    208             END DO 
    209          END DO 
     191      avt_k (:,:,:) = avt (:,:,:)  
     192      avm_k (:,:,:) = avm (:,:,:)  
     193      avmu_k(:,:,:) = avmu(:,:,:)  
     194      avmv_k(:,:,:) = avmv(:,:,:)  
    210195      ! 
    211196#if defined key_agrif 
     
    268253      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    269254      IF ( ln_isfcav ) THEN 
    270 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
    271255         DO jj = 2, jpjm1            ! en(mikt(ji,jj))   = rn_emin 
    272256            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    275259         END DO 
    276260      END IF 
    277 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
    278261      DO jj = 2, jpjm1            ! en(1)   = rn_ebb taum / rau0  (min value rn_emin0) 
    279262         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    310293         ! 
    311294         !                        !* total energy produce by LC : cumulative sum over jk 
    312 !$OMP PARALLEL 
    313 !$OMP DO schedule(static) private(jj, ji) 
    314          DO jj =1, jpj 
    315             DO ji=1, jpi 
    316                zpelc(ji,jj,1) =  MAX( rn2b(ji,jj,1), 0._wp ) * gdepw_n(ji,jj,1) * e3w_n(ji,jj,1) 
    317             END DO 
    318          END DO 
     295         zpelc(:,:,1) =  MAX( rn2b(:,:,1), 0._wp ) * gdepw_n(:,:,1) * e3w_n(:,:,1) 
    319296         DO jk = 2, jpk 
    320 !$OMP DO schedule(static) private(jj, ji) 
    321             DO jj =1, jpj 
    322                DO ji=1, jpi 
    323                   zpelc(ji,jj,jk)  = zpelc(ji,jj,jk-1) + MAX( rn2b(ji,jj,jk), 0._wp ) * gdepw_n(ji,jj,jk) * e3w_n(ji,jj,jk) 
    324                END DO 
    325             END DO 
     297            zpelc(:,:,jk)  = zpelc(:,:,jk-1) + MAX( rn2b(:,:,jk), 0._wp ) * gdepw_n(:,:,jk) * e3w_n(:,:,jk) 
    326298         END DO 
    327299         !                        !* finite Langmuir Circulation depth 
    328300         zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) 
    329 !$OMP DO schedule(static) private(jj,ji) 
    330             DO jj = 1, jpj 
    331                DO ji = 1, jpi 
    332                   imlc(ji,jj) = mbkt(ji,jj) + 1       ! Initialization to the number of w ocean point (=2 over land) 
    333                END DO 
    334             END DO 
     301         imlc(:,:) = mbkt(:,:) + 1       ! Initialization to the number of w ocean point (=2 over land) 
    335302         DO jk = jpkm1, 2, -1 
    336 !$OMP DO schedule(static) private(jj, ji, zus) 
    337303            DO jj = 1, jpj               ! Last w-level at which zpelc>=0.5*us*us  
    338304               DO ji = 1, jpi            !      with us=0.016*wind(starting from jpk-1) 
     
    343309         END DO 
    344310         !                               ! finite LC depth 
    345 !$OMP DO schedule(static) private(jj, ji) 
    346311         DO jj = 1, jpj  
    347312            DO ji = 1, jpi 
     
    350315         END DO 
    351316         zcof = 0.016 / SQRT( zrhoa * zcdrag ) 
    352 !$OMP DO schedule(static) private(jk, jj, ji, zus, zind, zwlc) 
    353317         DO jk = 2, jpkm1         !* TKE Langmuir circulation source term added to en 
    354318            DO jj = 2, jpjm1 
     
    364328            END DO 
    365329         END DO 
    366 !$OMP END PARALLEL 
    367330         ! 
    368331      ENDIF 
     
    375338      !                     ! zdiag : diagonal zd_up : upper diagonal zd_lw : lower diagonal 
    376339      ! 
    377 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    378340      DO jk = 2, jpkm1           !* Shear production at uw- and vw-points (energy conserving form) 
    379341         DO jj = 1, jpjm1 
     
    394356         ! Note that zesh2 is also computed in the next loop. 
    395357         ! We decided to compute it twice to keep code readability and avoid an IF case in the DO loops 
    396 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zesh2, zri) 
    397358         DO jk = 2, jpkm1 
    398359            DO jj = 2, jpjm1 
     
    411372      ENDIF 
    412373      !          
    413 !$OMP PARALLEL 
    414 !$OMP DO schedule(static) private(jk, jj, ji, zcof, zzd_up, zzd_lw, zesh2) 
    415374      DO jk = 2, jpkm1           !* Matrix and right hand side in en 
    416375         DO jj = 2, jpjm1 
     
    446405      !                          !* Matrix inversion from level 2 (tke prescribed at level 1) 
    447406      DO jk = 3, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    448 !$OMP DO schedule(static) private(jj, ji) 
    449407         DO jj = 2, jpjm1 
    450408            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    453411         END DO 
    454412      END DO 
    455 !$OMP DO schedule(static) private(jj, ji) 
    456413      DO jj = 2, jpjm1                             ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    457414         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    460417      END DO 
    461418      DO jk = 3, jpkm1 
    462 !$OMP DO schedule(static) private(jj, ji) 
    463419         DO jj = 2, jpjm1 
    464420            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    467423         END DO 
    468424      END DO 
    469 !$OMP DO schedule(static) private(jj, ji) 
    470425      DO jj = 2, jpjm1                             ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    471426         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    474429      END DO 
    475430      DO jk = jpk-2, 2, -1 
    476 !$OMP DO schedule(static) private(jj, ji) 
    477431         DO jj = 2, jpjm1 
    478432            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    481435         END DO 
    482436      END DO 
    483 !$OMP DO schedule(static) private(jk,jj, ji) 
    484437      DO jk = 2, jpkm1                             ! set the minimum value of tke 
    485438         DO jj = 2, jpjm1 
     
    489442         END DO 
    490443      END DO 
    491 !$OMP END PARALLEL 
    492444 
    493445      !                            !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     
    498450       
    499451      IF( nn_etau == 1 ) THEN           !* penetration below the mixed layer (rn_efr fraction) 
    500 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    501452         DO jk = 2, jpkm1 
    502453            DO jj = 2, jpjm1 
     
    508459         END DO 
    509460      ELSEIF( nn_etau == 2 ) THEN       !* act only at the base of the mixed layer (jk=nmln)  (rn_efr fraction) 
    510 !$OMP PARALLEL DO schedule(static) private(jj, ji, jk) 
    511461         DO jj = 2, jpjm1 
    512462            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    517467         END DO 
    518468      ELSEIF( nn_etau == 3 ) THEN       !* penetration belox the mixed layer (HF variability) 
    519 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ztx2, zty2, ztau, zdif) 
    520469         DO jk = 2, jpkm1 
    521470            DO jj = 2, jpjm1 
     
    596545      ! 
    597546      ! initialisation of interior minimum value (avoid a 2d loop with mikt) 
    598 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    599       DO jk = 1, jpk 
    600          DO jj = 1, jpj 
    601             DO ji = 1, jpi 
    602                zmxlm(ji,jj,jk)  = rmxl_min     
    603                zmxld(ji,jj,jk)  = rmxl_min 
    604             END DO 
    605          END DO 
    606       END DO 
     547      zmxlm(:,:,:)  = rmxl_min     
     548      zmxld(:,:,:)  = rmxl_min 
    607549      ! 
    608550      IF( ln_mxl0 ) THEN            ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 
    609 !$OMP PARALLEL DO schedule(static) private(jj, ji, zraug) 
    610551         DO jj = 2, jpjm1 
    611552            DO ji = fs_2, fs_jpim1 
     
    615556         END DO 
    616557      ELSE  
    617 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    618          DO jj = 1, jpj 
    619             DO ji = 1, jpi 
    620                zmxlm(ji,jj,1) = rn_mxl0 
    621             END DO 
    622          END DO 
     558         zmxlm(:,:,1) = rn_mxl0 
    623559      ENDIF 
    624560      ! 
    625 !$OMP PARALLEL 
    626 !$OMP DO schedule(static) private(jk, jj, ji, zrn2) 
    627561      DO jk = 2, jpkm1              ! interior value : l=sqrt(2*e/n^2) 
    628562         DO jj = 2, jpjm1 
     
    636570      !                     !* Physical limits for the mixing length 
    637571      ! 
    638 !$OMP DO schedule(static) private(jj,ji) 
    639       DO jj = 1, jpj 
    640          DO ji = 1, jpi 
    641             zmxld(ji,jj, 1 ) = zmxlm(ji,jj,1)   ! surface set to the minimum value  
    642             zmxld(ji,jj,jpk) = rmxl_min       ! last level  set to the minimum value 
    643          END DO 
    644       END DO 
    645 !$OMP END PARALLEL 
     572      zmxld(:,:, 1 ) = zmxlm(:,:,1)   ! surface set to the minimum value  
     573      zmxld(:,:,jpk) = rmxl_min       ! last level  set to the minimum value 
    646574      ! 
    647575      SELECT CASE ( nn_mxl ) 
     
    650578      ! where wmask = 0 set zmxlm == e3w_n 
    651579      CASE ( 0 )           ! bounded by the distance to surface and bottom 
    652 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl) 
    653580         DO jk = 2, jpkm1 
    654581            DO jj = 2, jpjm1 
     
    664591         ! 
    665592      CASE ( 1 )           ! bounded by the vertical scale factor 
    666 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl) 
    667593         DO jk = 2, jpkm1 
    668594            DO jj = 2, jpjm1 
     
    676602         ! 
    677603      CASE ( 2 )           ! |dk[xml]| bounded by e3t : 
    678 !$OMP PARALLEL 
    679604         DO jk = 2, jpkm1         ! from the surface to the bottom : 
    680 !$OMP DO schedule(static) private(jj, ji) 
    681605            DO jj = 2, jpjm1 
    682606               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    686610         END DO 
    687611         DO jk = jpkm1, 2, -1     ! from the bottom to the surface : 
    688 !$OMP DO schedule(static) private(jj, ji, zemxl) 
    689612            DO jj = 2, jpjm1 
    690613               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    695618            END DO 
    696619         END DO 
    697 !$OMP END PARALLEL 
    698620         ! 
    699621      CASE ( 3 )           ! lup and ldown, |dk[xml]| bounded by e3t : 
    700 !$OMP PARALLEL 
    701622         DO jk = 2, jpkm1         ! from the surface to the bottom : lup 
    702 !$OMP DO schedule(static) private(jj, ji) 
    703623            DO jj = 2, jpjm1 
    704624               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    708628         END DO 
    709629         DO jk = jpkm1, 2, -1     ! from the bottom to the surface : ldown 
    710 !$OMP DO schedule(static) private(jj, ji) 
    711630            DO jj = 2, jpjm1 
    712631               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    715634            END DO 
    716635         END DO 
    717 !$OMP DO schedule(static) private(jk, jj, ji, zemlm, zemlp) 
    718636         DO jk = 2, jpkm1 
    719637            DO jj = 2, jpjm1 
     
    726644            END DO 
    727645         END DO 
    728 !$OMP END PARALLEL 
    729646         ! 
    730647      END SELECT 
    731648      ! 
    732649# if defined key_c1d 
    733 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    734       DO jk = 1, jpk 
    735          DO jj = 1, jpj 
    736             DO ji = 1, jpi 
    737                e_dis(ji,jj,jk) = zmxld(ji,jj,jk)      ! c1d configuration : save mixing and dissipation turbulent length scales 
    738                e_mix(ji,jj,jk) = zmxlm(ji,jj,jk) 
    739             END DO 
    740          END DO 
    741       END DO 
     650      e_dis(:,:,:) = zmxld(:,:,:)      ! c1d configuration : save mixing and dissipation turbulent length scales 
     651      e_mix(:,:,:) = zmxlm(:,:,:) 
    742652# endif 
    743653 
     
    745655      !                     !  Vertical eddy viscosity and diffusivity  (avmu, avmv, avt) 
    746656      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    747 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zsqen, zav) 
    748657      DO jk = 1, jpkm1            !* vertical eddy viscosity & diffivity at w-points 
    749658         DO jj = 2, jpjm1 
     
    759668      CALL lbc_lnk( avm, 'W', 1. )      ! Lateral boundary conditions (sign unchanged) 
    760669      ! 
    761 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    762670      DO jk = 2, jpkm1            !* vertical eddy viscosity at wu- and wv-points 
    763671         DO jj = 2, jpjm1 
     
    771679      ! 
    772680      IF( nn_pdl == 1 ) THEN      !* Prandtl number case: update avt 
    773 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    774681         DO jk = 2, jpkm1 
    775682            DO jj = 2, jpjm1 
     
    891798         SELECT CASE( nn_htau )             ! Choice of the depth of penetration 
    892799         CASE( 0 )                                 ! constant depth penetration (here 10 meters) 
    893 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    894             DO jj = 1, jpj 
    895                DO ji = 1, jpi 
    896                   htau(ji,jj) = 10._wp 
    897                END DO 
    898             END DO 
     800            htau(:,:) = 10._wp 
    899801         CASE( 1 )                                 ! F(latitude) : 0.5m to 30m poleward of 40 degrees 
    900 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    901             DO jj = 1, jpj 
    902                DO ji = 1, jpi 
    903                   htau(ji,jj) = MAX(  0.5_wp, MIN( 30._wp, 45._wp* ABS( SIN( rpi/180._wp * gphit(ji,jj) ) ) )   )             
    904                END DO 
    905             END DO 
     802            htau(:,:) = MAX(  0.5_wp, MIN( 30._wp, 45._wp* ABS( SIN( rpi/180._wp * gphit(:,:) ) ) )   )             
    906803         END SELECT 
    907804      ENDIF 
    908805      !                               !* set vertical eddy coef. to the background value 
    909 !$OMP PARALLEL 
    910 !$OMP DO schedule(static) private(jk,jj,ji) 
    911806      DO jk = 1, jpk 
    912          DO jj = 1, jpj 
    913             DO ji = 1, jpi 
    914                avt (ji,jj,jk) = avtb(jk) * wmask (ji,jj,jk) 
    915                avm (ji,jj,jk) = avmb(jk) * wmask (ji,jj,jk) 
    916                avmu(ji,jj,jk) = avmb(jk) * wumask(ji,jj,jk) 
    917                avmv(ji,jj,jk) = avmb(jk) * wvmask(ji,jj,jk) 
    918             END DO 
    919          END DO 
    920       END DO 
    921 !$OMP END DO NOWAIT 
    922 !$OMP DO schedule(static) private(jk,jj,ji) 
    923       DO jk = 1, jpk 
    924          DO jj = 1, jpj 
    925             DO ji = 1, jpi 
    926                dissl(ji,jj,jk) = 1.e-12_wp 
    927             END DO 
    928          END DO 
    929       END DO 
    930 !$OMP END PARALLEL 
     807         avt (:,:,jk) = avtb(jk) * wmask (:,:,jk) 
     808         avm (:,:,jk) = avmb(jk) * wmask (:,:,jk) 
     809         avmu(:,:,jk) = avmb(jk) * wumask(:,:,jk) 
     810         avmv(:,:,jk) = avmb(jk) * wvmask(:,:,jk) 
     811      END DO 
     812      dissl(:,:,:) = 1.e-12_wp 
    931813      !                               
    932814      CALL tke_rst( nit000, 'READ' )  !* read or initialize all required files 
     
    948830     CHARACTER(len=*), INTENT(in) ::   cdrw   ! "READ"/"WRITE" flag 
    949831     ! 
    950      INTEGER ::   jit, jk, jj, ji   ! dummy loop indices 
     832     INTEGER ::   jit, jk   ! dummy loop indices 
    951833     INTEGER ::   id1, id2, id3, id4, id5, id6   ! local integers 
    952834     !!---------------------------------------------------------------------- 
     
    975857           ELSE                                     ! No TKE array found: initialisation 
    976858              IF(lwp) WRITE(numout,*) ' ===>>>> : previous run without tke scheme, en computed by iterative loop' 
    977 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    978               DO jk = 1, jpk 
    979                  DO jj = 1, jpj 
    980                     DO ji = 1, jpi 
    981                        en (ji,jj,jk) = rn_emin * tmask(ji,jj,jk) 
    982                     END DO 
    983                  END DO 
    984               END DO 
     859              en (:,:,:) = rn_emin * tmask(:,:,:) 
    985860              CALL tke_avn                               ! recompute avt, avm, avmu, avmv and dissl (approximation) 
    986861              ! 
    987 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    988               DO jk = 1, jpk 
    989                  DO jj = 1, jpj 
    990                     DO ji = 1, jpi 
    991                        avt_k (ji,jj,jk) = avt (ji,jj,jk) 
    992                        avm_k (ji,jj,jk) = avm (ji,jj,jk) 
    993                        avmu_k(ji,jj,jk) = avmu(ji,jj,jk) 
    994                        avmv_k(ji,jj,jk) = avmv(ji,jj,jk) 
    995                     END DO 
    996                  END DO 
    997               END DO 
     862              avt_k (:,:,:) = avt (:,:,:) 
     863              avm_k (:,:,:) = avm (:,:,:) 
     864              avmu_k(:,:,:) = avmu(:,:,:) 
     865              avmv_k(:,:,:) = avmv(:,:,:) 
    998866              ! 
    999867              DO jit = nit000 + 1, nit000 + 10   ;   CALL zdf_tke( jit )   ;   END DO 
    1000868           ENDIF 
    1001869        ELSE                                   !* Start from rest 
    1002 !$OMP PARALLEL 
    1003 !$OMP DO schedule(static) private(jk,jj,ji) 
    1004            DO jk = 1, jpk 
    1005               DO jj = 1, jpj 
    1006                  DO ji = 1, jpi 
    1007                     en(ji,jj,jk) = rn_emin * tmask(ji,jj,jk) 
    1008                  END DO 
    1009               END DO 
     870           en(:,:,:) = rn_emin * tmask(:,:,:) 
     871           DO jk = 1, jpk                           ! set the Kz to the background value 
     872              avt (:,:,jk) = avtb(jk) * wmask (:,:,jk) 
     873              avm (:,:,jk) = avmb(jk) * wmask (:,:,jk) 
     874              avmu(:,:,jk) = avmb(jk) * wumask(:,:,jk) 
     875              avmv(:,:,jk) = avmb(jk) * wvmask(:,:,jk) 
    1010876           END DO 
    1011 !$OMP END DO NOWAIT 
    1012 !$OMP DO schedule(static) private(jk) 
    1013            DO jk = 1, jpk                           ! set the Kz to the background value 
    1014               DO jj = 1, jpj 
    1015                  DO ji = 1, jpi 
    1016                     avt (ji,jj,jk) = avtb(jk) * wmask (ji,jj,jk) 
    1017                     avm (ji,jj,jk) = avmb(jk) * wmask (ji,jj,jk) 
    1018                     avmu(ji,jj,jk) = avmb(jk) * wumask(ji,jj,jk) 
    1019                     avmv(ji,jj,jk) = avmb(jk) * wvmask(ji,jj,jk) 
    1020                  END DO 
    1021               END DO 
    1022            END DO 
    1023 !$OMP END PARALLEL 
    1024877        ENDIF 
    1025878        ! 
Note: See TracChangeset for help on using the changeset viewer.