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 – NEMO

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

Reverting trunk to remove OpenMP

Location:
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF
Files:
6 edited

Legend:

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

    r7698 r7753  
    106106         IF ( ln_loglayer.AND. .NOT.ln_linssh ) THEN ! "log layer" bottom friction coefficient 
    107107 
    108 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbt,ztmp) 
    109108            DO jj = 1, jpj 
    110109               DO ji = 1, jpi 
     
    118117! (ISF) 
    119118            IF ( ln_isfcav ) THEN 
    120 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbt,ztmp) 
    121119               DO jj = 1, jpj 
    122120                  DO ji = 1, jpi 
     
    131129            !    
    132130         ELSE 
    133 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    134             DO jj = 1, jpj 
    135                DO ji = 1, jpi 
    136                   zbfrt(ji,jj) = bfrcoef2d(ji,jj) 
    137                   ztfrt(ji,jj) = tfrcoef2d(ji,jj) 
    138                END DO 
    139             END DO 
    140          ENDIF 
    141  
    142 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbu,ikbv,zvu,zuv,zecu,zecv) 
     131            zbfrt(:,:) = bfrcoef2d(:,:) 
     132            ztfrt(:,:) = tfrcoef2d(:,:) 
     133         ENDIF 
     134 
    143135         DO jj = 2, jpjm1 
    144136            DO ji = 2, jpim1 
     
    175167 
    176168         IF( ln_isfcav ) THEN 
    177 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbu,ikbv,zvu,zuv,zecu,zecv) 
    178169            DO jj = 2, jpjm1 
    179170               DO ji = 2, jpim1 
     
    269260      CASE( 0 ) 
    270261         IF(lwp) WRITE(numout,*) '      free-slip ' 
    271 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    272             DO jj = 1, jpj 
    273                DO ji = 1, jpi 
    274                   bfrua(ji,jj) = 0.e0 
    275                   bfrva(ji,jj) = 0.e0 
    276                   tfrua(ji,jj) = 0.e0 
    277                   tfrva(ji,jj) = 0.e0 
    278                END DO 
    279             END DO 
     262         bfrua(:,:) = 0._wp 
     263         bfrva(:,:) = 0._wp 
     264         tfrua(:,:) = 0._wp 
     265         tfrva(:,:) = 0._wp 
    280266         ! 
    281267      CASE( 1 ) 
     
    299285            CALL iom_get (inum, jpdom_data, 'bfr_coef',bfrcoef2d,1) ! bfrcoef2d is used as tmp array 
    300286            CALL iom_close(inum) 
    301 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    302             DO jj = 1, jpj 
    303                DO ji = 1, jpi 
    304                   bfrcoef2d(ji,jj) = rn_bfri1 * ( 1 + rn_bfrien * bfrcoef2d(ji,jj) ) 
    305                END DO 
    306             END DO 
     287            bfrcoef2d(:,:) = rn_bfri1 * ( 1 + rn_bfrien * bfrcoef2d(:,:) ) 
    307288         ELSE 
    308 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    309             DO jj = 1, jpj 
    310                DO ji = 1, jpi 
    311                   bfrcoef2d(ji,jj) = rn_bfri1  ! initialize bfrcoef2d to the namelist variable 
    312                END DO 
    313             END DO 
    314          ENDIF 
    315          ! 
    316 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    317             DO jj = 1, jpj 
    318                DO ji = 1, jpi 
    319                   bfrua(ji,jj) = - bfrcoef2d(ji,jj) 
    320                   bfrva(ji,jj) = - bfrcoef2d(ji,jj) 
    321                END DO 
    322             END DO 
     289            bfrcoef2d(:,:) = rn_bfri1  ! initialize bfrcoef2d to the namelist variable 
     290         ENDIF 
     291         ! 
     292         bfrua(:,:) = - bfrcoef2d(:,:) 
     293         bfrva(:,:) = - bfrcoef2d(:,:) 
    323294         ! 
    324295         IF ( ln_isfcav ) THEN 
     
    328299               CALL iom_get (inum, jpdom_data, 'tfr_coef',tfrcoef2d,1) ! tfrcoef2d is used as tmp array 
    329300               CALL iom_close(inum) 
    330 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    331                DO jj = 1, jpj 
    332                   DO ji = 1, jpi 
    333                      tfrcoef2d(ji,jj) = rn_tfri1 * ( 1 + rn_tfrien * tfrcoef2d(ji,jj) ) 
    334                   END DO 
    335                END DO 
     301               tfrcoef2d(:,:) = rn_tfri1 * ( 1 + rn_tfrien * tfrcoef2d(:,:) ) 
    336302            ELSE 
    337 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    338                DO jj = 1, jpj 
    339                   DO ji = 1, jpi 
    340                      tfrcoef2d(ji,jj) = rn_tfri1  ! initialize tfrcoef2d to the namelist variable 
    341                   END DO 
    342                END DO 
     303               tfrcoef2d(:,:) = rn_tfri1  ! initialize tfrcoef2d to the namelist variable 
    343304            ENDIF 
    344305            ! 
    345 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    346             DO jj = 1, jpj 
    347                DO ji = 1, jpi 
    348                   tfrua(ji,jj) = - tfrcoef2d(ji,jj) 
    349                   tfrva(ji,jj) = - tfrcoef2d(ji,jj) 
    350                END DO 
    351             END DO 
     306            tfrua(:,:) = - tfrcoef2d(:,:) 
     307            tfrva(:,:) = - tfrcoef2d(:,:) 
    352308         END IF 
    353309         ! 
     
    390346            CALL iom_close(inum) 
    391347            ! 
    392 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    393             DO jj = 1, jpj 
    394                DO ji = 1, jpi 
    395                   bfrcoef2d(ji,jj) = rn_bfri2 * ( 1 + rn_bfrien * bfrcoef2d(ji,jj) ) 
    396                END DO 
    397             END DO 
     348            bfrcoef2d(:,:) = rn_bfri2 * ( 1 + rn_bfrien * bfrcoef2d(:,:) ) 
    398349         ELSE 
    399 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    400             DO jj = 1, jpj 
    401                DO ji = 1, jpi 
    402                   bfrcoef2d(ji,jj) = rn_bfri2  ! initialize bfrcoef2d to the namelist variable 
    403                END DO 
    404             END DO 
     350            bfrcoef2d(:,:) = rn_bfri2  ! initialize bfrcoef2d to the namelist variable 
    405351         ENDIF 
    406352          
     
    412358               CALL iom_close(inum) 
    413359               ! 
    414 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    415                DO jj = 1, jpj 
    416                   DO ji = 1, jpi 
    417                      tfrcoef2d(ji,jj) = rn_tfri2 * ( 1 + rn_tfrien * tfrcoef2d(ji,jj) ) 
    418                   END DO 
    419                END DO 
     360               tfrcoef2d(:,:) = rn_tfri2 * ( 1 + rn_tfrien * tfrcoef2d(:,:) ) 
    420361            ELSE 
    421 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    422                DO jj = 1, jpj 
    423                   DO ji = 1, jpi 
    424                      tfrcoef2d(ji,jj) = rn_tfri2  ! initialize tfrcoef2d to the namelist variable 
    425                   END DO 
    426                END DO 
     362               tfrcoef2d(:,:) = rn_tfri2  ! initialize tfrcoef2d to the namelist variable 
    427363            ENDIF 
    428364         END IF 
    429365         ! 
    430366         IF( ln_loglayer.AND. ln_linssh ) THEN ! set "log layer" bottom friction once for all 
    431 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbt,ztmp) 
    432367            DO jj = 1, jpj 
    433368               DO ji = 1, jpi 
     
    439374            END DO 
    440375            IF ( ln_isfcav ) THEN 
    441 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbt,ztmp) 
    442376               DO jj = 1, jpj 
    443377                  DO ji = 1, jpi 
     
    479413      zmaxtfr = -1.e10_wp    ! initialise tracker for maximum of bottom friction coefficient 
    480414      ! 
    481 !$OMP PARALLEL DO schedule(static) private(jj,ji,ikbu,ikbv,zfru,zfrv,ictu,ictv,zminbfr,zmaxbfr,zmintfr,zmaxtfr) 
    482415      DO jj = 2, jpjm1 
    483416         DO ji = 2, jpim1 
  • trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90

    r7698 r7753  
    112112         ! Define the mask  
    113113         ! --------------- 
    114 !$OMP PARALLEL 
    115 !$OMP DO schedule(static) private(jj,ji,zrw,zaw,zbw,zdt,zds) 
    116114         DO jj = 1, jpj                                ! R=zrau = (alpha / beta) (dk[t] / dk[s]) 
    117115            DO ji = 1, jpi 
     
    130128            END DO 
    131129         END DO 
    132 !$OMP END DO NOWAIT 
    133  
    134 !$OMP DO schedule(static) private(jj,ji) 
     130 
    135131         DO jj = 1, jpj                                     ! indicators: 
    136132            DO ji = 1, jpi 
     
    159155         END DO 
    160156         ! mask zmsk in order to have avt and avs masked 
    161  
    162 !$OMP DO schedule(static) private(jj,ji) 
    163          DO jj = 1, jpj                                
    164             DO ji = 1, jpi 
    165                zmsks(ji,jj) = zmsks(ji,jj) * wmask(ji,jj,jk) 
    166             END DO 
    167          END DO 
     157         zmsks(:,:) = zmsks(:,:) * wmask(:,:,jk) 
     158 
    168159 
    169160         ! Update avt and avs 
    170161         ! ------------------ 
    171162         ! Constant eddy coefficient: reset to the background value 
    172 !$OMP DO schedule(static) private(jj,ji,zinr,zrr,zavfs,zavft,zavdt,zavds) 
    173163         DO jj = 1, jpj 
    174164            DO ji = 1, jpi 
     
    199189         ! -------------------------------- 
    200190!!gm to be changed following the definition of avm. 
    201 !$OMP DO schedule(static) private(jj,ji) 
    202191         DO jj = 1, jpjm1 
    203192            DO ji = 1, fs_jpim1   ! vector opt. 
     
    210199            END DO 
    211200         END DO 
    212 !$OMP END DO NOWAIT 
    213 !$OMP END PARALLEL 
    214201         !                                                ! =============== 
    215202      END DO                                              !   End of slab 
     
    245232      !!---------------------------------------------------------------------- 
    246233      INTEGER ::   ios   ! local integer 
    247       INTEGER  ::   ji, jj , jk     ! dummy loop indices 
    248234      !! 
    249235      NAMELIST/namzdf_ddm/ rn_avts, rn_hsbfr 
     
    271257      IF( zdf_ddm_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_ddm_init : unable to allocate arrays' ) 
    272258      !                               ! initialization to masked Kz 
    273 !$OMP DO schedule(static) private(jk,jj,ji) 
    274       DO jk = 1, jpk                                
    275          DO jj = 1, jpj                                
    276             DO ji = 1, jpi 
    277                avs(ji,jj,jk) = rn_avt0 * wmask(ji,jj,jk) 
    278             END DO 
    279          END DO 
    280       END DO  
     259      avs(:,:,:) = rn_avt0 * wmask(:,:,:)  
    281260      ! 
    282261   END SUBROUTINE zdf_ddm_init 
  • trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90

    r7698 r7753  
    7070      CALL wrk_alloc( jpi,jpj,jpk,   zavt_evd, zavm_evd )  
    7171      ! 
    72 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    73       DO jk = 1, jpk 
    74          DO jj = 1, jpj 
    75             DO ji = 1, jpi 
    76                zavt_evd(ji,jj,jk) = avt(ji,jj,jk)           ! set avt prior to evd application 
    77             END DO 
    78          END DO 
    79       END DO  
     72      zavt_evd(:,:,:) = avt(:,:,:)           ! set avt prior to evd application 
    8073      ! 
    8174      SELECT CASE ( nn_evdm ) 
     
    8376      CASE ( 1 )           ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12) 
    8477         ! 
    85 !$OMP PARALLEL 
    86 !$OMP DO schedule(static) private(jk, jj, ji) 
    87          DO jk = 1, jpk 
    88             DO jj = 1, jpj 
    89                DO ji = 1, jpi 
    90                   zavm_evd(ji,jj,jk) = avm(ji,jj,jk)           ! set avm prior to evd application 
    91                END DO 
    92             END DO 
    93          END DO  
     78         zavm_evd(:,:,:) = avm(:,:,:)           ! set avm prior to evd application 
    9479         ! 
    95 !$OMP DO schedule(static) private(jk, jj, ji) 
    9680         DO jk = 1, jpkm1  
    9781            DO jj = 2, jpj             ! no vector opt. 
     
    10892            END DO 
    10993         END DO  
    110 !$OMP END PARALLEL 
    11194         CALL lbc_lnk( avt , 'W', 1. )   ;   CALL lbc_lnk( avm , 'W', 1. )   ! Lateral boundary conditions 
    11295         CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. ) 
    11396         ! 
    114 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    115          DO jk = 1, jpk 
    116             DO jj = 1, jpj 
    117                DO ji = 1, jpi 
    118                   zavm_evd(ji,jj,jk) = avm(ji,jj,jk) - zavm_evd(ji,jj,jk)   ! change in avm due to evd 
    119                END DO 
    120             END DO 
    121          END DO  
     97         zavm_evd(:,:,:) = avm(:,:,:) - zavm_evd(:,:,:)   ! change in avm due to evd 
    12298         CALL iom_put( "avm_evd", zavm_evd )              ! output this change 
    12399         ! 
    124100      CASE DEFAULT         ! enhance vertical eddy diffusivity only (if rn2<-1.e-12)  
    125 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    126101         DO jk = 1, jpkm1 
    127102!!!         WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd   ! agissant sur T SEUL!  
     
    136111      END SELECT  
    137112 
    138 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    139       DO jk = 1, jpk 
    140          DO jj = 1, jpj 
    141             DO ji = 1, jpi 
    142                zavt_evd(ji,jj,jk) = avt(ji,jj,jk) - zavt_evd(ji,jj,jk)   ! change in avt due to evd 
    143             END DO 
    144          END DO 
    145       END DO  
     113      zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:)   ! change in avt due to evd 
    146114      CALL iom_put( "avt_evd", zavt_evd )              ! output this change 
    147115      IF( l_trdtra ) CALL trd_tra( kt, 'TRA', jp_tem, jptra_evd, zavt_evd ) 
  • trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfmxl.F90

    r7698 r7753  
    9696 
    9797      ! w-level of the mixing and mixed layers 
    98       zN2_c = grav * rho_c * r1_rau0           ! convert density criteria into N^2 criteria 
    99 !$OMP PARALLEL 
    100 !$OMP DO schedule(static) private(jj, ji) 
    101       DO jj = 1, jpj 
    102          DO ji = 1, jpi 
    103             nmln(ji,jj)  = nlb10               ! Initialization to the number of w ocean point 
    104             hmlp(ji,jj)  = 0._wp               ! here hmlp used as a dummy variable, integrating vertically N^2 
    105          END DO 
    106       END DO 
     98      nmln(:,:)  = nlb10               ! Initialization to the number of w ocean point 
     99      hmlp(:,:)  = 0._wp               ! here hmlp used as a dummy variable, integrating vertically N^2 
     100      zN2_c = grav * rho_c * r1_rau0   ! convert density criteria into N^2 criteria 
    107101      DO jk = nlb10, jpkm1 
    108 !$OMP DO schedule(static) private(jj, ji, ikt) 
    109102         DO jj = 1, jpj                ! Mixed layer level: w-level  
    110103            DO ji = 1, jpi 
     
    117110      ! 
    118111      ! w-level of the turbocline and mixing layer (iom_use) 
    119 !$OMP DO schedule(static) private(jj, ji) 
    120       DO jj = 1, jpj 
    121          DO ji = 1, jpi 
    122             imld(ji,jj) = mbkt(ji,jj) + 1        ! Initialization to the number of w ocean point 
    123          END DO 
    124       END DO 
     112      imld(:,:) = mbkt(:,:) + 1        ! Initialization to the number of w ocean point 
    125113      DO jk = jpkm1, nlb10, -1         ! from the bottom to nlb10  
    126 !$OMP DO schedule(static) private(jj, ji) 
    127114         DO jj = 1, jpj 
    128115            DO ji = 1, jpi 
     
    132119      END DO 
    133120      ! depth of the mixing and mixed layers 
    134 !$OMP DO schedule(static) private(jj, ji, iiki, iikn) 
    135121      DO jj = 1, jpj 
    136122         DO ji = 1, jpi 
     
    142128         END DO 
    143129      END DO 
    144 !$OMP END PARALLEL 
    145130      ! 
    146131      IF( .NOT.l_offline ) THEN 
  • 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        ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90

    r7698 r7753  
    121121      !                          ! ----------------------- ! 
    122122      !                             !* First estimation (with n2 bound by rn_n2min) bounded by 60 cm2/s 
    123 !$OMP PARALLEL 
    124 !$OMP DO schedule(static) private(jk,jj,ji)  
    125       DO jk = 1, jpk 
    126          DO jj = 1, jpj 
    127             DO ji = 1, jpi 
    128                zav_tide(ji,jj,jk) = MIN(  60.e-4, az_tmx(ji,jj,jk) / MAX( rn_n2min, rn2(ji,jj,jk) )  ) 
    129             END DO 
    130          END DO 
    131       END DO 
    132 !$OMP END DO NOWAIT 
    133  
    134 !$OMP DO schedule(static) private(jj, ji)  
    135       DO jj = 1, jpj 
    136          DO ji = 1, jpi 
    137             zkz(ji,jj) = 0.e0               !* Associated potential energy consummed over the whole water column 
    138          END DO 
    139       END DO 
     123      zav_tide(:,:,:) = MIN(  60.e-4, az_tmx(:,:,:) / MAX( rn_n2min, rn2(:,:,:) )  ) 
     124 
     125      zkz(:,:) = 0.e0               !* Associated potential energy consummed over the whole water column 
    140126      DO jk = 2, jpkm1 
    141 !$OMP DO schedule(static) private(jj, ji)  
    142          DO jj = 1, jpj 
    143             DO ji = 1, jpi 
    144                zkz(ji,jj) = zkz(ji,jj) + e3w_n(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) * rau0 * zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 
    145             END DO 
    146          END DO 
    147       END DO 
    148  
    149 !$OMP DO schedule(static) private(jj, ji)  
     127         zkz(:,:) = zkz(:,:) + e3w_n(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zav_tide(:,:,jk) * wmask(:,:,jk) 
     128      END DO 
     129 
    150130      DO jj = 1, jpj                !* Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz to recover en_tmx 
    151131         DO ji = 1, jpi 
     
    155135 
    156136      DO jk = 2, jpkm1     !* Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zav_tide bound by 300 cm2/s 
    157 !$OMP DO schedule(static) private(jj, ji)  
    158          DO jj = 1, jpj 
    159             DO ji = 1, jpi 
    160                zav_tide(ji,jj,jk) = zav_tide(ji,jj,jk) * MIN( zkz(ji,jj), 30./6. ) * wmask(ji,jj,jk)  !kz max = 300 cm2/s 
    161             END DO 
    162          END DO 
    163       END DO 
    164 !$OMP END PARALLEL 
     137         zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) * wmask(:,:,jk)  !kz max = 300 cm2/s 
     138      END DO 
    165139 
    166140      IF( kt == nit000 ) THEN       !* check at first time-step: diagnose the energy consumed by zav_tide 
    167141         ztpc = 0._wp 
    168 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztpc)  
    169142         DO jk= 1, jpk 
    170143            DO jj= 1, jpj 
     
    189162      !                          !   Update  mixing coefs  !                           
    190163      !                          ! ----------------------- ! 
    191 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji)  
    192164      DO jk = 2, jpkm1              !* update momentum & tracer diffusivity with tidal mixing 
    193          DO jj = 1, jpj 
    194             DO ji = 1, jpi  ! vector opt. 
    195                avt(ji,jj,jk) = avt(ji,jj,jk) + zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 
    196                avm(ji,jj,jk) = avm(ji,jj,jk) + zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 
    197             END DO 
    198          END DO 
     165         avt(:,:,jk) = avt(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 
     166         avm(:,:,jk) = avm(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 
    199167         DO jj = 2, jpjm1 
    200168            DO ji = fs_2, fs_jpim1  ! vector opt. 
     
    257225 
    258226      !                             ! compute the form function using N2 at each time step 
    259 !$OMP PARALLEL  
    260 !$OMP DO schedule(static) private(jj, ji)  
    261       DO jj = 1, jpj 
    262          DO ji = 1, jpi 
    263             zempba_3d_1(ji,jj,jpk) = 0.e0 
    264             zempba_3d_2(ji,jj,jpk) = 0.e0 
    265          END DO 
    266       END DO 
    267 !$OMP DO schedule(static) private(jk,jj,ji)  
     227      zempba_3d_1(:,:,jpk) = 0.e0 
     228      zempba_3d_2(:,:,jpk) = 0.e0 
    268229      DO jk = 1, jpkm1              
    269          DO jj = 1, jpj 
    270             DO ji = 1, jpi 
    271                zdn2dz     (ji,jj,jk) = rn2(ji,jj,jk) - rn2(ji,jj,jk+1)           ! Vertical profile of dN2/dz 
    272                zempba_3d_1(ji,jj,jk) = SQRT(  MAX( 0.e0, rn2(ji,jj,jk) )  )    !    -        -    of N 
    273                zempba_3d_2(ji,jj,jk) =        MAX( 0.e0, rn2(ji,jj,jk) )       !    -        -    of N^2 
    274             END DO 
    275          END DO 
    276       END DO 
    277 !$OMP END DO NOWAIT 
    278       ! 
    279 !$OMP DO schedule(static) private(jj, ji)  
    280       DO jj = 1, jpj 
    281          DO ji = 1, jpi 
    282             zsum (ji,jj) = 0.e0 
    283             zsum1(ji,jj) = 0.e0 
    284             zsum2(ji,jj) = 0.e0 
    285          END DO 
    286       END DO 
     230         zdn2dz     (:,:,jk) = rn2(:,:,jk) - rn2(:,:,jk+1)           ! Vertical profile of dN2/dz 
     231         zempba_3d_1(:,:,jk) = SQRT(  MAX( 0.e0, rn2(:,:,jk) )  )    !    -        -    of N 
     232         zempba_3d_2(:,:,jk) =        MAX( 0.e0, rn2(:,:,jk) )       !    -        -    of N^2 
     233      END DO 
     234      ! 
     235      zsum (:,:) = 0.e0 
     236      zsum1(:,:) = 0.e0 
     237      zsum2(:,:) = 0.e0 
    287238      DO jk= 2, jpk 
    288 !$OMP DO schedule(static) private(jj,ji)  
    289          DO jj= 1, jpj 
    290             DO ji= 1, jpi 
    291                zsum1(ji,jj) = zsum1(ji,jj) + zempba_3d_1(ji,jj,jk) * e3w_n(ji,jj,jk) * wmask(ji,jj,jk) 
    292                zsum2(ji,jj) = zsum2(ji,jj) + zempba_3d_2(ji,jj,jk) * e3w_n(ji,jj,jk) * wmask(ji,jj,jk)               
    293             END DO 
    294         END DO  
    295       END DO 
    296 !$OMP DO schedule(static) private(jj,ji)  
     239         zsum1(:,:) = zsum1(:,:) + zempba_3d_1(:,:,jk) * e3w_n(:,:,jk) * wmask(:,:,jk) 
     240         zsum2(:,:) = zsum2(:,:) + zempba_3d_2(:,:,jk) * e3w_n(:,:,jk) * wmask(:,:,jk)                
     241      END DO 
    297242      DO jj = 1, jpj 
    298243         DO ji = 1, jpi 
     
    303248 
    304249      DO jk= 1, jpk 
    305 !$OMP DO schedule(static) private(jj,ji,zcoef,ztpc)  
    306250         DO jj = 1, jpj 
    307251            DO ji = 1, jpi 
     
    315259         END DO 
    316260       END DO 
    317 !$OMP DO schedule(static) private(jj,ji)  
    318261       DO jj = 1, jpj 
    319262          DO ji = 1, jpi 
     
    324267      !                             ! first estimation bounded by 10 cm2/s (with n2 bounded by rn_n2min)  
    325268      zcoef = rn_tfe_itf / ( rn_tfe * rau0 ) 
    326 !$OMP DO schedule(static) private(jk,jj,ji)  
    327269      DO jk = 1, jpk 
    328          DO jj = 1, jpj 
    329             DO ji = 1, jpi 
    330                zavt_itf(ji,jj,jk) = MIN(  10.e-4, zcoef * en_tmx(ji,jj) * zsum(ji,jj) * zempba_3d(ji,jj,jk)   & 
    331             &                                      / MAX( rn_n2min, rn2(ji,jj,jk) ) * tmask(ji,jj,jk)  ) 
    332             END DO 
    333          END DO 
    334       END DO                
    335  
    336 !$OMP DO schedule(static) private(jj, ji)  
    337       DO jj = 1, jpj 
    338          DO ji = 1, jpi 
    339             zkz(ji,jj) = 0.e0               ! Associated potential energy consummed over the whole water column 
    340          END DO 
    341       END DO 
     270         zavt_itf(:,:,jk) = MIN(  10.e-4, zcoef * en_tmx(:,:) * zsum(:,:) * zempba_3d(:,:,jk)   & 
     271            &                                      / MAX( rn_n2min, rn2(:,:,jk) ) * tmask(:,:,jk)  ) 
     272      END DO            
     273 
     274      zkz(:,:) = 0.e0               ! Associated potential energy consummed over the whole water column 
    342275      DO jk = 2, jpkm1 
    343 !$OMP DO schedule(static) private(jj,ji)  
    344          DO jj = 1, jpj 
    345             DO ji = 1, jpi 
    346                zkz(ji,jj) = zkz(ji,jj) + e3w_n(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) * rau0 * zavt_itf(ji,jj,jk) * wmask(ji,jj,jk) 
    347             END DO 
    348          END DO 
    349       END DO 
    350  
    351 !$OMP DO schedule(static) private(jj,ji)  
     276         zkz(:,:) = zkz(:,:) + e3w_n(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zavt_itf(:,:,jk) * wmask(:,:,jk) 
     277      END DO 
     278 
    352279      DO jj = 1, jpj                ! Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz to recover en_tmx 
    353280         DO ji = 1, jpi 
     
    356283      END DO 
    357284 
    358 !$OMP DO schedule(static) private(jk,jj,ji)  
    359285      DO jk = 2, jpkm1              ! Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zavt_itf bound by 300 cm2/s 
    360          DO jj = 1, jpj 
    361             DO ji = 1, jpi 
    362                zavt_itf(ji,jj,jk) = zavt_itf(ji,jj,jk) * MIN( zkz(ji,jj), 120./10. ) * wmask(ji,jj,jk)   ! kz max = 120 cm2/s 
    363             END DO 
    364          END DO 
    365       END DO 
    366 !$OMP END PARALLEL 
     286         zavt_itf(:,:,jk) = zavt_itf(:,:,jk) * MIN( zkz(:,:), 120./10. ) * wmask(:,:,jk)   ! kz max = 120 cm2/s 
     287      END DO 
    367288 
    368289      IF( kt == nit000 ) THEN       ! diagnose the nergy consumed by zavt_itf 
    369290         ztpc = 0.e0 
    370 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztpc)  
    371291         DO jk= 1, jpk 
    372292            DO jj= 1, jpj 
     
    383303 
    384304      !                             ! Update pav with the ITF mixing coefficient 
    385 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji)  
    386305      DO jk = 2, jpkm1 
    387          DO jj= 1, jpj 
    388             DO ji= 1, jpi 
    389                pav(ji,jj,jk) = pav     (ji,jj,jk) * ( 1.e0 - mask_itf(ji,jj) )   & 
    390                   &        + zavt_itf(ji,jj,jk) *          mask_itf(ji,jj)  
    391             END DO 
    392          END DO 
     306         pav(:,:,jk) = pav     (:,:,jk) * ( 1.e0 - mask_itf(:,:) )   & 
     307            &        + zavt_itf(:,:,jk) *          mask_itf(:,:)  
    393308      END DO 
    394309      ! 
     
    494409      !                                ! only the energy available for mixing is taken into account, 
    495410      !                                ! (mixing efficiency tidal dissipation efficiency) 
    496 !$OMP PARALLEL 
    497  
    498 !$OMP DO schedule(static) private(jj, ji)  
    499       DO jj = 1, jpj 
    500          DO ji = 1, jpi 
    501             en_tmx(ji,jj) = - rn_tfe * rn_me * ( zem2(ji,jj) * 1.25 + zek1(ji,jj) ) * ssmask(ji,jj) 
    502          END DO 
    503       END DO 
     411      en_tmx(:,:) = - rn_tfe * rn_me * ( zem2(:,:) * 1.25 + zek1(:,:) ) * ssmask(:,:) 
    504412 
    505413!============ 
     
    508416!!     the error is thus ~1% which I feel comfortable with, compared to uncertainties in tidal energy dissipation. 
    509417      !                                ! Vertical structure (az_tmx) 
    510 !$OMP DO schedule(static) private(jj, ji) 
    511418      DO jj = 1, jpj                         ! part independent of the level 
    512419         DO ji = 1, jpi 
     
    516423         END DO 
    517424      END DO 
    518 !$OMP DO schedule(static) private(jk, jj, ji) 
    519425      DO jk= 1, jpk                          ! complete with the level-dependent part 
    520426         DO jj = 1, jpj 
     
    524430         END DO 
    525431      END DO 
    526 !$OMP END PARALLEL 
    527432!=========== 
    528433      ! 
     
    531436         ! Total power consumption due to vertical mixing 
    532437         ! zpc = rau0 * 1/rn_me * rn2 * zav_tide 
     438         zav_tide(:,:,:) = 0.e0 
     439         DO jk = 2, jpkm1 
     440            zav_tide(:,:,jk) = az_tmx(:,:,jk) / MAX( rn_n2min, rn2(:,:,jk) ) 
     441         END DO 
     442         ! 
    533443         ztpc = 0._wp 
    534 !$OMP PARALLEL 
    535 !$OMP DO schedule(static) private(jk, jj, ji)  
    536          DO jk = 1, jpk 
    537             DO jj = 1, jpj 
    538                DO ji = 1, jpi 
    539                   zav_tide(ji,jj,jk) = 0.e0 
    540                END DO 
    541             END DO 
    542          END DO 
    543 !$OMP DO schedule(static) private(jk,jj,ji) 
    544          DO jk = 2, jpkm1 
    545             DO jj = 1, jpj 
    546                DO ji = 1, jpi 
    547                   zav_tide(ji,jj,jk) = az_tmx(ji,jj,jk) / MAX( rn_n2min, rn2(ji,jj,jk) ) 
    548                END DO 
    549             END DO 
    550          END DO 
    551          ! 
    552 !$OMP DO schedule(static) private(jk, jj, ji) 
    553          DO jk= 1, jpk 
    554             DO jj = 1, jpj 
    555                DO ji = 1, jpi 
    556                   zpc(ji,jj,jk) = MAX(rn_n2min,rn2(ji,jj,jk)) * zav_tide(ji,jj,jk) 
    557                END DO 
    558             END DO 
    559          END DO 
    560 !$OMP DO schedule(static) private(jk, jj, ji, ztpc) 
     444         zpc(:,:,:) = MAX(rn_n2min,rn2(:,:,:)) * zav_tide(:,:,:) 
    561445         DO jk= 2, jpkm1 
    562446            DO jj = 1, jpj 
     
    566450            END DO 
    567451         END DO 
    568 !$OMP END PARALLEL 
    569452         IF( lk_mpp )   CALL mpp_sum( ztpc ) 
    570453         ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc 
     
    574457         ! 
    575458         ! control print 2 
    576 !$OMP PARALLEL 
    577 !$OMP DO schedule(static) private(jk, jj, ji) 
    578          DO jk= 1, jpk 
    579             DO jj = 1, jpj 
    580                DO ji = 1, jpi 
    581                   zav_tide(ji,jj,jk) = MIN( zav_tide(ji,jj,jk), 60.e-4 )    
    582                   zkz(ji,jj) = 0._wp 
    583                END DO 
    584             END DO 
    585          END DO 
    586  
     459         zav_tide(:,:,:) = MIN( zav_tide(:,:,:), 60.e-4 )    
     460         zkz(:,:) = 0._wp 
    587461         DO jk = 2, jpkm1 
    588 !$OMP DO schedule(static) private(jj, ji) 
    589             DO jj = 1, jpj 
    590                DO ji = 1, jpi 
    591                   zkz(ji,jj) = zkz(ji,jj) + e3w_n(ji,jj,jk) * MAX(0.e0, rn2(ji,jj,jk)) * rau0 * zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 
    592                END DO 
    593             END DO 
     462               zkz(:,:) = zkz(:,:) + e3w_n(:,:,jk) * MAX(0.e0, rn2(:,:,jk)) * rau0 * zav_tide(:,:,jk) * wmask(:,:,jk) 
    594463         END DO 
    595464         ! Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz 
    596 !$OMP DO schedule(static) private(jj, ji) 
    597465         DO jj = 1, jpj 
    598466            DO ji = 1, jpi 
     
    603471         END DO 
    604472         ztpc = 1.e50 
    605 !$OMP DO schedule(static) private(jj, ji, ztpc) 
    606473         DO jj = 1, jpj 
    607474            DO ji = 1, jpi 
     
    611478            END DO 
    612479         END DO 
    613 !$OMP END PARALLEL 
    614480         WRITE(numout,*) '          Min de zkz ', ztpc, ' Max = ', maxval(zkz(:,:) ) 
    615 !$OMP PARALLEL  
    616481         ! 
    617 !$OMP DO schedule(static) private(jk,jj,ji) 
    618482         DO jk = 2, jpkm1 
    619             DO jj = 1, jpj 
    620                DO ji = 1, jpi 
    621                   zav_tide(ji,jj,jk) = zav_tide(ji,jj,jk) * MIN( zkz(ji,jj), 30./6. ) * wmask(ji,jj,jk)  !kz max = 300 cm2/s 
    622                END DO 
    623             END DO 
     483            zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) * wmask(:,:,jk)  !kz max = 300 cm2/s 
    624484         END DO 
    625485         ztpc = 0._wp 
    626 !$OMP DO schedule(static) private(jk, jj, ji) 
    627          DO jk= 1, jpk 
    628             DO jj = 1, jpj 
    629                DO ji = 1, jpi 
    630                   zpc(ji,jj,jk) = Max(0.e0,rn2(ji,jj,jk)) * zav_tide(ji,jj,jk) 
    631                END DO 
    632             END DO 
    633          END DO 
    634 !$OMP DO schedule(static) private(jk, jj, ji, ztpc) 
     486         zpc(:,:,:) = Max(0.e0,rn2(:,:,:)) * zav_tide(:,:,:) 
    635487         DO jk= 1, jpk 
    636488            DO jj = 1, jpj 
     
    640492            END DO 
    641493         END DO 
    642 !$OMP END PARALLEL 
    643494         IF( lk_mpp )   CALL mpp_sum( ztpc ) 
    644495         ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc 
     
    649500               &     / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask   (:,:,jk) * tmask_i(:,:) ) ) 
    650501            ztpc = 1.e50 
    651 !$OMP PARALLEL DO schedule(static) private(ztpc, jj, ji) 
    652502            DO jj = 1, jpj 
    653503               DO ji = 1, jpi 
     
    663513         WRITE(numout,*) '          Initial profile of tidal vertical mixing' 
    664514         DO jk = 1, jpk 
    665 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
    666515            DO jj = 1,jpj 
    667516               DO ji = 1,jpi 
     
    674523         END DO 
    675524         DO jk = 1, jpk 
    676 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
    677             DO jj = 1,jpj 
    678                DO ji = 1,jpi 
    679                   zkz(ji,jj) = az_tmx(ji,jj,jk) /rn_n2min 
    680                END DO 
    681             END DO 
     525            zkz(:,:) = az_tmx(:,:,jk) /rn_n2min 
    682526            ze_z =                  SUM( e1e2t(:,:) * zkz  (:,:)    * tmask_i(:,:) )   & 
    683527               &     / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) ) 
     
    845689      !                        !* Critical slope mixing: distribute energy over the time-varying ocean depth, 
    846690      !                                                 using an exponential decay from the seafloor. 
    847 !$OMP PARALLEL 
    848 !$OMP DO schedule(static) private(jj,ji) 
    849691      DO jj = 1, jpj                ! part independent of the level 
    850692         DO ji = 1, jpi 
     
    855697      END DO 
    856698 
    857 !$OMP DO schedule(static) private(jk,jj,ji) 
    858699      DO jk = 2, jpkm1              ! complete with the level-dependent part 
    859          DO jj = 1, jpj 
    860             DO ji = 1, jpi 
    861                emix_tmx(ji,jj,jk) = zfact(ji,jj) * (  EXP( ( gde3w_n(ji,jj,jk  ) - zhdep(ji,jj) ) / hcri_tmx(:,:) )                      & 
    862                   &                             - EXP( ( gde3w_n(ji,jj,jk-1) - zhdep(ji,jj) ) / hcri_tmx(ji,jj) )  ) * wmask(ji,jj,jk)   & 
    863                   &                          / ( gde3w_n(ji,jj,jk) - gde3w_n(ji,jj,jk-1) ) 
    864             END DO 
    865          END DO 
    866       END DO 
    867 !$OMP END PARALLEL 
     700         emix_tmx(:,:,jk) = zfact(:,:) * (  EXP( ( gde3w_n(:,:,jk  ) - zhdep(:,:) ) / hcri_tmx(:,:) )                      & 
     701            &                             - EXP( ( gde3w_n(:,:,jk-1) - zhdep(:,:) ) / hcri_tmx(:,:) )  ) * wmask(:,:,jk)   & 
     702            &                          / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 
     703      END DO 
    868704 
    869705      !                        !* Pycnocline-intensified mixing: distribute energy over the time-varying  
     
    874710      CASE ( 1 )               ! Dissipation scales as N (recommended) 
    875711 
    876 !$OMP PARALLEL 
    877 !$OMP DO schedule(static) private(jj, ji)  
    878          DO jj = 1, jpj 
    879             DO ji = 1, jpi 
    880                zfact(ji,jj) = 0._wp 
    881             END DO 
    882          END DO 
     712         zfact(:,:) = 0._wp 
    883713         DO jk = 2, jpkm1              ! part independent of the level 
    884 !$OMP DO schedule(static) private(jj,ji) 
    885             DO jj = 1, jpj                ! part independent of the level 
    886                DO ji = 1, jpi 
    887                   zfact(ji,jj) = zfact(ji,jj) + e3w_n(ji,jj,jk) * SQRT(  MAX( 0._wp, rn2(ji,jj,jk) )  ) * wmask(ji,jj,jk) 
    888                END DO 
    889             END DO 
    890          END DO 
    891  
    892 !$OMP DO schedule(static) private(jj,ji) 
     714            zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) * wmask(:,:,jk) 
     715         END DO 
     716 
    893717         DO jj = 1, jpj 
    894718            DO ji = 1, jpi 
     
    897721         END DO 
    898722 
    899 !$OMP DO schedule(static) private(jk,jj,ji) 
    900723         DO jk = 2, jpkm1              ! complete with the level-dependent part 
    901             DO jj = 1, jpj 
    902                DO ji = 1, jpi 
    903                   emix_tmx(ji,jj,jk) = emix_tmx(ji,jj,jk) + zfact(ji,jj) * SQRT(  MAX( 0._wp, rn2(ji,jj,jk) )  ) * wmask(ji,ji,jk) 
    904                END DO 
    905             END DO 
    906          END DO 
    907 !$OMP END PARALLEL 
     724            emix_tmx(:,:,jk) = emix_tmx(:,:,jk) + zfact(:,:) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) * wmask(:,:,jk) 
     725         END DO 
    908726 
    909727      CASE ( 2 )               ! Dissipation scales as N^2 
    910728 
    911 !$OMP PARALLEL 
    912 !$OMP DO schedule(static) private(jj, ji)  
    913          DO jj = 1, jpj 
    914             DO ji = 1, jpi 
    915                zfact(ji,jj) = 0._wp 
    916             END DO 
    917          END DO 
    918  
    919          DO jk = 2, jpkm1             
    920 !$OMP DO schedule(static) private(jj,ji) 
    921             DO jj = 1, jpj            
    922                DO ji = 1, jpi 
    923                   zfact(ji,jj) = zfact(ji,jj) + e3w_n(ji,jj,jk) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,jj,jk) 
    924                END DO 
    925             END DO 
    926          END DO 
    927  
    928 !$OMP DO schedule(static) private(jj,ji) 
     729         zfact(:,:) = 0._wp 
     730         DO jk = 2, jpkm1              ! part independent of the level 
     731            zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * MAX( 0._wp, rn2(:,:,jk) ) * wmask(:,:,jk) 
     732         END DO 
     733 
    929734         DO jj= 1, jpj 
    930735            DO ji = 1, jpi 
     
    933738         END DO 
    934739 
    935 !$OMP DO schedule(static) private(jk,jj,ji) 
    936740         DO jk = 2, jpkm1              ! complete with the level-dependent part 
    937             DO jj = 1, jpj 
    938                DO ji = 1, jpi 
    939                   emix_tmx(ji,jj,jk) = emix_tmx(ji,jj,jk) + zfact(ji,jj) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,ji,jk) 
    940                END DO 
    941             END DO 
    942          END DO 
    943 !$OMP END PARALLEL 
     741            emix_tmx(:,:,jk) = emix_tmx(:,:,jk) + zfact(:,:) * MAX( 0._wp, rn2(:,:,jk) ) * wmask(:,:,jk) 
     742         END DO 
    944743 
    945744      END SELECT 
     
    948747      !                        !* ocean depth as proportional to rn2 * exp(-z_wkb/rn_hbot) 
    949748       
    950 !$OMP PARALLEL 
    951 !$OMP DO schedule(static) private(jk,jj,ji)  
    952       DO jk = 1, jpk 
    953          DO jj = 1, jpj 
    954             DO ji = 1, jpi 
    955                zwkb(ji,jj,jk) = 0._wp 
    956             END DO 
    957          END DO 
    958       END DO 
    959 !$OMP DO schedule(static) private(jj,ji) 
    960       DO jj = 1, jpj 
    961          DO ji = 1, jpi 
    962             zfact(ji,jj) = 0._wp 
    963          END DO 
    964       END DO 
     749      zwkb(:,:,:) = 0._wp 
     750      zfact(:,:) = 0._wp 
    965751      DO jk = 2, jpkm1 
    966 !$OMP DO schedule(static) private(jj,ji) 
    967          DO jj = 1, jpj            
    968             DO ji = 1, jpi 
    969                zfact(ji,jj) = zfact(ji,jj) + e3w_n(ji,jj,jk) * SQRT(  MAX( 0._wp, rn2(ji,jj,jk) )  ) * wmask(ji,jj,jk) 
    970                zwkb(ji,jj,jk) = zfact(ji,jj) 
    971             END DO 
    972          END DO 
    973       END DO 
    974  
    975 !$OMP DO schedule(static) private(jk,jj,ji) 
     752         zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) * wmask(:,:,jk) 
     753         zwkb(:,:,jk) = zfact(:,:) 
     754      END DO 
     755 
    976756      DO jk = 2, jpkm1 
    977757         DO jj = 1, jpj 
     
    982762         END DO 
    983763      END DO 
    984  
    985 !$OMP DO schedule(static) private(jj, ji)  
    986       DO jj = 1, jpj 
    987          DO ji = 1, jpi 
    988             zwkb(ji,jj,1) = zhdep(ji,jj) * tmask(ji,jj,1) 
    989          END DO 
    990       END DO 
    991 !$OMP END DO NOWAIT 
    992 !$OMP DO schedule(static) private(jk,jj,ji)  
    993       DO jk = 1, jpk 
    994          DO jj = 1, jpj 
    995             DO ji = 1, jpi 
    996                zweight(ji,jj,jk) = 0._wp 
    997             END DO 
    998          END DO 
    999       END DO 
    1000  
    1001 !$OMP DO schedule(static) private(jk,jj,ji) 
     764      zwkb(:,:,1) = zhdep(:,:) * tmask(:,:,1) 
     765 
     766      zweight(:,:,:) = 0._wp 
    1002767      DO jk = 2, jpkm1 
    1003          DO jj = 1, jpj 
    1004             DO ji = 1, jpi 
    1005                zweight(ji,jj,jk) = MAX( 0._wp, rn2(ji,jj,jk) ) * hbot_tmx(ji,jj) * wmask(ji,jj,jk)                    & 
    1006                 &   * (  EXP( -zwkb(ji,jj,jk) / hbot_tmx(ji,jj) ) - EXP( -zwkb(ji,jj,jk-1) / hbot_tmx(ji,jj) )  ) 
    1007             END DO 
    1008          END DO 
    1009       END DO 
    1010  
    1011 !$OMP DO schedule(static) private(jj, ji)  
    1012       DO jj = 1, jpj 
    1013          DO ji = 1, jpi 
    1014             zfact(ji,jj) = 0._wp 
    1015          END DO 
    1016       END DO 
    1017  
     768         zweight(:,:,jk) = MAX( 0._wp, rn2(:,:,jk) ) * hbot_tmx(:,:) * wmask(:,:,jk)                    & 
     769            &   * (  EXP( -zwkb(:,:,jk) / hbot_tmx(:,:) ) - EXP( -zwkb(:,:,jk-1) / hbot_tmx(:,:) )  ) 
     770      END DO 
     771 
     772      zfact(:,:) = 0._wp 
    1018773      DO jk = 2, jpkm1              ! part independent of the level 
    1019 !$OMP DO schedule(static) private(jj,ji) 
    1020          DO jj = 1, jpj            
    1021             DO ji = 1, jpi 
    1022                zfact(ji,jj) = zfact(ji,jj) + zweight(ji,jj,jk) 
    1023             END DO 
    1024          END DO 
    1025       END DO 
    1026  
    1027 !$OMP DO schedule(static) private(jj,ji) 
     774         zfact(:,:) = zfact(:,:) + zweight(:,:,jk) 
     775      END DO 
     776 
    1028777      DO jj = 1, jpj 
    1029778         DO ji = 1, jpi 
     
    1032781      END DO 
    1033782 
    1034 !$OMP DO schedule(static) private(jk,jj,ji) 
    1035783      DO jk = 2, jpkm1              ! complete with the level-dependent part 
    1036          DO jj = 1, jpj 
    1037             DO ji = 1, jpi 
    1038                emix_tmx(ji,jj,jk) = emix_tmx(ji,jj,jk) + zweight(ji,jj,jk) * zfact(ji,jj) * wmask(ji,ji,jk) 
    1039                   &                                / ( gde3w_n(ji,jj,jk) - gde3w_n(ji,jj,jk-1) ) 
    1040             END DO 
    1041          END DO 
    1042       END DO 
    1043 !$OMP END DO NOWAIT 
     784         emix_tmx(:,:,jk) = emix_tmx(:,:,jk) + zweight(:,:,jk) * zfact(:,:) * wmask(:,:,jk)   & 
     785            &                                / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 
     786      END DO 
    1044787 
    1045788 
    1046789      ! Calculate molecular kinematic viscosity 
    1047 !$OMP DO schedule(static) private(jj, ji)  
    1048       DO jj = 1, jpj 
    1049          DO ji = 1, jpi 
    1050             znu_t(ji,jj,jk) = 1.e-4_wp * (  17.91_wp - 0.53810_wp * tsn(ji,jj,jk,jp_tem) & 
    1051          &                                  + 0.00694_wp * tsn(ji,jj,jk,jp_tem) * tsn(ji,jj,jk,jp_tem)  & 
    1052          &                                  + 0.02305_wp * tsn(ji,jj,jk,jp_sal)  ) * tmask(ji,jj,jk) * r1_rau0 
    1053          END DO 
    1054       END DO 
    1055 !$OMP DO schedule(static) private(jk,jj,ji) 
     790      znu_t(:,:,:) = 1.e-4_wp * (  17.91_wp - 0.53810_wp * tsn(:,:,:,jp_tem) + 0.00694_wp * tsn(:,:,:,jp_tem) * tsn(:,:,:,jp_tem)  & 
     791         &                                  + 0.02305_wp * tsn(:,:,:,jp_sal)  ) * tmask(:,:,:) * r1_rau0 
    1056792      DO jk = 2, jpkm1 
    1057          DO jj = 1, jpj 
    1058             DO ji = 1, jpi 
    1059                znu_w(ji,jj,jk) = 0.5_wp * ( znu_t(ji,jj,jk-1) + znu_t(ji,jj,jk) ) * wmask(ji,jj,jk) 
    1060             END DO 
    1061          END DO 
     793         znu_w(:,:,jk) = 0.5_wp * ( znu_t(:,:,jk-1) + znu_t(:,:,jk) ) * wmask(:,:,jk) 
    1062794      END DO 
    1063795 
    1064796      ! Calculate turbulence intensity parameter Reb 
    1065 !$OMP DO schedule(static) private(jk,jj,ji) 
    1066797      DO jk = 2, jpkm1 
    1067          DO jj = 1, jpj 
    1068             DO ji = 1, jpi 
    1069                zReb(ji,jj,jk) = emix_tmx(ji,jj,jk) / MAX( 1.e-20_wp, znu_w(ji,jj,jk) * rn2(ji,jj,jk) ) 
    1070             END DO 
    1071          END DO 
     798         zReb(:,:,jk) = emix_tmx(:,:,jk) / MAX( 1.e-20_wp, znu_w(:,:,jk) * rn2(:,:,jk) ) 
    1072799      END DO 
    1073800 
    1074801      ! Define internal wave-induced diffusivity 
    1075 !$OMP DO schedule(static) private(jk,jj,ji) 
    1076802      DO jk = 2, jpkm1 
    1077          DO jj = 1, jpj 
    1078             DO ji = 1, jpi 
    1079                zav_wave(ji,jj,jk) = znu_w(ji,jj,jk) * zReb(ji,jj,jk) * r1_6   ! This corresponds to a constant mixing efficiency of 1/6 
    1080             END DO 
    1081          END DO 
    1082       END DO 
    1083 !$OMP END PARALLEL 
     803         zav_wave(:,:,jk) = znu_w(:,:,jk) * zReb(:,:,jk) * r1_6   ! This corresponds to a constant mixing efficiency of 1/6 
     804      END DO 
    1084805 
    1085806      IF( ln_mevar ) THEN              ! Variable mixing efficiency case : modify zav_wave in the 
    1086 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    1087807         DO jk = 2, jpkm1              ! energetic (Reb > 480) and buoyancy-controlled (Reb <10.224 ) regimes 
    1088808            DO jj = 1, jpj 
     
    1098818      ENDIF 
    1099819 
    1100 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    1101820      DO jk = 2, jpkm1                 ! Bound diffusivity by molecular value and 100 cm2/s 
    1102          DO jj = 1, jpj 
    1103             DO ji = 1, jpi 
    1104                zav_wave(ji,jj,jk) = MIN(  MAX( 1.4e-7_wp, zav_wave(ji,jj,jk) ), 1.e-2_wp  ) * wmask(ji,jj,jk) 
    1105             END DO 
    1106          END DO 
     821         zav_wave(:,:,jk) = MIN(  MAX( 1.4e-7_wp, zav_wave(:,:,jk) ), 1.e-2_wp  ) * wmask(:,:,jk) 
    1107822      END DO 
    1108823 
    1109824      IF( kt == nit000 ) THEN        !* Control print at first time-step: diagnose the energy consumed by zav_wave 
    1110825         ztpc = 0._wp 
    1111 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztpc) 
    1112826         DO jk = 2, jpkm1 
    1113827            DO jj = 1, jpj 
     
    1135849      !       
    1136850      IF( ln_tsdiff ) THEN          !* Option for differential mixing of salinity and temperature 
    1137 !$OMP PARALLEL 
    1138 !$OMP DO schedule(static) private(jk,jj,ji) 
    1139851         DO jk = 2, jpkm1              ! Calculate S/T diffusivity ratio as a function of Reb 
    1140852            DO jj = 1, jpj 
     
    1146858            END DO 
    1147859         END DO 
    1148 !$OMP DO schedule(static) private(jk,jj,ji) 
     860         CALL iom_put( "av_ratio", zav_ratio ) 
    1149861         DO jk = 2, jpkm1           !* update momentum & tracer diffusivity with wave-driven mixing 
    1150             DO jj = 1, jpj 
    1151                DO ji = 1, jpi 
    1152                   fsavs(ji,jj,jk) = avt(ji,jj,jk) + zav_wave(ji,jj,jk) * zav_ratio(ji,jj,jk) 
    1153                   avt  (ji,jj,jk) = avt(ji,jj,jk) + zav_wave(ji,jj,jk) 
    1154                   avm  (ji,jj,jk) = avm(ji,jj,jk) + zav_wave(ji,jj,jk) 
    1155                END DO 
    1156             END DO 
    1157          END DO 
    1158 !$OMP END PARALLEL 
    1159          CALL iom_put( "av_ratio", zav_ratio ) 
     862            fsavs(:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) * zav_ratio(:,:,jk) 
     863            avt  (:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 
     864            avm  (:,:,jk) = avm(:,:,jk) + zav_wave(:,:,jk) 
     865         END DO 
    1160866         ! 
    1161867      ELSE                          !* update momentum & tracer diffusivity with wave-driven mixing 
    1162 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    1163868         DO jk = 2, jpkm1 
    1164             DO jj = 1, jpj 
    1165                DO ji = 1, jpi 
    1166                   fsavs(ji,jj,jk) = avt(ji,jj,jk) + zav_wave(ji,jj,jk) 
    1167                   avt  (ji,jj,jk) = avt(ji,jj,jk) + zav_wave(ji,jj,jk) 
    1168                   avm  (ji,jj,jk) = avm(ji,jj,jk) + zav_wave(ji,jj,jk) 
    1169                END DO 
    1170             END DO 
    1171          END DO 
    1172       ENDIF 
    1173  
    1174 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     869            fsavs(:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 
     870            avt  (:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 
     871            avm  (:,:,jk) = avm(:,:,jk) + zav_wave(:,:,jk) 
     872         END DO 
     873      ENDIF 
     874 
    1175875      DO jk = 2, jpkm1              !* update momentum diffusivity at wu and wv points 
    1176876         DO jj = 2, jpjm1 
     
    1188888                                    !  vertical integral of rau0 * Kz * N^2 (pcmap_tmx), energy density (emix_tmx) 
    1189889      IF( iom_use("bflx_tmx") .OR. iom_use("pcmap_tmx") ) THEN 
    1190 !$OMP PARALLEL 
    1191 !$OMP DO schedule(static) private(jk,jj,ji) 
    1192       DO jk = 1, jpk 
    1193          DO jj = 1, jpj 
    1194             DO ji = 1, jpi 
    1195                bflx_tmx(ji,jj,jk) = MAX( 0._wp, rn2(ji,jj,jk) ) * zav_wave(ji,jj,jk) 
    1196             END DO 
    1197          END DO 
    1198       END DO 
    1199 !$OMP END DO NOWAIT 
    1200 !$OMP DO schedule(static) private(jj, ji)  
    1201       DO jj = 1, jpj 
    1202          DO ji = 1, jpi 
    1203             pcmap_tmx(ji,jj) = 0._wp 
    1204          END DO 
    1205       END DO 
    1206       DO jk = 2, jpkm1 
    1207 !$OMP DO schedule(static) private(jj, ji)  
    1208          DO jj = 1, jpj 
    1209             DO ji = 1, jpi 
    1210                pcmap_tmx(ji,jj) = pcmap_tmx(ji,jj) + e3w_n(ji,jj,jk) * bflx_tmx(ji,jj,jk) * wmask(ji,jj,jk) 
    1211             END DO 
    1212          END DO 
    1213       END DO 
    1214 !$OMP DO schedule(static) private(jj, ji)  
    1215       DO jj = 1, jpj 
    1216          DO ji = 1, jpi 
    1217             pcmap_tmx(ji,jj) = rau0 * pcmap_tmx(ji,jj) 
    1218          END DO 
    1219       END DO 
    1220 !$OMP END PARALLEL 
     890         bflx_tmx(:,:,:) = MAX( 0._wp, rn2(:,:,:) ) * zav_wave(:,:,:) 
     891         pcmap_tmx(:,:) = 0._wp 
     892         DO jk = 2, jpkm1 
     893            pcmap_tmx(:,:) = pcmap_tmx(:,:) + e3w_n(:,:,jk) * bflx_tmx(:,:,jk) * wmask(:,:,jk) 
     894         END DO 
     895         pcmap_tmx(:,:) = rau0 * pcmap_tmx(:,:) 
    1221896         CALL iom_put( "bflx_tmx", bflx_tmx ) 
    1222897         CALL iom_put( "pcmap_tmx", pcmap_tmx ) 
     
    1295970      avmb(:) = 1.4e-6_wp        ! viscous molecular value 
    1296971      avtb(:) = 1.e-10_wp        ! very small diffusive minimum (background avt is specified in zdf_tmx)     
    1297 !$OMP PARALLEL DO schedule(static) private(jj, ji)  
    1298       DO jj = 1, jpj 
    1299          DO ji = 1, jpi 
    1300             avtb_2d(ji,jj) = 1.e0_wp     ! uniform  
    1301          END DO 
    1302       END DO 
     972      avtb_2d(:,:) = 1.e0_wp     ! uniform  
    1303973      IF(lwp) THEN                  ! Control print 
    1304974         WRITE(numout,*) 
     
    13331003      CALL iom_close(inum) 
    13341004 
    1335 !$OMP PARALLEL DO schedule(static) private(jj, ji)  
    1336       DO jj = 1, jpj 
    1337          DO ji = 1, jpi 
    1338             ebot_tmx(ji,jj) = ebot_tmx(ji,jj) * ssmask(ji,jj) 
    1339             epyc_tmx(ji,jj) = epyc_tmx(ji,jj) * ssmask(ji,jj) 
    1340             ecri_tmx(ji,jj) = ecri_tmx(ji,jj) * ssmask(ji,jj) 
    1341              
    1342             ! Set once for all to zero the first and last vertical levels of appropriate variables 
    1343             emix_tmx (ji,jj, 1 ) = 0._wp 
    1344             emix_tmx (ji,jj,jpk) = 0._wp 
    1345             zav_ratio(ji,jj, 1 ) = 0._wp 
    1346             zav_ratio(ji,jj,jpk) = 0._wp 
    1347             zav_wave (ji,jj, 1 ) = 0._wp 
    1348             zav_wave (ji,jj,jpk) = 0._wp 
    1349          END DO 
    1350       END DO 
     1005      ebot_tmx(:,:) = ebot_tmx(:,:) * ssmask(:,:) 
     1006      epyc_tmx(:,:) = epyc_tmx(:,:) * ssmask(:,:) 
     1007      ecri_tmx(:,:) = ecri_tmx(:,:) * ssmask(:,:) 
     1008 
     1009      ! Set once for all to zero the first and last vertical levels of appropriate variables 
     1010      emix_tmx (:,:, 1 ) = 0._wp 
     1011      emix_tmx (:,:,jpk) = 0._wp 
     1012      zav_ratio(:,:, 1 ) = 0._wp 
     1013      zav_ratio(:,:,jpk) = 0._wp 
     1014      zav_wave (:,:, 1 ) = 0._wp 
     1015      zav_wave (:,:,jpk) = 0._wp 
    13511016 
    13521017      zbot = glob_sum( e1e2t(:,:) * ebot_tmx(:,:) ) 
Note: See TracChangeset for help on using the changeset viewer.