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

Changeset 6508


Ignore:
Timestamp:
2016-05-04T16:23:46+02:00 (8 years ago)
Author:
dkuts
Message:

First version of OMP changes, partly ported from previous branch

Location:
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90

    r6348 r6508  
    885885      CALL histwrite( nid_V, "vomecrty", it, vn            , ndim_V , ndex_V  )   ! j-current 
    886886      IF( ln_traldf_gdia ) THEN 
     887!$OMP PARALLEL DO schedule(static) private(jk) 
    887888         DO jk=1,jpk-1 
    888889            zw3d(:,:,jk) = (psiy_eiv(:,:,jk+1) - psiy_eiv(:,:,jk))/fse3v(:,:,jk)  ! v_eiv = -dpsiy/dz 
     
    899900      CALL histwrite( nid_W, "vovecrtz", it, wn             , ndim_T, ndex_T )    ! vert. current 
    900901      IF( ln_traldf_gdia ) THEN 
    901          DO jk=1,jpk-1 
     902!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     903       DO jk=1,jpk-1 
    902904            DO jj = 2, jpjm1 
    903905               DO ji = fs_2, fs_jpim1  ! vector opt. 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r6204 r6508  
    897897      IF( nn_timing == 1 )  CALL timing_start('zgr_zco') 
    898898      ! 
    899       DO jk = 1, jpk 
     899!$OMP PARALLEL DO schedule(static) private(jk)       
     900     DO jk = 1, jpk 
    900901         gdept_0 (:,:,jk) = gdept_1d(jk) 
    901902         gdepw_0 (:,:,jk) = gdepw_1d(jk) 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90

    r5332 r6508  
    385385         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    386386         ! 
    387          DO jk = 1, jpk 
     387!$OMP PARALLEL DO schedule(static) private(jk, jj, ji)          
     388       DO jk = 1, jpk 
    388389            DO jj = 1, jpj 
    389390               DO ji = 1, jpi 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90

    r6204 r6508  
    107107 
    108108      !                                                ! =============== 
    109       DO jk = 1, jpkm1                                 ! Horizontal slab 
     109      !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     110     DO jk = 1, jpkm1                                 ! Horizontal slab 
    110111         !                                             ! =============== 
    111112         ! 
     
    288289 
    289290      !                                                ! =============== 
    290       DO jk = 1, jpkm1                                 ! Horizontal slab 
     291!$OMP PARALLEL DO schedule(static) private(jk, jj, ji)       
     292     DO jk = 1, jpkm1                                 ! Horizontal slab 
    291293         !                                             ! =============== 
    292294         ! 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90

    r5224 r6508  
    246246      ! interior value (2=<jk=<jpkm1) 
    247247      DO jk = 2, jpkm1 
    248          DO jj = 2, jpjm1 
     248!$OMP PARALLEL DO private(ji,jj, zcoef1) 
     249       DO jj = 2, jpjm1 
    249250            DO ji = fs_2, fs_jpim1   ! vector opt. 
    250251               zcoef1 = zcoef0 * fse3w(ji,jj,jk) 
     
    298299 
    299300      !  Surface value (also valid in partial step case) 
    300       DO jj = 2, jpjm1 
     301!$OMP PARALLEL DO private(ji,jj, zcoef1) 
     302     DO jj = 2, jpjm1 
    301303         DO ji = fs_2, fs_jpim1   ! vector opt. 
    302304            zcoef1 = zcoef0 * fse3w(ji,jj,1) 
     
    312314 
    313315      ! interior value (2=<jk=<jpkm1) 
    314       DO jk = 2, jpkm1 
     316!$OMP PARALLEL DO private(ji,jj, zcoef1) 
     317     DO jk = 2, jpkm1 
    315318         DO jj = 2, jpjm1 
    316319            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    319322               zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1)   & 
    320323                  &           + zcoef1 * (  ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) )   & 
    321                   &                       - ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) )  ) / e1u(ji,jj) 
     324                  &                       
     325              - ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) )  ) / e1u(ji,jj) 
    322326 
    323327               zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1)   & 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynkeg.F90

    r5328 r6508  
    101101      ! 
    102102      CASE ( nkeg_C2 )                          !--  Standard scheme  --! 
     103!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zu, zv) 
    103104         DO jk = 1, jpkm1 
    104105            DO jj = 2, jpj 
     
    114115         ! 
    115116      CASE ( nkeg_HW )                          !--  Hollingsworth scheme  --! 
     117!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zu, zv) 
    116118         DO jk = 1, jpkm1 
    117119            DO jj = 2, jpjm1        
     
    134136      END SELECT 
    135137      ! 
     138!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    136139      DO jk = 1, jpkm1                    !==  grad( KE ) added to the general momentum trends  ==! 
    137140         DO jj = 2, jpjm1 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_lap.F90

    r4990 r6508  
    7272      ENDIF 
    7373      !                                                ! =============== 
     74!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze2u, ze1v, zua, zva) 
    7475      DO jk = 1, jpkm1                                 ! Horizontal slab 
    7576         !                                             ! =============== 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90

    r5628 r6508  
    140140      ! 
    141141      IF( ln_dynadv_vec .OR. .NOT. lk_vvl ) THEN      ! applied on velocity 
     142!$OMP PARALLEL DO schedule(static) private(jk) 
    142143         DO jk = 1, jpkm1 
    143144            ua(:,:,jk) = ( ub(:,:,jk) + z2dt * ua(:,:,jk) ) * umask(:,:,jk) 
     
    145146         END DO 
    146147      ELSE                                            ! applied on thickness weighted velocity 
     148!$OMP PARALLEL DO schedule(static) private(jk) 
    147149         DO jk = 1, jpkm1 
    148150            ua(:,:,jk) = (          ub(:,:,jk) * fse3u_b(:,:,jk)      & 
     
    176178         ! In the forward case, this is done below after asselin filtering    
    177179         ! so that asselin contribution is removed at the same time  
     180!$OMP PARALLEL DO schedule(static) private(jk) 
    178181         DO jk = 1, jpkm1 
    179182            un(:,:,jk) = ( un(:,:,jk) - un_adv(:,:) + un_b(:,:) )*umask(:,:,jk) 
     
    225228      ! ------------------------------------------ 
    226229      IF( neuler == 0 .AND. kt == nit000 ) THEN        !* Euler at first time-step: only swap 
     230!$OMP PARALLEL DO schedule(static) private(jk) 
    227231         DO jk = 1, jpkm1 
    228232            un(:,:,jk) = ua(:,:,jk)                          ! un <-- ua 
     
    230234         END DO 
    231235         IF (lk_vvl) THEN 
     236!$OMP PARALLEL DO schedule(static) private(jk) 
    232237            DO jk = 1, jpkm1 
    233238               fse3t_b(:,:,jk) = fse3t_n(:,:,jk) 
     
    240245         IF( .NOT. lk_vvl ) THEN          ! Fixed volume ! 
    241246            !                             ! =============! 
     247!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zuf, zvf) 
    242248            DO jk = 1, jpkm1                               
    243249               DO jj = 1, jpj 
     
    289295               ! Leap-Frog - Asselin filter and swap: applied on velocity 
    290296               ! ----------------------------------- 
     297!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zuf, zvf) 
    291298               DO jk = 1, jpkm1 
    292299                  DO jj = 1, jpj 
     
    310317               ! Leap-Frog - Asselin filter and swap: applied on thickness weighted velocity 
    311318               ! -----------------------------------             =========================== 
     319!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zue3b, zve3b, zue3n, zve3n, zue3a, zve3a, zuf, zvf) 
    312320               DO jk = 1, jpkm1 
    313321                  DO jj = 1, jpj 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_flt.F90

    r4990 r6508  
    142142         ! 
    143143         IF( ln_dynadv_vec ) THEN      ! vector form : applied on velocity 
     144!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    144145            DO jk = 1, jpkm1 
    145146               DO jj = 2, jpjm1 
     
    152153            ! 
    153154         ELSE                          ! flux form : applied on thickness weighted velocity 
     155!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    154156            DO jk = 1, jpkm1 
    155157               DO jj = 2, jpjm1 
     
    175177            END DO  
    176178         END DO  
     179!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    177180         DO jk = 1, jpkm1              ! unweighted time stepping  
    178181            DO jj = 2, jpjm1 
     
    186189         IF( l_trddyn )   THEN                      ! temporary save of spg trends 
    187190            CALL wrk_alloc( jpi, jpj, jpk, ztrdu, ztrdv ) 
     191!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    188192            DO jk = 1, jpkm1              ! unweighted time stepping  
    189193               DO jj = 2, jpjm1 
     
    210214      ! compute the next vertically averaged velocity (effect of the additional force not included) 
    211215      ! --------------------------------------------- 
     216!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    212217      DO jj = 2, jpjm1 
    213218         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    217222      END DO 
    218223      DO jk = 2, jpkm1                     ! vertical sum 
     224!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    219225         DO jj = 2, jpjm1 
    220226            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    224230         END DO 
    225231      END DO 
    226  
     232!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    227233      DO jj = 2, jpjm1                     ! transport: multiplied by the horizontal scale factor 
    228234         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    238244      ! Right hand side of the elliptic equation and first guess 
    239245      ! -------------------------------------------------------- 
     246!$OMP PARALLEL DO schedule(static) private(jj, ji, zgcb,zbtd) 
    240247      DO jj = 2, jpjm1 
    241248         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    296303      ! Transport divergence gradient multiplied by z2dt 
    297304      ! --------------------------------------------==== 
     305!$OMP PARALLEL DO schedule(static) private(jj, ji, ztdgu, ztdgv) 
    298306      DO jj = 2, jpjm1 
    299307         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    354362      !                       trend, the leap-frog time stepping will not 
    355363      !                       be done in dynnxt.F90 routine) 
     364!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    356365      DO jk = 1, jpkm1 
    357366         DO jj = 2, jpjm1 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynzad.F90

    r5120 r6508  
    8181         ztrdv(:,:,:) = va(:,:,:)  
    8282      ENDIF 
    83        
     83!$OMP PARALLEL DO schedule(static) private(jk, jj, ji)       
    8484      DO jk = 2, jpkm1              ! Vertical momentum advection at level w and u- and v- vertical 
    8585         DO jj = 2, jpj                   ! vertical fluxes  
     
    9797      ! 
    9898      ! Surface and bottom advective fluxes set to zero 
    99       IF ( ln_isfcav ) THEN 
     99      IF ( ln_isfcav ) THEN       
    100100         DO jj = 2, jpjm1 
    101101            DO ji = fs_2, fs_jpim1           ! vector opt. 
     
    116116         END DO 
    117117      END IF 
    118  
     118!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zua, zva) 
    119119      DO jk = 1, jpkm1              ! Vertical momentum advection at u- and v-points 
    120120         DO jj = 2, jpjm1 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90

    r5120 r6508  
    9999 
    100100      IF( ln_bfrimp ) THEN 
     101!$OMP PARALLEL DO schedule(static) private(jj, ji, ikbu, ikbv) 
    101102         DO jj = 2, jpjm1 
    102103            DO ji = 2, jpim1 
     
    108109         END DO 
    109110         IF ( ln_isfcav ) THEN 
     111!$OMP PARALLEL DO schedule(static) private(jj, ji, ikbu, ikbv) 
    110112            DO jj = 2, jpjm1 
    111113               DO ji = 2, jpim1 
     
    174176      ! non zero value at the ocean bottom depending on the bottom friction used. 
    175177      ! 
     178!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze3ua, zcoef, zzwi, zzws) 
    176179      DO jk = 1, jpkm1        ! Matrix 
    177180         DO jj = 2, jpjm1  
     
    211214      !==  First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1   (increasing k)  == 
    212215      DO jk = 2, jpkm1 
     216!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    213217         DO jj = 2, jpjm1    
    214218            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    218222      END DO 
    219223      ! 
     224!$OMP PARALLEL DO schedule(static) private(jj, ji)       
    220225      DO jj = 2, jpjm1        !==  second recurrence:    SOLk = RHSk - Lk / Dk-1  Lk-1  == 
    221226         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    232237      END DO 
    233238      DO jk = 2, jpkm1 
     239!$OMP PARALLEL DO schedule(static) private(jj, ji, zrhs) 
    234240         DO jj = 2, jpjm1 
    235241            DO ji = fs_2, fs_jpim1 
     
    244250      END DO 
    245251      ! 
     252!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    246253      DO jj = 2, jpjm1        !==  thrid recurrence : SOLk = ( Lk - Uk * Ek+1 ) / Dk  == 
    247254         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    250257      END DO 
    251258      DO jk = jpk-2, 1, -1 
     259!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    252260         DO jj = 2, jpjm1 
    253261            DO ji = fs_2, fs_jpim1 
     
    259267#if ! defined key_dynspg_ts 
    260268      ! Normalization to obtain the general momentum trend ua 
     269!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    261270      DO jk = 1, jpkm1 
    262271         DO jj = 2, jpjm1    
     
    274283      ! non zero value at the ocean bottom depending on the bottom friction used 
    275284      ! 
     285!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze3va, zcoef, zzwi, zzws) 
    276286      DO jk = 1, jpkm1        ! Matrix 
    277287         DO jj = 2, jpjm1    
     
    287297         END DO 
    288298      END DO 
     299!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    289300      DO jj = 2, jpjm1        ! Surface boundary conditions 
    290301         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    311322      !==  First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1   (increasing k)  == 
    312323      DO jk = 2, jpkm1         
     324!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    313325         DO jj = 2, jpjm1    
    314326            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    318330      END DO 
    319331      ! 
     332!$OMP PARALLEL DO schedule(static) private(jj, ji, ze3va) 
    320333      DO jj = 2, jpjm1        !==  second recurrence:    SOLk = RHSk - Lk / Dk-1  Lk-1  == 
    321334         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    332345      END DO 
    333346      DO jk = 2, jpkm1 
     347!$OMP PARALLEL DO schedule(static) private(jj, ji, zrhs) 
    334348         DO jj = 2, jpjm1 
    335349            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    344358      END DO 
    345359      ! 
     360!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    346361      DO jj = 2, jpjm1        !==  third recurrence : SOLk = ( Lk - Uk * SOLk+1 ) / Dk  == 
    347362         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    350365      END DO 
    351366      DO jk = jpk-2, 1, -1 
     367!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    352368         DO jj = 2, jpjm1 
    353369            DO ji = fs_2, fs_jpim1 
     
    359375      ! Normalization to obtain the general momentum trend va 
    360376#if ! defined key_dynspg_ts 
     377!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    361378      DO jk = 1, jpkm1 
    362379         DO jj = 2, jpjm1    
     
    371388      !! restore bottom layer avmu(v)  
    372389      IF( ln_bfrimp ) THEN 
     390!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    373391        DO jj = 2, jpjm1 
    374392           DO ji = 2, jpim1 
     
    380398        END DO 
    381399        IF (ln_isfcav) THEN 
     400!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    382401           DO jj = 2, jpjm1 
    383402              DO ji = 2, jpim1 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r6204 r6508  
    9898      !                                           !   After Sea Surface Height   ! 
    9999      !                                           !------------------------------! 
     100!$OMP PARALLEL WORKSHARE 
    100101      zhdiv(:,:) = 0._wp 
     102!$OMP END PARALLEL WORKSHARE 
    101103      DO jk = 1, jpkm1                                 ! Horizontal divergence of barotropic transports 
     104!$OMP PARALLEL WORKSHARE 
    102105        zhdiv(:,:) = zhdiv(:,:) + fse3t_n(:,:,jk) * hdivn(:,:,jk) 
     106!$OMP END PARALLEL WORKSHARE 
    103107      END DO 
    104108      !                                                ! Sea surface elevation time stepping 
     
    107111      !  
    108112      z1_rau0 = 0.5_wp * r1_rau0 
     113!$OMP PARALLEL WORKSHARE 
    109114      ssha(:,:) = (  sshb(:,:) - z2dt * ( z1_rau0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * ssmask(:,:) 
    110  
     115!$OMP END PARALLEL WORKSHARE 
    111116#if ! defined key_dynspg_ts 
    112117      ! These lines are not necessary with time splitting since 
     
    176181         IF(lwp) WRITE(numout,*) '~~~~~ ' 
    177182         ! 
     183!$OMP PARALLEL WORKSHARE 
    178184         wn(:,:,jpk) = 0._wp                  ! bottom boundary condition: w=0 (set once for all) 
     185!$OMP END PARALLEL WORKSHARE 
    179186         ! 
    180187      ENDIF 
     
    188195         CALL wrk_alloc( jpi, jpj, jpk, zhdiv )  
    189196         ! 
     197!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    190198         DO jk = 1, jpkm1 
    191199            ! horizontal divergence of thickness diffusion transport ( velocity multiplied by e3t) 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90

    r6476 r6508  
    381381         ! 
    382382         ! WARNING ptab is defined only between nld and nle 
    383          DO jk = 1, jpk 
     383 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     384       DO jk = 1, jpk 
    384385            DO jj = nlcj+1, jpj                 ! added line(s)   (inner only) 
    385386               ptab(nldi  :nlei  , jj          ,jk) = ptab(nldi:nlei,     nlej,jk) 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90

    r6353 r6508  
    128128         zm1_2g = -0.5_wp / grav 
    129129         ! 
    130          zww(:,:,:) = 0._wp 
    131          zwz(:,:,:) = 0._wp 
    132          ! 
     130 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji)       
     131        DO jk = 1, jpk                                           
     132            DO jj = 1, jpj                                       
     133!DIR$ IVDEP                                                  
     134               DO ji = 1, jpi                                   
     135                  zww(ji,jj,jk) = 0._wp                        
     136                  zwz(ji,jj,jk) = 0._wp                        
     137               END DO                                           
     138            END DO                                               
     139        END DO                
     140       ! 
     141!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    133142         DO jk = 1, jpk             !==   i- & j-gradient of density   ==! 
    134143            DO jj = 1, jpjm1 
     
    140149         END DO 
    141150         IF( ln_zps ) THEN                           ! partial steps correction at the bottom ocean level 
     151!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    142152            DO jj = 1, jpjm1 
    143153               DO ji = 1, jpim1 
     
    148158         ENDIF 
    149159         IF( ln_zps .AND. ln_isfcav ) THEN           ! partial steps correction at the bottom ocean level 
     160!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    150161            DO jj = 1, jpjm1 
    151162               DO ji = 1, jpim1 
     
    158169         !==   Local vertical density gradient at T-point   == !   (evaluated from N^2) 
    159170         ! interior value 
    160          DO jk = 2, jpkm1 
     171!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     172       DO jk = 2, jpkm1 
    161173            !                                ! zdzr = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 
    162174            !                                !   trick: tmask(ik  )  = 0   =>   all pn2   = 0   =>   zdzr = 0 
     
    186198         ! 
    187199         IF ( ln_isfcav ) THEN 
     200!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    188201            DO jj = 2, jpjm1 
    189202               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    195208            ENDDO 
    196209         ELSE 
     210!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    197211            DO jj = 2, jpjm1 
    198212               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    202216            ENDDO 
    203217         END IF 
     218!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zau, zav, zbu, zbv, zfj, zfi, zdepu, zdepv) 
    204219         DO jk = 2, jpkm1                            !* Slopes at u and v points 
    205220            DO jj = 2, jpjm1 
     
    246261         ! 
    247262         !                                            !* horizontal Shapiro filter 
     263 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    248264         DO jk = 2, jpkm1 
    249265            DO jj = 2, jpjm1, MAX(1, jpj-3)                        ! rows jj=2 and =jpjm1 only 
     
    292308         ! ===========================      | wslpj = mij( d/dj( prd ) / d/dz( prd ) 
    293309         ! 
     310!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbw, zfk, zck, zbi, zbj, zai, zaj, zci, zcj) 
    294311         DO jk = 2, jpkm1 
    295312            DO jj = 2, jpjm1 
     
    332349         ! 
    333350         !                                           !* horizontal Shapiro filter 
    334          DO jk = 2, jpkm1 
     351!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcofw, zck) 
     352       DO jk = 2, jpkm1 
    335353            DO jj = 2, jpjm1, MAX(1, jpj-3)                        ! rows jj=2 and =jpjm1 only 
    336354               DO ji = 2, jpim1 
     
    422440         ! set the slope of diffusion to the slope of s-surfaces  
    423441         !      ( c a u t i o n : minus sign as fsdep has positive value )  
    424          DO jj = 2, jpjm1  
     442!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     443       DO jj = 2, jpjm1  
    425444            DO ji = fs_2, fs_jpim1   ! vector opt.  
    426445               uslp(ji,jj,1) = -1./e1u(ji,jj) * ( fsdept_b(ji+1,jj,1) - fsdept_b(ji ,jj ,1) )  * umask(ji,jj,1)  
     
    430449            END DO  
    431450         END DO  
    432  
     451!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    433452         DO jk = 2, jpk  
    434453            DO jj = 2, jpjm1  
     
    510529         ! 
    511530         ip = jl   ;   jp = jl                ! guaranteed nonzero gradients ( absolute value larger than repsln) 
     531!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zdit,zdis,zdjt,zdjs,zdxrho_raw,zdyrho_raw) 
    512532         DO jk = 1, jpkm1                     ! done each pair of triad 
    513533            DO jj = 1, jpjm1                  ! NB: not masked ==>  a minimum value is set 
     
    526546         ! 
    527547         IF( ln_zps .AND. l_grad_zps ) THEN     ! partial steps: correction of i- & j-grad on bottom 
    528             DO jj = 1, jpjm1 
     548 !$OMP PARALLEL DO schedule(static) private(jj,ji,zdit,zdis,zdjt,zdjs,zdxrho_raw,zdyrho_raw) 
     549         DO jj = 1, jpjm1 
    529550               DO ji = 1, jpim1 
    530551                  iku  = mbku(ji,jj)          ;   ikv  = mbkv(ji,jj)             ! last ocean level (u- & v-points) 
     
    536557                  zdyrho(ji   ,jj+jp,ikv,1-jp) = SIGN( MAX( repsln, ABS( zdyrho_raw ) ), zdyrho_raw ) 
    537558               END DO 
    538             END DO 
     559            END DO  
    539560         ENDIF 
    540561         ! 
     
    542563 
    543564      DO kp = 0, 1                            !==  unmasked before density i- j-, k-gradients  ==! 
     565!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zdkt,zdks,zdzrho_raw) 
    544566         DO jk = 1, jpkm1                     ! done each pair of triad 
    545567            DO jj = 1, jpj                    ! NB: not masked ==>  a minimum value is set 
     
    740762      zm1_2g = -0.5_wp / grav 
    741763      ! 
    742       uslpml (1,:) = 0._wp      ;      uslpml (jpi,:) = 0._wp 
    743       vslpml (1,:) = 0._wp      ;      vslpml (jpi,:) = 0._wp 
    744       wslpiml(1,:) = 0._wp      ;      wslpiml(jpi,:) = 0._wp 
    745       wslpjml(1,:) = 0._wp      ;      wslpjml(jpi,:) = 0._wp 
    746       ! 
     764!$OMP PARALLEL DO schedule(static) private(jk)         
     765!DIR$ IVDEP                                            
     766      DO jk=1,jpk                                      
     767         uslpml (1,jk) = 0._wp                          
     768         vslpml (1,jk) = 0._wp                          
     769         wslpiml(1,jk) = 0._wp                          
     770         wslpjml(1,jk) = 0._wp                          
     771         uslpml (jpi,jk) = 0._wp                        
     772         vslpml (jpi,jk) = 0._wp                        
     773         wslpiml(jpi,jk) = 0._wp                        
     774         wslpjml(jpi,jk) = 0._wp                        
     775      END DO                                           
     776     ! 
    747777      !                                            !==   surface mixed layer mask   ! 
    748       DO jk = 1, jpk                               ! =1 inside the mixed layer, =0 otherwise 
     778!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ik) 
     779     DO jk = 1, jpk                               ! =1 inside the mixed layer, =0 otherwise 
    749780         DO jj = 1, jpj 
    750781            DO ji = 1, jpi 
     
    770801      !----------------------------------------------------------------------- 
    771802      ! 
     803!$OMP PARALLEL DO schedule(static) private(jj, ji, iku, ikv, zbu, zbv, zau, zav, ik, zbw, zci, zcj, zai, zaj, zbi, zbj)  
    772804      DO jj = 2, jpjm1 
    773805         DO ji = 2, jpim1 
     
    858890         ! Direction of lateral diffusion (tracers and/or momentum) 
    859891         ! ------------------------------ 
    860          uslp (:,:,:) = 0._wp   ;   uslpml (:,:) = 0._wp      ! set the slope to zero (even in s-coordinates) 
    861          vslp (:,:,:) = 0._wp   ;   vslpml (:,:) = 0._wp 
    862          wslpi(:,:,:) = 0._wp   ;   wslpiml(:,:) = 0._wp 
    863          wslpj(:,:,:) = 0._wp   ;   wslpjml(:,:) = 0._wp 
    864  
     892       ! set the slope to zero (even in s-coordinates) 
     893!$OMP PARALLEL DO schedule(static) private(jk, jj, ji)    
     894        DO jk = 1, jpk                                       
     895          DO jj = 1, jpj                                     
     896             DO ji = 1, jpi                                   
     897                uslp (ji,jj,jk) = 0._wp                         
     898                vslp (ji,jj,jk) = 0._wp                         
     899                wslpi(ji,jj,jk) = 0._wp                         
     900                wslpj(ji,jj,jk) = 0._wp                         
     901             END DO                                           
     902          END DO                                             
     903       END DO                                               
     904!$OMP PARALLEL DO schedule(static) private(jj, ji)        
     905         DO jj = 1, jpj                                       
     906            DO ji = 1, jpi                                    
     907               uslpml (ji,jj) = 0._wp                          
     908               vslpml (ji,jj) = 0._wp                          
     909              wslpiml(ji,jj) = 0._wp                          
     910              wslpjml(ji,jj) = 0._wp                          
     911           END DO                                            
     912        END DO                                               
    865913         IF(ln_sco .AND.  (ln_traldf_hor .OR. ln_dynldf_hor )) THEN 
    866914            IF(lwp)   WRITE(numout,*) '          Horizontal mixing in s-coordinate: slope = slope of s-surfaces' 
     
    872920            ! set the slope of diffusion to the slope of s-surfaces 
    873921            !      ( c a u t i o n : minus sign as fsdep has positive value ) 
     922!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    874923            DO jk = 1, jpk 
    875924               DO jj = 2, jpjm1 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r5540 r6508  
    231231      CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    232232         ! 
     233!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn3, zn2, zn1, zn0, zn) 
    233234         DO jk = 1, jpkm1 
    234235            DO jj = 1, jpj 
     
    271272      CASE( 1 )                !==  simplified EOS  ==! 
    272273         ! 
     274         !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zt, zs, zh, ztm, zn) 
    273275         DO jk = 1, jpkm1 
    274276            DO jj = 1, jpj 
     
    339341            END DO 
    340342            ! 
     343            !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, jsmp, jdof, zh, zt, zstemp, zs, ztm, zn3, zn2, zn1) 
    341344            DO jk = 1, jpkm1 
    342345               DO jj = 1, jpj 
     
    393396         ! Non-stochastic equation of state 
    394397         ELSE 
     398         !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn3, zn2, zn1, zn0, zn) 
    395399            DO jk = 1, jpkm1 
    396400               DO jj = 1, jpj 
     
    435439      CASE( 1 )                !==  simplified EOS  ==! 
    436440         ! 
     441         !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zt, zs, zh, ztm, zn) 
    437442         DO jk = 1, jpkm1 
    438443            DO jj = 1, jpj 
     
    583588      CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    584589         ! 
     590         !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn3, zn2, zn1, zn0, zn) 
    585591         DO jk = 1, jpkm1 
    586592            DO jj = 1, jpj 
     
    640646      CASE( 1 )                  !==  simplified EOS  ==! 
    641647         ! 
     648         !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn) 
    642649         DO jk = 1, jpkm1 
    643650            DO jj = 1, jpj 
     
    910917      IF( nn_timing == 1 ) CALL timing_start('bn2') 
    911918      ! 
     919      !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zrw, zaw, zbw) 
    912920      DO jk = 2, jpkm1           ! interior points only (2=< jk =< jpkm1 ) 
    913921         DO jj = 1, jpj          ! surface and bottom value set to zero one for all in istate.F90 
     
    11251133      CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    11261134         ! 
     1135         !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm,  zn2, zn1, zn0, zn) 
    11271136         DO jk = 1, jpkm1 
    11281137            DO jj = 1, jpj 
     
    11881197      CASE( 1 )                !==  Vallis (2006) simplified EOS  ==! 
    11891198         ! 
     1199         !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn) 
    11901200         DO jk = 1, jpkm1 
    11911201            DO jj = 1, jpj 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90

    r5147 r6508  
    9494      ! 
    9595      !                                               !==  effective transport  ==! 
     96!$OMP PARALLEL DO schedule(static) private(jk) 
    9697      DO jk = 1, jpkm1 
    9798         zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)                  ! eulerian transport only 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90

    r6204 r6508  
    103103      IF( l_trd )  THEN 
    104104         CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 
    105          ztrdx(:,:,:) = 0.e0   ;    ztrdy(:,:,:) = 0.e0   ;   ztrdz(:,:,:) = 0.e0 
     105!$OMP PARALLEL WORKSHARE 
     106         ztrdx(:,:,:) = 0.e0   ;    ztrdy(:,:,:) = 0.e0   ;   ztrdz(:,:,:) = 0.e0  
     107!$OMP END PARALLEL WORKSHARE 
    106108      ENDIF 
    107109      ! 
    108       zwi(:,:,:) = 0.e0 ;  
     110!$OMP PARALLEL WORKSHARE 
     111      zwi(:,:,:) = 0.e0 ; 
     112!$OMP END PARALLEL WORKSHARE  
    109113      ! 
    110114      !                                                          ! =========== 
     
    120124         ! -------------------------------------------------------------------- 
    121125         ! upstream tracer flux in the i and j direction 
     126!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui, zfm_ui)         
    122127         DO jk = 1, jpkm1 
    123128            DO jj = 1, jpjm1 
     
    136141         ! upstream tracer flux in the k direction 
    137142         ! Interior value 
     143    !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 
    138144         DO jk = 2, jpkm1 
    139145            DO jj = 1, jpj 
     
    169175 
    170176         ! total advective trend 
     177!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 
    171178         DO jk = 1, jpkm1 
    172179            z2dtt = p2dt(jk) 
     
    201208         ! -------------------------------------------------- 
    202209         ! antidiffusive flux on i and j 
     210!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    203211         DO jk = 1, jpkm1 
    204212            DO jj = 1, jpjm1 
     
    212220         ! antidiffusive flux on k 
    213221         ! Interior value 
     222!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    214223         DO jk = 2, jpkm1                     
    215224            DO jj = 1, jpj 
     
    227236            END DO 
    228237         ELSE 
     238!$OMP PARALLEL WORKSHARE 
    229239            zwz(:,:,1) = 0.e0 
     240!$OMP END PARALLEL WORKSHARE 
    230241         END IF 
    231242         CALL lbc_lnk( zwx, 'U', -1. )   ;   CALL lbc_lnk( zwy, 'V', -1. )         ! Lateral bondary conditions 
     
    239250         ! 5. final trend with corrected fluxes 
    240251         ! ------------------------------------ 
     252!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 
    241253         DO jk = 1, jpkm1 
    242254            DO jj = 2, jpjm1 
     
    339351      IF( l_trd )  THEN 
    340352         CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 
     353!$OMP PARALLEL WORKSHARE 
    341354         ztrdx(:,:,:) = 0._wp  ;    ztrdy(:,:,:) = 0._wp  ;   ztrdz(:,:,:) = 0._wp 
     355!$OMP END PARALLEL WORKSHARE 
    342356      ENDIF 
    343357      ! 
     358!$OMP PARALLEL WORKSHARE       
    344359      zwi(:,:,:) = 0._wp 
     360!$OMP END PARALLEL WORKSHARE       
    345361      z_rzts = 1._wp / REAL( jnzts, wp ) 
    346362      zr_p2dt(:) = 1._wp / p2dt(:) 
     
    351367         ! 1. Bottom value : flux set to zero 
    352368         ! ---------------------------------- 
     369!$OMP PARALLEL WORKSHARE 
    353370         zwx(:,:,jpk) = 0._wp   ;    zwz(:,:,jpk) = 0._wp 
    354371         zwy(:,:,jpk) = 0._wp   ;    zwi(:,:,jpk) = 0._wp 
    355  
     372!$OMP END PARALLEL WORKSHARE 
    356373         ! 2. upstream advection with initial mass fluxes & intermediate update 
    357374         ! -------------------------------------------------------------------- 
    358375         ! upstream tracer flux in the i and j direction 
     376!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui, zfm_ui) 
    359377         DO jk = 1, jpkm1 
    360378            DO jj = 1, jpjm1 
     
    373391         ! upstream tracer flux in the k direction 
    374392         ! Interior value 
     393!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 
    375394         DO jk = 2, jpkm1 
    376395            DO jj = 1, jpj 
     
    385404         IF( lk_vvl ) THEN 
    386405            IF ( ln_isfcav ) THEN 
     406!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    387407               DO jj = 1, jpj 
    388408                  DO ji = 1, jpi 
     
    391411               END DO 
    392412            ELSE 
     413!$OMP PARALLEL WORKSHARE 
    393414               zwz(:,:,1) = 0.e0                              ! volume variable + no isf 
     415!$OMP END PARALLEL WORKSHARE 
    394416            END IF 
    395417         ELSE 
    396418            IF ( ln_isfcav ) THEN 
     419!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    397420               DO jj = 1, jpj 
    398421                  DO ji = 1, jpi 
     
    401424               END DO 
    402425            ELSE 
     426!$OMP PARALLEL WORKSHARE 
    403427               zwz(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn)                                               ! linear free surface + no isf 
     428!$OMP END PARALLEL WORKSHARE 
    404429            END IF 
    405430         ENDIF 
    406431 
    407432         ! total advective trend 
     433!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 
    408434         DO jk = 1, jpkm1 
    409435            z2dtt = p2dt(jk) 
     
    427453         IF( l_trd )  THEN  
    428454            ! store intermediate advective trends 
     455!$OMP PARALLEL WORKSHARE 
    429456            ztrdx(:,:,:) = zwx(:,:,:)   ;    ztrdy(:,:,:) = zwy(:,:,:)  ;   ztrdz(:,:,:) = zwz(:,:,:) 
     457!$OMP END PARALLEL WORKSHARE 
    430458         END IF 
    431459         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
     
    439467         ! antidiffusive flux on i and j 
    440468 
    441  
     469!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    442470         DO jk = 1, jpkm1 
    443471 
     
    451479               END DO 
    452480            END DO 
    453  
     481!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    454482            DO jj = 2, jpjm1         ! partial horizontal divergence 
    455483               DO ji = fs_2, fs_jpim1 
     
    458486               END DO 
    459487            END DO 
    460  
     488!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    461489            DO jj = 1, jpjm1 
    462490               DO ji = 1, fs_jpim1   ! vector opt. 
     
    468496       
    469497         ! antidiffusive flux on k 
     498!$OMP PARALLEL WORKSHARE 
    470499         zwz(:,:,1) = 0._wp        ! Surface value 
    471500         zwz_sav(:,:,:) = zwz(:,:,:) 
     
    473502         ztrs(:,:,:,1) = ptb(:,:,:,jn) 
    474503         zwzts(:,:,:) = 0._wp 
    475  
     504!$OMP END PARALLEL WORKSHARE 
    476505         DO jl = 1, jnzts                   ! Start of sub timestepping loop 
    477506 
     
    490519              jta = MOD(jta,3) + 1 
    491520            ENDIF 
     521!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    492522            DO jk = 2, jpkm1          ! Interior value 
    493523               DO jj = 2, jpjm1 
     
    500530 
    501531            jtaken = MOD( jtaken + 1 , 2 ) 
    502  
     532!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 
    503533            DO jk = 2, jpkm1          ! Interior value 
    504534               DO jj = 2, jpjm1 
     
    513543 
    514544         END DO 
    515  
     545!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    516546         DO jk = 2, jpkm1          ! Anti-diffusive vertical flux using average flux from the sub-timestepping 
    517547            DO jj = 2, jpjm1 
     
    531561         ! 5. final trend with corrected fluxes 
    532562         ! ------------------------------------ 
     563!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 
    533564         DO jk = 1, jpkm1 
    534565            DO jj = 2, jpjm1 
     
    547578         !                                 ! trend diagnostics (contribution of upstream fluxes) 
    548579         IF( l_trd )  THEN  
     580!$OMP PARALLEL WORKSHARE 
    549581            ztrdx(:,:,:) = ztrdx(:,:,:) + zwx(:,:,:)  ! <<< Add to previously computed 
    550582            ztrdy(:,:,:) = ztrdy(:,:,:) + zwy(:,:,:)  ! <<< Add to previously computed 
    551583            ztrdz(:,:,:) = ztrdz(:,:,:) + zwz(:,:,:)  ! <<< Add to previously computed 
    552              
     584!$OMP END PARALLEL WORKSHARE         
    553585            CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) )    
    554586            CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pvn, ptn(:,:,:,jn) )   
     
    602634      zbig  = 1.e+40_wp 
    603635      zrtrn = 1.e-15_wp 
     636!$OMP PARALLEL WORKSHARE 
    604637      zbetup(:,:,:) = 0._wp   ;   zbetdo(:,:,:) = 0._wp 
    605  
     638!$OMP END PARALLEL WORKSHARE 
    606639      ! Search local extrema 
    607640      ! -------------------- 
    608641      ! max/min of pbef & paft with large negative/positive value (-/+zbig) inside land 
    609       zbup = MAX( pbef * tmask - zbig * ( 1._wp - tmask ),   & 
    610          &        paft * tmask - zbig * ( 1._wp - tmask )  ) 
    611       zbdo = MIN( pbef * tmask + zbig * ( 1._wp - tmask ),   & 
    612          &        paft * tmask + zbig * ( 1._wp - tmask )  ) 
    613  
     642      !zbup = MAX( pbef * tmask - zbig * ( 1._wp - tmask ),   & 
     643      !  &        paft * tmask - zbig * ( 1._wp - tmask )  ) 
     644      !zbdo = MIN( pbef * tmask + zbig * ( 1._wp - tmask ),   & 
     645      !  &        paft * tmask + zbig * ( 1._wp - tmask )  ) 
     646!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     647      DO jk = 1, jpk   
     648        DO jj = 1, jpj 
     649!DIR$ IVDEP            
     650    DO ji = 1, jpi 
     651      zbup(ji,jj,jk) = MAX( pbef(ji,jj,jk) * tmask(ji,jj,jk) - zbig * ( 1._wp - tmask(ji,jj,jk) ), &  
     652      &                     paft(ji,jj,jk) * tmask(ji,jj,jk) - zbig * ( 1._wp - tmask(ji,jj,jk) ) )   
     653           zbdo(ji,jj,jk) = MIN( pbef(ji,jj,jk) * tmask(ji,jj,jk) + zbig * ( 1._wp - tmask(ji,jj,jk) ), &  
     654      &                     paft(ji,jj,jk) * tmask(ji,jj,jk) + zbig * ( 1._wp - tmask(ji,jj,jk) ) )   
     655    END DO 
     656   END DO 
     657      END DO 
     658 
     659 
     660!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zpos, zneg, zbt, ikm1, z2dtt, zup, zdo) 
    614661      DO jk = 1, jpkm1 
    615662         ikm1 = MAX(jk-1,1) 
     
    651698      ! 3. monotonic flux in the i & j direction (paa & pbb) 
    652699      ! ---------------------------------------- 
     700!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, za, zb, zc, zav, zbv, zcv, zau, zbu, zcu) 
    653701      DO jk = 1, jpkm1 
    654702         DO jj = 2, jpjm1 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r5149 r6508  
    137137 
    138138         ! Horizontal tracer gradient  
     139!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    139140         DO jk = 1, jpkm1 
    140141            DO jj = 1, jpjm1 
     
    173174         !  
    174175         ! interior value  
     176!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    175177         DO jk = 2, jpkm1                
    176178            DO jj = 1, jpj 
     
    286288          
    287289         ! interior (2=<jk=<jpk-1) 
     290!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcoef0, zmsku, zmskv, zcoef3, zcoef4) 
    288291         DO jk = 2, jpkm1 
    289292            DO jj = 2, jpjm1 
     
    310313         ! I.5 Divergence of vertical fluxes added to the general tracer trend 
    311314         ! ------------------------------------------------------------------- 
     315!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 
    312316         DO jk = 1, jpkm1 
    313317            DO jj = 2, jpjm1 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r6204 r6508  
    138138 
    139139      IF( neuler == 0 .AND. kt == nit000 ) THEN       ! Euler time-stepping at first time-step (only swap) 
     140!$OMP PARALLEL DO schedule(static) private(jk) 
    140141         DO jn = 1, jpts 
    141142            DO jk = 1, jpkm1 
     
    153154     ! trends computation 
    154155      IF( l_trdtra ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
     156!$OMP PARALLEL DO schedule(static) private(jk, zfact) 
    155157         DO jk = 1, jpkm1 
    156158            zfact = 1._wp / r2dtra(jk)              
     
    220222      DO jn = 1, kjpt 
    221223         ! 
     224!$OMP PARALLEL DO private(jk,ji,jj, ztn,ztd) 
    222225         DO jk = 1, jpkm1 
    223226            DO jj = 1, jpj 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90

    r5120 r6508  
    120120            ELSE                                            ;   zwt(:,:,2:jpk) = fsavs(:,:,2:jpk) 
    121121            ENDIF 
     122!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    122123            DO jj=1, jpj 
    123124               DO ji=1, jpi 
     
    129130            ! isoneutral diffusion: add the contribution  
    130131            IF( ln_traldf_grif    ) THEN     ! Griffies isoneutral diff 
     132!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    131133               DO jk = 2, jpkm1 
    132134                  DO jj = 2, jpjm1 
     
    137139               END DO 
    138140            ELSE IF( l_traldf_rot ) THEN     ! standard isoneutral diff 
     141!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    139142               DO jk = 2, jpkm1 
    140143                  DO jj = 2, jpjm1 
     
    149152#endif 
    150153            ! Diagonal, lower (i), upper (s)  (including the bottom boundary condition since avt is masked) 
     154!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze3ta, ze3tn) 
    151155            DO jk = 1, jpkm1 
    152156               DO jj = 2, jpjm1 
     
    182186            ! first recurrence:   Tk = Dk - Ik Sk-1 / Tk-1   (increasing k) 
    183187            ! done once for all passive tracers (so included in the IF instruction) 
     188    !$OMP PARALLEL DO schedule(static) private(jj, ji) 
    184189            DO jj = 2, jpjm1 
    185190               DO ji = fs_2, fs_jpim1 
     
    188193            END DO 
    189194            DO jk = 2, jpkm1 
     195    !$OMP PARALLEL DO schedule(static) private(jj, ji) 
    190196               DO jj = 2, jpjm1 
    191197                  DO ji = fs_2, fs_jpim1 
     
    198204         !          
    199205         ! second recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
     206         !$OMP PARALLEL DO schedule(static) private(jj, ji) 
    200207         DO jj = 2, jpjm1 
    201208            DO ji = fs_2, fs_jpim1 
     
    207214         END DO 
    208215         DO jk = 2, jpkm1 
     216         !$OMP PARALLEL DO schedule(static) private(jj, ji) 
    209217            DO jj = 2, jpjm1 
    210218               DO ji = fs_2, fs_jpim1 
     
    218226 
    219227         ! third recurrence:    Xk = (Zk - Sk Xk+1 ) / Tk   (result is the after tracer) 
     228         !$OMP PARALLEL DO schedule(static) private(jj, ji) 
    220229         DO jj = 2, jpjm1 
    221230            DO ji = fs_2, fs_jpim1 
     
    224233         END DO 
    225234         DO jk = jpk-2, 1, -1 
     235         !$OMP PARALLEL DO schedule(static) private(jj, ji) 
    226236            DO jj = 2, jpjm1 
    227237               DO ji = fs_2, fs_jpim1 
  • branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r6314 r6508  
    175175      ! 
    176176      IF( kt /= nit000 ) THEN   ! restore before value to compute tke 
    177          avt (:,:,:) = avt_k (:,:,:)  
    178          avm (:,:,:) = avm_k (:,:,:)  
    179          avmu(:,:,:) = avmu_k(:,:,:)  
    180          avmv(:,:,:) = avmv_k(:,:,:)  
    181       ENDIF  
     177!$OMP PARALLEL DO private(jk,jj,ji) 
     178         DO jk = 1, jpk                           
     179           DO jj = 1, jpj                         
     180$!DIR$ IVDEP                                       
     181               DO ji = 1, jpi                       
     182                  avt (ji,jj,jk) = avt_k(ji,jj,jk)   
     183                  avm (ji,jj,jk) = avm_k(ji,jj,jk)   
     184                  avmu(ji,jj,jk) = avmu_k(ji,jj,jk)  
     185                  avmv(ji,jj,jk) = avmv_k(ji,jj,jk)  
     186               END DO                               
     187            END DO                                 
     188         END DO                                  
     189      ENDIF                                       
    182190      ! 
    183191      CALL tke_tke      ! now tke (en) 
     
    185193      CALL tke_avn      ! now avt, avm, avmu, avmv 
    186194      ! 
    187       avt_k (:,:,:) = avt (:,:,:)  
    188       avm_k (:,:,:) = avm (:,:,:)  
    189       avmu_k(:,:,:) = avmu(:,:,:)  
    190       avmv_k(:,:,:) = avmv(:,:,:)  
     195!$OMP PARALLEL DO private(jk,jj,ji)             
     196      DO jk = 1, jpk                            
     197         DO jj = 1, jpj                          
     198!DIR$ IVDEP                                     
     199            DO ji = 1, jpi                        
     200               avt_k (ji,ji,jk) = avt (ji,jj,jk)   
     201               avm_k (ji,ji,jk) = avm (ji,jj,jk)   
     202               avmu_k(ji,ji,jk) = avmu(ji,jj,jk)   
     203               avmv_k(ji,ji,jk) = avmv(ji,jj,jk)   
     204            END DO                                
     205         END DO                                  
     206      END DO                                    
    191207      ! 
    192208#if defined key_agrif 
     
    292308         zpelc(:,:,1) =  MAX( rn2b(:,:,1), 0._wp ) * fsdepw(:,:,1) * fse3w(:,:,1) 
    293309         DO jk = 2, jpk 
    294             zpelc(:,:,jk)  = zpelc(:,:,jk-1) + MAX( rn2b(:,:,jk), 0._wp ) * fsdepw(:,:,jk) * fse3w(:,:,jk) 
    295          END DO 
     310!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     311          DO jj =1, jpj 
     312            DO ji=1, jpi 
     313                zpelc(ji,jj,jk)  = zpelc(ji,jj,jk-1) + MAX( rn2b(ji,jj,jk), 0._wp ) * fsdepw(ji,jj,jk) *fse3w(ji,jj,jk) 
     314            END DO 
     315         END DO 
     316       END DO 
    296317         !                        !* finite Langmuir Circulation depth 
    297318         zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) 
    298319         imlc(:,:) = mbkt(:,:) + 1       ! Initialization to the number of w ocean point (=2 over land) 
    299          DO jk = jpkm1, 2, -1 
     320!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zus) 
     321       DO jk = jpkm1, 2, -1 
    300322            DO jj = 1, jpj               ! Last w-level at which zpelc>=0.5*us*us  
    301323               DO ji = 1, jpi            !      with us=0.016*wind(starting from jpk-1) 
     
    313335         zcof = 0.016 / SQRT( zrhoa * zcdrag ) 
    314336!CDIR NOVERRCHK 
     337!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zus, zind, zwlc) 
    315338         DO jk = 2, jpkm1         !* TKE Langmuir circulation source term added to en 
    316339!CDIR NOVERRCHK 
     
    338361      !                     ! zdiag : diagonal zd_up : upper diagonal zd_lw : lower diagonal 
    339362      ! 
     363!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    340364      DO jk = 2, jpkm1           !* Shear production at uw- and vw-points (energy conserving form) 
    341365         DO jj = 1, jpj                 ! here avmu, avmv used as workspace 
     
    353377      END DO 
    354378      ! 
     379!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcof, zzd_up, zesh2, zzd_lw) 
    355380      DO jk = 2, jpkm1           !* Matrix and right hand side in en 
    356381         DO jj = 2, jpjm1 
     
    385410      END DO 
    386411      !                          !* Matrix inversion from level 2 (tke prescribed at level 1) 
    387       DO jk = 3, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    388          DO jj = 2, jpjm1 
    389             DO ji = fs_2, fs_jpim1    ! vector opt. 
     412      DO jk = 3, jpkm1   ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
     413!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     414       DO jj = 2, jpjm1 
     415         DO ji = fs_2, fs_jpim1    ! vector opt. 
    390416               zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 
    391417            END DO 
    392418         END DO 
     419 
    393420      END DO 
    394421      ! 
    395422      ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    396       DO jj = 2, jpjm1 
     423!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     424     DO jj = 2, jpjm1 
    397425         DO ji = fs_2, fs_jpim1   ! vector opt. 
    398426            zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1)    ! Surface boudary conditions on tke 
     
    400428      END DO 
    401429      DO jk = 3, jpkm1 
     430!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    402431         DO jj = 2, jpjm1 
    403432            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    408437      ! 
    409438      ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
     439!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    410440      DO jj = 2, jpjm1 
    411441         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    414444      END DO 
    415445      DO jk = jpk-2, 2, -1 
     446!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    416447         DO jj = 2, jpjm1 
    417448            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    420451         END DO 
    421452      END DO 
     453!$OMP PARALLEL DO schedule(static) private(jk,jj, ji) 
    422454      DO jk = 2, jpkm1                             ! set the minimum value of tke 
    423455         DO jj = 2, jpjm1 
    424             DO ji = fs_2, fs_jpim1   ! vector opt. 
     456      DO ji = fs_2, fs_jpim1   ! vector opt. 
    425457               en(ji,jj,jk) = MAX( en(ji,jj,jk), rn_emin ) * wmask(ji,jj,jk) 
    426458            END DO 
    427459         END DO 
     460 
    428461      END DO 
    429462 
     
    432465      !                            !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    433466      IF( nn_etau == 1 ) THEN           !* penetration below the mixed layer (rn_efr fraction) 
    434          DO jk = 2, jpkm1 
     467!$OMP PARALLEL DO schedule(static) private(jk,jj, ji) 
     468       DO jk = 2, jpkm1 
    435469            DO jj = 2, jpjm1 
    436470               DO ji = fs_2, fs_jpim1   ! vector opt. 
    437471                  en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -fsdepw(ji,jj,jk) / htau(ji,jj) )   & 
    438                      &                                 * ( 1._wp - fr_i(ji,jj) )  * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    439                END DO 
    440             END DO 
    441          END DO 
     472                      &                                 * ( 1._wp - fr_i(ji,jj) )  * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     473               END DO 
     474            END  DO 
     475         END DO  
    442476      ELSEIF( nn_etau == 2 ) THEN       !* act only at the base of the mixed layer (jk=nmln)  (rn_efr fraction) 
    443477         DO jj = 2, jpjm1 
     
    450484      ELSEIF( nn_etau == 3 ) THEN       !* penetration belox the mixed layer (HF variability) 
    451485!CDIR NOVERRCHK 
     486!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ztau, zdif, ztx2, zty2) 
    452487         DO jk = 2, jpkm1 
    453488!CDIR NOVERRCHK 
     
    530565      ! 
    531566      ! initialisation of interior minimum value (avoid a 2d loop with mikt) 
    532       zmxlm(:,:,:)  = rmxl_min     
    533       zmxld(:,:,:)  = rmxl_min 
    534       ! 
     567!$OMP PARALLEL DO schedule(static) private(jk,jj, ji)       
     568     DO jk = 1, jpk                          
     569       DO jj = 1, jpj                        
     570          DO ji = 1, jpi                      
     571             zmxlm(ji,jj,jk)  = rmxl_min       
     572            zmxld(ji,jj,jk)  = rmxl_min       
     573         END DO                              
     574      END DO                                
     575     END DO                                  
     576     ! 
    535577      IF( ln_mxl0 ) THEN            ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 
    536          DO jj = 2, jpjm1 
     578!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     579       DO jj = 2, jpjm1 
    537580            DO ji = fs_2, fs_jpim1 
    538581               zraug = vkarmn * 2.e5_wp / ( rau0 * grav ) 
     
    541584         END DO 
    542585      ELSE  
    543          zmxlm(:,:,1) = rn_mxl0 
     586!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     587       DO jj = 1, jpj 
     588          DO ji = 1, jpi 
     589            zmxlm(ji,jj,1) = rn_mxl0 
     590         END DO 
     591       END DO 
     592 
    544593      ENDIF 
    545594      ! 
    546595!CDIR NOVERRCHK 
     596!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zrn2) 
    547597      DO jk = 2, jpkm1              ! interior value : l=sqrt(2*e/n^2) 
    548598!CDIR NOVERRCHK 
     
    565615      ! where wmask = 0 set zmxlm == fse3w 
    566616      CASE ( 0 )           ! bounded by the distance to surface and bottom 
    567          DO jk = 2, jpkm1 
     617!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl) 
     618       DO jk = 2, jpkm1 
    568619            DO jj = 2, jpjm1 
    569620               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    578629         ! 
    579630      CASE ( 1 )           ! bounded by the vertical scale factor 
    580          DO jk = 2, jpkm1 
     631!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl) 
     632       DO jk = 2, jpkm1 
    581633            DO jj = 2, jpjm1 
    582634               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    589641         ! 
    590642      CASE ( 2 )           ! |dk[xml]| bounded by e3t : 
    591          DO jk = 2, jpkm1         ! from the surface to the bottom : 
    592             DO jj = 2, jpjm1 
     643       DO jk = 2, jpkm1         ! from the surface to the bottom : 
     644!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     645         DO jj = 2, jpjm1 
    593646               DO ji = fs_2, fs_jpim1   ! vector opt. 
    594647                  zmxlm(ji,jj,jk) = MIN( zmxlm(ji,jj,jk-1) + fse3t(ji,jj,jk-1), zmxlm(ji,jj,jk) ) 
    595648               END DO 
    596             END DO 
     649             END DO 
    597650         END DO 
    598651         DO jk = jpkm1, 2, -1     ! from the bottom to the surface : 
     652!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    599653            DO jj = 2, jpjm1 
    600654               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    605659            END DO 
    606660         END DO 
    607          ! 
     661         !  
    608662      CASE ( 3 )           ! lup and ldown, |dk[xml]| bounded by e3t : 
    609663         DO jk = 2, jpkm1         ! from the surface to the bottom : lup 
     664!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    610665            DO jj = 2, jpjm1 
    611666               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    615670         END DO 
    616671         DO jk = jpkm1, 2, -1     ! from the bottom to the surface : ldown 
     672!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    617673            DO jj = 2, jpjm1 
    618674               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    622678         END DO 
    623679!CDIR NOVERRCHK 
     680!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl, zemlp) 
    624681         DO jk = 2, jpkm1 
    625682!CDIR NOVERRCHK 
     
    646703      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    647704!CDIR NOVERRCHK 
     705!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zsqen, zav) 
    648706      DO jk = 1, jpkm1            !* vertical eddy viscosity & diffivity at w-points 
    649707!CDIR NOVERRCHK 
     
    661719      CALL lbc_lnk( avm, 'W', 1. )      ! Lateral boundary conditions (sign unchanged) 
    662720      ! 
     721!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    663722      DO jk = 2, jpkm1            !* vertical eddy viscosity at wu- and wv-points 
    664723         DO jj = 2, jpjm1 
     
    672731      ! 
    673732      IF( nn_pdl == 1 ) THEN      !* Prandtl number case: update avt 
     733!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcoef, zdku, zdkv, zpdlr, zri)  
    674734         DO jk = 2, jpkm1 
    675735            DO jj = 2, jpjm1 
     
    809869      ENDIF 
    810870      !                               !* set vertical eddy coef. to the background value 
    811       DO jk = 1, jpk 
     871!$OMP PARALLEL DO schedule(static) private(jk) 
     872    DO jk = 1, jpk 
    812873         avt (:,:,jk) = avtb(jk) * wmask (:,:,jk) 
    813874         avm (:,:,jk) = avmb(jk) * wmask (:,:,jk) 
Note: See TracChangeset for help on using the changeset viewer.