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 7037 for branches – NEMO

Changeset 7037 for branches


Ignore:
Timestamp:
2016-10-18T15:32:04+02:00 (8 years ago)
Author:
mocavero
Message:

ORCA2_LIM_PISCES hybrid version update

Location:
branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO
Files:
89 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limadv_2.F90

    r3625 r7037  
    8585      zrdt = rdt_ice * pdf      ! If ice drift field is too fast, use an appropriate time step for advection. 
    8686 
     87!$OMP PARALLEL 
     88!$OMP DO schedule(static) private(jj,ji,zslpmax,zs1max,zs1new,zs2new,zin0) 
    8789      DO jj = 1, jpj 
    8890         DO ji = 1, jpi 
     
    102104         END DO 
    103105      END DO 
     106!$OMP END DO NOWAIT 
    104107 
    105108      !  Initialize volumes of boxes  (=area if adv_x first called, =psm otherwise)                                      
    106       psm (:,:)  = MAX( pcrh * area(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 ) 
     109!$OMP DO schedule(static) private(jj,ji) 
     110      DO jj = 1, jpj 
     111         DO ji = 1, jpi 
     112            psm (ji,jj)  = MAX( pcrh * area(ji,jj) + ( 1.0 - pcrh ) * psm(ji,jj) , epsi20 ) 
     113         END DO 
     114      END DO 
    107115 
    108116      !  Calculate fluxes and moments between boxes i<-->i+1               
     117!$OMP DO schedule(static) private(jj,ji,zalf,zalfq,zalf1,zalf1q) 
    109118      DO jj = 1, jpj                      !  Flux from i to i+1 WHEN u GT 0  
    110119         DO ji = 1, jpi 
     
    133142         END DO 
    134143      END DO 
    135  
     144!$OMP END DO 
     145 
     146!$OMP DO schedule(static) private(jj,ji,zalf,zalfq,zalf1,zalf1q) 
    136147      DO jj = 1, jpjm1                      !  Flux from i+1 to i when u LT 0. 
    137148         DO ji = 1, fs_jpim1 
     
    153164      END DO 
    154165 
     166!$OMP DO schedule(static) private(jj,ji,zbt,zbt1) 
    155167      DO jj = 2, jpjm1                     !  Readjust moments remaining in the box.  
    156168         DO ji = fs_2, fs_jpim1 
     
    168180 
    169181      !   Put the temporary moments into appropriate neighboring boxes.     
     182!$OMP DO schedule(static) private(jj,ji,zbt,zbt1,zalf,zalf1,ztemp) 
    170183      DO jj = 2, jpjm1                     !   Flux from i to i+1 IF u GT 0. 
    171184         DO ji = fs_2, fs_jpim1 
     
    190203      END DO 
    191204 
     205!$OMP DO schedule(static) private(jj,ji,zbt,zbt1,zalf,zalf1,ztemp) 
    192206      DO jj = 2, jpjm1                     !  Flux from i+1 to i IF u LT 0. 
    193207         DO ji = fs_2, fs_jpim1 
     
    210224         END DO 
    211225      END DO 
     226!$OMP END DO NOWAIT 
     227!$OMP END PARALLEL 
    212228 
    213229      !-- Lateral boundary conditions 
     
    268284      zrdt = rdt_ice * pdf ! If ice drift field is too fast, use an appropriate time step for advection. 
    269285 
     286!$OMP PARALLEL 
     287!$OMP DO schedule(static) private(jj,ji,zslpmax,zs1max,zs1new,zs2new,zin0) 
    270288      DO jj = 1, jpj 
    271289         DO ji = 1, jpi 
     
    285303         END DO 
    286304      END DO 
     305!$OMP END DO NOWAIT 
    287306 
    288307      !  Initialize volumes of boxes (=area if adv_x first called, =psm otherwise) 
    289       psm(:,:)  = MAX(  pcrh * area(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20  ) 
     308!$OMP DO schedule(static) private(jj,ji,zslpmax,zs1max,zs1new,zs2new,zin0) 
     309      DO jj = 1, jpj 
     310         DO ji = 1, jpi 
     311            psm(ji,jj)  = MAX(  pcrh * area(ji,jj) + ( 1.0 - pcrh ) * psm(ji,jj) , epsi20  ) 
     312         END DO 
     313      END DO 
    290314 
    291315      !  Calculate fluxes and moments between boxes j<-->j+1               
     316!$OMP DO schedule(static) private(jj,ji,zalf,zalfq,zalf1,zalf1q) 
    292317      DO jj = 1, jpj                     !  Flux from j to j+1 WHEN v GT 0    
    293318         DO ji = 1, jpi 
     
    316341      END DO 
    317342      ! 
     343!$OMP DO schedule(static) private(jj,ji,zalf,zalfq,zalf1,zalf1q) 
    318344      DO jj = 1, jpjm1                   !  Flux from j+1 to j when v LT 0. 
    319345         DO ji = 1, jpi 
     
    336362  
    337363      !  Readjust moments remaining in the box.  
     364!$OMP DO schedule(static) private(jj,ji,zbt,zbt1) 
    338365      DO jj = 2, jpj 
    339366         DO ji = 1, jpi 
     
    352379 
    353380      !   Put the temporary moments into appropriate neighboring boxes.     
     381!$OMP DO schedule(static) private(jj,ji,zbt,zbt1,zalf,zalf1,ztemp) 
    354382      DO jj = 2, jpjm1                    !   Flux from j to j+1 IF v GT 0. 
    355383         DO ji = 1, jpi 
     
    375403      END DO 
    376404      ! 
     405!$OMP DO schedule(static) private(jj,ji,zbt,zbt1,zalf,zalf1,ztemp) 
    377406      DO jj = 2, jpjm1                   !  Flux from j+1 to j IF v LT 0. 
    378407         DO ji = 1, jpi 
     
    396425         END DO 
    397426      END DO 
     427!$OMP END DO NOWAIT 
     428!$OMP END PARALLEL 
    398429 
    399430      !-- Lateral boundary conditions 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limdyn_2.F90

    r5123 r7037  
    7878         ! 
    7979         ! Mean ice and snow thicknesses.           
     80!$OMP PARALLEL WORKSHARE 
    8081         hsnm(:,:)  = ( 1.0 - frld(:,:) ) * hsnif(:,:) 
    8182         hicm(:,:)  = ( 1.0 - frld(:,:) ) * hicif(:,:) 
     83!$OMP END PARALLEL WORKSHARE 
    8284         ! 
    8385         !                                     ! Rheology (ice dynamics) 
     
    170172         SELECT CASE( cp_ice_msh )           ! ice-ocean relative velocity at u- & v-pts 
    171173         CASE( 'C' )                               ! EVP : C-grid ice dynamics 
     174!$OMP PARALLEL WORKSHARE 
    172175            zu_io(:,:) = u_ice(:,:) - ssu_m(:,:)           ! ice-ocean & ice velocity at ocean velocity points 
    173176            zv_io(:,:) = v_ice(:,:) - ssv_m(:,:) 
     177!$OMP END PARALLEL WORKSHARE 
    174178         CASE( 'I' )                               ! VP  : B-grid ice dynamics (I-point)  
     179!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    175180            DO jj = 1, jpjm1                               ! u_ice v_ice at I-point ; ssu_m, ssv_m at U- & V-points 
    176181               DO ji = 1, jpim1   ! NO vector opt.         ! 
     
    183188         ! frictional velocity at T-point 
    184189         zcoef = 0.5_wp * cw 
     190!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    185191         DO jj = 2, jpjm1 
    186192            DO ji = 2, jpim1   ! NO vector opt. because of zu_io 
     
    193199         ! 
    194200         zcoef = SQRT( 0.5 ) / rau0 
     201!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    195202         DO jj = 2, jpjm1 
    196203            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    278285      pstarh = pstar / 2.0 
    279286      ! 
     287!$OMP PARALLEL WORKSHARE 
    280288      ahiu(:,:) = ahi0 * umask(:,:,1)            ! Ice eddy Diffusivity coefficients. 
    281289      ahiv(:,:) = ahi0 * vmask(:,:,1) 
     290!$OMP END PARALLEL WORKSHARE 
    282291      ! 
    283292   END SUBROUTINE lim_dyn_init_2 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limhdf_2.F90

    r4990 r7037  
    7070         IF( lk_mpp    )   CALL mpp_sum( ierr ) 
    7171         IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'lim_hdf_2 : unable to allocate standard arrays' ) 
     72!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    7273         DO jj = 2, jpjm1   
    7374            DO ji = fs_2 , fs_jpim1   ! vector opt. 
     
    8384      zeps  =  2._wp * epsi04 
    8485      ! 
     86!$OMP PARALLEL WORKSHARE 
    8587      ztab0(:, : ) = ptab(:,:)      ! Arrays initialization 
     88!$OMP END PARALLEL WORKSHARE 
    8689      zdiv0(:, 1 ) = 0._wp 
    8790      zdiv0(:,jpj) = 0._wp 
    88       zflu (jpi,:) = 0._wp    
     91      zflu (jpi,:) = 0._wp 
    8992      zflv (jpi,:) = 0._wp 
    9093      zdiv0(1,  :) = 0._wp 
     
    98101         iter = iter + 1                                       ! incrementation of the sub-time step number 
    99102         ! 
     103!$OMP PARALLEL 
     104!$OMP DO schedule(static) private(jj, ji) 
    100105         DO jj = 1, jpjm1                                      ! diffusive fluxes in U- and V- direction 
    101106            DO ji = 1 , fs_jpim1   ! vector opt. 
     
    105110         END DO 
    106111         ! 
     112!$OMP DO schedule(static) private(jj, ji) 
    107113         DO jj= 2, jpjm1                                       ! diffusive trend : divergence of the fluxes 
    108114            DO ji = fs_2 , fs_jpim1   ! vector opt.  
     
    111117            END DO 
    112118         END DO 
     119!$OMP END DO NOWAIT 
     120!$OMP END PARALLEL 
    113121         ! 
    114          IF( iter == 1 )   zdiv0(:,:) = zdiv(:,:)              ! save the 1st evaluation of the diffusive trend in zdiv0 
     122         IF( iter == 1 ) THEN 
     123!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     124             DO jj= 2, jpjm1                                       ! diffusive trend : divergence of the fluxes 
     125                DO ji = fs_2 , fs_jpim1   ! vector opt.  
     126                   zdiv0(ji,jj) = zdiv(ji,jj)              ! save the 1st evaluation of the diffusive trend in zdiv0 
     127                END DO 
     128             END DO 
     129         END IF 
    115130         ! 
     131!$OMP PARALLEL DO schedule(static) private(jj,ji,zrlxint) 
    116132         DO jj = 2, jpjm1                                      ! iterative evaluation 
    117133            DO ji = fs_2 , fs_jpim1   ! vector opt. 
     
    127143         zconv = 0._wp                                         ! convergence test 
    128144 
     145!$OMP PARALLEL DO schedule(static) private(jj,ji) REDUCTION(MAX:zconv) 
    129146         DO jj = 2, jpjm1 
    130147            DO ji = 2, jpim1 
     
    134151         IF( lk_mpp )   CALL mpp_max( zconv )                  ! max over the global domain 
    135152 
     153!$OMP PARALLEL WORKSHARE 
    136154         ptab(:,:) = zrlx(:,:) 
     155!$OMP END PARALLEL WORKSHARE  
    137156         ! 
    138157      END DO                                             ! end of sub-time step loop 
    139158 
    140159      IF(ln_ctl)   THEN 
     160!$OMP PARALLEL WORKSHARE 
    141161         zrlx(:,:) = ptab(:,:) - ztab0(:,:) 
     162!$OMP END PARALLEL WORKSHARE 
    142163         WRITE(charout,FMT="(' lim_hdf  : zconv =',D23.16, ' iter =',I4,2X)") zconv, iter 
    143164         CALL prt_ctl( tab2d_1=zrlx, clinfo1=charout ) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limistate_2.F90

    r5541 r7037  
    7070          
    7171         CALL eos_fzp( tsn(:,:,1,jp_sal), tfu(:,:) )       ! freezing/melting point of sea water [Celcius] 
     72!$OMP PARALLEL 
     73!$OMP WORKSHARE 
    7274         tfu(:,:) = tfu(:,:) *  tmask(:,:,1) 
    73  
     75!$OMP END WORKSHARE 
     76 
     77!$OMP DO schedule(static) private(jj, ji) 
    7478         DO jj = 1, jpj 
    7579            DO ji = 1, jpi 
     
    9195         END DO 
    9296 
     97!$OMP WORKSHARE 
    9398         tfu(:,:) = tfu(:,:) + rt0       ! ftu converted from Celsius to Kelvin (rt0 over land) 
    9499          
     
    97102         tbif  (:,:,2) = tfu(:,:) 
    98103         tbif  (:,:,3) = tfu(:,:) 
    99  
     104!$OMP END WORKSHARE 
     105 
     106!$OMP END PARALLEL 
    100107      ENDIF 
    101108      
     109!$OMP PARALLEL WORKSHARE 
    102110      fsbbq (:,:)   = 0.e0 
    103111      qstoif(:,:)   = 0.e0 
     
    129137      stress12_i(:,:) = 0._wp 
    130138#endif 
     139!$OMP END PARALLEL WORKSHARE 
    131140 
    132141      !-- lateral boundary conditions 
     
    136145      ! C A U T I O N  frld = 1 over land and lbc_lnk put zero along  
    137146      ! *************  closed boundaries herefore we force to one over land 
     147!$OMP PARALLEL WORKSHARE 
    138148      frld(:,:) = tms(:,:) * frld(:,:) + ( 1. - tms(:,:) )    
     149!$OMP END PARALLEL WORKSHARE 
    139150 
    140151      CALL lbc_lnk( hsnif, 'T', 1. ) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limmsh_2.F90

    r3625 r7037  
    135135      !---------------------------------------- 
    136136      !                                                       ! akappa 
     137!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    137138      DO jj = 2, jpj 
    138          zd1d2(:,jj) = e1v(:,jj) - e1v(:,jj-1) 
     139         DO ji = 1, jpi 
     140            zd1d2(ji,jj) = e1v(ji,jj) - e1v(ji,jj-1) 
     141         END DO 
    139142      END DO 
    140143      CALL lbc_lnk( zd1d2, 'T', -1. ) 
    141144 
    142       DO ji = 2, jpi 
    143          zd2d1(ji,:) = e2u(ji,:) - e2u(ji-1,:) 
     145!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     146      DO jj = 1, jpj 
     147         DO ji = 2, jpi 
     148            zd2d1(ji,jj) = e2u(ji,jj) - e2u(ji-1,jj) 
     149         END DO 
    144150      END DO 
    145151      CALL lbc_lnk( zd2d1, 'T', -1. ) 
    146152 
     153!$OMP PARALLEL 
     154!$OMP WORKSHARE 
    147155      akappa(:,:,1,1) =        1.0 / ( 2.0 * e1t(:,:) ) 
    148156      akappa(:,:,1,2) = zd1d2(:,:) / ( 4.0 * e1t(:,:) * e2t(:,:) ) 
    149157      akappa(:,:,2,1) = zd2d1(:,:) / ( 4.0 * e1t(:,:) * e2t(:,:) ) 
    150158      akappa(:,:,2,2) =        1.0 / ( 2.0 * e2t(:,:) ) 
     159!$OMP END WORKSHARE NOWAIT 
    151160       
    152161      !                                                      ! weights (wght) 
     162!$OMP DO schedule(static) private(jj,ji,zusden) 
    153163      DO jj = 2, jpj 
    154164         DO ji = 2, jpi 
     
    161171         END DO 
    162172      END DO 
     173!$OMP END DO NOWAIT 
     174!$OMP END PARALLEL 
    163175      CALL lbc_lnk( wght(:,:,1,1), 'I', 1. )      ! CAUTION: even with the lbc_lnk at ice U-V-point 
    164176      CALL lbc_lnk( wght(:,:,1,2), 'I', 1. )      ! the value of wght at jpj is wrong 
     
    168180      ! metric coefficients for sea ice dynamic (EVP rheology) 
    169181      !---------------------------------------- 
     182!$OMP PARALLEL DO schedule(static) private(jj,ji,zusden) 
    170183      DO jj = 1, jpjm1                                       ! weights (wght) at F-points 
    171184         DO ji = 1, jpim1 
     
    186199 
    187200#if defined key_lim2_vp 
     201!$OMP PARALLEL DO schedule(static) private(jj,ji,zh1p,zh2p,zusden,zusden2,zd1d2p,zd2d1p) 
    188202      DO jj = 2, jpj 
    189203         DO ji = 2, jpi   ! NO vector opt. 
     
    259273      !---------------------------- 
    260274       
     275!$OMP PARALLEL WORKSHARE       
    261276      tms(:,:) = tmask(:,:,1)      ! ice T-point  : use surface tmask 
    262277 
     278!$OMP END PARALLEL WORKSHARE 
    263279#if defined key_lim2_vp 
    264280      ! VP rheology : ice velocity point is I-point 
     
    266282      tmu(:,1) = 0.e0 
    267283      tmu(1,:) = 0.e0 
     284!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    268285      DO jj = 2, jpj               ! ice U.V-point: computed from ice T-point mask 
    269286         DO ji = 2, jpim1   ! NO vector opt. 
     
    275292      ! EVP rheology : ice velocity point are U- & V-points ; ice vorticity 
    276293      ! point is F-point 
     294!$OMP PARALLEL WORKSHARE 
    277295      tmu(:,:) = umask(:,:,1) 
    278296      tmv(:,:) = vmask(:,:,1) 
    279297      tmf(:,:) = 0.e0                        ! used of fmask except its special value along the coast (rn_shlat) 
    280298      WHERE( fmask(:,:,1) == 1.e0 )   tmf(:,:) = 1.e0 
     299!$OMP END PARALLEL WORKSHARE 
    281300#endif 
    282301      ! 
    283302      ! unmasked and masked area of T-grid cell 
     303!$OMP PARALLEL WORKSHARE 
    284304      area(:,:) = e1t(:,:) * e2t(:,:) 
     305!$OMP END PARALLEL WORKSHARE 
    285306      ! 
    286307#if defined key_lim2_vp 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90

    r6140 r7037  
    128128      !------------------------------------------! 
    129129 
     130!$OMP PARALLEL 
     131!$OMP WORKSHARE 
    130132      zqnsoce(:,:) = qns(:,:) 
     133!$OMP END WORKSHARE NOWAIT 
     134!$OMP DO schedule(static) private(jj,ji,zinda,ifvt,i1mfr,idfr,iflt,ial,iadv,ifral,ifrdv,zqsr,zqns,zqhc,zemp,zemp_snw,zfmm,zfsalt,zcd)  
    131135      DO jj = 1, jpj 
    132136         DO ji = 1, jpi 
     
    229233         END DO 
    230234      END DO 
     235!$OMP END DO NOWAIT 
     236!$OMP END PARALLEL 
    231237      !                                !------------------------------------------! 
    232238      !                                !    mass of snow and ice per unit area    ! 
    233239      !                                !------------------------------------------! 
    234240      IF( nn_ice_embd /= 0 ) THEN      ! embedded sea-ice (mass required) 
     241!$OMP PARALLEL WORKSHARE 
    235242         snwice_mass_b(:,:) = snwice_mass(:,:)                  ! save mass from the previous ice time step 
    236243         !                                                      ! new mass per unit area 
     
    238245         !                                                      ! time evolution of snow+ice mass 
    239246         snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) / rdt_ice 
     247!$OMP END PARALLEL WORKSHARE 
    240248      ENDIF 
    241249 
     
    253261 
    254262      IF( ln_cpl) THEN 
     263!$OMP PARALLEL WORKSHARE 
    255264         tn_ice(:,:,1) = sist(:,:)          ! sea-ice surface temperature        
    256265         ht_i(:,:,1) = hicif(:,:) 
    257266         ht_s(:,:,1) = hsnif(:,:) 
    258267         a_i(:,:,1) = fr_i(:,:) 
     268!$OMP END PARALLEL WORKSHARE 
    259269         !                                  ! Computation of snow/ice and ocean albedo 
    260270         CALL albedo_ice( tn_ice, ht_i, ht_s, zalbp, zalb ) 
     271!$OMP PARALLEL WORKSHARE 
    261272         alb_ice(:,:,1) =  0.5 * ( zalbp(:,:,1) + zalb (:,:,1) )   ! Ice albedo (mean clear and overcast skys) 
     273!$OMP END PARALLEL WORKSHARE 
    262274         IF( iom_use('icealb_cea' ) )   CALL iom_put( 'icealb_cea', alb_ice(:,:,1) * fr_i(:,:) )  ! ice albedo 
    263275      ENDIF 
     
    320332         IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN     !==  Ice time-step only  ==! (i.e. surface module time-step) 
    321333            ! 
     334!$OMP PARALLEL 
     335!$OMP DO schedule(static) private(jj,ji,zu_i,zv_i)  
    322336            DO jj = 1, jpj                               !* modulus of ice-ocean relative velocity at I-point 
    323337               DO ji = 1, jpi 
     
    327341               END DO 
    328342            END DO 
     343!$OMP DO schedule(static) private(jj,ji,zumt)  
    329344            DO jj = 1, jpjm1                             !* update the modulus of stress at ocean surface (T-point) 
    330345               DO ji = 1, jpim1   ! NO vector opt. 
     
    336351               END DO 
    337352            END DO 
     353!$OMP END DO NOWAIT 
     354!$OMP END PARALLEL 
    338355            CALL lbc_lnk( taum, 'T', 1. ) 
    339356            ! 
     357!$OMP PARALLEL WORKSHARE 
    340358            utau_oce(:,:) = utau(:,:)                    !* save the air-ocean stresses at ice time-step 
    341359            vtau_oce(:,:) = vtau(:,:) 
     360!$OMP END PARALLEL WORKSHARE 
    342361            ! 
    343362         ENDIF 
     
    346365         ! 
    347366         !                                               !* ice/ocean stress WITH a ice-ocean rotation angle at I-point 
     367!$OMP PARALLEL 
     368!$OMP DO schedule(static) private(jj,ji,zsang,zu_i,zv_i,zmodi)  
    348369         DO jj = 2, jpj 
    349370            zsang  = SIGN( 1._wp, gphif(1,jj) ) * sangvg          ! change the cosine angle sign in the SH  
     
    359380         END DO 
    360381         !                                               !* surface ocean stresses at u- and v-points 
     382!$OMP DO schedule(static) private(jj,ji,zutau_ice,zvtau_ice,zfrldu,zfrldv)  
    361383         DO jj = 2, jpjm1 
    362384            DO ji = 2, jpim1   ! NO vector opt. 
     
    372394            END DO 
    373395         END DO 
     396!$OMP END DO NOWAIT 
     397!$OMP END PARALLEL 
    374398         CALL lbc_lnk( utau, 'U', -1. )   ;   CALL lbc_lnk( vtau, 'V', -1. )     ! lateral boundary condition 
    375399         ! 
     
    381405         IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN     !==  Ice time-step only  ==! (i.e. surface module time-step) 
    382406            ! 
     407!$OMP PARALLEL DO schedule(static) private(jj,ji,zu_t,zv_t,zmodt)  
    383408            DO jj = 2, jpjm1                          !* modulus of the ice-ocean velocity at T-point 
    384409               DO ji = fs_2, fs_jpim1 
     
    393418            CALL lbc_lnk( taum, 'T', 1. )   ;   CALL lbc_lnk( tmod_io, 'T', 1. ) 
    394419            ! 
     420!$OMP PARALLEL WORKSHARE 
    395421            utau_oce(:,:) = utau(:,:)                 !* save the air-ocean stresses at ice time-step 
    396422            vtau_oce(:,:) = vtau(:,:) 
     423!$OMP END PARALLEL WORKSHARE 
    397424            ! 
    398425         ENDIF 
     
    400427         !                                        !==  at each ocean time-step  ==! 
    401428         ! 
     429!$OMP PARALLEL DO schedule(static) private(jj,ji,zutau_ice,zvtau_ice,zfrldu,zfrldv)  
    402430         DO jj = 2, jpjm1                             !* ice stress over ocean WITHOUT a ice-ocean rotation angle 
    403431            DO ji = fs_2, fs_jpim1 
     
    435463      !! ** input   : Namelist namicedia 
    436464      !!------------------------------------------------------------------- 
    437       INTEGER ::   jk   ! local integer 
     465      INTEGER ::   jk,jj,ji   ! local integer 
    438466      !!------------------------------------------------------------------- 
    439467      ! 
     
    447475      r1_rdtice = 1._wp / rdt_ice 
    448476      ! 
     477!$OMP PARALLEL WORKSHARE 
    449478      soce_0(:,:) = soce                     ! constant SSS and ice salinity used in levitating sea-ice case 
    450479      sice_0(:,:) = sice 
     480!$OMP END PARALLEL WORKSHARE 
    451481      ! 
    452482      IF( cp_cfg == "orca" ) THEN            ! decrease ocean & ice reference salinities in the Baltic sea  
     
    459489      !                                      ! embedded sea ice 
    460490      IF( nn_ice_embd /= 0 ) THEN            ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 
     491!$OMP PARALLEL WORKSHARE 
    461492         snwice_mass  (:,:) = tms(:,:) * ( rhosn * hsnif(:,:) + rhoic * hicif(:,:)  ) * ( 1.0 - frld(:,:) ) 
    462493         snwice_mass_b(:,:) = snwice_mass(:,:) 
     494!$OMP END PARALLEL WORKSHARE 
    463495      ELSE 
     496!$OMP PARALLEL WORKSHARE 
    464497         snwice_mass  (:,:) = 0.e0           ! no mass exchanges 
    465498         snwice_mass_b(:,:) = 0.e0           ! no mass exchanges 
    466499         snwice_fmass (:,:) = 0.e0           ! no mass exchanges 
     500!$OMP END PARALLEL WORKSHARE 
    467501      ENDIF 
    468502      IF( nn_ice_embd == 2 .AND.          &  ! full embedment (case 2) & no restart :  
    469503         &   .NOT.ln_rstart ) THEN           ! deplete the initial ssh below sea-ice area 
     504!$OMP PARALLEL WORKSHARE 
    470505         sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 
    471506         sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 
     507!$OMP END PARALLEL WORKSHARE 
    472508!!gm I really don't like this staff here...  Find a way to put that elsewhere or differently 
    473509!!gm 
    474510         IF( .NOT.ln_linssh ) THEN 
    475511 
     512!$OMP PARALLEL 
     513!$OMP DO schedule(static) private(jk) 
    476514            do jk = 1,jpkm1                     ! adjust initial vertical scale factors 
    477515               e3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 
    478516               e3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 
    479517            end do 
     518!$OMP WORKSHARE 
    480519            e3t_a(:,:,:) = e3t_b(:,:,:) 
     520!$OMP END WORKSHARE NOWAIT 
     521!$OMP END PARALLEL 
    481522            ! Reconstruction of all vertical scale factors at now and before time steps 
    482523            !        ! Horizontal scale factor interpolations 
     
    493534            CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 
    494535            !        ! t- and w- points depth 
     536!$OMP PARALLEL 
     537!$OMP WORKSHARE 
    495538            gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 
    496539            gdepw_n(:,:,1) = 0.0_wp 
    497540            gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 
     541!$OMP END WORKSHARE 
    498542            DO jk = 2, jpk 
    499                gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk) 
    500                gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 
    501                gde3w_n(:,:,jk) = gdept_n(:,:,jk  ) - sshn   (:,:) 
    502             END DO 
     543!$OMP DO schedule(static) private(jj,ji) 
     544               DO jj = 1, jpj 
     545                  DO ji = 1, jpi 
     546                     gdept_n(ji,jj,jk) = gdept_n(ji,jj,jk-1) + e3w_n(ji,jj,jk) 
     547                     gdepw_n(ji,jj,jk) = gdepw_n(ji,jj,jk-1) + e3t_n(ji,jj,jk-1) 
     548                     gde3w_n(ji,jj,jk) = gdept_n(ji,jj,jk  ) - sshn (ji,jj) 
     549                  END DO 
     550               END DO 
     551!$OMP END DO NOWAIT 
     552            END DO 
     553!$OMP END PARALLEL 
    503554         ENDIF 
    504555!!gm end 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90

    r6140 r7037  
    121121       
    122122!!gm needed?  yes at least for some of these arrays  
     123!$OMP PARALLEL 
     124!$OMP WORKSHARE 
    123125      zdvosif(:,:) = 0.e0   ! variation of ice volume at surface 
    124126      zdvobif(:,:) = 0.e0   ! variation of ice volume at bottom 
     
    137139      rdq_ice(:,:) = 0.e0   ! heat content associated with rdm_ice 
    138140      zmsk (:,:,:) = 0.e0 
     141!$OMP END WORKSHARE NOWAIT 
    139142 
    140143      ! set to zero snow thickness smaller than epsi04 
     144!$OMP DO schedule(static) private(jj,ji) 
    141145      DO jj = 1, jpj 
    142146         DO ji = 1, jpi 
     
    144148         END DO 
    145149      END DO 
     150!$OMP END DO NOWAIT 
     151!$OMP END PARALLEL 
    146152!!gm better coded (do not use SIGN...) 
    147153!     WHERE( hsnif(:,:) < epsi04 )   hsnif(:,:) = 0.e0 
     
    154160      !-----------------------------------! 
    155161       
     162!$OMP PARALLEL DO schedule(static) private(jj,ji,zindg,zthsnice,zindb,za,zh) 
    156163      DO jj = 1, jpj 
    157164         DO ji = 1, jpi 
     
    196203      !-------------------------------------------------------------------------- 
    197204 
     205!$OMP PARALLEL DO schedule(static) private(jj,ji,zthsnice,zindb,zinda,zfricp,zfric_u,zfntlat,zpareff) 
    198206      DO jj = 1, jpj 
    199207         DO ji = 1, jpi 
     
    337345      ! Up-date sea ice thickness 
    338346      !-------------------------- 
     347!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    339348      DO jj = 1, jpj 
    340349         DO ji = 1, jpi 
     
    348357      !-------------------------------------------------------- 
    349358      IF( fcor(1,1) < 0.e0 ) THEN 
     359!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    350360         DO jj = 1, njeqm1 
    351361            DO ji = 1, jpi 
     
    418428      ! Update daily thermodynamic ice production.     
    419429      !------------------------------------------------------------------------------ 
     430!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    420431      DO jj = 1, jpj 
    421432         DO ji = 1, jpi 
     
    453464      IF( iom_use('u_imasstr') ) THEN 
    454465         zztmp = 0.25 * rhoic 
     466!$OMP PARALLEL DO schedule(static) private(jj,ji,zuice_m,zhice_u) 
    455467         DO jj = 1, jpjm1  
    456468            DO ji = 1, jpim1   ! NO vector opt. 
     
    466478      IF( iom_use('v_imasstr') ) THEN 
    467479         zztmp = 0.25 * rhoic 
     480!$OMP PARALLEL DO schedule(static) private(jj,ji,zvice_m,zhice_v) 
    468481         DO jj = 1, jpjm1  
    469482            DO ji = 1, jpim1   ! NO vector opt. 
     
    480493      !! Fram Strait sea-ice transport (sea-ice + snow)  (in ORCA2 = 5 points) 
    481494      IF( iom_use('fram_trans') .and. cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN    ! ORCA R2 configuration 
     495!$OMP PARALLEL DO schedule(static) private(jj,ji,zrhoij,zrhoijm1,ztr_fram) 
    482496         DO jj = mj0(137), mj1(137) ! B grid 
    483497            IF( mj0(jj-1) >= nldj ) THEN 
     
    497511!! ce     A big warning because the model crashes on IDRIS/IBM SP6 with xlf 13.1.0.3, see ticket #761 
    498512!! ce     We Unroll the loop and everything works fine       
     513!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    499514         DO jj = 1, jpj 
    500515            DO ji = 1, jpi 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limtrp_2.F90

    r4624 r7037  
    100100         IF( lk_lim2_vp ) THEN      ! VP rheology : B-grid sea-ice dynamics (I-point ice velocity) 
    101101            zvbord = 1._wp + ( 1._wp - bound )      ! zvbord=2 no-slip, =0 free slip boundary conditions         
     102!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    102103            DO jj = 1, jpjm1 
    103104               DO ji = 1, jpim1   ! NO vector opt. 
     
    109110            ! 
    110111         ELSE                       ! EVP rheology : C-grid sea-ice dynamics (u- & v-points ice velocity) 
     112!$OMP PARALLEL WORKSHARE 
    111113            zui_u(:,:) = u_ice(:,:)      ! EVP rheology: ice (u,v) at u- and v-points 
    112114            zvi_v(:,:) = v_ice(:,:) 
     115!$OMP END PARALLEL WORKSHARE 
    113116         ENDIF 
    114117 
     
    125128         ! content of properties 
    126129         ! --------------------- 
     130!$OMP PARALLEL WORKSHARE 
    127131         zs0sn (:,:) =  hsnm(:,:)              * area  (:,:)  ! Snow volume. 
    128132         zs0ice(:,:) =  hicm(:,:)              * area  (:,:)  ! Ice volume. 
     
    132136         zs0c2 (:,:) =  tbif(:,:,3) / rt0_ice  * zs0ice(:,:)  ! Heat content of the second ice layer. 
    133137         zs0st (:,:) =  qstoif(:,:) / xlic     * zs0a  (:,:)  ! Heat reservoir for brine pockets. 
     138!$OMP END PARALLEL WORKSHARE 
    134139          
    135140  
     
    178183         ! ------------------------------------------ 
    179184!!gm Define in limmsh one for all area = 1 /area  (CPU time saved !) 
     185!$OMP PARALLEL 
     186!$OMP WORKSHARE 
    180187         zs0ice(:,:) = zs0ice(:,:) / area(:,:) 
    181188         zs0sn (:,:) = zs0sn (:,:) / area(:,:) 
     
    186193         zs0st (:,:) = zs0st (:,:) / area(:,:) 
    187194 
     195!$OMP END WORKSHARE NOWAIT 
    188196 
    189197         !-------------------------------------! 
     
    193201         ! Masked eddy diffusivity coefficient at ocean U- and V-points 
    194202         ! ------------------------------------------------------------ 
     203!$OMP DO schedule(static) private(jj,ji) 
    195204         DO jj = 1, jpjm1          ! NB: has not to be defined on jpj line and jpi row 
    196205            DO ji = 1 , fs_jpim1   ! vector opt. 
     
    201210            END DO 
    202211         END DO 
     212!$OMP END DO NOWAIT 
     213!$OMP END PARALLEL 
    203214!!gm more readable coding: (and avoid an error in F90 with sign of zero) 
    204215!        DO jj = 1, jpjm1          ! NB: has not to be defined on jpj line and jpi row 
     
    221232 
    222233!!gm see comment this can be skipped 
    223          zs0ice(:,:) = MAX( rzero, zs0ice(:,:) * area(:,:) )    !!bug:  useless 
    224          zs0sn (:,:) = MAX( rzero, zs0sn (:,:) * area(:,:) )    !!bug:  cf /area  just below 
    225          zs0a  (:,:) = MAX( rzero, zs0a  (:,:) * area(:,:) )    !! caution: the suppression of the 2 changes  
    226          zs0c0 (:,:) = MAX( rzero, zs0c0 (:,:) * area(:,:) )    !! the last digit of the results 
    227          zs0c1 (:,:) = MAX( rzero, zs0c1 (:,:) * area(:,:) ) 
    228          zs0c2 (:,:) = MAX( rzero, zs0c2 (:,:) * area(:,:) ) 
    229          zs0st (:,:) = MAX( rzero, zs0st (:,:) * area(:,:) ) 
    230  
     234!$OMP PARALLEL 
     235!$OMP DO schedule(static) private(jj,ji) 
     236         DO jj = 1, jpj          ! NB: has not to be defined on jpj line and jpi row 
     237            DO ji = 1 , jpi   ! vector opt. 
     238               zs0ice(ji,jj) = MAX( rzero, zs0ice(ji,jj) * area(ji,jj) )    !!bug:  useless 
     239               zs0sn (ji,jj) = MAX( rzero, zs0sn (ji,jj) * area(ji,jj) )    !!bug:  cf /area  just below 
     240               zs0a  (ji,jj) = MAX( rzero, zs0a  (ji,jj) * area(ji,jj) )    !! caution: the suppression of the 2 changes  
     241               zs0c0 (ji,jj) = MAX( rzero, zs0c0 (ji,jj) * area(ji,jj) )    !! the last digit of the results 
     242               zs0c1 (ji,jj) = MAX( rzero, zs0c1 (ji,jj) * area(ji,jj) ) 
     243               zs0c2 (ji,jj) = MAX( rzero, zs0c2 (ji,jj) * area(ji,jj) ) 
     244               zs0st (ji,jj) = MAX( rzero, zs0st (ji,jj) * area(ji,jj) ) 
     245            END DO 
     246        END DO 
    231247 
    232248         !-------------------------------------------------------------------! 
    233249         !   Updating and limitation of sea ice properties after transport   ! 
    234250         !-------------------------------------------------------------------! 
     251!$OMP DO schedule(static) private(jj,ji,zindhe,zindb,zacrith,zindsn,zindic,zusvosn,zusvoic,zignm,zrtt,ztsn,ztic1,ztic2) 
    235252         DO jj = 1, jpj 
    236253            zindhe = MAX( 0.e0, SIGN( 1.e0, fcor(1,jj) ) )              ! = 0 for SH, =1 for NH 
     
    274291            END DO 
    275292         END DO 
     293!$OMP END DO NOWAIT 
     294!$OMP END PARALLEL 
    276295         ! 
    277296      ENDIF 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_2/limwri_2.F90

    r6140 r7037  
    142142      !-- Store instantaneous values in zcmo 
    143143       
     144!$OMP PARALLEL 
     145!$OMP WORKSHARE       
    144146      zcmo(:,:, 1:jpnoumax ) = 0.e0  
     147!$OMP END WORKSHARE       
     148!$OMP DO schedule(static) private(jj,ji,zindh,zinda,zindb,ztmu) 
    145149      DO jj = 2 , jpjm1 
    146150         DO ji = 2 , jpim1   ! NO vector opt. 
     
    187191         END DO 
    188192      END DO 
     193!$OMP END DO NOWAIT 
     194!$OMP END PARALLEL 
    189195      ! 
    190196      ! Write the netcdf file 
     
    192198      niter = niter + 1 
    193199      DO jf = 1 , noumef 
    194          zfield(:,:) = zcmo(:,:,jf) * cmulti(jf) + cadd(jf) * tmask(:,:,1) 
     200!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     201         DO jj = 1 , jpj 
     202            DO ji = 1 , jpi 
     203               zfield(ji,jj) = zcmo(ji,jj,jf) * cmulti(jf) + cadd(jf) * tmask(ji,jj,1) 
     204            END DO 
     205         END DO 
    195206         SELECT CASE ( jf ) 
    196207         CASE ( 7, 8, 15, 16, 20, 21 )  ! velocity or stress fields (vectors) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90

    r6416 r7037  
    180180      ! 
    181181      ! Put every vector to 0 
     182 
     183#if defined key_lim3 
     184      CALL lim_itd_me_icestrength( nn_icestr )      ! LIM-3: Ice strength on T-points 
     185#endif 
     186 
     187!$OMP PARALLEL 
     188!$OMP WORKSHARE 
    182189      delta_i(:,:) = 0._wp   ; 
    183190      zpresh (:,:) = 0._wp   ;   
     
    186193      divu_i (:,:) = 0._wp   ;   zdt   (:,:) = 0._wp   ;   zds(:,:) = 0._wp 
    187194      shear_i(:,:) = 0._wp 
    188  
    189 #if defined key_lim3 
    190       CALL lim_itd_me_icestrength( nn_icestr )      ! LIM-3: Ice strength on T-points 
    191 #endif 
    192  
     195!$OMP END WORKSHARE 
     196 
     197!$OMP DO schedule(static) private(jj,ji) 
    193198      DO jj = k_j1 , k_jpj       ! Ice mass and temp variables 
    194199         DO ji = 1 , jpi 
     
    206211      ! Ice strength on grid cell corners (zpreshc) 
    207212      ! needed for calculation of shear stress  
     213!$OMP DO schedule(static) private(jj,ji,zstms) 
    208214      DO jj = k_j1+1, k_jpj-1 
    209215         DO ji = 2, jpim1 !RB caution no fs_ (ji+1,jj+1) 
     
    215221         END DO 
    216222      END DO 
     223!$OMP END DO NOWAIT 
     224!$OMP END PARALLEL 
    217225      CALL lbc_lnk( zpreshc(:,:), 'F', 1. ) 
    218226      ! 
     
    242250         zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 
    243251         ! 
     252!$OMP PARALLEL WORKSHARE 
    244253         zpice(:,:) = ssh_m(:,:) + (  zintn * snwice_mass(:,:) +  zintb * snwice_mass_b(:,:)  ) * r1_rau0 
     254!$OMP END PARALLEL WORKSHARE 
    245255         ! 
    246256      ELSE                                    !== non-embedded sea ice: use ocean surface for slope calculation ==! 
     257!$OMP PARALLEL WORKSHARE 
    247258         zpice(:,:) = ssh_m(:,:) 
     259!$OMP END PARALLEL WORKSHARE 
    248260      ENDIF 
    249261 
     262!$OMP PARALLEL DO schedule(static) private(jj,ji,zc1,zc2,zc3,zt11,zt12,zt21,zt22,ztagnx,ztagny,zdsshx,zdsshy) 
    250263      DO jj = k_j1+1, k_jpj-1 
    251264         DO ji = fs_2, fs_jpim1 
     
    319332 
    320333      !-Initialise stress tensor  
     334!$OMP PARALLEL WORKSHARE 
    321335      zs1 (:,:) = stress1_i (:,:)  
    322336      zs2 (:,:) = stress2_i (:,:) 
    323337      zs12(:,:) = stress12_i(:,:) 
     338!$OMP END PARALLEL WORKSHARE 
    324339 
    325340      !                                               !----------------------! 
    326341      DO jter = 1 , nn_nevp                           !    loop over jter    ! 
    327342         !                                            !----------------------!         
     343!$OMP PARALLEL 
     344!$OMP DO schedule(static) private(jj,ji) 
    328345         DO jj = k_j1, k_jpj-1 
    329             zu_ice(:,jj) = u_ice(:,jj)    ! velocity at previous time step 
    330             zv_ice(:,jj) = v_ice(:,jj) 
    331          END DO 
    332  
     346            DO ji = 1, jpi 
     347               zu_ice(ji,jj) = u_ice(ji,jj)    ! velocity at previous time step 
     348               zv_ice(ji,jj) = v_ice(ji,jj) 
     349            END DO 
     350         END DO 
     351!$OMP END DO NOWAIT 
     352 
     353!$OMP DO schedule(static) private(jj,ji) 
    333354         DO jj = k_j1+1, k_jpj-1 
    334355            DO ji = fs_2, fs_jpim1   !RB bug no vect opt due to zmask 
     
    377398            END DO 
    378399         END DO 
     400!$OMP END DO NOWAIT 
     401!$OMP END PARALLEL 
    379402 
    380403         CALL lbc_lnk_multi( v_ice1, 'U', -1., u_ice2, 'V', -1. )      ! lateral boundary cond. 
    381404          
     405!$OMP PARALLEL DO schedule(static) private(jj,ji,zdst,delta,zddc,zdtc) 
    382406         DO jj = k_j1+1, k_jpj-1 
    383407            DO ji = fs_2, fs_jpim1 
     
    417441  
    418442         ! Ice internal stresses (Appendix C of Hunke and Dukowicz, 2002) 
     443!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    419444         DO jj = k_j1+1, k_jpj-1 
    420445            DO ji = fs_2, fs_jpim1 
     
    438463         IF (MOD(jter,2).eq.0) THEN  
    439464 
     465!$OMP PARALLEL DO schedule(static) private(jj,ji,rswitch,z0,zv_ice1,za,zr,zcca,zccb) 
    440466            DO jj = k_j1+1, k_jpj-1 
    441467               DO ji = fs_2, fs_jpim1 
     
    464490#endif          
    465491 
     492!$OMP PARALLEL DO schedule(static) private(jj,ji,rswitch,z0,zu_ice2,za,zr,zcca,zccb) 
    466493            DO jj = k_j1+1, k_jpj-1 
    467494               DO ji = fs_2, fs_jpim1 
     
    491518 
    492519         ELSE  
     520!$OMP PARALLEL DO schedule(static) private(jj,ji,rswitch,z0,zu_ice2,za,zr,zcca,zccb) 
    493521            DO jj = k_j1+1, k_jpj-1 
    494522               DO ji = fs_2, fs_jpim1 
     
    517545#endif          
    518546 
     547!$OMP PARALLEL DO schedule(static) private(jj,ji,rswitch,z0,zv_ice1,za,zr,zcca,zccb) 
    519548            DO jj = k_j1+1, k_jpj-1 
    520549               DO ji = fs_2, fs_jpim1 
     
    562591      ! If the ice volume is below zvmin then ice velocity should equal the 
    563592      ! ocean velocity. This prevents high velocity when ice is thin 
     593!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    564594      DO jj = k_j1+1, k_jpj-1 
    565595         DO ji = fs_2, fs_jpim1 
     
    582612#endif          
    583613 
     614!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    584615      DO jj = k_j1+1, k_jpj-1  
    585616         DO ji = fs_2, fs_jpim1 
     
    599630 
    600631      ! Recompute delta, shear and div, inputs for mechanical redistribution  
     632!$OMP PARALLEL 
     633!$OMP DO schedule(static) private(jj,ji,zdst,delta) 
    601634      DO jj = k_j1+1, k_jpj-1 
    602635         DO ji = fs_2, jpim1   !RB bug no vect opt due to zmask 
     
    634667      ! * Invariants of the stress tensor are required for limitd_me 
    635668      !   (accelerates convergence and improves stability) 
     669!$OMP DO schedule(static) private(jj,ji,zdst) 
    636670      DO jj = k_j1+1, k_jpj-1 
    637671         DO ji = fs_2, fs_jpim1 
     
    641675         END DO 
    642676      END DO 
    643  
    644       ! Lateral boundary condition 
    645       CALL lbc_lnk_multi( divu_i (:,:), 'T', 1., delta_i(:,:), 'T', 1.,  shear_i(:,:), 'T', 1. ) 
    646  
     677!$OMP END DO NOWAIT 
    647678      ! * Store the stress tensor for the next time step 
     679!$OMP WORKSHARE 
    648680      stress1_i (:,:) = zs1 (:,:) 
    649681      stress2_i (:,:) = zs2 (:,:) 
    650682      stress12_i(:,:) = zs12(:,:) 
     683!$OMP END WORKSHARE NOWAIT 
     684!$OMP END PARALLEL 
     685      ! Lateral boundary condition 
     686      CALL lbc_lnk_multi( divu_i (:,:), 'T', 1., delta_i(:,:), 'T', 1.,  shear_i(:,:), 'T', 1. ) 
    651687 
    652688      ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DIA/dia25h.F90

    r6748 r7037  
    225225         ENDIF 
    226226 
     227!$OMP PARALLEL WORKSHARE 
    227228         tn_25h(:,:,:)        = tn_25h(:,:,:) + tsn(:,:,:,jp_tem) 
    228229         sn_25h(:,:,:)        = sn_25h(:,:,:) + tsn(:,:,:,jp_sal) 
     
    239240         rmxln_25h(:,:,:)      = rmxln_25h(:,:,:) + mxln(:,:,:) 
    240241#endif 
     242!$OMP END PARALLEL WORKSHARE 
    241243         cnt_25h = cnt_25h + 1 
    242244 
     
    255257            ENDIF 
    256258 
     259!$OMP PARALLEL WORKSHARE 
    257260            tn_25h(:,:,:)        = tn_25h(:,:,:) / 25.0_wp 
    258261            sn_25h(:,:,:)        = sn_25h(:,:,:) / 25.0_wp 
     
    269272            rmxln_25h(:,:,:)       = rmxln_25h(:,:,:) / 25.0_wp 
    270273#endif 
     274!$OMP END PARALLEL WORKSHARE 
    271275 
    272276            IF (lwp)  WRITE(numout,*) 'dia_wri_tide : Mean calculated by dividing 25 hour sums and writing output' 
    273277            zmdi=1.e+20 !missing data indicator for masking 
    274278            ! write tracers (instantaneous) 
     279!$OMP PARALLEL WORKSHARE 
    275280            zw3d(:,:,:) = tn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     281!$OMP END PARALLEL WORKSHARE 
    276282            CALL iom_put("temper25h", zw3d)   ! potential temperature 
     283!$OMP PARALLEL WORKSHARE 
    277284            zw3d(:,:,:) = sn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     285!$OMP END PARALLEL WORKSHARE 
    278286            CALL iom_put( "salin25h", zw3d  )   ! salinity 
     287!$OMP PARALLEL WORKSHARE 
    279288            zw2d(:,:) = sshn_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1)) 
     289!$OMP END PARALLEL WORKSHARE 
    280290            CALL iom_put( "ssh25h", zw2d )   ! sea surface  
    281291 
    282292 
    283293            ! Write velocities (instantaneous) 
     294!$OMP PARALLEL WORKSHARE 
    284295            zw3d(:,:,:) = un_25h(:,:,:)*umask(:,:,:) + zmdi*(1.0-umask(:,:,:)) 
     296!$OMP END PARALLEL WORKSHARE 
    285297            CALL iom_put("vozocrtx25h", zw3d)    ! i-current 
     298!$OMP PARALLEL WORKSHARE 
    286299            zw3d(:,:,:) = vn_25h(:,:,:)*vmask(:,:,:) + zmdi*(1.0-vmask(:,:,:)) 
     300!$OMP END PARALLEL WORKSHARE 
    287301            CALL iom_put("vomecrty25h", zw3d  )   ! j-current 
    288302 
     303!$OMP PARALLEL WORKSHARE 
    289304            zw3d(:,:,:) = wn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     305!$OMP END PARALLEL WORKSHARE 
    290306            CALL iom_put("vomecrtz25h", zw3d )   ! k-current 
     307!$OMP PARALLEL WORKSHARE 
    291308            zw3d(:,:,:) = avt_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     309!$OMP END PARALLEL WORKSHARE 
    292310            CALL iom_put("avt25h", zw3d )   ! diffusivity 
     311!$OMP PARALLEL WORKSHARE 
    293312            zw3d(:,:,:) = avm_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     313!$OMP END PARALLEL WORKSHARE 
    294314            CALL iom_put("avm25h", zw3d)   ! viscosity 
    295315#if defined key_zdftke || defined key_zdfgls  
     316!$OMP PARALLEL WORKSHARE 
    296317            zw3d(:,:,:) = en_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     318!$OMP END PARALLEL WORKSHARE 
    297319            CALL iom_put("tke25h", zw3d)   ! tke 
    298320#endif 
    299321#if defined key_zdfgls  
     322!$OMP PARALLEL WORKSHARE 
    300323            zw3d(:,:,:) = rmxln_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 
     324!$OMP END PARALLEL WORKSHARE 
    301325            CALL iom_put( "mxln25h",zw3d) 
    302326#endif 
    303327 
    304328            ! After the write reset the values to cnt=1 and sum values equal current value  
     329!$OMP PARALLEL WORKSHARE 
    305330            tn_25h(:,:,:) = tsn(:,:,:,jp_tem) 
    306331            sn_25h(:,:,:) = tsn(:,:,:,jp_sal) 
     
    317342            rmxln_25h(:,:,:) = mxln(:,:,:) 
    318343#endif 
     344!$OMP END PARALLEL WORKSHARE 
    319345            cnt_25h = 1 
    320346            IF (lwp)  WRITE(numout,*) 'dia_wri_tide : After 25hr mean write, reset sum to current value and cnt_25h to one for overlapping average',cnt_25h 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DIA/diacfl.F90

    r6748 r7037  
    7171 
    7272             ! calculate Courant numbers 
     73!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    7374         DO jk = 1, jpk 
    7475            DO jj = 1, jpj 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DIA/diafwb.F90

    r6748 r7037  
    7575         IF( lk_mpp )   CALL mpp_sum( a_sshb )      ! sum over the global domain 
    7676 
    77 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zwei,a_salb) 
     77!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zwei) REDUCTION(+:a_salb) 
    7878         DO jk = 1, jpkm1 
    7979            DO jj = 2, jpjm1 
     
    102102         IF( lk_mpp )   CALL mpp_sum( zarea  )      ! sum over the global domain 
    103103          
    104 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zwei,a_saln,zvol) 
     104!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zwei) REDUCTION (+:a_saln,zvol) 
    105105         DO jk = 1, jpkm1    
    106106            DO jj = 2, jpjm1 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90

    r6748 r7037  
    181181 
    182182      IF ( iom_use("taubot") ) THEN                ! bottom stress 
     183!$OMP PARALLEL 
     184!$OMP WORKSHARE 
    183185         z2d(:,:) = 0._wp 
    184 !$OMP PARALLEL DO schedule(static) private(jj, ji, zztmpx,zztmpy) 
     186!$OMP END WORKSHARE 
     187!$OMP DO schedule(static) private(jj, ji, zztmpx,zztmpy) 
    185188         DO jj = 2, jpjm1 
    186189            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    193196            ENDDO 
    194197         ENDDO 
     198!$OMP END DO NOWAIT 
     199!$OMP END PARALLEL 
    195200         CALL lbc_lnk( z2d, 'T', 1. ) 
    196201         CALL iom_put( "taubot", z2d )            
     
    226231      IF( iom_use('w_masstr') .OR. iom_use('w_masstr2') ) THEN   ! vertical mass transport & its square value 
    227232         ! Caution: in the VVL case, it only correponds to the baroclinic mass transport. 
     233!$OMP PARALLEL 
     234!$OMP WORKSHARE 
    228235         z2d(:,:) = rau0 * e1e2t(:,:) 
    229 !$OMP PARALLEL DO schedule(static) private(jk) 
     236!$OMP END WORKSHARE 
     237!$OMP DO schedule(static) private(jk) 
    230238         DO jk = 1, jpk 
    231239            z3d(:,:,jk) = wn(:,:,jk) * z2d(:,:)  
    232240         END DO 
     241!$OMP END DO NOWAIT 
     242!$OMP END PARALLEL 
    233243         CALL iom_put( "w_masstr" , z3d )   
    234244         IF( iom_use('w_masstr2') )   CALL iom_put( "w_masstr2", z3d(:,:,:) * z3d(:,:,:) ) 
     
    255265         CALL lbc_lnk( z2d, 'T', 1. ) 
    256266         CALL iom_put( "sstgrad2",  z2d               )    ! square of module of sst gradient 
    257          z2d(:,:) = SQRT( z2d(:,:) ) 
     267!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     268         DO jj = 1, jpj 
     269            DO ji = 1, jpi 
     270               z2d(ji,jj) = SQRT( z2d(ji,jj) ) 
     271            END DO 
     272         END DO 
    258273         CALL iom_put( "sstgrad" ,  z2d               )    ! module of sst gradient 
    259274      ENDIF 
     
    261276      ! clem: heat and salt content 
    262277      IF( iom_use("heatc") ) THEN 
     278!$OMP PARALLEL 
     279!$OMP WORKSHARE 
    263280         z2d(:,:)  = 0._wp  
    264 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     281!$OMP END WORKSHARE 
     282!$OMP DO schedule(static) private(jk, jj, ji) 
    265283         DO jk = 1, jpkm1 
    266284            DO jj = 1, jpj 
     
    270288            END DO 
    271289         END DO 
     290!$OMP END DO NOWAIT 
     291!$OMP END PARALLEL 
    272292         CALL iom_put( "heatc", (rau0 * rcp) * z2d )    ! vertically integrated heat content (J/m2) 
    273293      ENDIF 
    274294 
    275295      IF( iom_use("saltc") ) THEN 
     296!$OMP PARALLEL 
     297!$OMP WORKSHARE 
    276298         z2d(:,:)  = 0._wp  
    277 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     299!$OMP END WORKSHARE 
     300!$OMP DO schedule(static) private(jk, jj, ji) 
    278301         DO jk = 1, jpkm1 
    279302            DO jj = 1, jpj 
     
    283306            END DO 
    284307         END DO 
     308!$OMP END DO NOWAIT 
     309!$OMP END PARALLEL 
    285310         CALL iom_put( "saltc", rau0 * z2d )   ! vertically integrated salt content (PSU*kg/m2) 
    286311      ENDIF 
    287312      ! 
    288313      IF ( iom_use("eken") ) THEN 
     314!$OMP PARALLEL 
     315!$OMP WORKSHARE 
    289316         rke(:,:,jk) = 0._wp                               !      kinetic energy  
    290 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zztmp, zztmpx, zztmpy) 
     317!$OMP END WORKSHARE 
     318!$OMP DO schedule(static) private(jk, jj, ji, zztmp, zztmpx, zztmpy) 
    291319         DO jk = 1, jpkm1 
    292320            DO jj = 2, jpjm1 
     
    306334            ENDDO 
    307335         ENDDO 
     336!$OMP END DO NOWAIT 
     337!$OMP END PARALLEL 
    308338         CALL lbc_lnk( rke, 'T', 1. ) 
    309339         CALL iom_put( "eken", rke )            
     
    313343      ! 
    314344      IF( iom_use("u_masstr") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN 
     345!$OMP PARALLEL 
     346!$OMP WORKSHARE 
    315347         z3d(:,:,jpk) = 0.e0 
    316 !$OMP PARALLEL DO schedule(static) private(jk) 
     348!$OMP END WORKSHARE 
     349!$OMP DO schedule(static) private(jk) 
    317350         DO jk = 1, jpkm1 
    318351            z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * e3u_n(:,:,jk) * umask(:,:,jk) 
    319352         END DO 
     353!$OMP END DO NOWAIT 
     354!$OMP END PARALLEL 
    320355         CALL iom_put( "u_masstr", z3d )                  ! mass transport in i-direction 
    321356      ENDIF 
    322357       
    323358      IF( iom_use("u_heattr") ) THEN 
     359!$OMP PARALLEL 
     360!$OMP WORKSHARE 
    324361         z2d(:,:) = 0.e0  
    325 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     362!$OMP END WORKSHARE 
     363!$OMP DO schedule(static) private(jk, jj, ji) 
    326364         DO jk = 1, jpkm1 
    327365            DO jj = 2, jpjm1 
     
    331369            END DO 
    332370         END DO 
     371!$OMP END DO NOWAIT 
     372!$OMP END PARALLEL 
    333373         CALL lbc_lnk( z2d, 'U', -1. ) 
    334374         CALL iom_put( "u_heattr", (0.5 * rcp) * z2d )    ! heat transport in i-direction 
     
    336376 
    337377      IF( iom_use("u_salttr") ) THEN 
     378!$OMP PARALLEL 
     379!$OMP WORKSHARE 
    338380         z2d(:,:) = 0.e0  
    339 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     381!$OMP END WORKSHARE 
     382!$OMP DO schedule(static) private(jk, jj, ji) 
    340383         DO jk = 1, jpkm1 
    341384            DO jj = 2, jpjm1 
     
    345388            END DO 
    346389         END DO 
     390!$OMP END DO NOWAIT 
     391!$OMP END PARALLEL 
    347392         CALL lbc_lnk( z2d, 'U', -1. ) 
    348393         CALL iom_put( "u_salttr", 0.5 * z2d )            ! heat transport in i-direction 
     
    351396       
    352397      IF( iom_use("v_masstr") .OR. iom_use("v_heattr") .OR. iom_use("v_salttr") ) THEN 
     398!$OMP PARALLEL 
     399!$OMP WORKSHARE 
    353400         z3d(:,:,jpk) = 0.e0 
    354 !$OMP PARALLEL DO schedule(static) private(jk) 
     401!$OMP END WORKSHARE 
     402!$OMP DO schedule(static) private(jk) 
    355403         DO jk = 1, jpkm1 
    356404            z3d(:,:,jk) = rau0 * vn(:,:,jk) * e1v(:,:) * e3v_n(:,:,jk) * vmask(:,:,jk) 
    357405         END DO 
     406!$OMP END DO NOWAIT 
     407!$OMP END PARALLEL 
    358408         CALL iom_put( "v_masstr", z3d )                  ! mass transport in j-direction 
    359409      ENDIF 
    360410       
    361411      IF( iom_use("v_heattr") ) THEN 
     412!$OMP PARALLEL 
     413!$OMP WORKSHARE 
    362414         z2d(:,:) = 0.e0  
    363 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     415!$OMP END WORKSHARE 
     416!$OMP DO schedule(static) private(jk, jj, ji) 
    364417         DO jk = 1, jpkm1 
    365418            DO jj = 2, jpjm1 
     
    369422            END DO 
    370423         END DO 
     424!$OMP END DO NOWAIT 
     425!$OMP END PARALLEL 
    371426         CALL lbc_lnk( z2d, 'V', -1. ) 
    372427         CALL iom_put( "v_heattr", (0.5 * rcp) * z2d )    !  heat transport in j-direction 
     
    374429 
    375430      IF( iom_use("v_salttr") ) THEN 
     431!$OMP PARALLEL 
     432!$OMP WORKSHARE 
    376433         z2d(:,:) = 0.e0  
    377 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     434!$OMP END WORKSHARE 
     435!$OMP DO schedule(static) private(jk, jj, ji) 
    378436         DO jk = 1, jpkm1 
    379437            DO jj = 2, jpjm1 
     
    383441            END DO 
    384442         END DO 
     443!$OMP END DO NOWAIT 
     444!$OMP END PARALLEL 
    385445         CALL lbc_lnk( z2d, 'V', -1. ) 
    386446         CALL iom_put( "v_salttr", 0.5 * z2d )            !  heat transport in j-direction 
     
    758818      ENDIF 
    759819      IF( .NOT.ln_linssh ) THEN 
     820!$OMP PARALLEL WORKSHARE 
    760821         zw3d(:,:,:) = ( ( e3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 
     822!$OMP END PARALLEL WORKSHARE 
    761823         CALL histwrite( nid_T, "vovvle3t", it, e3t_n (:,:,:) , ndim_T , ndex_T  )   ! level thickness 
    762824         CALL histwrite( nid_T, "vovvldep", it, gdept_n(:,:,:) , ndim_T , ndex_T  )   ! t-point depth 
     
    770832                                                                                  ! in linear free surface case) 
    771833      IF( ln_linssh ) THEN 
     834!$OMP PARALLEL WORKSHARE 
    772835         zw2d(:,:) = emp (:,:) * tsn(:,:,1,jp_tem) 
     836!$OMP END PARALLEL WORKSHARE 
    773837         CALL histwrite( nid_T, "sosst_cd", it, zw2d, ndim_hT, ndex_hT )          ! c/d term on sst 
     838!$OMP PARALLEL WORKSHARE 
    774839         zw2d(:,:) = emp (:,:) * tsn(:,:,1,jp_sal) 
     840!$OMP END PARALLEL WORKSHARE 
    775841         CALL histwrite( nid_T, "sosss_cd", it, zw2d, ndim_hT, ndex_hT )          ! c/d term on sss 
    776842      ENDIF 
     
    808874         CALL histwrite( nid_T, "sohefldp", it, qrp           , ndim_hT, ndex_hT )   ! heat flux damping 
    809875         CALL histwrite( nid_T, "sowafldp", it, erp           , ndim_hT, ndex_hT )   ! freshwater flux damping 
    810          IF( ln_ssr ) zw2d(:,:) = erp(:,:) * tsn(:,:,1,jp_sal) * tmask(:,:,1) 
     876         IF( ln_ssr ) THEN 
     877!$OMP PARALLEL WORKSHARE 
     878            zw2d(:,:) = erp(:,:) * tsn(:,:,1,jp_sal) * tmask(:,:,1) 
     879!$OMP END PARALLEL WORKSHARE 
     880         END IF 
    811881         CALL histwrite( nid_T, "sosafldp", it, zw2d          , ndim_hT, ndex_hT )   ! salt flux damping 
    812882      ENDIF 
     
    814884         CALL histwrite( nid_T, "sohefldp", it, qrp           , ndim_hT, ndex_hT )   ! heat flux damping 
    815885         CALL histwrite( nid_T, "sowafldp", it, erp           , ndim_hT, ndex_hT )   ! freshwater flux damping 
    816          IF( ln_ssr ) zw2d(:,:) = erp(:,:) * tsn(:,:,1,jp_sal) * tmask(:,:,1) 
     886         IF( ln_ssr ) THEN 
     887!$OMP PARALLEL WORKSHARE 
     888            zw2d(:,:) = erp(:,:) * tsn(:,:,1,jp_sal) * tmask(:,:,1) 
     889!$OMP END PARALLEL WORKSHARE 
     890         END IF 
    817891         CALL histwrite( nid_T, "sosafldp", it, zw2d          , ndim_hT, ndex_hT )   ! salt flux damping 
    818892      ENDIF 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90

    r6748 r7037  
    9292      IF( ln_sco )   CALL dom_stiff             ! Maximum stiffness ratio/hydrostatic consistency 
    9393      ! 
    94 !$OMP PARALLEL WORKSHARE 
     94!$OMP PARALLEL 
     95!$OMP WORKSHARE 
    9596      ht_0(:,:) = e3t_0(:,:,1) * tmask(:,:,1)   ! Reference ocean thickness 
    9697      hu_0(:,:) = e3u_0(:,:,1) * umask(:,:,1) 
    9798      hv_0(:,:) = e3v_0(:,:,1) * vmask(:,:,1) 
    98 !$OMP END PARALLEL WORKSHARE 
     99!$OMP END WORKSHARE 
    99100      DO jk = 2, jpk 
    100 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
     101!$OMP DO schedule(static) private(jj,ji) 
    101102         DO jj =1, jpj 
    102103            DO ji=1, jpi 
     
    107108         END DO 
    108109      END DO 
     110!$OMP END PARALLEL 
    109111      ! 
    110112      !              !==  time varying part of coordinate system  ==! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/domhgr.F90

    r6748 r7037  
    203203         ENDIF 
    204204#endif          
    205 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     205!$OMP PARALLEL 
     206!$OMP DO schedule(static) private(jj, ji) 
    206207         DO jj = 1, jpj 
    207208            DO ji = 1, jpi 
     
    217218            END DO 
    218219         END DO 
     220!$OMP END DO NOWAIT 
    219221         ! 
    220222         ! Horizontal scale factors (in meters) 
    221223         !                              ====== 
    222 !$OMP PARALLEL WORKSHARE 
     224!$OMP WORKSHARE 
    223225         e1t(:,:) = ppe1_m      ;      e2t(:,:) = ppe2_m 
    224226         e1u(:,:) = ppe1_m      ;      e2u(:,:) = ppe2_m 
    225227         e1v(:,:) = ppe1_m      ;      e2v(:,:) = ppe2_m 
    226228         e1f(:,:) = ppe1_m      ;      e2f(:,:) = ppe2_m 
    227 !$OMP END PARALLEL WORKSHARE 
     229!$OMP END WORKSHARE NOWAIT 
     230!$OMP END PARALLEL 
    228231         ! 
    229232      CASE ( 4 )                     !==  geographical mesh on the sphere, isotropic MERCATOR type  ==! 
     
    303306         ENDIF 
    304307         ! 
    305 !$OMP PARALLEL DO schedule(static) private(jj, ji, zim1, zjm1) 
     308!$OMP PARALLEL 
     309!$OMP DO schedule(static) private(jj, ji, zim1, zjm1, zim05, zjm05) 
    306310         DO jj = 1, jpj 
    307311            DO ji = 1, jpi 
     
    322326            END DO 
    323327         END DO 
     328!$OMP END DO NOWAIT 
    324329         ! 
    325330         ! Horizontal scale factors (in meters) 
    326331         !                              ====== 
    327 !$OMP PARALLEL WORKSHARE 
     332!$OMP WORKSHARE 
    328333         e1t(:,:) =  ze1     ;      e2t(:,:) = ze1 
    329334         e1u(:,:) =  ze1     ;      e2u(:,:) = ze1 
    330335         e1v(:,:) =  ze1     ;      e2v(:,:) = ze1 
    331336         e1f(:,:) =  ze1     ;      e2f(:,:) = ze1 
    332 !$OMP END PARALLEL WORKSHARE 
     337!$OMP END WORKSHARE 
     338!$OMP END PARALLEL 
    333339         ! 
    334340      CASE DEFAULT 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90

    r6790 r7037  
    146146      ! N.B. tmask has already the right boundary conditions since mbathy is ok 
    147147      ! 
    148 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     148!$OMP PARALLEL 
     149!$OMP DO schedule(static) private(jk, jj, ji) 
    149150      DO jk = 1, jpk 
    150151         DO jj = 1, jpj 
     
    157158       
    158159      ! (ISF) define barotropic mask and mask the ice shelf point 
    159 !$OMP PARALLEL WORKSHARE 
     160!$OMP WORKSHARE 
    160161      ssmask(:,:)=tmask(:,:,1) ! at this stage ice shelf is not masked 
    161 !$OMP END PARALLEL WORKSHARE       
    162 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     162!$OMP END WORKSHARE       
     163!$OMP DO schedule(static) private(jk, jj, ji) 
    163164      DO jk = 1, jpk 
    164165         DO jj = 1, jpj 
     
    173174      ! Interior domain mask (used for global sum) 
    174175      ! -------------------- 
    175 !$OMP PARALLEL WORKSHARE 
     176!$OMP WORKSHARE 
    176177      tmask_i(:,:) = ssmask(:,:)            ! (ISH) tmask_i = 1 even on the ice shelf 
    177178 
    178179      tmask_h(:,:) = 1._wp                 ! 0 on the halo and 1 elsewhere 
    179 !$OMP END PARALLEL WORKSHARE 
     180!$OMP END WORKSHARE NOWAIT 
     181!$OMP END PARALLEL 
    180182      iif = jpreci                         ! ??? 
    181183      iil = nlci - jpreci + 1 
     
    211213      ! 2. Ocean/land mask at u-,  v-, and z-points (computed from tmask) 
    212214      ! ------------------------------------------- 
    213 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     215!$OMP PARALLEL 
     216!$OMP DO schedule(static) private(jk, jj, ji) 
    214217      DO jk = 1, jpk 
    215218         DO jj = 1, jpjm1 
     
    225228      END DO 
    226229      ! (ISF) MIN(1,SUM(umask)) is here to check if you have effectively at least 1 wet cell at u point 
    227 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     230!$OMP DO schedule(static) private(jj, ji) 
    228231      DO jj = 1, jpjm1 
    229232         DO ji = 1, fs_jpim1   ! vector loop 
     
    236239         END DO 
    237240      END DO 
     241!$OMP END DO NOWAIT 
     242!$OMP END PARALLEL 
    238243      CALL lbc_lnk( umask  , 'U', 1._wp )      ! Lateral boundary conditions 
    239244      CALL lbc_lnk( vmask  , 'V', 1._wp ) 
     
    245250      ! 3. Ocean/land mask at wu-, wv- and w points  
    246251      !---------------------------------------------- 
     252!$OMP PARALLEL 
     253!$OMP WORKSHARE 
    247254      wmask (:,:,1) = tmask(:,:,1)     ! surface 
    248255      wumask(:,:,1) = umask(:,:,1) 
    249256      wvmask(:,:,1) = vmask(:,:,1) 
    250 !$OMP PARALLEL DO schedule(static) private(jk) 
     257!$OMP END WORKSHARE 
     258!$OMP DO schedule(static) private(jk) 
    251259      DO jk = 2, jpk                   ! interior values 
    252260         wmask (:,:,jk) = tmask(:,:,jk) * tmask(:,:,jk-1) 
     
    254262         wvmask(:,:,jk) = vmask(:,:,jk) * vmask(:,:,jk-1) 
    255263      END DO 
     264!$OMP END DO NOWAIT 
     265!$OMP END PARALLEL 
    256266 
    257267      ! Lateral boundary conditions on velocity (modify fmask) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r6748 r7037  
    325325! need to be like this to compute the pressure gradient with ISF. If not, level beneath the ISF are not aligned (sum(e3t) /= depth) 
    326326! define e3t_0 and e3w_0 as the differences between gdept and gdepw respectively 
    327 !$OMP PARALLEL DO schedule(static) private(jk) 
    328327         DO jk = 1, jpkm1 
    329328            e3t_1d(jk) = gdepw_1d(jk+1)-gdepw_1d(jk)  
    330329         END DO 
    331330         e3t_1d(jpk) = e3t_1d(jpk-1)   ! we don't care because this level is masked in NEMO 
    332 !$OMP PARALLEL DO schedule(static) private(jk) 
    333331         DO jk = 2, jpk 
    334332            e3w_1d(jk) = gdept_1d(jk) - gdept_1d(jk-1)  
     
    429427!$OMP END PARALLEL WORKSHARE 
    430428               ELSE                                                ! z-coordinate (zco or zps): step-like topography 
    431 !$OMP PARALLEL WORKSHARE 
     429!$OMP PARALLEL 
     430!$OMP WORKSHARE 
    432431                  idta(:,:) = jpkm1 
    433 !$OMP END PARALLEL WORKSHARE 
     432!$OMP END WORKSHARE 
    434433                  DO jk = 1, jpkm1 
     434!$OMP WORKSHARE 
    435435                     WHERE( gdept_1d(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_1d(jk+1) )   idta(:,:) = jk 
     436!$OMP END WORKSHARE 
    436437                  END DO 
     438!$OMP END PARALLEL 
    437439               ENDIF 
    438440            ELSE 
     
    506508 
    507509         !                                            ! local domain level and meter bathymetries (mbathy,bathy) 
    508 !$OMP PARALLEL WORKSHARE 
     510!$OMP PARALLEL 
     511!$OMP WORKSHARE 
    509512         mbathy(:,:) = 0                                   ! set to zero extra halo points 
    510513         bathy (:,:) = 0._wp                               ! (require for mpp case) 
    511 !$OMP END PARALLEL WORKSHARE 
    512 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     514!$OMP END WORKSHARE 
     515!$OMP DO schedule(static) private(jj, ji) 
    513516         DO jj = 1, nlcj                                   ! interior values 
    514517            DO ji = 1, nlci 
     
    517520            END DO 
    518521         END DO 
    519 !$OMP PARALLEL WORKSHARE 
     522!$OMP END DO NOWAIT 
     523!$OMP WORKSHARE 
    520524         risfdep(:,:)=0.e0 
    521525         misfdep(:,:)=1 
    522 !$OMP END PARALLEL WORKSHARE 
     526!$OMP END WORKSHARE NOWAIT 
     527!$OMP END PARALLEL 
    523528         ! 
    524529         DEALLOCATE( idta, zdta ) 
     
    532537            CALL iom_get  ( inum, jpdom_data, 'Bathy_level', bathy ) 
    533538            CALL iom_close( inum ) 
    534 !$OMP PARALLEL WORKSHARE 
    535539            mbathy(:,:) = INT( bathy(:,:) ) 
    536540            ! initialisation isf variables 
     541!$OMP PARALLEL WORKSHARE 
    537542            risfdep(:,:)=0._wp ; misfdep(:,:)=1              
    538543!$OMP END PARALLEL WORKSHARE 
     
    11961201         END DO 
    11971202      ELSE ! no cavity 
     1203!$OMP PARALLEL  
     1204!$OMP WORKSHARE  
    11981205         gde3w_0(:,:,1) = 0.5_wp * e3w_0(:,:,1) 
     1206!$OMP END WORKSHARE 
    11991207         DO jk = 2, jpk 
    1200 !$OMP PARALLEL DO schedule(static) private(jj, ji)  
     1208!$OMP DO schedule(static) private(jj, ji)  
    12011209             DO jj =1, jpj  
    12021210                DO ji=1, jpi 
     
    12051213             END DO 
    12061214         END DO 
     1215!$OMP END PARALLEL  
    12071216      END IF 
    12081217      ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/dtatsd.F90

    r6140 r7037  
    160160         ij0 = 101   ;   ij1 = 109                       ! Reduced T & S in the Alboran Sea 
    161161         ii0 = 141   ;   ii1 = 155 
     162!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    162163         DO jj = mj0(ij0), mj1(ij1) 
    163164            DO ji = mi0(ii0), mi1(ii1) 
     
    179180      ENDIF 
    180181      ! 
     182!$OMP PARALLEL WORKSHARE 
    181183      ptsd(:,:,:,jp_tem) = sf_tsd(jp_tem)%fnow(:,:,:)    ! NO mask 
    182184      ptsd(:,:,:,jp_sal) = sf_tsd(jp_sal)%fnow(:,:,:)  
     185!$OMP END PARALLEL WORKSHARE 
    183186      ! 
    184187      IF( ln_sco ) THEN                   !==   s- or mixed s-zps-coordinate   ==! 
     
    191194         ENDIF 
    192195         ! 
     196!$OMP PARALLEL DO schedule(static) private(jj, ji, jk, zl, jkk, zi) 
    193197         DO jj = 1, jpj                         ! vertical interpolation of T & S 
    194198            DO ji = 1, jpi 
     
    224228      ELSE                                !==   z- or zps- coordinate   ==! 
    225229         !                              
     230!$OMP PARALLEL WORKSHARE 
    226231         ptsd(:,:,:,jp_tem) = ptsd(:,:,:,jp_tem) * tmask(:,:,:)    ! Mask 
    227232         ptsd(:,:,:,jp_sal) = ptsd(:,:,:,jp_sal) * tmask(:,:,:) 
     233!$OMP END PARALLEL WORKSHARE 
    228234         ! 
    229235         IF( ln_zps ) THEN                      ! zps-coordinate (partial steps) interpolation at the last ocean level 
     236!$OMP PARALLEL DO schedule(static) private(jj, ji, ik, zl) 
    230237            DO jj = 1, jpj 
    231238               DO ji = 1, jpi 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90

    r6748 r7037  
    102102         ub   (:,:,:) = 0._wp   ;   un   (:,:,:) = 0._wp 
    103103         vb   (:,:,:) = 0._wp   ;   vn   (:,:,:) = 0._wp   
     104                                    hdivn(:,:,:) = 0._wp 
    104105!$OMP END PARALLEL WORKSHARE 
    105                                     hdivn(:,:,:) = 0._wp 
    106106         ! 
    107107         IF( cp_cfg == 'eel' ) THEN 
     
    145145      ! Do it whatever the free surface method, these arrays being eventually used 
    146146      ! 
    147 !$OMP PARALLEL WORKSHARE 
     147!$OMP PARALLEL 
     148!$OMP WORKSHARE 
    148149      un_b(:,:) = 0._wp   ;   vn_b(:,:) = 0._wp 
    149150      ub_b(:,:) = 0._wp   ;   vb_b(:,:) = 0._wp 
    150 !$OMP END PARALLEL WORKSHARE 
     151!$OMP END WORKSHARE 
    151152      ! 
    152153!!gm  the use of umsak & vmask is not necessary belox as un, vn, ub, vb are always masked 
    153 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    154154      DO jk = 1, jpkm1 
     155!$OMP DO schedule(static) private(jj, ji) 
    155156         DO jj = 1, jpj 
    156157            DO ji = 1, jpi 
     
    164165      END DO 
    165166      ! 
    166 !$OMP PARALLEL WORKSHARE 
     167!$OMP WORKSHARE 
    167168      un_b(:,:) = un_b(:,:) * r1_hu_n(:,:) 
    168169      vn_b(:,:) = vn_b(:,:) * r1_hv_n(:,:) 
     
    170171      ub_b(:,:) = ub_b(:,:) * r1_hu_b(:,:) 
    171172      vb_b(:,:) = vb_b(:,:) * r1_hv_b(:,:) 
    172 !$OMP END PARALLEL WORKSHARE 
     173!$OMP END WORKSHARE NOWAIT 
     174!$OMP END PARALLEL 
    173175      ! 
    174176      IF( nn_timing == 1 )   CALL timing_stop('istate_init') 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90

    r6748 r7037  
    230230         ! divided by 2 later 
    231231         ziceload = 0._wp 
     232!$OMP PARALLEL 
     233!$OMP DO schedule(static) private(jj,ji,ikt,jk) 
    232234         DO jj = 1, jpj 
    233235            DO ji = 1, jpi 
     
    242244            END DO 
    243245         END DO 
    244 !$OMP PARALLEL WORKSHARE 
     246!$OMP WORKSHARE 
    245247         riceload(:,:)=ziceload(:,:)  ! need to be saved for diaar5 
    246 !$OMP END PARALLEL WORKSHARE 
     248!$OMP END WORKSHARE NOWAIT 
     249!$OMP END PARALLEL 
    247250 
    248251         CALL wrk_dealloc( jpi,jpj, 2,  ztstop)  
     
    288291 
    289292      ! Surface value 
    290 !$OMP PARALLEL DO private(ji,jj, zcoef1) 
     293!$OMP PARALLEL 
     294!$OMP DO private(ji,jj, zcoef1) 
    291295      DO jj = 2, jpjm1 
    292296         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    304308      ! interior value (2=<jk=<jpkm1) 
    305309      DO jk = 2, jpkm1 
    306 !$OMP PARALLEL DO private(ji,jj, zcoef1) 
     310!$OMP DO private(ji,jj, zcoef1) 
    307311         DO jj = 2, jpjm1 
    308312            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    321325            END DO 
    322326         END DO 
    323       END DO 
     327!$OMP END DO NOWAIT 
     328      END DO 
     329!$OMP END PARALLEL 
    324330      ! 
    325331      CALL wrk_dealloc( jpi,jpj,jpk,   zhpi, zhpj ) 
     
    359365 
    360366      !  Surface value (also valid in partial step case) 
     367!$OMP PARALLEL 
     368!$OMP DO private(ji,jj, zcoef1) 
    361369      DO jj = 2, jpjm1 
    362370         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    373381      ! interior value (2=<jk=<jpkm1) 
    374382      DO jk = 2, jpkm1 
     383!$OMP DO private(ji,jj, zcoef1) 
    375384         DO jj = 2, jpjm1 
    376385            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    392401 
    393402      ! partial steps correction at the last level  (use gru & grv computed in zpshde.F90) 
     403!$OMP DO private(ji,jj,iku,ikv,zcoef2,zcoef3) 
    394404      DO jj = 2, jpjm1 
    395405         DO ji = 2, jpim1 
     
    412422         END DO 
    413423      END DO 
     424!$OMP END DO NOWAIT 
     425!$OMP END PARALLEL 
    414426      ! 
    415427      CALL wrk_dealloc( jpi,jpj,jpk,   zhpi, zhpj ) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_lap_blp.F90

    r6748 r7037  
    7575      ! 
    7676      !                                                ! =============== 
     77!$OMP PARALLEL 
    7778      DO jk = 1, jpkm1                                 ! Horizontal slab 
    7879         !                                             ! =============== 
    79 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     80!$OMP DO schedule(static) private(jj, ji) 
    8081         DO jj = 2, jpj 
    8182            DO ji = fs_2, jpi   ! vector opt. 
     
    9495         END DO   
    9596         ! 
    96 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     97!$OMP DO schedule(static) private(jj, ji) 
    9798         DO jj = 2, jpjm1                             ! - curl( curl) + grad( div ) 
    9899            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    108109         !                                             ! =============== 
    109110      END DO                                           !   End of slab 
     111!$OMP END PARALLEL 
    110112      !                                                ! =============== 
    111113      CALL wrk_dealloc( jpi, jpj, zcur, zdiv )  
     
    146148      ENDIF 
    147149      ! 
     150!$OMP PARALLEL WORKSHARE 
    148151      zulap(:,:,:) = 0._wp 
    149152      zvlap(:,:,:) = 0._wp 
     153!$OMP END PARALLEL WORKSHARE 
    150154      ! 
    151155      CALL dyn_ldf_lap( kt, pub, pvb, zulap, zvlap, 1 )   ! rotated laplacian applied to ptb (output in zlap) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90

    r6748 r7037  
    115115         ! Ensure below that barotropic velocities match time splitting estimate 
    116116         ! Compute actual transport and replace it with ts estimate at "after" time step 
    117 !$OMP PARALLEL WORKSHARE 
     117!$OMP PARALLEL 
     118!$OMP WORKSHARE 
    118119         zue(:,:) = e3u_a(:,:,1) * ua(:,:,1) * umask(:,:,1) 
    119120         zve(:,:) = e3v_a(:,:,1) * va(:,:,1) * vmask(:,:,1) 
    120 !$OMP END PARALLEL WORKSHARE 
     121!$OMP END WORKSHARE 
    121122         DO jk = 2, jpkm1 
    122             zue(:,:) = zue(:,:) + e3u_a(:,:,jk) * ua(:,:,jk) * umask(:,:,jk) 
    123             zve(:,:) = zve(:,:) + e3v_a(:,:,jk) * va(:,:,jk) * vmask(:,:,jk) 
     123!$OMP DO schedule(static) private(jj,ji) 
     124            DO jj = 1, jpj 
     125               DO ji = 1, jpi 
     126                  zue(ji,jj) = zue(ji,jj) + e3u_a(ji,jj,jk) * ua(ji,jj,jk) * umask(ji,jj,jk) 
     127                  zve(ji,jj) = zve(ji,jj) + e3v_a(ji,jj,jk) * va(ji,jj,jk) * vmask(ji,jj,jk) 
     128               END DO 
     129            END DO 
    124130         END DO 
    125 !$OMP PARALLEL DO schedule(static) private(jk) 
     131!$OMP DO schedule(static) private(jk) 
    126132         DO jk = 1, jpkm1 
    127133            ua(:,:,jk) = ( ua(:,:,jk) - zue(:,:) * r1_hu_a(:,:) + ua_b(:,:) ) * umask(:,:,jk) 
    128134            va(:,:,jk) = ( va(:,:,jk) - zve(:,:) * r1_hv_a(:,:) + va_b(:,:) ) * vmask(:,:,jk) 
    129135         END DO 
     136!$OMP END DO NOWAIT 
     137!$OMP END PARALLEL 
    130138         ! 
    131139         IF( .NOT.ln_bt_fw ) THEN 
     
    186194      ! ------------------------------------------ 
    187195      IF( neuler == 0 .AND. kt == nit000 ) THEN        !* Euler at first time-step: only swap 
    188 !$OMP PARALLEL DO schedule(static) private(jk) 
     196!$OMP PARALLEL 
     197!$OMP DO schedule(static) private(jk) 
    189198         DO jk = 1, jpkm1 
    190199            un(:,:,jk) = ua(:,:,jk)                          ! un <-- ua 
    191200            vn(:,:,jk) = va(:,:,jk) 
    192201         END DO 
     202!$OMP END DO NOWAIT 
    193203         IF(.NOT.ln_linssh ) THEN 
    194 !$OMP PARALLEL DO schedule(static) private(jk) 
     204!$OMP DO schedule(static) private(jk) 
    195205            DO jk = 1, jpkm1 
    196206               e3t_b(:,:,jk) = e3t_n(:,:,jk) 
     
    198208               e3v_b(:,:,jk) = e3v_n(:,:,jk) 
    199209            END DO 
     210!$OMP END DO NOWAIT 
    200211         ENDIF 
     212!$OMP END PARALLEL 
    201213      ELSE                                             !* Leap-Frog : Asselin filter and swap 
    202214         !                                ! =============! 
     
    224236            ! ---------------------------------------------------- 
    225237            IF( ln_dynspg_ts .AND. ln_bt_fw ) THEN    ! No asselin filtering on thicknesses if forward time splitting 
    226                e3t_b(:,:,1:jpkm1) = e3t_n(:,:,1:jpkm1) 
     238!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     239               DO jj = 1, jpj 
     240                  DO ji = 1, jpi 
     241                     e3t_b(ji,jj,1:jpkm1) = e3t_n(ji,jj,1:jpkm1) 
     242                  END DO 
     243               END DO 
    227244            ELSE 
    228245!$OMP PARALLEL DO schedule(static) private(jk) 
     
    234251               zcoef = atfp * rdt * r1_rau0 
    235252               IF ( .NOT. ln_isf ) THEN   ! if no ice shelf melting 
    236                   e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef * ( emp_b(:,:) - emp(:,:) & 
    237                                  &                      - rnf_b(:,:) + rnf(:,:) ) * tmask(:,:,1) 
     253!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     254                  DO jj = 1, jpj 
     255                     DO ji = 1, jpi 
     256                        e3t_b(ji,jj,1) = e3t_b(ji,jj,1) - zcoef * ( emp_b(ji,jj) - emp(ji,jj) & 
     257                                 &                      - rnf_b(ji,jj) + rnf(ji,jj) ) * tmask(ji,jj,1) 
     258                     END DO 
     259                  END DO 
    238260               ELSE                     ! if ice shelf melting 
     261!$OMP PARALLEL DO schedule(static) private(jj,ji,ikt) 
    239262                  DO jj = 1, jpj 
    240263                     DO ji = 1, jpi 
     
    273296               CALL dom_vvl_interpol( e3t_b(:,:,:), ze3u_f, 'U' ) 
    274297               CALL dom_vvl_interpol( e3t_b(:,:,:), ze3v_f, 'V' ) 
    275 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zue3a, zve3a, zue3n, zve3n, zue3b, zve3b, zuf, zvf) 
     298!$OMP PARALLEL  
     299!$OMP DO schedule(static) private(jk, jj, ji, zue3a, zve3a, zue3n, zve3n, zue3b, zve3b, zuf, zvf) 
    276300               DO jk = 1, jpkm1 
    277301                  DO jj = 1, jpj 
     
    294318                  END DO 
    295319               END DO 
     320!$OMP WORKSHARE 
    296321               e3u_b(:,:,1:jpkm1) = ze3u_f(:,:,1:jpkm1)        ! e3u_b <-- filtered scale factor 
    297322               e3v_b(:,:,1:jpkm1) = ze3v_f(:,:,1:jpkm1) 
     323!$OMP END WORKSHARE NOWAIT 
     324!$OMP END PARALLEL 
    298325               ! 
    299326               CALL wrk_dealloc( jpi,jpj,jpk,   ze3u_f, ze3v_f ) 
     
    305332            ! Revert "before" velocities to time split estimate 
    306333            ! Doing it here also means that asselin filter contribution is removed   
     334!$OMP PARALLEL  
     335!$OMP WORKSHARE 
    307336            zue(:,:) = e3u_b(:,:,1) * ub(:,:,1) * umask(:,:,1) 
    308337            zve(:,:) = e3v_b(:,:,1) * vb(:,:,1) * vmask(:,:,1)     
     338!$OMP END WORKSHARE 
    309339            DO jk = 2, jpkm1 
    310                zue(:,:) = zue(:,:) + e3u_b(:,:,jk) * ub(:,:,jk) * umask(:,:,jk) 
    311                zve(:,:) = zve(:,:) + e3v_b(:,:,jk) * vb(:,:,jk) * vmask(:,:,jk)     
    312             END DO 
    313 !$OMP PARALLEL DO schedule(static) private(jk) 
     340!$OMP DO schedule(static) private(jj, ji) 
     341               DO jj = 1, jpj 
     342                  DO ji = 1, jpi 
     343                     zue(ji,jj) = zue(ji,jj) + e3u_b(ji,jj,jk) * ub(ji,jj,jk) * umask(ji,jj,jk) 
     344                     zve(ji,jj) = zve(ji,jj) + e3v_b(ji,jj,jk) * vb(ji,jj,jk) * vmask(ji,jj,jk)     
     345                  END DO 
     346               END DO 
     347            END DO 
     348!$OMP DO schedule(static) private(jk) 
    314349            DO jk = 1, jpkm1 
    315350               ub(:,:,jk) = ub(:,:,jk) - (zue(:,:) * r1_hu_n(:,:) - un_b(:,:)) * umask(:,:,jk) 
    316351               vb(:,:,jk) = vb(:,:,jk) - (zve(:,:) * r1_hv_n(:,:) - vn_b(:,:)) * vmask(:,:,jk) 
    317352            END DO 
     353!$OMP END DO NOWAIT 
     354!$OMP END PARALLEL  
    318355         ENDIF 
    319356         ! 
     
    326363      ! 
    327364      IF(.NOT.ln_linssh ) THEN 
     365!$OMP PARALLEL  
     366!$OMP WORKSHARE 
    328367         hu_b(:,:) = e3u_b(:,:,1) * umask(:,:,1) 
    329368         hv_b(:,:) = e3v_b(:,:,1) * vmask(:,:,1) 
     369!$OMP END WORKSHARE 
    330370         DO jk = 2, jpkm1 
    331             hu_b(:,:) = hu_b(:,:) + e3u_b(:,:,jk) * umask(:,:,jk) 
    332             hv_b(:,:) = hv_b(:,:) + e3v_b(:,:,jk) * vmask(:,:,jk) 
     371!$OMP DO schedule(static) private(jj, ji) 
     372            DO jj = 1, jpj 
     373               DO ji = 1, jpi 
     374                  hu_b(ji,jj) = hu_b(ji,jj) + e3u_b(ji,jj,jk) * umask(ji,jj,jk) 
     375                  hv_b(ji,jj) = hv_b(ji,jj) + e3v_b(ji,jj,jk) * vmask(ji,jj,jk) 
     376               END DO 
     377            END DO 
     378!$OMP END DO 
    333379         END DO 
     380!$OMP WORKSHARE 
    334381         r1_hu_b(:,:) = ssumask(:,:) / ( hu_b(:,:) + 1._wp - ssumask(:,:) ) 
    335382         r1_hv_b(:,:) = ssvmask(:,:) / ( hv_b(:,:) + 1._wp - ssvmask(:,:) ) 
    336       ENDIF 
    337       ! 
    338 !$OMP PARALLEL WORKSHARE 
     383!$OMP END WORKSHARE 
     384!$OMP END PARALLEL  
     385      ENDIF 
     386      ! 
     387!$OMP PARALLEL 
     388!$OMP WORKSHARE 
    339389      un_b(:,:) = e3u_a(:,:,1) * un(:,:,1) * umask(:,:,1) 
    340390      ub_b(:,:) = e3u_b(:,:,1) * ub(:,:,1) * umask(:,:,1) 
    341391      vn_b(:,:) = e3v_a(:,:,1) * vn(:,:,1) * vmask(:,:,1) 
    342392      vb_b(:,:) = e3v_b(:,:,1) * vb(:,:,1) * vmask(:,:,1) 
    343 !$OMP END PARALLEL WORKSHARE 
     393!$OMP END WORKSHARE 
    344394      DO jk = 2, jpkm1 
    345          un_b(:,:) = un_b(:,:) + e3u_a(:,:,jk) * un(:,:,jk) * umask(:,:,jk) 
    346          ub_b(:,:) = ub_b(:,:) + e3u_b(:,:,jk) * ub(:,:,jk) * umask(:,:,jk) 
    347          vn_b(:,:) = vn_b(:,:) + e3v_a(:,:,jk) * vn(:,:,jk) * vmask(:,:,jk) 
    348          vb_b(:,:) = vb_b(:,:) + e3v_b(:,:,jk) * vb(:,:,jk) * vmask(:,:,jk) 
     395!$OMP DO schedule(static) private(jj, ji) 
     396         DO jj = 1, jpj 
     397            DO ji = 1, jpi 
     398               un_b(ji,jj) = un_b(ji,jj) + e3u_a(ji,jj,jk) * un(ji,jj,jk) * umask(ji,jj,jk) 
     399               ub_b(ji,jj) = ub_b(ji,jj) + e3u_b(ji,jj,jk) * ub(ji,jj,jk) * umask(ji,jj,jk) 
     400               vn_b(ji,jj) = vn_b(ji,jj) + e3v_a(ji,jj,jk) * vn(ji,jj,jk) * vmask(ji,jj,jk) 
     401               vb_b(ji,jj) = vb_b(ji,jj) + e3v_b(ji,jj,jk) * vb(ji,jj,jk) * vmask(ji,jj,jk) 
     402            END DO 
     403         END DO 
    349404      END DO 
    350 !$OMP PARALLEL WORKSHARE 
     405!$OMP WORKSHARE 
    351406      un_b(:,:) = un_b(:,:) * r1_hu_a(:,:) 
    352407      vn_b(:,:) = vn_b(:,:) * r1_hv_a(:,:) 
    353408      ub_b(:,:) = ub_b(:,:) * r1_hu_b(:,:) 
    354409      vb_b(:,:) = vb_b(:,:) * r1_hv_b(:,:) 
    355 !$OMP END PARALLEL WORKSHARE 
     410!$OMP END WORKSHARE NOWAIT 
     411!$OMP END PARALLEL  
    356412      ! 
    357413      IF( .NOT.ln_dynspg_ts ) THEN        ! output the barotropic currents 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90

    r6748 r7037  
    133133            zintp = REAL( MOD( kt-1, nn_fsbc ) ) / REAL( nn_fsbc ) 
    134134            zgrau0r     = - grav * r1_rau0 
     135!$OMP PARALLEL 
     136!$OMP WORKSHARE 
    135137            zpice(:,:) = (  zintp * snwice_mass(:,:) + ( 1.- zintp ) * snwice_mass_b(:,:)  ) * zgrau0r 
    136 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     138!$OMP END WORKSHARE 
     139!$OMP DO schedule(static) private(jj, ji) 
    137140            DO jj = 2, jpjm1 
    138141               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    141144               END DO 
    142145            END DO 
     146!$OMP END DO NOWAIT 
     147!$OMP END PARALLEL 
    143148            ! 
    144149            CALL wrk_dealloc( jpi,jpj,   zpice )          
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r6748 r7037  
    7272   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftnw, ftne   !: triad of coriolis parameter 
    7373   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftsw, ftse   !: (only used with een vorticity scheme) 
    74  
    7574   !! Time filtered arrays at baroclinic time step: 
    7675   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_adv , vn_adv     !: Advection vel. at "now" barocl. step 
     
    244243            CALL lbc_lnk( zwz, 'F', 1._wp ) 
    245244            ! 
     245!$OMP PARALLEL 
     246!$OMP WORKSHARE 
    246247            ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    247  
    248 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     248!$OMP END WORKSHARE 
     249 
     250!$OMP DO schedule(static) private(jj, ji) 
    249251            DO jj = 2, jpj 
    250252               DO ji = 2, jpi 
     
    255257               END DO 
    256258            END DO 
     259!$OMP END DO NOWAIT 
     260!$OMP END PARALLEL 
    257261            ! 
    258262         ELSE                                !== all other schemes (ENE, ENS, MIX) 
     
    272276!              zhf(:,:) = gdepw_0(:,:,jk+1) 
    273277            ELSE 
     278!$OMP PARALLEL WORKSHARE 
    274279               zhf(:,:) = hbatf(:,:) 
     280!$OMP END PARALLEL WORKSHARE 
    275281            END IF 
    276282 
    277 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     283!$OMP PARALLEL 
     284!$OMP DO schedule(static) private(jj, ji) 
    278285            DO jj = 1, jpjm1 
    279286               DO ji = 1, jpi 
     
    283290 
    284291            DO jk = 1, jpkm1 
    285 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     292!$OMP DO schedule(static) private(jj, ji) 
    286293               DO jj = 1, jpjm1 
    287294                  DO ji = 1, jpi 
     
    289296                  END DO 
    290297               END DO 
    291             END DO 
     298!$OMP END DO NOWAIT 
     299            END DO 
     300!$OMP END PARALLEL 
    292301            CALL lbc_lnk( zhf, 'F', 1._wp ) 
    293302            ! JC: TBC. hf should be greater than 0  
    294 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     303!$OMP PARALLEL  
     304!$OMP DO schedule(static) private(jj, ji) 
    295305            DO jj = 1, jpj 
    296306               DO ji = 1, jpi 
     
    298308               END DO 
    299309            END DO 
    300 !$OMP PARALLEL WORKSHARE 
     310!$OMP WORKSHARE 
    301311            zwz(:,:) = ff(:,:) * zwz(:,:) 
    302 !$OMP END PARALLEL WORKSHARE 
     312!$OMP END WORKSHARE NOWAIT 
     313!$OMP END PARALLEL 
    303314         ENDIF 
    304315      ENDIF 
     
    318329      !                                   !* e3*d/dt(Ua) (Vertically integrated) 
    319330      !                                   ! -------------------------------------------------- 
    320 !$OMP PARALLEL WORKSHARE 
     331!$OMP PARALLEL 
     332!$OMP WORKSHARE 
    321333      zu_frc(:,:) = 0._wp 
    322334      zv_frc(:,:) = 0._wp 
    323 !$OMP END PARALLEL WORKSHARE 
     335!$OMP END WORKSHARE 
    324336      ! 
    325337      DO jk = 1, jpkm1 
    326 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    327       DO jj=1,jpj 
    328          DO ji=1,jpi 
    329          zu_frc(ji,jj) = zu_frc(ji,jj) + e3u_n(ji,jj,jk) * ua(ji,jj,jk) * umask(ji,jj,jk) 
    330          zv_frc(ji,jj) = zv_frc(ji,jj) + e3v_n(ji,jj,jk) * va(ji,jj,jk) * vmask(ji,jj,jk) 
    331          END DO 
    332       END DO  
     338!$OMP DO schedule(static) private(jj,ji) 
     339         DO jj=1,jpj 
     340            DO ji=1,jpi 
     341               zu_frc(ji,jj) = zu_frc(ji,jj) + e3u_n(ji,jj,jk) * ua(ji,jj,jk) * umask(ji,jj,jk) 
     342               zv_frc(ji,jj) = zv_frc(ji,jj) + e3v_n(ji,jj,jk) * va(ji,jj,jk) * vmask(ji,jj,jk) 
     343            END DO 
     344         END DO  
    333345      END DO 
    334346      ! 
    335 !$OMP PARALLEL WORKSHARE 
     347!$OMP WORKSHARE 
    336348      zu_frc(:,:) = zu_frc(:,:) * r1_hu_n(:,:) 
    337349      zv_frc(:,:) = zv_frc(:,:) * r1_hv_n(:,:) 
    338 !$OMP END PARALLEL WORKSHARE 
     350!$OMP END WORKSHARE 
    339351      ! 
    340352      ! 
    341353      !                                   !* baroclinic momentum trend (remove the vertical mean trend) 
    342 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     354!$OMP DO schedule(static) private(jk,jj,ji) 
    343355      DO jk = 1, jpkm1                    ! ----------------------------------------------------------- 
    344356         DO jj = 2, jpjm1 
     
    349361         END DO 
    350362      END DO 
     363!$OMP END DO NOWAIT 
    351364      !                                   !* barotropic Coriolis trends (vorticity scheme dependent) 
    352365      !                                   ! -------------------------------------------------------- 
    353 !$OMP PARALLEL WORKSHARE 
     366!$OMP WORKSHARE 
    354367      zwx(:,:) = un_b(:,:) * hu_n(:,:) * e2u(:,:)        ! now fluxes  
    355368      zwy(:,:) = vn_b(:,:) * hv_n(:,:) * e1v(:,:) 
    356 !$OMP END PARALLEL WORKSHARE 
     369!$OMP END WORKSHARE NOWAIT 
     370!$OMP END PARALLEL 
    357371      ! 
    358372      IF( ln_dynvor_ene .OR. ln_dynvor_mix ) THEN      ! energy conserving or mixed scheme 
     
    404418      IF( .NOT.ln_linssh ) THEN                 ! Variable volume : remove surface pressure gradient 
    405419        IF( ln_wd ) THEN                        ! Calculating and applying W/D gravity filters 
     420!$OMP PARALLEL 
     421!$OMP WORKSHARE 
    406422          wduflt1(:,:) = 1.0_wp 
    407423          wdvflt1(:,:) = 1.0_wp 
    408 !$OMP PARALLEL DO schedule(static) private(jj,ji,ll_tmp1,ll_tmp2) 
     424!$OMP END WORKSHARE 
     425!$OMP DO schedule(static) private(jj,ji,ll_tmp1,ll_tmp2) 
    409426          DO jj = 2, jpjm1 
    410427             DO ji = 2, jpim1 
     
    443460             END DO 
    444461           END DO 
     462!$OMP END DO NOWAIT 
     463!$OMP END PARALLEL 
    445464 
    446465           CALL lbc_lnk( zcpx, 'U', 1._wp )    ;   CALL lbc_lnk( zcpy, 'V', 1._wp ) 
     
    502521      ! Note that the "unclipped" bottom friction parameter is used even with explicit drag 
    503522      IF( ln_wd ) THEN 
    504         zu_frc(:,:) = zu_frc(:,:) + MAX(r1_hu_n(:,:) * bfrua(:,:),-1._wp / rdtbt) * zwx(:,:) 
    505         zv_frc(:,:) = zv_frc(:,:) + MAX(r1_hv_n(:,:) * bfrva(:,:),-1._wp / rdtbt) * zwy(:,:) 
     523!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     524         DO jj = 1, jpj 
     525            DO ji = 1, jpi   ! vector opt. 
     526               zu_frc(ji,jj) = zu_frc(ji,jj) + MAX(r1_hu_n(ji,jj) * bfrua(ji,jj),-1._wp / rdtbt) * zwx(ji,jj) 
     527               zv_frc(ji,jj) = zv_frc(ji,jj) + MAX(r1_hv_n(ji,jj) * bfrva(ji,jj),-1._wp / rdtbt) * zwy(ji,jj) 
     528            END DO 
     529         END DO 
    506530      ELSE 
     531!$OMP PARALLEL WORKSHARE 
    507532        zu_frc(:,:) = zu_frc(:,:) + r1_hu_n(:,:) * bfrua(:,:) * zwx(:,:) 
    508533        zv_frc(:,:) = zv_frc(:,:) + r1_hv_n(:,:) * bfrva(:,:) * zwy(:,:) 
     534!$OMP END PARALLEL WORKSHARE 
    509535      END IF 
    510536      ! 
     
    579605      !                                         ! Surface net water flux and rivers 
    580606      IF (ln_bt_fw) THEN 
     607!$OMP PARALLEL WORKSHARE 
    581608         zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) 
     609!$OMP END PARALLEL WORKSHARE 
    582610      ELSE 
     611!$OMP PARALLEL WORKSHARE 
    583612         zssh_frc(:,:) = zraur * z1_2 * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:)   & 
    584613                &                        + fwfisf(:,:) + fwfisf_b(:,:)                     ) 
     614!$OMP END PARALLEL WORKSHARE 
    585615      ENDIF 
    586616#if defined key_asminc 
    587617      !                                         ! Include the IAU weighted SSH increment 
    588618      IF( lk_asminc .AND. ln_sshinc .AND. ln_asmiau ) THEN 
     619!$OMP PARALLEL WORKSHARE 
    589620         zssh_frc(:,:) = zssh_frc(:,:) - ssh_iau(:,:) 
     621!$OMP END PARALLEL WORKSHARE 
    590622      ENDIF 
    591623#endif 
     
    617649      IF( ln_wd ) THEN      !preserve the positivity of water depth 
    618650                          !ssh[b,n,a] should have already been processed for this 
    619 !$OMP PARALLEL WORKSHARE 
    620          sshbb_e(:,:) = MAX(sshbb_e(:,:), rn_wdmin1 - bathy(:,:)) 
    621          sshb_e(:,:)  = MAX(sshb_e(:,:) , rn_wdmin1 - bathy(:,:)) 
    622 !$OMP END PARALLEL WORKSHARE 
     651!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     652         DO jj = 1, jpj 
     653            DO ji = 1, jpi   ! vector opt. 
     654               sshbb_e(ji,jj) = MAX(sshbb_e(ji,jj), rn_wdmin1 - bathy(ji,jj)) 
     655               sshb_e(ji,jj)  = MAX(sshb_e(ji,jj) , rn_wdmin1 - bathy(ji,jj)) 
     656            END DO 
     657         END DO 
    623658      ENDIF 
    624659      ! 
     
    688723            !                                             !  ------------------ 
    689724            ! Extrapolate Sea Level at step jit+0.5: 
     725!$OMP PARALLEL  
     726!$OMP WORKSHARE 
    690727            zsshp2_e(:,:) = za1 * sshn_e(:,:)  + za2 * sshb_e(:,:) + za3 * sshbb_e(:,:) 
     728!$OMP END WORKSHARE 
    691729            ! 
    692 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
     730!$OMP DO schedule(static) private(jj,ji) 
    693731            DO jj = 2, jpjm1                                    ! Sea Surface Height at u- & v-points 
    694732               DO ji = 2, fs_jpim1   ! Vector opt. 
     
    701739               END DO 
    702740            END DO 
     741!$OMP END DO NOWAIT 
     742!$OMP END PARALLEL  
    703743            CALL lbc_lnk_multi( zwx, 'U', 1._wp, zwy, 'V', 1._wp ) 
    704744            ! 
     
    708748!$OMP END PARALLEL WORKSHARE 
    709749            IF( ln_wd ) THEN 
    710               zhup2_e(:,:) = MAX(zhup2_e (:,:), rn_wdmin1) 
    711               zhvp2_e(:,:) = MAX(zhvp2_e (:,:), rn_wdmin1) 
     750!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     751            DO jj = 1, jpj 
     752               DO ji = 1, jpi   ! vector opt. 
     753                  zhup2_e(ji,jj) = MAX(zhup2_e (ji,jj), rn_wdmin1) 
     754                  zhvp2_e(ji,jj) = MAX(zhvp2_e (ji,jj), rn_wdmin1) 
     755               END DO 
     756            END DO 
    712757            END IF 
    713758         ELSE 
     
    756801         ! Sum over sub-time-steps to compute advective velocities 
    757802         za2 = wgtbtp2(jn) 
    758 !$OMP PARALLEL WORKSHARE 
     803!$OMP PARALLEL 
     804!$OMP WORKSHARE 
    759805         un_adv(:,:) = un_adv(:,:) + za2 * zwx(:,:) * r1_e2u(:,:) 
    760806         vn_adv(:,:) = vn_adv(:,:) + za2 * zwy(:,:) * r1_e1v(:,:) 
    761 !$OMP END PARALLEL WORKSHARE 
     807!$OMP END WORKSHARE NOWAIT 
    762808         ! 
    763809         ! Set next sea level: 
    764 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
     810!$OMP DO schedule(static) private(jj,ji) 
    765811         DO jj = 2, jpjm1                                  
    766812            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    769815            END DO 
    770816         END DO 
    771 !$OMP PARALLEL WORKSHARE 
     817!$OMP WORKSHARE 
    772818         ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) )  ) * ssmask(:,:) 
    773 !$OMP END PARALLEL WORKSHARE 
    774          IF( ln_wd ) ssha_e(:,:) = MAX(ssha_e(:,:), rn_wdmin1 - bathy(:,:))  
     819!$OMP END WORKSHARE NOWAIT 
     820!$OMP END PARALLEL 
     821         IF( ln_wd ) THEN 
     822!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     823            DO jj = 1, jpj 
     824               DO ji = 1, jpi   ! vector opt. 
     825                  ssha_e(ji,jj) = MAX(ssha_e(ji,jj), rn_wdmin1 - bathy(ji,jj)) 
     826               END DO 
     827            END DO 
     828         END IF  
    775829         CALL lbc_lnk( ssha_e, 'T',  1._wp ) 
    776830 
     
    821875          &            + za2 *  sshb_e(:,:) + za3 *  sshbb_e(:,:) 
    822876         IF( ln_wd ) THEN                   ! Calculating and applying W/D gravity filters 
     877!$OMP PARALLEL 
     878!$OMP WORKSHARE 
    823879           wduflt1(:,:) = 1._wp 
    824880           wdvflt1(:,:) = 1._wp 
    825 !$OMP PARALLEL DO schedule(static) private(jj,ji,ll_tmp1,ll_tmp2) 
     881!$OMP END WORKSHARE 
     882!$OMP DO schedule(static) private(jj,ji,ll_tmp1,ll_tmp2) 
    826883           DO jj = 2, jpjm1 
    827884              DO ji = 2, jpim1 
     
    859916              END DO 
    860917            END DO 
     918!$OMP END DO NOWAIT 
     919!$OMP END PARALLEL 
    861920            CALL lbc_lnk( zcpx, 'U', 1._wp )    ;   CALL lbc_lnk( zcpy, 'V', 1._wp ) 
    862921         ENDIF 
     
    880939 
    881940            IF( ln_wd ) THEN 
    882               zhust_e(:,:) = MAX(zhust_e (:,:), rn_wdmin1 ) 
    883               zhvst_e(:,:) = MAX(zhvst_e (:,:), rn_wdmin1 ) 
     941!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     942            DO jj = 1, jpj 
     943               DO ji = 1, jpi   ! vector opt. 
     944                  zhust_e(ji,jj) = MAX(zhust_e (ji,jj), rn_wdmin1 ) 
     945                  zhvst_e(ji,jj) = MAX(zhvst_e (ji,jj), rn_wdmin1 ) 
     946               END DO 
     947            END DO 
    884948            END IF 
    885949 
     
    9531017         zu_trd(:,:) = zu_trd(:,:) + bfrua(:,:) * un_e(:,:) * hur_e(:,:) 
    9541018         zv_trd(:,:) = zv_trd(:,:) + bfrva(:,:) * vn_e(:,:) * hvr_e(:,:) 
    955 !$OMP END PARALLEL WORKSHARE 
    9561019         ! 
    9571020         ! Add top stresses: 
    958 !$OMP PARALLEL WORKSHARE 
    9591021         zu_trd(:,:) = zu_trd(:,:) + tfrua(:,:) * un_e(:,:) * hur_e(:,:) 
    9601022         zv_trd(:,:) = zv_trd(:,:) + tfrva(:,:) * vn_e(:,:) * hvr_e(:,:) 
     
    10391101         IF( .NOT.ln_linssh ) THEN                     !* Update ocean depth (variable volume case only) 
    10401102            IF( ln_wd ) THEN 
    1041               hu_e (:,:) = MAX(hu_0(:,:) + zsshu_a(:,:), rn_wdmin1) 
    1042               hv_e (:,:) = MAX(hv_0(:,:) + zsshv_a(:,:), rn_wdmin1) 
     1103!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     1104            DO jj = 1, jpj 
     1105               DO ji = 1, jpi   ! vector opt. 
     1106                  hu_e (ji,jj) = MAX(hu_0(ji,jj) + zsshu_a(ji,jj), rn_wdmin1) 
     1107                  hv_e (ji,jj) = MAX(hv_0(ji,jj) + zsshv_a(ji,jj), rn_wdmin1) 
     1108               END DO 
     1109            END DO 
    10431110            ELSE 
    10441111!$OMP PARALLEL WORKSHARE 
     
    11501217         CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 
    11511218         ! 
    1152 !$OMP PARALLEL DO schedule(static) private(jk) 
     1219!$OMP PARALLEL 
     1220!$OMP DO schedule(static) private(jk) 
    11531221         DO jk=1,jpkm1 
    11541222            ua(:,:,jk) = ua(:,:,jk) + r1_hu_n(:,:) * ( ua_b(:,:) - ub_b(:,:) * hu_b(:,:) ) * z1_2dt_b 
    11551223            va(:,:,jk) = va(:,:,jk) + r1_hv_n(:,:) * ( va_b(:,:) - vb_b(:,:) * hv_b(:,:) ) * z1_2dt_b 
    11561224         END DO 
     1225!$OMP END DO NOWAIT 
    11571226         ! Save barotropic velocities not transport: 
    1158 !$OMP PARALLEL WORKSHARE 
     1227!$OMP WORKSHARE 
    11591228         ua_b(:,:) =  ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - ssumask(:,:) ) 
    11601229         va_b(:,:) =  va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - ssvmask(:,:) ) 
    1161 !$OMP END PARALLEL WORKSHARE 
     1230!$OMP END WORKSHARE NOWAIT 
     1231!$OMP END PARALLEL 
    11621232      ENDIF 
    11631233      ! 
     
    11791249      IF( .NOT.Agrif_Root() .AND. ln_bt_fw ) THEN 
    11801250         IF( Agrif_NbStepint() == 0 ) THEN 
     1251!$OMP PARALLEL WORKSHARE 
    11811252            ub2_i_b(:,:) = 0._wp 
    11821253            vb2_i_b(:,:) = 0._wp 
     1254!$OMP END PARALLEL WORKSHARE 
    11831255         END IF 
    11841256         ! 
    11851257         za1 = 1._wp / REAL(Agrif_rhot(), wp) 
     1258!$OMP PARALLEL WORKSHARE 
    11861259         ub2_i_b(:,:) = ub2_i_b(:,:) + za1 * ub2_b(:,:) 
    11871260         vb2_i_b(:,:) = vb2_i_b(:,:) + za1 * vb2_b(:,:) 
     1261!$OMP END PARALLEL WORKSHARE 
    11881262      ENDIF 
    11891263#endif       
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90

    r6748 r7037  
    322322 
    323323         IF( ln_sco ) THEN 
     324!$OMP PARALLEL WORKSHARE 
    324325            zwz(:,:) = zwz(:,:) / e3f_n(:,:,jk) 
    325326            zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * un(:,:,jk) 
    326327            zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
     328!$OMP END PARALLEL WORKSHARE 
    327329         ELSE 
    328330!$OMP PARALLEL WORKSHARE 
     
    521523         SELECT CASE( nn_een_e3f )           ! == reciprocal of e3 at F-point 
    522524         CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
     525!$OMP PARALLEL DO private(jj,ji,ze3) 
    523526            DO jj = 1, jpjm1 
    524527               DO ji = 1, fs_jpim1   ! vector opt. 
     
    531534            END DO 
    532535         CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
     536!$OMP PARALLEL DO private(jj,ji,ze3,zmsk) 
    533537            DO jj = 1, jpjm1 
    534538               DO ji = 1, fs_jpim1   ! vector opt. 
     
    546550         SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    547551         CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
     552!$OMP PARALLEL DO private(jj,ji) 
    548553            DO jj = 1, jpjm1 
    549554               DO ji = 1, fs_jpim1   ! vector opt. 
     
    552557            END DO 
    553558         CASE ( np_RVO )                           !* relative vorticity 
     559!$OMP PARALLEL DO private(jj,ji) 
    554560            DO jj = 1, jpjm1 
    555561               DO ji = 1, fs_jpim1   ! vector opt. 
     
    560566            END DO 
    561567         CASE ( np_MET )                           !* metric term 
     568!$OMP PARALLEL DO private(jj,ji) 
    562569            DO jj = 1, jpjm1 
    563570               DO ji = 1, fs_jpim1   ! vector opt. 
     
    568575            END DO 
    569576         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
     577!$OMP PARALLEL DO private(jj,ji) 
    570578            DO jj = 1, jpjm1 
    571579               DO ji = 1, fs_jpim1   ! vector opt. 
     
    576584            END DO 
    577585         CASE ( np_CME )                           !* Coriolis + metric 
     586!$OMP PARALLEL DO private(jj,ji) 
    578587            DO jj = 1, jpjm1 
    579588               DO ji = 1, fs_jpim1   ! vector opt. 
     
    589598         ! 
    590599         IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
     600!$OMP PARALLEL DO private(jj,ji) 
    591601            DO jj = 1, jpjm1 
    592602               DO ji = 1, fs_jpim1   ! vector opt. 
     
    599609         ! 
    600610         !                                   !==  horizontal fluxes  ==! 
    601          zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * un(:,:,jk) 
    602          zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
     611!$OMP PARALLEL DO private(jj,ji) 
     612         DO jj = 1, jpj 
     613            DO ji = 1, jpi 
     614               zwx(ji,jj) = e2u(ji,jj) * e3u_n(ji,jj,jk) * un(ji,jj,jk) 
     615               zwy(ji,jj) = e1v(ji,jj) * e3v_n(ji,jj,jk) * vn(ji,jj,jk) 
     616            END DO 
     617         END DO 
    603618 
    604619         !                                   !==  compute and add the vorticity term trend  =! 
     
    611626               ztsw(ji,jj) = zwz(ji  ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj  ) 
    612627         END DO 
     628!$OMP PARALLEL 
     629!$OMP DO private(jj,ji) 
    613630         DO jj = 3, jpj 
    614631            DO ji = fs_2, jpi   ! vector opt. ok because we start at jj = 3 
     
    619636            END DO 
    620637         END DO 
     638!$OMP DO private(jj,ji,zua,zva) 
    621639         DO jj = 2, jpjm1 
    622640            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    628646               pva(ji,jj,jk) = pva(ji,jj,jk) + zva 
    629647            END DO   
    630          END DO   
     648         END DO  
     649!$OMP END DO NOWAIT 
     650!$OMP END PARALLEL  
    631651         !                                             ! =============== 
    632652      END DO                                           !   End of slab 
     
    683703      IF(lwp) WRITE(numout,*) '           namlbc: change fmask value in the angles (T)   ln_vorlat = ', ln_vorlat 
    684704      IF( ln_vorlat .AND. ( ln_dynvor_ene .OR. ln_dynvor_ens .OR. ln_dynvor_mix ) ) THEN 
     705!$OMP PARALLEL DO private(jk,jj,ji) 
    685706         DO jk = 1, jpk 
    686707            DO jj = 2, jpjm1 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynzad.F90

    r6748 r7037  
    8383      ENDIF 
    8484       
     85!$OMP PARALLEL 
    8586      DO jk = 2, jpkm1              ! Vertical momentum advection at level w and u- and v- vertical 
    86 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     87!$OMP DO schedule(static) private(jj, ji) 
    8788         DO jj = 2, jpj                   ! vertical fluxes  
    8889            DO ji = fs_2, jpi             ! vector opt. 
     
    9091            END DO 
    9192         END DO 
    92 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     93!$OMP DO schedule(static) private(jj, ji) 
    9394         DO jj = 2, jpjm1                 ! vertical momentum advection at w-point 
    9495            DO ji = fs_2, fs_jpim1        ! vector opt. 
     
    9899         END DO    
    99100      END DO 
     101!$OMP END PARALLEL 
    100102      ! 
    101103      ! Surface and bottom advective fluxes set to zero 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90

    r6748 r7037  
    9292      ! 
    9393      IF( ln_dynadv_vec .OR. ln_linssh ) THEN      ! applied on velocity 
     94!$OMP PARALLEL DO schedule(static) private(jk) 
    9495         DO jk = 1, jpkm1 
    9596            ua(:,:,jk) = ( ub(:,:,jk) + p2dt * ua(:,:,jk) ) * umask(:,:,jk) 
     
    9798         END DO 
    9899      ELSE                                         ! applied on thickness weighted velocity 
     100!$OMP PARALLEL DO schedule(static) private(jk) 
    99101         DO jk = 1, jpkm1 
    100102            ua(:,:,jk) = (         e3u_b(:,:,jk) * ub(:,:,jk)  & 
     
    140142      ! G. Madec : in linear free surface, e3u_a = e3u_n = e3u_0, so systematic use of e3u_a 
    141143      IF( ln_bfrimp .AND. ln_dynspg_ts ) THEN 
     144!$OMP PARALLEL 
     145!$OMP DO schedule(static) private(jk) 
    142146         DO jk = 1, jpkm1        ! remove barotropic velocities 
    143147            ua(:,:,jk) = ( ua(:,:,jk) - ua_b(:,:) ) * umask(:,:,jk) 
    144148            va(:,:,jk) = ( va(:,:,jk) - va_b(:,:) ) * vmask(:,:,jk) 
    145149         END DO 
     150!$OMP DO schedule(static) private(jj, ji, ikbu, ikbv, ze3ua, ze3va) 
    146151         DO jj = 2, jpjm1        ! Add bottom/top stress due to barotropic component only 
    147152            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    154159            END DO 
    155160         END DO 
     161!$OMP END DO NOWAIT 
     162!$OMP END PARALLEL 
    156163         IF( ln_isfcav ) THEN    ! Ocean cavities (ISF) 
     164!$OMP PARALLEL DO schedule(static) private(jj, ji, ikbu, ikbv, ze3ua, ze3va) 
    157165            DO jj = 2, jpjm1         
    158166               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    174182      ! non zero value at the ocean bottom depending on the bottom friction used. 
    175183      ! 
    176 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze3ua, zzwi, zzws) 
     184!$OMP PARALLEL 
     185!$OMP DO schedule(static) private(jk, jj, ji, ze3ua, zzwi, zzws) 
    177186      DO jk = 1, jpkm1        ! Matrix 
    178187         DO jj = 2, jpjm1  
     
    187196         END DO 
    188197      END DO 
     198!$OMP DO schedule(static) private(jj, ji) 
    189199      DO jj = 2, jpjm1        ! Surface boundary conditions 
    190200         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    210220      ! 
    211221      DO jk = 2, jpkm1        !==  First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1   (increasing k)  == 
    212 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     222!$OMP DO schedule(static) private(jj, ji) 
    213223         DO jj = 2, jpjm1    
    214224            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    216226            END DO 
    217227         END DO 
    218       END DO 
    219       ! 
    220 !$OMP PARALLEL DO schedule(static) private(jj, ji, ze3ua) 
     228!$OMP END DO NOWAIT 
     229      END DO 
     230      ! 
     231!$OMP DO schedule(static) private(jj, ji, ze3ua) 
    221232      DO jj = 2, jpjm1        !==  second recurrence:    SOLk = RHSk - Lk / Dk-1  Lk-1  ==! 
    222233         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    227238      END DO 
    228239      DO jk = 2, jpkm1 
    229 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     240!$OMP DO schedule(static) private(jj, ji) 
    230241         DO jj = 2, jpjm1 
    231242            DO ji = fs_2, fs_jpim1 
     
    235246      END DO 
    236247      ! 
    237 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     248!$OMP DO schedule(static) private(jj, ji) 
    238249        DO jj = 2, jpjm1        !==  thrid recurrence : SOLk = ( Lk - Uk * Ek+1 ) / Dk  ==! 
    239250         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    242253      END DO 
    243254      DO jk = jpk-2, 1, -1 
    244 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     255!$OMP DO schedule(static) private(jj, ji) 
    245256        DO jj = 2, jpjm1 
    246257            DO ji = fs_2, fs_jpim1 
     
    256267      ! non zero value at the ocean bottom depending on the bottom friction used 
    257268      ! 
    258 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze3va, zzwi, zzws) 
     269!$OMP DO schedule(static) private(jk, jj, ji, ze3va, zzwi, zzws) 
    259270      DO jk = 1, jpkm1        ! Matrix 
    260271         DO jj = 2, jpjm1    
     
    269280         END DO 
    270281      END DO 
    271 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     282!$OMP DO schedule(static) private(jj, ji) 
    272283      DO jj = 2, jpjm1        ! Surface boundary conditions 
    273284         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    293304      ! 
    294305      DO jk = 2, jpkm1        !==  First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1   (increasing k)  == 
    295 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     306!$OMP DO schedule(static) private(jj, ji) 
    296307         DO jj = 2, jpjm1    
    297308            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    299310            END DO 
    300311         END DO 
    301       END DO 
    302       ! 
    303 !$OMP PARALLEL DO schedule(static) private(jj, ji, ze3va) 
     312!$OMP END DO NOWAIT 
     313      END DO 
     314      ! 
     315!$OMP DO schedule(static) private(jj, ji, ze3va) 
    304316      DO jj = 2, jpjm1        !==  second recurrence:    SOLk = RHSk - Lk / Dk-1  Lk-1  ==! 
    305317         DO ji = fs_2, fs_jpim1   ! vector opt.           
     
    310322      END DO 
    311323      DO jk = 2, jpkm1 
    312 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     324!$OMP DO schedule(static) private(jj, ji) 
    313325         DO jj = 2, jpjm1 
    314326            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    318330      END DO 
    319331      ! 
    320 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     332!$OMP DO schedule(static) private(jj, ji) 
    321333      DO jj = 2, jpjm1        !==  third recurrence : SOLk = ( Lk - Uk * SOLk+1 ) / Dk  ==! 
    322334         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    325337      END DO 
    326338      DO jk = jpk-2, 1, -1 
    327 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     339!$OMP DO schedule(static) private(jj, ji) 
    328340         DO jj = 2, jpjm1 
    329341            DO ji = fs_2, fs_jpim1 
     
    331343            END DO 
    332344         END DO 
    333       END DO 
    334        
     345!$OMP END DO NOWAIT 
     346      END DO 
     347!$OMP END PARALLEL       
    335348      ! J. Chanut: Lines below are useless ? 
    336349      !! restore bottom layer avmu(v)  
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r6748 r7037  
    9696      !                                           !   After Sea Surface Height   ! 
    9797      !                                           !------------------------------! 
    98 !$OMP PARALLEL WORKSHARE 
     98!$OMP PARALLEL 
     99!$OMP WORKSHARE 
    99100      zhdiv(:,:) = 0._wp 
    100 !$OMP END PARALLEL WORKSHARE 
     101!$OMP END WORKSHARE 
    101102      DO jk = 1, jpkm1                                 ! Horizontal divergence of barotropic transports 
    102 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     103!$OMP DO schedule(static) private(jj, ji) 
    103104            DO jj = 1, jpj 
    104105               DO ji = 1, jpi   ! vector opt. 
     
    107108            END DO            
    108109      END DO 
     110!$OMP END PARALLEL 
    109111      !                                                ! Sea surface elevation time stepping 
    110112      ! In time-split case we need a first guess of the ssh after (using the baroclinic timestep) in order to 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/LBC/lbclnk.F90

    r6493 r7037  
    163163      !!---------------------------------------------------------------------- 
    164164      ! 
     165!$OMP PARALLEL DO schedule(static) private(jk, ztab)  
    165166      DO jk = 1, jpk 
    166167         ztab = pt3d(2,2,jk) 
     
    189190      ! 
    190191      ztab = pt2d(2,2) 
     192!$OMP PARALLEL WORKSHARE 
    191193      pt2d(:,:) = ztab 
     194!$OMP END PARALLEL WORKSHARE 
    192195      ! 
    193196   END SUBROUTINE lbc_lnk_2d 
     
    313316         ! 
    314317         CASE ( 1 , 4 , 6 )                       !**  cyclic east-west 
     318!$OMP PARALLEL WORKSHARE 
    315319            pt3d( 1 ,:,:) = pt3d(jpim1,:,:)            ! all points 
    316320            pt3d(jpi,:,:) = pt3d(  2  ,:,:) 
     321!$OMP END PARALLEL WORKSHARE 
    317322            ! 
    318323         CASE DEFAULT                             !**  East closed  --  West closed 
    319324            SELECT CASE ( cd_type ) 
    320325            CASE ( 'T' , 'U' , 'V' , 'W' )             ! T-, U-, V-, W-points 
     326!$OMP PARALLEL WORKSHARE 
    321327               pt3d( 1 ,:,:) = zland 
    322328               pt3d(jpi,:,:) = zland 
     329!$OMP END PARALLEL WORKSHARE 
    323330            CASE ( 'F' )                               ! F-point 
     331!$OMP PARALLEL WORKSHARE 
    324332               pt3d(jpi,:,:) = zland 
     333!$OMP END PARALLEL WORKSHARE 
    325334            END SELECT 
    326335            ! 
     
    333342            SELECT CASE ( cd_type ) 
    334343            CASE ( 'T' , 'U' , 'W' )                   ! T-, U-, W-points 
     344!$OMP PARALLEL WORKSHARE 
    335345               pt3d(:, 1 ,:) = pt3d(:,3,:) 
    336346               pt3d(:,jpj,:) = zland 
     347!$OMP END PARALLEL WORKSHARE 
    337348            CASE ( 'V' , 'F' )                         ! V-, F-points 
     349!$OMP PARALLEL WORKSHARE 
    338350               pt3d(:, 1 ,:) = psgn * pt3d(:,2,:) 
    339351               pt3d(:,jpj,:) = zland 
     352!$OMP END PARALLEL WORKSHARE 
    340353            END SELECT 
    341354            ! 
     
    343356            SELECT CASE ( cd_type )                    ! South : closed 
    344357            CASE ( 'T' , 'U' , 'V' , 'W' , 'I' )             ! all points except F-point 
     358!$OMP PARALLEL WORKSHARE 
    345359               pt3d(:, 1 ,:) = zland 
     360!$OMP END PARALLEL WORKSHARE 
    346361            END SELECT 
    347362            !                                          ! North fold 
     
    351366            SELECT CASE ( cd_type ) 
    352367            CASE ( 'T' , 'U' , 'V' , 'W' )             ! T-, U-, V-, W-points 
     368!$OMP PARALLEL WORKSHARE 
    353369               pt3d(:, 1 ,:) = zland 
    354370               pt3d(:,jpj,:) = zland 
     371!$OMP END PARALLEL WORKSHARE 
    355372            CASE ( 'F' )                               ! F-point 
     373!$OMP PARALLEL WORKSHARE 
    356374               pt3d(:,jpj,:) = zland 
     375!$OMP END PARALLEL WORKSHARE 
    357376            END SELECT 
    358377            ! 
     
    589608         ! 
    590609         CASE ( 1 , 4 , 6 )                       !**  cyclic east-west 
     610!$OMP PARALLEL WORKSHARE 
    591611            pt3d(jpim1,:,:) = pt3d(jpim1,:,:) + pt3d( 1 ,:,:) 
    592612            pt3d(  2  ,:,:) = pt3d(  2  ,:,:) + pt3d(jpi,:,:)  
    593613            pt3d( 1 ,:,:) = 0.0_wp            ! all points 
    594614            pt3d(jpi,:,:) = 0.0_wp 
     615!$OMP END PARALLEL WORKSHARE 
    595616            ! 
    596617         CASE DEFAULT                             !**  East closed  --  West closed 
    597618            SELECT CASE ( cd_type ) 
    598619            CASE ( 'T' , 'U' , 'V' , 'W' )             ! T-, U-, V-, W-points 
     620!$OMP PARALLEL WORKSHARE 
    599621               pt3d( 1 ,:,:) = zland 
    600622               pt3d(jpi,:,:) = zland 
     623!$OMP END PARALLEL WORKSHARE 
    601624            CASE ( 'F' )                               ! F-point 
     625!$OMP PARALLEL WORKSHARE 
    602626               pt3d(jpi,:,:) = zland 
     627!$OMP END PARALLEL WORKSHARE 
    603628            END SELECT 
    604629            ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90

    r6748 r7037  
    400400         !                                        !* Cyclic east-west 
    401401         IF( nbondi == 2 .AND. (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) ) THEN 
     402!$OMP PARALLEL WORKSHARE 
    402403            ptab( 1 ,:,:) = ptab(jpim1,:,:) 
    403404            ptab(jpi,:,:) = ptab(  2  ,:,:) 
     405!$OMP END PARALLEL WORKSHARE 
    404406         ELSE                                     !* closed 
    405             IF( .NOT. cd_type == 'F' )   ptab(     1       :jpreci,:,:) = zland    ! south except F-point 
     407            IF( .NOT. cd_type == 'F' ) THEN 
     408!$OMP PARALLEL WORKSHARE 
     409                ptab(     1       :jpreci,:,:) = zland    ! south except F-point 
     410!$OMP END PARALLEL WORKSHARE 
     411            END IF 
     412!$OMP PARALLEL WORKSHARE 
    406413                                         ptab(nlci-jpreci+1:jpi   ,:,:) = zland    ! north 
     414!$OMP END PARALLEL WORKSHARE 
    407415         ENDIF 
    408416         !                                   ! North-South boundaries (always closed) 
    409          IF( .NOT. cd_type == 'F' )   ptab(:,     1       :jprecj,:) = zland       ! south except F-point 
     417         IF( .NOT. cd_type == 'F' ) THEN 
     418!$OMP PARALLEL WORKSHARE 
     419            ptab(:,     1       :jprecj,:) = zland       ! south except F-point 
     420!$OMP END PARALLEL WORKSHARE 
     421         END IF           
     422!$OMP PARALLEL WORKSHARE 
    410423                                      ptab(:,nlcj-jprecj+1:jpj   ,:) = zland       ! north 
     424!$OMP END PARALLEL WORKSHARE 
    411425         ! 
    412426      ENDIF 
     
    419433      CASE ( -1, 0, 1 )                ! all exept 2 (i.e. close case) 
    420434         iihom = nlci-nreci 
    421          DO jl = 1, jpreci 
    422             zt3ew(:,jl,:,1) = ptab(jpreci+jl,:,:) 
    423             zt3we(:,jl,:,1) = ptab(iihom +jl,:,:) 
     435!$OMP PARALLEL DO schedule(static) private(jk, jj, jl) 
     436         DO jk = 1, jpk 
     437            DO jj = 1, jpj 
     438               DO jl = 1, jpreci 
     439                  zt3ew(jj,jl,jk,1) = ptab(jpreci+jl,jj,jk) 
     440                  zt3we(jj,jl,jk,1) = ptab(iihom +jl,jj,jk) 
     441               END DO 
     442            END DO 
    424443         END DO 
    425444      END SELECT 
     
    451470      SELECT CASE ( nbondi ) 
    452471      CASE ( -1 ) 
    453          DO jl = 1, jpreci 
    454             ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    455          END DO 
    456       CASE ( 0 ) 
    457          DO jl = 1, jpreci 
    458             ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
    459             ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    460          END DO 
    461       CASE ( 1 ) 
    462          DO jl = 1, jpreci 
    463             ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
     472!$OMP PARALLEL DO schedule(static) private(jk, jj, jl) 
     473         DO jk = 1, jpk 
     474            DO jl = 1, jpreci 
     475               DO jj = 1, jpj 
     476                  ptab(iihom+jl,jj,jk) = zt3ew(jj,jl,jk,2) 
     477               END DO 
     478            END DO 
     479         END DO 
     480      CASE ( 0 ) 
     481!$OMP PARALLEL DO schedule(static) private(jk, jj, jl) 
     482         DO jk = 1, jpk 
     483            DO jl = 1, jpreci 
     484               DO jj = 1, jpj 
     485                  ptab(jl      ,jj,jk) = zt3we(jj,jl,jk,2) 
     486                  ptab(iihom+jl,jj,jk) = zt3ew(jj,jl,jk,2) 
     487               END DO 
     488            END DO 
     489         END DO 
     490      CASE ( 1 ) 
     491!$OMP PARALLEL DO schedule(static) private(jk, jj, jl) 
     492         DO jk = 1, jpk 
     493            DO jl = 1, jpreci 
     494               DO jj = 1, jpj 
     495                  ptab(jl      ,jj,jk) = zt3we(jj,jl,jk,2) 
     496               END DO 
     497            END DO 
    464498         END DO 
    465499      END SELECT 
     
    471505      IF( nbondj /= 2 ) THEN      ! Read Dirichlet lateral conditions 
    472506         ijhom = nlcj-nrecj 
    473          DO jl = 1, jprecj 
    474             zt3sn(:,jl,:,1) = ptab(:,ijhom +jl,:) 
    475             zt3ns(:,jl,:,1) = ptab(:,jprecj+jl,:) 
     507!$OMP PARALLEL DO schedule(static) private(jk, ji, jl) 
     508         DO jk = 1, jpk 
     509            DO jl = 1, jprecj 
     510               DO ji = 1, jpi 
     511                  zt3sn(ji,jl,jk,1) = ptab(ji,ijhom +jl,jk) 
     512                  zt3ns(ji,jl,jk,1) = ptab(ji,jprecj+jl,jk) 
     513               END DO 
     514            END DO 
    476515         END DO 
    477516      ENDIF 
     
    503542      SELECT CASE ( nbondj ) 
    504543      CASE ( -1 ) 
    505          DO jl = 1, jprecj 
    506             ptab(:,ijhom+jl,:) = zt3ns(:,jl,:,2) 
    507          END DO 
    508       CASE ( 0 ) 
    509          DO jl = 1, jprecj 
    510             ptab(:,jl      ,:) = zt3sn(:,jl,:,2) 
    511             ptab(:,ijhom+jl,:) = zt3ns(:,jl,:,2) 
    512          END DO 
    513       CASE ( 1 ) 
    514          DO jl = 1, jprecj 
    515             ptab(:,jl,:) = zt3sn(:,jl,:,2) 
     544!$OMP PARALLEL DO schedule(static) private(jk, ji, jl) 
     545         DO jk = 1, jpk 
     546            DO jl = 1, jprecj 
     547               DO ji = 1, jpi 
     548                  ptab(ji,ijhom+jl,jk) = zt3ns(ji,jl,jk,2) 
     549               END DO 
     550            END DO 
     551         END DO 
     552      CASE ( 0 ) 
     553!$OMP PARALLEL DO schedule(static) private(jk, ji, jl) 
     554         DO jk = 1, jpk 
     555            DO jl = 1, jprecj 
     556               DO ji = 1, jpi 
     557                  ptab(ji,jl      ,jk) = zt3sn(ji,jl,jk,2) 
     558                  ptab(ji,ijhom+jl,jk) = zt3ns(ji,jl,jk,2) 
     559               END DO 
     560            END DO 
     561         END DO 
     562      CASE ( 1 ) 
     563!$OMP PARALLEL DO schedule(static) private(jk, ji, jl) 
     564         DO jk = 1, jpk 
     565            DO jl = 1, jprecj 
     566               DO ji = 1, jpi 
     567                  ptab(ji,jl,jk) = zt3sn(ji,jl,jk,2) 
     568               END DO 
     569            END DO 
    516570         END DO 
    517571      END SELECT 
     
    902956      CASE ( -1, 0, 1 )                ! all exept 2 (i.e. close case) 
    903957         iihom = nlci-nreci 
    904          DO jl = 1, jpreci 
    905             zt2ew(:,jl,1) = pt2d(jpreci+jl,:) 
    906             zt2we(:,jl,1) = pt2d(iihom +jl,:) 
     958!$OMP PARALLEL DO schedule(static) private(jj,jl) 
     959         DO jj = 1, jpj 
     960            DO jl = 1, jpreci 
     961               zt2ew(jj,jl,1) = pt2d(jpreci+jl,jj) 
     962               zt2we(jj,jl,1) = pt2d(iihom +jl,jj) 
     963            END DO 
    907964         END DO 
    908965      END SELECT 
     
    934991      SELECT CASE ( nbondi ) 
    935992      CASE ( -1 ) 
     993!$OMP PARALLEL DO schedule(static) private(jj,jl) 
    936994         DO jl = 1, jpreci 
    937             pt2d(iihom+jl,:) = zt2ew(:,jl,2) 
    938          END DO 
    939       CASE ( 0 ) 
     995            DO jj = 1, jpj 
     996               pt2d(iihom+jl,jj) = zt2ew(jj,jl,2) 
     997            END DO 
     998         END DO 
     999      CASE ( 0 ) 
     1000!$OMP PARALLEL DO schedule(static) private(jj,jl) 
    9401001         DO jl = 1, jpreci 
    941             pt2d(jl      ,:) = zt2we(:,jl,2) 
    942             pt2d(iihom+jl,:) = zt2ew(:,jl,2) 
    943          END DO 
    944       CASE ( 1 ) 
     1002            DO jj = 1, jpj 
     1003               pt2d(jl      ,jj) = zt2we(jj,jl,2) 
     1004               pt2d(iihom+jl,jj) = zt2ew(jj,jl,2) 
     1005            END DO 
     1006         END DO 
     1007      CASE ( 1 ) 
     1008!$OMP PARALLEL DO schedule(static) private(jj,jl) 
    9451009         DO jl = 1, jpreci 
    946             pt2d(jl      ,:) = zt2we(:,jl,2) 
     1010            DO jj = 1, jpj 
     1011               pt2d(jl      ,jj) = zt2we(jj,jl,2) 
     1012            END DO 
    9471013         END DO 
    9481014      END SELECT 
     
    9551021      IF( nbondj /= 2 ) THEN      ! Read Dirichlet lateral conditions 
    9561022         ijhom = nlcj-nrecj 
     1023!$OMP PARALLEL DO schedule(static) private(ji,jl) 
    9571024         DO jl = 1, jprecj 
    958             zt2sn(:,jl,1) = pt2d(:,ijhom +jl) 
    959             zt2ns(:,jl,1) = pt2d(:,jprecj+jl) 
     1025            DO ji = 1, jpi 
     1026               zt2sn(ji,jl,1) = pt2d(ji,ijhom +jl) 
     1027               zt2ns(ji,jl,1) = pt2d(ji,jprecj+jl) 
     1028            END DO 
    9601029         END DO 
    9611030      ENDIF 
     
    9871056      SELECT CASE ( nbondj ) 
    9881057      CASE ( -1 ) 
     1058!$OMP PARALLEL DO schedule(static) private(ji,jl) 
    9891059         DO jl = 1, jprecj 
    990             pt2d(:,ijhom+jl) = zt2ns(:,jl,2) 
    991          END DO 
    992       CASE ( 0 ) 
     1060            DO ji = 1, jpi 
     1061               pt2d(ji,ijhom+jl) = zt2ns(ji,jl,2) 
     1062            END DO 
     1063         END DO 
     1064      CASE ( 0 ) 
     1065!$OMP PARALLEL DO schedule(static) private(ji,jl) 
    9931066         DO jl = 1, jprecj 
    994             pt2d(:,jl      ) = zt2sn(:,jl,2) 
    995             pt2d(:,ijhom+jl) = zt2ns(:,jl,2) 
    996          END DO 
    997       CASE ( 1 ) 
     1067            DO ji = 1, jpi 
     1068               pt2d(ji,jl      ) = zt2sn(ji,jl,2) 
     1069               pt2d(ji,ijhom+jl) = zt2ns(ji,jl,2) 
     1070            END DO 
     1071         END DO 
     1072      CASE ( 1 ) 
     1073!$OMP PARALLEL DO schedule(static) private(ji,jl) 
    9981074         DO jl = 1, jprecj 
    999             pt2d(:,jl      ) = zt2sn(:,jl,2) 
     1075            DO ji = 1, jpi 
     1076               pt2d(ji,jl      ) = zt2sn(ji,jl,2) 
     1077            END DO 
    10001078         END DO 
    10011079      END SELECT 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90

    r6748 r7037  
    155155      ! The last line of blocks (west) will have fewer points 
    156156 
    157 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    158157      DO jj = 1, jpnj 
    159158         DO ji=1, jpni-1 
     
    165164#else 
    166165 
    167 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    168166      DO jj = 1, jpnj 
    169167         DO ji = 1, iresti 
     
    176174       
    177175#endif 
    178 !$OMP PARALLEL WORKSHARE 
    179176      nfilcit(:,:) = ilcit(:,:) 
    180 !$OMP END PARALLEL WORKSHARE 
    181177      IF( irestj == 0 )   irestj = jpnj 
    182178 
     
    206202      ! ------------------------------- 
    207203       
    208 !$OMP PARALLEL WORKSHARE 
    209204      iimppt(:,:) = 1 
    210205      ijmppt(:,:) = 1 
    211 !$OMP END PARALLEL WORKSHARE 
    212206       
    213207      IF( jpni > 1 ) THEN 
    214 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    215208         DO jj = 1, jpnj 
    216209            DO ji = 2, jpni 
     
    219212         END DO 
    220213      ENDIF 
    221 !$OMP PARALLEL WORKSHARE 
    222214      nfiimpp(:,:)=iimppt(:,:) 
    223 !$OMP END PARALLEL WORKSHARE 
    224215 
    225216      IF( jpnj > 1 ) THEN 
    226 !$OMP PARALLEL DO schedule(static) private(jj,ji) 
    227217         DO jj = 2, jpnj 
    228218            DO ji = 1, jpni 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/LDF/ldfc1d_c2d.F90

    r6140 r7037  
    141141            IF(lwp) WRITE(numout,*) '              momentum laplacian coeffcients = rn_aht0/e_equ * max(e1,e2)' 
    142142            za00 = pah0 / zd_max 
     143!$OMP PARALLEL DO schedule(static) private(jj,ji,zemax1,zemax2) 
    143144            DO jj = 1, jpj  
    144145               DO ji = 1, jpi  
     
    152153            IF(lwp) WRITE(numout,*) '              momentum bilaplacian coeffcients = rn_bht0/e_equ * max(e1,e2)**3' 
    153154            za00 = pah0 / ( zd_max * zd_max * zd_max ) 
     155!$OMP PARALLEL DO schedule(static) private(jj,ji,zemax1,zemax2) 
    154156            DO jj = 1, jpj 
    155157               DO ji = 1, jpi 
     
    164166         ENDIF 
    165167         !                                !  deeper values  (LAP and BLP cases) 
     168!$OMP PARALLEL DO schedule(static) private(jk) 
    166169         DO jk = 2, jpk 
    167170            pah1(:,:,jk) = pah1(:,:,1) * tmask(:,:,jk)  
     
    173176            IF(lwp) WRITE(numout,*) '              tracer laplacian coeffcients = rn_aht0/e_equ * max(e1,e2)' 
    174177            za00 = pah0 / zd_max 
     178!$OMP PARALLEL DO schedule(static) private(jj,ji,zemax1,zemax2) 
    175179            DO jj = 1, jpj  
    176180               DO ji = 1, jpi  
     
    184188            IF(lwp) WRITE(numout,*) '              tracer bilaplacian coeffcients = rn_bht0/e_equ * max(e1,e2)**3' 
    185189            za00 = pah0 / ( zd_max * zd_max * zd_max ) 
     190!$OMP PARALLEL DO schedule(static) private(jj,ji,zemax1,zemax2) 
    186191            DO jj = 1, jpj 
    187192               DO ji = 1, jpi 
     
    196201         ENDIF 
    197202         !                                !  deeper values  (LAP and BLP cases) 
     203!$OMP PARALLEL DO schedule(static) private(jk) 
    198204         DO jk = 2, jpk 
    199205            pah1(:,:,jk) = pah1(:,:,1) * umask(:,:,jk)  
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90

    r6748 r7037  
    135135      z1_slpmax = 1._wp / rn_slpmax 
    136136      ! 
    137  
    138 !$OMP PARALLEL WORKSHARE 
     137!$OMP PARALLEL 
     138!$OMP WORKSHARE 
     139 
    139140      zww(:,:,:) = 0._wp 
    140141      zwz(:,:,:) = 0._wp 
    141 !$OMP END PARALLEL WORKSHARE 
    142       ! 
    143 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     142!$OMP END WORKSHARE NOWAIT 
     143      ! 
     144!$OMP DO schedule(static) private(jk, jj, ji) 
    144145      DO jk = 1, jpk             !==   i- & j-gradient of density   ==! 
    145146         DO jj = 1, jpjm1 
     
    150151         END DO 
    151152      END DO 
     153!$OMP END DO NOWAIT 
     154!$OMP END PARALLEL 
    152155      IF( ln_zps ) THEN                           ! partial steps correction at the bottom ocean level 
    153156!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     
    169172      ENDIF 
    170173      ! 
     174!$OMP PARALLEL 
     175!$OMP WORKSHARE 
    171176      zdzr(:,:,1) = 0._wp        !==   Local vertical density gradient at T-point   == !   (evaluated from N^2) 
    172 !$OMP PARALLEL DO schedule(static) private(jk) 
     177!$OMP END WORKSHARE 
     178!$OMP DO schedule(static) private(jk) 
    173179      DO jk = 2, jpkm1 
    174180         !                                ! zdzr = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 
     
    180186            &                 * ( pn2(:,:,jk) + pn2(:,:,jk+1) ) * ( 1._wp - 0.5_wp * tmask(:,:,jk+1) ) 
    181187      END DO 
     188!$OMP END DO NOWAIT 
     189!$OMP END PARALLEL 
    182190      ! 
    183191      !                          !==   Slopes just below the mixed layer   ==! 
     
    248256      ! 
    249257      !                                            !* horizontal Shapiro filter 
    250 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     258!$OMP PARALLEL  
     259!$OMP DO schedule(static) private(jk, jj, ji) 
    251260      DO jk = 2, jpkm1 
    252261         DO jj = 2, jpjm1, MAX(1, jpj-3)                        ! rows jj=2 and =jpjm1 only 
     
    288297         END DO 
    289298      END DO 
     299!$OMP END DO 
    290300 
    291301 
     
    293303      ! ===========================      | wslpj = mij( d/dj( prd ) / d/dz( prd ) 
    294304      ! 
    295 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbw, zfk, zck, zbi, zbj, zai, zaj, zci, zcj) 
     305!$OMP DO schedule(static) private(jk, jj, ji, zbw, zfk, zck, zbi, zbj, zai, zaj, zci, zcj) 
    296306      DO jk = 2, jpkm1 
    297307         DO jj = 2, jpjm1 
     
    329339         END DO 
    330340      END DO 
     341!$OMP END DO NOWAIT 
     342!$OMP END PARALLEL 
    331343      CALL lbc_lnk( zwz, 'T', -1. )   ;    CALL lbc_lnk( zww, 'T', -1. )      ! lateral boundary conditions 
    332344      ! 
     
    441453         ! 
    442454         ip = jl   ;   jp = jl                ! guaranteed nonzero gradients ( absolute value larger than repsln) 
    443 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zdit,zdis,zdjt,zdjs,zdxrho_raw,zdyrho_raw) 
    444455         DO jk = 1, jpkm1                     ! done each pair of triad 
    445456            DO jj = 1, jpjm1                  ! NB: not masked ==>  a minimum value is set 
     
    458469         ! 
    459470         IF( ln_zps .AND. l_grad_zps ) THEN     ! partial steps: correction of i- & j-grad on bottom 
    460 !$OMP PARALLEL DO schedule(static) private(jj,ji,iku,zdit,zdis,zdxrho_raw,zdyrho_raw) 
    461471            DO jj = 1, jpjm1 
    462472               DO ji = 1, jpim1 
     
    690700      ! 
    691701      !                                            !==   surface mixed layer mask   ! 
    692 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ik) 
     702!$OMP PARALLEL 
     703!$OMP DO schedule(static) private(jk, jj, ji, ik) 
    693704      DO jk = 1, jpk                               ! =1 inside the mixed layer, =0 otherwise 
    694705         DO jj = 1, jpj 
     
    701712         END DO 
    702713      END DO 
     714!$OMP END DO NOWAIT 
    703715 
    704716 
     
    713725      !----------------------------------------------------------------------- 
    714726      ! 
    715 !$OMP PARALLEL DO schedule(static) private(jj, ji, iku, ikv, zbu, zbv, zau, zav, ik, ikm1, zbw, zci, zcj, zai, zaj, zbi, zbj)  
     727!$OMP DO schedule(static) private(jj, ji, iku, ikv, zbu, zbv, zau, zav, ik, ikm1, zbw, zci, zcj, zai, zaj, zbi, zbj)  
    716728      DO jj = 2, jpjm1 
    717729         DO ji = 2, jpim1 
     
    758770         END DO 
    759771      END DO 
     772!$OMP END DO NOWAIT 
     773!$OMP END PARALLEL 
    760774      !!gm this lbc_lnk should be useless.... 
    761775      CALL lbc_lnk( uslpml , 'U', -1. )   ;   CALL lbc_lnk( vslpml , 'V', -1. )   ! lateral boundary cond. (sign change) 
     
    808822         ! ------------------------------ 
    809823 
    810 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji)    
     824!$OMP PARALLEL 
     825!$OMP DO schedule(static) private(jk, jj, ji)    
    811826        DO jk = 1, jpk 
    812827           DO jj = 1, jpj 
     
    819834           END DO 
    820835        END DO 
    821 !$OMP PARALLEL DO schedule(static) private(jj, ji)        
     836!$OMP END DO NOWAIT 
     837!$OMP DO schedule(static) private(jj, ji)        
    822838        DO jj = 1, jpj 
    823839            DO ji = 1, jpi 
     
    828844             END DO 
    829845        END DO 
     846!$OMP END DO NOWAIT 
     847!$OMP END PARALLEL 
    830848          
    831849         !!gm I no longer understand this..... 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra.F90

    r6748 r7037  
    276276         ! 
    277277         IF( ln_traldf_blp .AND. .NOT. l_ldftra_time ) THEN 
    278 !$OMP PARALLEL WORKSHARE 
    279278            ahtu(:,:,:) = SQRT( ahtu(:,:,:) ) 
    280279            ahtv(:,:,:) = SQRT( ahtv(:,:,:) ) 
    281 !$OMP END PARALLEL WORKSHARE 
    282280         ENDIF 
    283281         ! 
     
    335333         z1_f20   = 1._wp / (  2._wp * omega * SIN( rad * 20._wp )  )      ! 1 / ff(20 degrees)    
    336334         zaht_min = 0.2_wp * rn_aht_0                                      ! minimum value for aht 
     335!$OMP PARALLEL 
     336!$OMP DO schedule(static) private(jj,ji,zaht) 
    337337         DO jj = 1, jpj 
    338338            DO ji = 1, jpi 
     
    342342            END DO 
    343343         END DO 
     344!$OMP DO schedule(static) private(jk) 
    344345         DO jk = 2, jpkm1                             ! deeper value = surface value 
    345346            ahtu(:,:,jk) = ahtu(:,:,1) * umask(:,:,jk) 
    346347            ahtv(:,:,jk) = ahtv(:,:,1) * vmask(:,:,jk) 
    347348         END DO 
     349!$OMP END DO NOWAIT 
     350!$OMP END PARALLEL 
    348351         ! 
    349352      CASE(  31  )       !==  time varying 3D field  ==!   = F( local velocity ) 
    350353         IF( ln_traldf_lap     ) THEN          !   laplacian operator |u| e /12 
     354!$OMP PARALLEL DO schedule(static) private(jk) 
    351355            DO jk = 1, jpkm1 
    352356               ahtu(:,:,jk) = ABS( ub(:,:,jk) ) * e1u(:,:) * r1_12 
     
    354358            END DO 
    355359         ELSEIF( ln_traldf_blp ) THEN      ! bilaplacian operator      sqrt( |u| e^3 /12 ) = sqrt( |u| e /12 ) * e 
     360!$OMP PARALLEL DO schedule(static) private(jk) 
    356361            DO jk = 1, jpkm1 
    357362               ahtu(:,:,jk) = SQRT(  ABS( ub(:,:,jk) ) * e1u(:,:) * r1_12  ) * e1u(:,:) 
     
    516521      CALL wrk_alloc( jpi,jpj,   zn, zah, zhw, zross, zaeiw ) 
    517522      !       
     523!$OMP PARALLEL WORKSHARE 
    518524      zn   (:,:) = 0._wp      ! Local initialization 
    519525      zhw  (:,:) = 5._wp 
    520526      zah  (:,:) = 0._wp 
    521527      zross(:,:) = 0._wp 
     528!$OMP END PARALLEL WORKSHARE 
    522529      !                       ! Compute lateral diffusive coefficient at T-point 
    523530      IF( ln_traldf_triad ) THEN 
    524531         DO jk = 1, jpk 
     532!$OMP PARALLEL DO schedule(static) private(jj,ji,zn2,ze3w) 
    525533            DO jj = 2, jpjm1 
    526534               DO ji = 2, jpim1 
     
    541549      ELSE 
    542550         DO jk = 1, jpk 
     551!$OMP PARALLEL DO schedule(static) private(jj,ji,zn2,ze3w) 
    543552            DO jj = 2, jpjm1 
    544553               DO ji = 2, jpim1 
     
    560569      END IF 
    561570 
     571!$OMP PARALLEL  
     572!$OMP DO schedule(static) private(jj,ji,zfw) 
    562573      DO jj = 2, jpjm1 
    563574         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    581592      !                                         !==  Bound on eiv coeff.  ==! 
    582593      z1_f20 = 1._wp / (  2._wp * omega * sin( rad * 20._wp )  ) 
     594!$OMP DO schedule(static) private(jj,ji,zzaei) 
    583595      DO jj = 2, jpjm1 
    584596         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    587599         END DO 
    588600      END DO 
     601!$OMP END DO NOWAIT 
     602!$OMP END PARALLEL 
    589603      CALL lbc_lnk( zaeiw(:,:), 'W', 1. )       ! lateral boundary condition 
    590604      !                
     605!$OMP PARALLEL DO schedule(static) private(jj,ji,zfw) 
    591606      DO jj = 2, jpjm1                          !== aei at u- and v-points  ==! 
    592607         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    597612      CALL lbc_lnk( paeiu(:,:,1), 'U', 1. )   ;   CALL lbc_lnk( paeiv(:,:,1), 'V', 1. )      ! lateral boundary condition 
    598613 
     614!$OMP PARALLEL DO schedule(static) private(jk) 
    599615      DO jk = 2, jpkm1                          !==  deeper values equal the surface one  ==! 
    600616         paeiu(:,:,jk) = paeiu(:,:,1) * umask(:,:,jk) 
     
    651667 
    652668       
     669!$OMP PARALLEL 
     670!$OMP WORKSHARE       
    653671      zpsi_uw(:,:, 1 ) = 0._wp   ;   zpsi_vw(:,:, 1 ) = 0._wp 
    654672      zpsi_uw(:,:,jpk) = 0._wp   ;   zpsi_vw(:,:,jpk) = 0._wp 
    655       ! 
     673!$OMP END WORKSHARE NOWAIT 
     674      ! 
     675!$OMP DO schedule(static) private(jk,jj,ji) 
    656676      DO jk = 2, jpkm1 
    657677         DO jj = 1, jpjm1 
     
    665685      END DO 
    666686      ! 
     687!$OMP DO schedule(static) private(jk,jj,ji) 
    667688      DO jk = 1, jpkm1 
    668689         DO jj = 1, jpjm1 
     
    673694         END DO 
    674695      END DO 
     696!$OMP END DO NOWAIT 
     697!$OMP DO schedule(static) private(jk,jj,ji) 
    675698      DO jk = 1, jpkm1 
    676699         DO jj = 2, jpjm1 
     
    681704         END DO 
    682705      END DO 
     706!$OMP END DO NOWAIT 
     707!$OMP END PARALLEL 
    683708      ! 
    684709      !                              ! diagnose the eddy induced velocity and associated heat transport 
     
    722747      CALL wrk_alloc( jpi,jpj,jpk,   zw3d ) 
    723748      ! 
     749!$OMP PARALLEL 
     750!$OMP WORKSHARE 
    724751      zw3d(:,:,jpk) = 0._wp                                    ! bottom value always 0 
    725       ! 
     752!$OMP END WORKSHARE NOWAIT 
     753      ! 
     754!$OMP DO schedule(static) private(jk) 
    726755      DO jk = 1, jpkm1                                         ! e2u e3u u_eiv = -dk[psi_uw] 
    727756         zw3d(:,:,jk) = ( psi_uw(:,:,jk+1) - psi_uw(:,:,jk) ) / ( e2u(:,:) * e3u_n(:,:,jk) ) 
    728757      END DO 
     758!$OMP END DO NOWAIT 
     759!$OMP END PARALLEL 
    729760      CALL iom_put( "uoce_eiv", zw3d ) 
    730761      ! 
     762!$OMP PARALLEL DO schedule(static) private(jk) 
    731763      DO jk = 1, jpkm1                                         ! e1v e3v v_eiv = -dk[psi_vw] 
    732764         zw3d(:,:,jk) = ( psi_vw(:,:,jk+1) - psi_vw(:,:,jk) ) / ( e1v(:,:) * e3v_n(:,:,jk) ) 
     
    734766      CALL iom_put( "voce_eiv", zw3d ) 
    735767      ! 
     768!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    736769      DO jk = 1, jpkm1                                         ! e1 e2 w_eiv = dk[psix] + dk[psix] 
    737770         DO jj = 2, jpjm1 
     
    752785         ! 
    753786         zztmp = 0.5_wp * rau0 * rcp  
    754          zw2d(:,:) = 0._wp  
     787!$OMP PARALLEL 
     788!$OMP WORKSHARE 
     789         zw2d(:,:) = 0._wp 
     790!$OMP END WORKSHARE 
    755791         DO jk = 1, jpkm1 
     792!$OMP DO schedule(static) private(jj,ji) 
    756793            DO jj = 2, jpjm1 
    757794               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    760797               END DO 
    761798            END DO 
    762          END DO 
     799!$OMP END DO NOWAIT 
     800         END DO 
     801!$OMP END PARALLEL 
    763802         CALL lbc_lnk( zw2d, 'U', -1. ) 
    764803         CALL iom_put( "ueiv_heattr", zw2d )                  ! heat transport in i-direction 
     804!$OMP PARALLEL 
     805!$OMP WORKSHARE 
    765806         zw2d(:,:) = 0._wp  
     807!$OMP END WORKSHARE 
    766808         DO jk = 1, jpkm1 
     809!$OMP DO schedule(static) private(jj,ji) 
    767810            DO jj = 2, jpjm1 
    768811               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    771814               END DO 
    772815            END DO 
    773          END DO 
     816!$OMP END DO NOWAIT 
     817         END DO 
     818!$OMP END PARALLEL 
    774819         CALL lbc_lnk( zw2d, 'V', -1. ) 
    775820         CALL iom_put( "veiv_heattr", zw2d )                  !  heat transport in i-direction 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90

    r6416 r7037  
    126126         ELSE WHERE                                       ;  zalb_it = 0.1    + 3.6    * ph_ice 
    127127         END WHERE 
    128       
     128!$OMP PARALLEL 
     129!$OMP DO schedule(static) private(jl, jj, ji,zswitch,zalb_sf,zalb_sm,zalb_st) 
    129130         DO jl = 1, ijpl 
    130131            DO jj = 1, jpj 
     
    156157         END DO 
    157158 
     159!$OMP WORKSHARE  
    158160         pa_ice_os(:,:,:) = pa_ice_cs(:,:,:) + rcloud       ! Oberhuber correction for overcast sky 
     161!$OMP END WORKSHARE NOWAIT 
     162!$OMP END PARALLEL  
    159163 
    160164      !------------------------------------------ 
     
    193197         z1_c2 = 1. / 0.03 
    194198         !  Computation of the snow/ice albedo 
     199!$OMP PARALLEL DO schedule(static) private(jl, jj, ji,zswitch,zalb_sf,zalb_sm,zalb_st)      
    195200         DO jl = 1, ijpl 
    196201            DO jj = 1, jpj 
     
    233238      ! 
    234239      zcoef = 0.05 / ( 1.1 * rmue**1.4 + 0.15 )   ! Parameterization of Briegled and Ramanathan, 1982 
     240!$OMP PARALLEL WORKSHARE  
    235241      pa_oce_cs(:,:) = zcoef  
    236242      pa_oce_os(:,:) = 0.06                       ! Parameterization of Kondratyev, 1969 and Payne, 1972 
     243!$OMP END PARALLEL WORKSHARE  
    237244      ! 
    238245   END SUBROUTINE albedo_oce 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC/geo2ocean.F90

    r6140 r7037  
    157157      ! (computation done on the north stereographic polar plane) 
    158158      ! 
     159!$OMP PARALLEL 
     160!$OMP DO schedule(static) private(jj,ji,zlam,zphi,zxnpt,zynpt,znnpt,zxnpu,zynpu,znnpu,zxnpv,zynpv,znnpv,zxnpf,zynpf,znnpf,zlan,zphh,zxvvt,zyvvt,znvvt,zxffu,zyffu,znffu,zxffv,zyffv,znffv,zxuuf,zyuuf,znuuf) 
    159161      DO jj = 2, jpjm1 
    160162         DO ji = fs_2, jpi   ! vector opt. 
     
    248250      ! =============== ! 
    249251 
     252!$OMP DO schedule(static) private(jj,ji) 
    250253      DO jj = 2, jpjm1 
    251254         DO ji = fs_2, jpi   ! vector opt. 
     
    268271         END DO 
    269272      END DO 
     273!$OMP END DO NOWAIT 
     274!$OMP END PARALLEL 
    270275 
    271276      ! =========================== ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC/sbcana.F90

    r6748 r7037  
    269269      ztau_sais = 0.015 
    270270      ztaun = ztau - ztau_sais * COS( (ztime - ztimemax) / (ztimemin - ztimemax) * rpi ) 
    271 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     271      ! module of wind stress and wind speed at T-point 
     272      zcoef = 1. / ( zrhoa * zcdrag )  
     273!$OMP PARALLEL 
     274!$OMP DO schedule(static) private(jj, ji) 
    272275      DO jj = 1, jpj 
    273276         DO ji = 1, jpi 
     
    279282      END DO 
    280283 
    281       ! module of wind stress and wind speed at T-point 
    282       zcoef = 1. / ( zrhoa * zcdrag )  
    283 !$OMP PARALLEL DO schedule(static) private(jj, ji, ztx, zty, zmod) 
     284!$OMP DO schedule(static) private(jj, ji, ztx, zty, zmod) 
    284285      DO jj = 2, jpjm1 
    285286         DO ji = fs_2, fs_jpim1   ! vect. opt. 
     
    291292         END DO 
    292293      END DO 
     294!$OMP END DO NOWAIT 
     295!$OMP END PARALLEL 
    293296      CALL lbc_lnk( taum(:,:), 'T', 1. )   ;   CALL lbc_lnk( wndm(:,:), 'T', 1. ) 
    294297 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r6416 r7037  
    266266      ! local scalars ( place there for vector optimisation purposes) 
    267267      zcoef_qsatw = 0.98 * 640380. / rhoa 
    268        
     268 
     269!$OMP PARALLEL WORKSHARE       
    269270      zst(:,:) = pst(:,:) + rt0      ! convert SST from Celcius to Kelvin (and set minimum value far above 0 K) 
    270271 
     
    276277      zwnd_i(:,:) = 0.e0   
    277278      zwnd_j(:,:) = 0.e0 
     279!$OMP END PARALLEL WORKSHARE 
    278280#if defined key_cyclone 
    279281      CALL wnd_cyc( kt, zwnd_i, zwnd_j )    ! add analytical tropical cyclone (Vincent et al. JGR 2012) 
     282!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    280283      DO jj = 2, jpjm1 
    281284         DO ji = fs_2, fs_jpim1   ! vect. opt. 
     
    285288      END DO 
    286289#endif 
     290!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    287291      DO jj = 2, jpjm1 
    288292         DO ji = fs_2, fs_jpim1   ! vect. opt. 
     
    294298      CALL lbc_lnk( zwnd_j(:,:) , 'T', -1. ) 
    295299      ! ... scalar wind ( = | U10m - U_oce | ) at T-point (masked) 
    296       wndm(:,:) = SQRT(  zwnd_i(:,:) * zwnd_i(:,:)   & 
    297          &             + zwnd_j(:,:) * zwnd_j(:,:)  ) * tmask(:,:,1) 
    298  
     300!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     301      DO jj = 1, jpj 
     302         DO ji = 1, jpi 
     303            wndm(ji,jj) = SQRT(  zwnd_i(ji,jj) * zwnd_i(ji,jj)   & 
     304         &             + zwnd_j(ji,jj) * zwnd_j(ji,jj)  ) * tmask(ji,jj,1) 
     305 
     306         END DO 
     307      END DO 
    299308      ! ----------------------------------------------------------------------------- ! 
    300309      !      I   Radiative FLUXES                                                     ! 
     
    307316      ENDIF 
    308317 
    309       zqlw(:,:) = (  sf(jp_qlw)%fnow(:,:,1) - Stef * zst(:,:)*zst(:,:)*zst(:,:)*zst(:,:)  ) * tmask(:,:,1)   ! Long  Wave 
     318!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     319      DO jj = 1, jpj 
     320         DO ji = 1, jpi 
     321      zqlw(ji,jj) = (  sf(jp_qlw)%fnow(ji,jj,1) - Stef * zst(ji,jj)*zst(ji,jj)*zst(ji,jj)*zst(ji,jj)  ) * tmask(ji,jj,1)   ! Long  Wave 
    310322      ! ----------------------------------------------------------------------------- ! 
    311323      !     II    Turbulent FLUXES                                                    ! 
     
    313325 
    314326      ! ... specific humidity at SST and IST 
    315       zqsatw(:,:) = zcoef_qsatw * EXP( -5107.4 / zst(:,:) ) 
    316  
     327      zqsatw(ji,jj) = zcoef_qsatw * EXP( -5107.4 / zst(ji,jj) ) 
     328 
     329         END DO 
     330      END DO 
    317331      ! ... NCAR Bulk formulae, computation of Cd, Ch, Ce at T-point : 
    318332      CALL turb_core_2z( rn_zqt, rn_zu, zst, sf(jp_tair)%fnow, zqsatw, sf(jp_humi)%fnow, wndm,   & 
     
    320334     
    321335      ! ... tau module, i and j component 
     336!$OMP PARALLEL DO schedule(static) private(jj, ji,zztmp) 
    322337      DO jj = 1, jpj 
    323338         DO ji = 1, jpi 
     
    338353      !     Note the use of 0.5*(2-umask) in order to unmask the stress along coastlines 
    339354      !     Note the use of MAX(tmask(i,j),tmask(i+1,j) is to mask tau over ice shelves 
     355!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    340356      DO jj = 1, jpjm1 
    341357         DO ji = 1, fs_jpim1 
     
    352368      !  Turbulent fluxes over ocean 
    353369      ! ----------------------------- 
     370!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     371      DO jj = 1, jpj 
     372         DO ji = 1, jpi 
    354373      IF( ABS( rn_zu - rn_zqt) < 0.01_wp ) THEN 
    355374         !! q_air and t_air are (or "are almost") given at 10m (wind reference height) 
    356          zevap(:,:) = rn_efac*MAX( 0._wp,     rhoa*Ce(:,:)*( zqsatw(:,:) - sf(jp_humi)%fnow(:,:,1) )*wndm(:,:) ) ! Evaporation 
    357          zqsb (:,:) =                     cpa*rhoa*Ch(:,:)*( zst   (:,:) - sf(jp_tair)%fnow(:,:,1) )*wndm(:,:)   ! Sensible Heat 
     375         zevap(ji,jj) = rn_efac*MAX( 0._wp,     rhoa*Ce(ji,jj)*( zqsatw(ji,jj) - sf(jp_humi)%fnow(ji,jj,1) )*wndm(ji,jj) ) ! Evaporation 
     376         zqsb (ji,jj) =                     cpa*rhoa*Ch(ji,jj)*( zst   (ji,jj) - sf(jp_tair)%fnow(ji,jj,1) )*wndm(ji,jj)   ! Sensible Heat 
    358377      ELSE 
    359378         !! q_air and t_air are not given at 10m (wind reference height) 
    360379         ! Values of temp. and hum. adjusted to height of wind during bulk algorithm iteration must be used!!! 
    361          zevap(:,:) = rn_efac*MAX( 0._wp,     rhoa*Ce(:,:)*( zqsatw(:,:) - zq_zu(:,:) )*wndm(:,:) )   ! Evaporation 
    362          zqsb (:,:) =                     cpa*rhoa*Ch(:,:)*( zst   (:,:) - zt_zu(:,:) )*wndm(:,:)     ! Sensible Heat 
    363       ENDIF 
    364       zqla (:,:) = Lv * zevap(:,:)                                                              ! Latent Heat 
    365  
     380         zevap(ji,jj) = rn_efac*MAX( 0._wp,     rhoa*Ce(ji,jj)*( zqsatw(ji,jj) - zq_zu(ji,jj) )*wndm(ji,jj) )   ! Evaporation 
     381         zqsb (ji,jj) =                     cpa*rhoa*Ch(ji,jj)*( zst   (ji,jj) - zt_zu(ji,jj) )*wndm(ji,jj)     ! Sensible Heat 
     382      ENDIF 
     383      zqla (ji,jj) = Lv * zevap(ji,jj)                                                              ! Latent Heat 
     384 
     385         END DO 
     386      END DO 
    366387      IF(ln_ctl) THEN 
    367388         CALL prt_ctl( tab2d_1=zqla  , clinfo1=' blk_oce_core: zqla   : ', tab2d_2=Ce , clinfo2=' Ce  : ' ) 
     
    379400      ! ----------------------------------------------------------------------------- ! 
    380401      ! 
    381       emp (:,:) = (  zevap(:,:)                                          &   ! mass flux (evap. - precip.) 
    382          &         - sf(jp_prec)%fnow(:,:,1) * rn_pfac  ) * tmask(:,:,1) 
    383       ! 
    384       qns(:,:) = zqlw(:,:) - zqsb(:,:) - zqla(:,:)                                &   ! Downward Non Solar  
    385          &     - sf(jp_snow)%fnow(:,:,1) * rn_pfac * lfus                         &   ! remove latent melting heat for solid precip 
    386          &     - zevap(:,:) * pst(:,:) * rcp                                      &   ! remove evap heat content at SST 
    387          &     + ( sf(jp_prec)%fnow(:,:,1) - sf(jp_snow)%fnow(:,:,1) ) * rn_pfac  &   ! add liquid precip heat content at Tair 
    388          &     * ( sf(jp_tair)%fnow(:,:,1) - rt0 ) * rcp                          & 
    389          &     + sf(jp_snow)%fnow(:,:,1) * rn_pfac                                &   ! add solid  precip heat content at min(Tair,Tsnow) 
    390          &     * ( MIN( sf(jp_tair)%fnow(:,:,1), rt0_snow ) - rt0 ) * cpic * tmask(:,:,1) 
     402!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     403      DO jj = 1, jpj 
     404         DO ji = 1, jpi 
     405      emp (ji,jj) = (  zevap(ji,jj)                                          &   ! mass flux (evap. - precip.) 
     406         &         - sf(jp_prec)%fnow(ji,jj,1) * rn_pfac  ) * tmask(ji,jj,1) 
     407      ! 
     408      qns(ji,jj) = zqlw(ji,jj) - zqsb(ji,jj) - zqla(ji,jj)                                &   ! Downward Non Solar  
     409         &     - sf(jp_snow)%fnow(ji,jj,1) * rn_pfac * lfus                         &   ! remove latent melting heat for solid precip 
     410         &     - zevap(ji,jj) * pst(ji,jj) * rcp                                      &   ! remove evap heat content at SST 
     411         &     + ( sf(jp_prec)%fnow(ji,jj,1) - sf(jp_snow)%fnow(ji,jj,1) ) * rn_pfac  &   ! add liquid precip heat content at Tair 
     412         &     * ( sf(jp_tair)%fnow(ji,jj,1) - rt0 ) * rcp                          & 
     413         &     + sf(jp_snow)%fnow(ji,jj,1) * rn_pfac                                &   ! add solid  precip heat content at min(Tair,Tsnow) 
     414         &     * ( MIN( sf(jp_tair)%fnow(ji,jj,1), rt0_snow ) - rt0 ) * cpic * tmask(ji,jj,1) 
     415         END DO 
     416      END DO 
    391417      ! 
    392418#if defined key_lim3 
     419!$OMP PARALLEL WORKSHARE 
    393420      qns_oce(:,:) = zqlw(:,:) - zqsb(:,:) - zqla(:,:)                                ! non solar without emp (only needed by LIM3) 
    394421      qsr_oce(:,:) = qsr(:,:) 
     422!$OMP END PARALLEL WORKSHARE 
    395423#endif 
    396424      ! 
     
    449477 
    450478!!gm brutal.... 
     479!$OMP PARALLEL WORKSHARE 
    451480      utau_ice  (:,:) = 0._wp 
    452481      vtau_ice  (:,:) = 0._wp 
    453482      wndm_ice  (:,:) = 0._wp 
     483!$OMP END PARALLEL WORKSHARE 
    454484!!gm end 
    455485 
     
    460490      CASE( 'I' )                  ! B-grid ice dynamics :   I-point (i.e. F-point with sea-ice indexation) 
    461491         !                           and scalar wind at T-point ( = | U10m - U_ice | ) (masked) 
     492!$OMP PARALLEL DO schedule(static) private(jj,ji,zwndi_f,zwndj_f,zwnorm_f,zwndi_t,zwndj_t) 
    462493         DO jj = 2, jpjm1 
    463494            DO ji = 2, jpim1   ! B grid : NO vector opt 
     
    484515         ! 
    485516      CASE( 'C' )                  ! C-grid ice dynamics :   U & V-points (same as ocean) 
     517!$OMP PARALLEL DO schedule(static) private(jj,ji,zwndi_t,zwndj_t) 
    486518         DO jj = 2, jpj 
    487519            DO ji = fs_2, jpi   ! vect. opt. 
     
    491523            END DO 
    492524         END DO 
     525!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    493526         DO jj = 2, jpjm1 
    494527            DO ji = fs_2, fs_jpim1   ! vect. opt. 
     
    553586      zztmp = 1. / ( 1. - albo ) 
    554587      !                                     ! ========================== ! 
     588!$OMP PARALLEL 
     589!$OMP DO schedule(static) private(jl,jj,ji,zst2,zst3) 
    555590      DO jl = 1, jpl                        !  Loop over ice categories  ! 
    556591         !                                  ! ========================== ! 
     
    602637      END DO 
    603638      ! 
     639!$OMP WORKSHARE 
    604640      tprecip(:,:) = sf(jp_prec)%fnow(:,:,1) * rn_pfac      ! total precipitation [kg/m2/s] 
    605641      sprecip(:,:) = sf(jp_snow)%fnow(:,:,1) * rn_pfac      ! solid precipitation [kg/m2/s] 
     642!$OMP END WORKSHARE 
     643!$OMP END PARALLEL       
    606644      CALL iom_put( 'snowpre', sprecip * 86400. )                  ! Snow precipitation 
    607645      CALL iom_put( 'precip' , tprecip * 86400. )                  ! Total precipitation 
     
    612650      ! --- evaporation --- ! 
    613651      z1_lsub = 1._wp / Lsub 
     652!$OMP PARALLEL WORKSHARE       
    614653      evap_ice (:,:,:) = rn_efac * qla_ice (:,:,:) * z1_lsub    ! sublimation 
    615654      devap_ice(:,:,:) = rn_efac * dqla_ice(:,:,:) * z1_lsub    ! d(sublimation)/dT 
     
    618657      ! --- evaporation minus precipitation --- ! 
    619658      zsnw(:,:) = 0._wp 
     659!$OMP END PARALLEL WORKSHARE       
    620660      CALL lim_thd_snwblow( pfrld, zsnw )  ! snow distribution over ice after wind blowing  
    621661      emp_oce(:,:) = pfrld(:,:) * zevap(:,:) - ( tprecip(:,:) - sprecip(:,:) ) - sprecip(:,:) * (1._wp - zsnw ) 
     
    639679 
    640680      ! --- heat content of evap over ice in W/m2 (to be used in 1D-thermo) --- ! 
     681!$OMP PARALLEL DO schedule(static) private(jl) 
    641682      DO jl = 1, jpl 
    642683         qevap_ice(:,:,jl) = 0._wp ! should be -evap_ice(:,:,jl)*( ( Tice - rt0 ) * cpic * tmask(:,:,1) ) 
     
    652693      ! ( Maykut and Untersteiner, 1971 ; Ebert and Curry, 1993 ) 
    653694      ! 
     695!$OMP PARALLEL WORKSHARE       
    654696      fr1_i0(:,:) = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) 
    655697      fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 
     698!$OMP END PARALLEL WORKSHARE       
    656699      ! 
    657700      ! 
     
    744787      !! Neutral coefficients at 10m: 
    745788      IF( ln_cdgw ) THEN      ! wave drag case 
     789!$OMP PARALLEL WORKSHARE       
    746790         cdn_wave(:,:) = cdn_wave(:,:) + rsmall * ( 1._wp - tmask(:,:,1) ) 
    747791         ztmp0   (:,:) = cdn_wave(:,:) 
     792!$OMP END PARALLEL WORKSHARE       
    748793      ELSE 
    749794         ztmp0 = cd_neutral_10m( U_zu ) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90

    r6140 r7037  
    131131         SELECT CASE( cp_ice_msh ) 
    132132         CASE( 'I' )                  !== B-grid ice dynamics :   I-point (i.e. F-point with sea-ice indexation) 
     133!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    133134            DO jj = 2, jpj 
    134135               DO ji = 2, jpi   ! NO vector opt. possible 
     
    143144            ! 
    144145         CASE( 'C' )                  !== C-grid ice dynamics :   U & V-points (same as ocean) 
     146!$OMP PARALLEL WORKSHARE 
    145147            u_oce(:,:) = ssu_m(:,:) * umask(:,:,1)                     ! mean surface ocean current at ice velocity point 
    146148            v_oce(:,:) = ssv_m(:,:) * vmask(:,:,1) 
     149!$OMP END PARALLEL WORKSHARE 
    147150            ! 
    148151         END SELECT 
     
    150153         ! ... masked sea surface freezing temperature [Kelvin] (set to rt0 over land) 
    151154         CALL eos_fzp( sss_m(:,:), tfu(:,:) ) 
     155!$OMP PARALLEL WORKSHARE 
    152156         tfu(:,:) = tfu(:,:) + rt0 
    153157 
    154158         zsist (:,:,1) = sist (:,:) + rt0 * ( 1. - tmask(:,:,1) ) 
     159!$OMP END PARALLEL WORKSHARE 
    155160 
    156161         ! Ice albedo 
     
    164169 
    165170            ! albedo depends on cloud fraction because of non-linear spectral effects 
     171!$OMP PARALLEL WORKSHARE 
    166172            zalb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 
     173!$OMP END PARALLEL WORKSHARE 
    167174            ! In CLIO the cloud fraction is read in the climatology and the all-sky albedo  
    168175            ! (zalb_ice) is computed within the bulk routine 
     
    203210         IF( ln_mixcpl) THEN 
    204211            CALL sbc_cpl_ice_tau( zutau_ice , zvtau_ice ) 
     212!$OMP PARALLEL WORKSHARE 
    205213            utau_ice(:,:) = utau_ice(:,:) * xcplmask(:,:,0) + zutau_ice(:,:) * ( 1. - xcplmask(:,:,0) ) 
    206214            vtau_ice(:,:) = vtau_ice(:,:) * xcplmask(:,:,0) + zvtau_ice(:,:) * ( 1. - xcplmask(:,:,0) ) 
     215!$OMP END PARALLEL WORKSHARE 
    207216         ENDIF 
    208217 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90

    r6460 r7037  
    124124         !                                                     ! set temperature & salinity content of runoffs 
    125125         IF( ln_rnf_tem ) THEN                                       ! use runoffs temperature data 
     126!$OMP PARALLEL WORKSHARE 
    126127            rnf_tsc(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rau0 
     128!$OMP END PARALLEL WORKSHARE 
    127129            CALL eos_fzp( sss_m(:,:), ztfrz(:,:) ) 
     130!$OMP PARALLEL WORKSHARE 
    128131            WHERE( sf_t_rnf(1)%fnow(:,:,1) == -999._wp )             ! if missing data value use SST as runoffs temperature 
    129132               rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_rau0 
     
    132135               rnf_tsc(:,:,jp_tem) = ztfrz(:,:) * rnf(:,:) * r1_rau0 - rnf(:,:) * rlfusisf * r1_rau0_rcp 
    133136            END WHERE 
     137!$OMP END PARALLEL WORKSHARE 
    134138         ELSE                                                        ! use SST as runoffs temperature 
     139!$OMP PARALLEL WORKSHARE 
    135140            rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_rau0 
     141!$OMP END PARALLEL WORKSHARE 
    136142         ENDIF 
    137143         !                                                           ! use runoffs salinity data 
    138          IF( ln_rnf_sal )   rnf_tsc(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rau0 
     144         IF( ln_rnf_sal ) THEN 
     145!$OMP PARALLEL WORKSHARE 
     146            rnf_tsc(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rau0 
     147!$OMP END PARALLEL WORKSHARE 
     148         END IF 
    139149         !                                                           ! else use S=0 for runoffs (done one for all in the init) 
    140150         CALL iom_put( "runoffs", rnf )         ! output runoffs arrays 
     
    152162         ELSE                                                   !* no restart: set from nit000 values 
    153163            IF(lwp) WRITE(numout,*) '          nit000-1 runoff forcing fields set to nit000' 
     164!$OMP PARALLEL WORKSHARE 
    154165            rnf_b    (:,:  ) = rnf    (:,:  ) 
    155166            rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:) 
     167!$OMP END PARALLEL WORKSHARE 
    156168         ENDIF 
    157169      ENDIF 
     
    197209            DO jj = 1, jpj 
    198210               DO ji = 1, jpi 
     211!$OMP PARALLEL DO schedule(static) private(jk) 
    199212                  DO jk = 1, nk_rnf(ji,jj) 
    200213                     phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rau0 / h_rnf(ji,jj) 
     
    203216            END DO 
    204217         ELSE                    !* variable volume case 
     218!$OMP PARALLEL 
    205219            DO jj = 1, jpj                   ! update the depth over which runoffs are distributed 
    206220               DO ji = 1, jpi 
    207221                  h_rnf(ji,jj) = 0._wp 
     222!$OMP DO schedule(static) private(jk) 
    208223                  DO jk = 1, nk_rnf(ji,jj)                           ! recalculates h_rnf to be the depth in metres 
    209224                     h_rnf(ji,jj) = h_rnf(ji,jj) + e3t_n(ji,jj,jk)   ! to the bottom of the relevant grid box 
    210225                  END DO 
    211226                  !                          ! apply the runoff input flow 
     227!$OMP DO schedule(static) private(jk) 
    212228                  DO jk = 1, nk_rnf(ji,jj) 
    213229                     phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rau0 / h_rnf(ji,jj) 
    214230                  END DO 
     231!$OMP END DO NOWAIT 
    215232               END DO 
    216233            END DO 
     234!$OMP END PARALLEL 
    217235         ENDIF 
    218236      ELSE                       !==   runoff put only at the surface   ==! 
     237!$OMP PARALLEL WORKSHARE 
    219238         h_rnf (:,:)   = e3t_n (:,:,1)        ! update h_rnf to be depth of top box 
    220239         phdivn(:,:,1) = phdivn(:,:,1) - ( rnf(:,:) + rnf_b(:,:) ) * zfact * r1_rau0 / e3t_n(:,:,1) 
     240!$OMP END PARALLEL WORKSHARE 
    221241      ENDIF 
    222242      ! 
     
    256276         ln_rnf_mouth  = .FALSE.                   ! default definition needed for example by sbc_ssr or by tra_adv_muscl 
    257277         nkrnf         = 0 
     278!$OMP PARALLEL WORKSHARE 
    258279         rnf     (:,:) = 0.0_wp 
    259280         rnf_b   (:,:) = 0.0_wp 
    260281         rnfmsk  (:,:) = 0.0_wp 
    261282         rnfmsk_z(:)   = 0.0_wp 
     283!$OMP END PARALLEL WORKSHARE 
    262284         RETURN 
    263285      ENDIF 
     
    357379            DO ji = 1, jpi 
    358380               h_rnf(ji,jj) = 0._wp 
     381!$OMP PARALLEL DO schedule(static) private(jk) 
    359382               DO jk = 1, nk_rnf(ji,jj) 
    360383                  h_rnf(ji,jj) = h_rnf(ji,jj) + e3t_n(ji,jj,jk) 
     
    415438            DO ji = 1, jpi 
    416439               h_rnf(ji,jj) = 0._wp 
     440!$OMP PARALLEL DO schedule(static) private(jk) 
    417441               DO jk = 1, nk_rnf(ji,jj) 
    418442                  h_rnf(ji,jj) = h_rnf(ji,jj) + e3t_n(ji,jj,jk) 
     
    432456      ENDIF 
    433457      ! 
     458!$OMP PARALLEL WORKSHARE 
    434459      rnf(:,:) =  0._wp                         ! runoff initialisation 
    435460      rnf_tsc(:,:,:) = 0._wp                    ! runoffs temperature & salinty contents initilisation 
     461!$OMP END PARALLEL WORKSHARE 
    436462      ! 
    437463      !                                   ! ======================== 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90

    r6748 r7037  
    7373         ssv_m(:,:) = vb(:,:,1) 
    7474!$OMP END PARALLEL WORKSHARE 
    75          IF( l_useCT )  THEN    ;   sst_m(:,:) = eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 
    76          ELSE                    ;   sst_m(:,:) = zts(:,:,jp_tem) 
     75         IF( l_useCT )  THEN 
     76!$OMP PARALLEL WORKSHARE 
     77           sst_m(:,:) = eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 
     78!$OMP END PARALLEL WORKSHARE 
     79         ELSE                     
     80!$OMP PARALLEL WORKSHARE 
     81           sst_m(:,:) = zts(:,:,jp_tem) 
     82!$OMP END PARALLEL WORKSHARE 
    7783         ENDIF 
    7884!$OMP PARALLEL WORKSHARE 
     
    8288         IF( ln_apr_dyn ) THEN   
    8389!$OMP PARALLEL WORKSHARE 
    84    ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
     90           ssh_m(:,:) = sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    8591!$OMP END PARALLEL WORKSHARE 
    8692         ELSE                     
    8793!$OMP PARALLEL WORKSHARE 
    88    ssh_m(:,:) = sshn(:,:) 
     94           ssh_m(:,:) = sshn(:,:) 
    8995!$OMP END PARALLEL WORKSHARE 
    9096         ENDIF 
     
    107113            ssv_m(:,:) = zcoef * vb(:,:,1) 
    108114!$OMP END PARALLEL WORKSHARE 
    109             IF( l_useCT )  THEN    ;   sst_m(:,:) = zcoef * eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 
    110             ELSE                    ;   sst_m(:,:) = zcoef * zts(:,:,jp_tem) 
     115            IF( l_useCT )  THEN 
     116!$OMP PARALLEL WORKSHARE 
     117              sst_m(:,:) = zcoef * eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 
     118!$OMP END PARALLEL WORKSHARE 
     119            ELSE                     
     120!$OMP PARALLEL WORKSHARE 
     121              sst_m(:,:) = zcoef * zts(:,:,jp_tem) 
     122!$OMP END PARALLEL WORKSHARE 
    111123            ENDIF 
    112124!$OMP PARALLEL WORKSHARE 
     
    116128            IF( ln_apr_dyn ) THEN    
    117129!$OMP PARALLEL WORKSHARE 
    118    ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
     130              ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
    119131!$OMP END PARALLEL WORKSHARE 
    120132            ELSE                     
    121133!$OMP PARALLEL WORKSHARE 
    122    ssh_m(:,:) = zcoef * sshn(:,:) 
     134              ssh_m(:,:) = zcoef * sshn(:,:) 
    123135!$OMP END PARALLEL WORKSHARE 
    124136            ENDIF 
     
    149161         ssv_m(:,:) = ssv_m(:,:) + vb(:,:,1) 
    150162!$OMP END PARALLEL WORKSHARE 
    151          IF( l_useCT )  THEN    ;   sst_m(:,:) = sst_m(:,:) + eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 
    152          ELSE                    ;   sst_m(:,:) = sst_m(:,:) + zts(:,:,jp_tem) 
     163         IF( l_useCT )  THEN    
     164!$OMP PARALLEL WORKSHARE 
     165           sst_m(:,:) = sst_m(:,:) + eos_pt_from_ct( zts(:,:,jp_tem), zts(:,:,jp_sal) ) 
     166!$OMP END PARALLEL WORKSHARE 
     167         ELSE                    
     168!$OMP PARALLEL WORKSHARE 
     169           sst_m(:,:) = sst_m(:,:) + zts(:,:,jp_tem) 
     170!$OMP END PARALLEL WORKSHARE 
    153171         ENDIF 
    154172!$OMP PARALLEL WORKSHARE 
     
    158176         IF( ln_apr_dyn ) THEN    
    159177!$OMP PARALLEL WORKSHARE 
    160    ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
     178           ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 
    161179!$OMP END PARALLEL WORKSHARE 
    162180         ELSE                     
    163181!$OMP PARALLEL WORKSHARE 
    164    ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 
     182           ssh_m(:,:) = ssh_m(:,:) + sshn(:,:) 
    165183!$OMP END PARALLEL WORKSHARE 
    166184         ENDIF 
     
    257275               CALL iom_get( numror, jpdom_autoglo, 'frq_m'  , frq_m  ) 
    258276            ELSE 
     277!$OMP PARALLEL WORKSHARE 
    259278               frq_m(:,:) = 1._wp   ! default definition 
     279!$OMP END PARALLEL WORKSHARE 
    260280            ENDIF 
    261281            ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssr.F90

    r6140 r7037  
    9393            ! 
    9494            IF( nn_sstr == 1 ) THEN                                   !* Temperature restoring term 
     95!$OMP PARALLEL DO schedule(static) private(jj, ji, zqrp) 
    9596               DO jj = 1, jpj 
    9697                  DO ji = 1, jpi 
     
    105106            IF( nn_sssr == 1 ) THEN                                   !* Salinity damping term (salt flux only (sfx)) 
    106107               zsrp = rn_deds / rday                                  ! from [mm/day] to [kg/m2/s] 
     108!$OMP PARALLEL DO schedule(static) private(jj, ji, zerp) 
    107109               DO jj = 1, jpj 
    108110                  DO ji = 1, jpi 
     
    118120               zsrp = rn_deds / rday                                  ! from [mm/day] to [kg/m2/s] 
    119121               zerp_bnd = rn_sssr_bnd / rday                          !       -              -     
     122!$OMP PARALLEL DO schedule(static) private(jj, ji, zerp) 
    120123               DO jj = 1, jpj 
    121124                  DO ji = 1, jpi                             
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r6748 r7037  
    504504      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    505505         ! 
     506!$OMP PARALLEL DO schedule(static) private(jj, ji, zh, zt, zs, zn3, zn2, zn1, zn0, zn) 
    506507         DO jj = 1, jpjm1 
    507508            DO ji = 1, fs_jpim1   ! vector opt. 
     
    543544      CASE( np_seos )                !==  simplified EOS  ==! 
    544545         ! 
     546!$OMP PARALLEL DO schedule(static) private(jj, ji, zh, zt, zs, zn) 
    545547         DO jj = 1, jpjm1 
    546548            DO ji = 1, fs_jpim1   ! vector opt. 
     
    705707      IF( nn_timing == 1 ) CALL timing_start('rab_2d') 
    706708      ! 
     709!$OMP PARALLEL WORKSHARE 
    707710      pab(:,:,:) = 0._wp 
     711!$OMP END PARALLEL WORKSHARE 
    708712      ! 
    709713      SELECT CASE ( neos ) 
     
    711715      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    712716         ! 
     717!$OMP PARALLEL DO schedule(static) private(jj, ji, zh, zt, zs, zn3, zn2, zn1, zn0, zn) 
    713718         DO jj = 1, jpjm1 
    714719            DO ji = 1, fs_jpim1   ! vector opt. 
     
    769774      CASE( np_seos )                  !==  simplified EOS  ==! 
    770775         ! 
     776!$OMP PARALLEL DO schedule(static) private(jj, ji, zh, zt, zs, zn) 
    771777         DO jj = 1, jpjm1 
    772778            DO ji = 1, fs_jpim1   ! vector opt. 
     
    977983      z1_T0   = 1._wp/40._wp 
    978984      ! 
     985!$OMP PARALLEL DO schedule(static) private(jj, ji, zt, zs, ztm, zn,zd) 
    979986      DO jj = 1, jpj 
    980987         DO ji = 1, jpi 
     
    10321039         ! 
    10331040         z1_S0 = 1._wp / 35.16504_wp 
     1041!$OMP PARALLEL 
     1042!$OMP DO schedule(static) private(jj, ji, zs) 
    10341043         DO jj = 1, jpj 
    10351044            DO ji = 1, jpi 
     
    10391048            END DO 
    10401049         END DO 
     1050!$OMP WORKSHARE 
    10411051         ptf(:,:) = ptf(:,:) * psal(:,:) 
    1042          ! 
    1043          IF( PRESENT( pdep ) )   ptf(:,:) = ptf(:,:) - 7.53e-4 * pdep(:,:) 
     1052!$OMP END WORKSHARE NOWAIT 
     1053!$OMP END PARALLEL 
     1054         ! 
     1055         IF( PRESENT( pdep ) ) THEN 
     1056!$OMP DO schedule(static) private(jj, ji) 
     1057           DO jj = 1, jpj 
     1058              DO ji = 1, jpi 
     1059                 ptf(ji,jj) = ptf(ji,jj) - 7.53e-4 * pdep(ji,jj) 
     1060              END DO 
     1061           END DO 
     1062         END IF 
    10441063         ! 
    10451064      CASE ( np_eos80 )                !==  PT,SP (UNESCO formulation)  ==! 
    10461065         ! 
    1047          ptf(:,:) = ( - 0.0575_wp + 1.710523e-3_wp * SQRT( psal(:,:) )   & 
    1048             &                     - 2.154996e-4_wp *       psal(:,:)   ) * psal(:,:) 
     1066!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     1067         DO jj = 1, jpj 
     1068            DO ji = 1, jpi 
     1069            ptf(ji,jj) = ( - 0.0575_wp + 1.710523e-3_wp * SQRT( psal(ji,jj) )   & 
     1070               &                     - 2.154996e-4_wp *       psal(ji,jj)   ) * psal(ji,jj) 
     1071            END DO 
     1072         END DO 
    10491073            ! 
    1050          IF( PRESENT( pdep ) )   ptf(:,:) = ptf(:,:) - 7.53e-4 * pdep(:,:) 
     1074         IF( PRESENT( pdep ) ) THEN 
     1075!$OMP PARALLEL WORKSHARE 
     1076            ptf(:,:) = ptf(:,:) - 7.53e-4 * pdep(:,:) 
     1077!$OMP END PARALLEL WORKSHARE 
     1078         END IF 
    10511079         ! 
    10521080      CASE DEFAULT 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90

    r6748 r7037  
    108108      ! 
    109109      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN                                ! add z-tilde and/or vvl corrections 
     110!$OMP PARALLEL WORKSHARE 
    110111         zun(:,:,:) = zun(:,:,:) + un_td(:,:,:) 
    111112         zvn(:,:,:) = zvn(:,:,:) + vn_td(:,:,:) 
    112       ENDIF 
    113       ! 
     113!$OMP END PARALLEL WORKSHARE 
     114      ENDIF 
     115      ! 
     116!$OMP PARALLEL WORKSHARE 
    114117      zun(:,:,jpk) = 0._wp                                                      ! no transport trough the bottom 
    115118      zvn(:,:,jpk) = 0._wp 
    116119      zwn(:,:,jpk) = 0._wp 
     120!$OMP END PARALLEL WORKSHARE 
    117121      ! 
    118122      IF( ln_ldfeiv .AND. .NOT. ln_traldf_triad )   & 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_fct.F90

    r6748 r7037  
    9696      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )   l_trd = .TRUE. 
    9797      ! 
    98       IF( l_trd )  THEN 
    99          CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 
    100 !$OMP PARALLEL WORKSHARE 
    101          ztrdx(:,:,:) = 0._wp   ;    ztrdy(:,:,:) = 0._wp   ;   ztrdz(:,:,:) = 0._wp 
    102 !$OMP END PARALLEL WORKSHARE 
    103       ENDIF 
    104       ! 
    10598      !                          ! surface & bottom value : flux set to zero one for all 
    10699!$OMP PARALLEL WORKSHARE 
    107100      zwz(:,:, 1 ) = 0._wp             
    108       zwx(:,:,jpk) = 0._wp   ;   zwy(:,:,jpk) = 0._wp    ;    zwz(:,:,jpk) = 0._wp 
    109       ! 
     101      zwx(:,:,jpk) = 0._wp 
     102      zwy(:,:,jpk) = 0._wp     
     103      zwz(:,:,jpk) = 0._wp 
    110104      zwi(:,:,:) = 0._wp         
    111105!$OMP END PARALLEL WORKSHARE 
     
    115109         !        !==  upstream advection with initial mass fluxes & intermediate update  ==! 
    116110         !                    !* upstream tracer flux in the i and j direction  
    117 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui,zfm_ui) 
     111!$OMP PARALLEL 
     112!$OMP DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui,zfm_ui) 
    118113         DO jk = 1, jpkm1 
    119114            DO jj = 1, jpjm1 
     
    129124            END DO 
    130125         END DO 
     126!$OMP END DO NOWAIT 
    131127         !                    !* upstream tracer flux in the k direction *! 
    132 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 
     128!$OMP DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 
    133129         DO jk = 2, jpkm1        ! Interior value ( multiplied by wmask) 
    134130            DO jj = 1, jpj 
     
    140136            END DO 
    141137         END DO 
     138!$OMP END DO NOWAIT 
     139!$OMP END PARALLEL 
    142140         IF( ln_linssh ) THEN    ! top ocean value (only in linear free surface as zwz has been w-masked) 
    143141            IF( ln_isfcav ) THEN             ! top of the ice-shelf cavities and at the ocean surface 
     142!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    144143               DO jj = 1, jpj 
    145144                  DO ji = 1, jpi 
     
    148147               END DO    
    149148            ELSE                             ! no cavities: only at the ocean surface 
     149!$OMP PARALLEL WORKSHARE 
    150150               zwz(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) 
     151!$OMP END PARALLEL WORKSHARE 
    151152            ENDIF 
    152153         ENDIF 
     
    170171         !                 
    171172         IF( l_trd )  THEN             ! trend diagnostics (contribution of upstream fluxes) 
    172 !$OMP PARALLEL WORKSHARE 
    173             ztrdx(:,:,:) = zwx(:,:,:)   ;    ztrdy(:,:,:) = zwy(:,:,:)  ;   ztrdz(:,:,:) = zwz(:,:,:) 
    174 !$OMP END PARALLEL WORKSHARE 
     173         CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 
     174!$OMP PARALLEL 
     175!$OMP WORKSHARE 
     176         ztrdx(:,:,:) = 0._wp 
     177         ztrdy(:,:,:) = 0._wp 
     178         ztrdz(:,:,:) = 0._wp 
     179!$OMP END WORKSHARE 
     180!$OMP WORKSHARE 
     181            ztrdx(:,:,:) = zwx(:,:,:)    
     182            ztrdy(:,:,:) = zwy(:,:,:) 
     183            ztrdz(:,:,:) = zwz(:,:,:) 
     184!$OMP END WORKSHARE 
     185!$OMP END PARALLEL 
    175186         END IF 
    176187         !                             ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
     
    196207            ! 
    197208         CASE(  4  )                   !- 4th order centered 
    198 !$OMP PARALLEL WORKSHARE 
     209!$OMP PARALLEL  
     210!$OMP WORKSHARE 
    199211            zltu(:,:,jpk) = 0._wp            ! Bottom value : flux set to zero 
    200212            zltv(:,:,jpk) = 0._wp 
    201 !$OMP END PARALLEL WORKSHARE 
    202 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     213!$OMP END WORKSHARE 
     214!$OMP DO schedule(static) private(jk, jj, ji) 
    203215            DO jk = 1, jpkm1                 ! Laplacian 
    204216               DO jj = 1, jpjm1                    ! 1st derivative (gradient) 
     
    215227               END DO 
    216228            END DO 
     229!$OMP END DO NOWAIT 
     230!$OMP END PARALLEL 
    217231            CALL lbc_lnk( zltu, 'T', 1. )   ;    CALL lbc_lnk( zltv, 'T', 1. )   ! Lateral boundary cond. (unchanged sgn) 
    218232            ! 
     
    231245            ! 
    232246         CASE(  41 )                   !- 4th order centered       ==>>   !!gm coding attempt   need to be tested 
    233 !$OMP PARALLEL WORKSHARE 
     247!$OMP PARALLEL 
     248!$OMP WORKSHARE 
    234249            ztu(:,:,jpk) = 0._wp             ! Bottom value : flux set to zero 
    235250            ztv(:,:,jpk) = 0._wp 
    236 !$OMP END PARALLEL WORKSHARE 
    237 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     251!$OMP END WORKSHARE 
     252!$OMP DO schedule(static) private(jk, jj, ji) 
    238253            DO jk = 1, jpkm1                 ! 1st derivative (gradient) 
    239254               DO jj = 1, jpjm1 
     
    244259               END DO 
    245260            END DO 
     261!$OMP END DO NOWAIT 
     262!$OMP END PARALLEL 
    246263            CALL lbc_lnk( ztu, 'U', -1. )   ;    CALL lbc_lnk( ztv, 'V', -1. )   ! Lateral boundary cond. (unchanged sgn) 
    247264            ! 
     
    290307         END SELECT 
    291308         IF( ln_linssh ) THEN    ! top ocean value: high order = upstream  ==>>  zwz=0 
     309!$OMP PARALLEL WORKSHARE 
    292310            zwz(:,:,1) = 0._wp   ! only ocean surface as interior zwz values have been w-masked 
     311!$OMP END PARALLEL WORKSHARE 
    293312         ENDIF 
    294313         ! 
     
    649668      zbig  = 1.e+40_wp 
    650669      zrtrn = 1.e-15_wp 
    651 !$OMP PARALLEL WORKSHARE 
    652       zbetup(:,:,:) = 0._wp   ;   zbetdo(:,:,:) = 0._wp 
    653 !$OMP END PARALLEL WORKSHARE 
    654670 
    655671      ! Search local extrema 
     
    661677         &        paft * tmask + zbig * ( 1._wp - tmask )  ) 
    662678 
    663 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ikm1, zup, zdo, zpos, zneg, zbt) 
     679!$OMP PARALLEL 
     680!$OMP WORKSHARE 
     681      zbetup(:,:,:) = 0._wp    
     682      zbetdo(:,:,:) = 0._wp 
     683!$OMP END WORKSHARE 
     684!$OMP DO schedule(static) private(jk, jj, ji, ikm1, zup, zdo, zpos, zneg, zbt) 
    664685      DO jk = 1, jpkm1 
    665686         ikm1 = MAX(jk-1,1) 
     
    696717         END DO 
    697718      END DO 
     719!$OMP END PARALLEL 
    698720      CALL lbc_lnk( zbetup, 'T', 1. )   ;   CALL lbc_lnk( zbetdo, 'T', 1. )   ! lateral boundary cond. (unchanged sign) 
    699721 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mus.F90

    r6140 r7037  
    101101         ! 
    102102         ALLOCATE( xind(jpi,jpj,jpk), STAT=ierr ) 
     103!$OMP PARALLEL WORKSHARE  
    103104         xind(:,:,:) = 1._wp              ! set equal to 1 where up-stream is not needed 
     105!$OMP END PARALLEL WORKSHARE  
    104106         ! 
    105107         IF( ld_msc_ups ) THEN            ! define the upstream indicator (if asked) 
    106108            ALLOCATE( upsmsk(jpi,jpj), STAT=ierr ) 
     109!$OMP PARALLEL 
     110!$OMP WORKSHARE  
    107111            upsmsk(:,:) = 0._wp                             ! not upstream by default 
     112!$OMP END WORKSHARE  
    108113            ! 
     114!$OMP DO schedule(static) private(jk) 
    109115            DO jk = 1, jpkm1 
    110116               xind(:,:,jk) = 1._wp                              &                 ! =>1 where up-stream is not needed 
     
    112118                  &                 upsmsk(:,:)                ) * tmask(:,:,jk)   ! =>0 in some user defined area 
    113119            END DO 
     120!$OMP END DO NOWAIT 
     121!$OMP END PARALLEL 
    114122         ENDIF  
    115123         ! 
     
    121129         ! 
    122130         !                                !-- first guess of the slopes 
     131!$OMP PARALLEL 
     132!$OMP WORKSHARE 
    123133         zwx(:,:,jpk) = 0._wp                   ! bottom values 
    124          zwy(:,:,jpk) = 0._wp   
     134         zwy(:,:,jpk) = 0._wp 
     135!$OMP END WORKSHARE 
     136!$OMP DO schedule(static) private(jk, jj, ji) 
    125137         DO jk = 1, jpkm1                       ! interior values 
    126138            DO jj = 1, jpjm1       
     
    131143           END DO 
    132144         END DO 
     145!$OMP END DO NOWAIT 
     146!$OMP END PARALLEL 
    133147         CALL lbc_lnk( zwx, 'U', -1. )          ! lateral boundary conditions   (changed sign) 
    134148         CALL lbc_lnk( zwy, 'V', -1. ) 
    135149         !                                !-- Slopes of tracer 
     150!$OMP PARALLEL 
     151!$OMP WORKSHARE 
    136152         zslpx(:,:,jpk) = 0._wp                 ! bottom values 
    137153         zslpy(:,:,jpk) = 0._wp 
     154!$OMP END WORKSHARE 
     155!$OMP DO schedule(static) private(jk, jj, ji) 
    138156         DO jk = 1, jpkm1                       ! interior values 
    139157            DO jj = 2, jpj 
     
    147165         END DO 
    148166         ! 
     167!$OMP DO schedule(static) private(jk, jj, ji) 
    149168         DO jk = 1, jpkm1                 !-- Slopes limitation 
    150169            DO jj = 2, jpj 
     
    160179         END DO 
    161180         ! 
     181!$OMP DO schedule(static) private(jk, jj, ji, z0u, zalpha, zu, zv, zzwx, zzwy, z0v) 
    162182         DO jk = 1, jpkm1                 !-- MUSCL horizontal advective fluxes 
    163183            DO jj = 2, jpjm1 
     
    180200            END DO 
    181201         END DO 
     202!$OMP END DO NOWAIT 
     203!$OMP END PARALLEL 
    182204         CALL lbc_lnk( zwx, 'U', -1. )   ;   CALL lbc_lnk( zwy, 'V', -1. )   ! lateral boundary conditions   (changed sign) 
    183205         ! 
     206!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    184207         DO jk = 1, jpkm1                 !-- Tracer advective trend 
    185208            DO jj = 2, jpjm1       
     
    206229         ! 
    207230         !                                !-- first guess of the slopes 
     231!$OMP PARALLEL  
     232!$OMP WORKSHARE 
    208233         zwx(:,:, 1 ) = 0._wp                   ! surface & bottom boundary conditions 
    209234         zwx(:,:,jpk) = 0._wp 
     235!$OMP END WORKSHARE 
     236!$OMP DO schedule(static) private(jk) 
    210237         DO jk = 2, jpkm1                       ! interior values 
    211238            zwx(:,:,jk) = tmask(:,:,jk) * ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) 
    212239         END DO 
    213240         !                                !-- Slopes of tracer 
     241!$OMP END DO NOWAIT 
     242!$OMP WORKSHARE 
    214243         zslpx(:,:,1) = 0._wp                   ! surface values 
     244!$OMP END WORKSHARE 
     245!$OMP DO schedule(static) private(jk, jj, ji) 
    215246         DO jk = 2, jpkm1                       ! interior value 
    216247            DO jj = 1, jpj 
     
    221252            END DO 
    222253         END DO 
     254!$OMP DO schedule(static) private(jk, jj, ji) 
    223255         DO jk = 2, jpkm1                 !-- Slopes limitation 
    224256            DO jj = 1, jpj                      ! interior values 
     
    230262            END DO 
    231263         END DO 
     264!$OMP DO schedule(static) private(jk, jj, ji, z0w, zalpha, zw, zzwx, zzwy) 
    232265         DO jk = 1, jpk-2                 !-- vertical advective flux 
    233266            DO jj = 2, jpjm1       
     
    242275            END DO 
    243276         END DO 
     277!$OMP END DO NOWAIT 
     278!$OMP END PARALLEL 
    244279         IF( ln_linssh ) THEN                   ! top values, linear free surface only 
    245280            IF( ln_isfcav ) THEN                      ! ice-shelf cavities (top of the ocean) 
     281!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    246282               DO jj = 1, jpj 
    247283                  DO ji = 1, jpi 
     
    250286               END DO    
    251287            ELSE                                      ! no cavities: only at the ocean surface 
     288!$OMP PARALLEL WORKSHARE 
    252289               zwx(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) 
     290!$OMP END PARALLEL WORKSHARE 
    253291            ENDIF 
    254292         ENDIF 
    255293         ! 
     294!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    256295         DO jk = 1, jpkm1                 !-- vertical advective trend 
    257296            DO jj = 2, jpjm1       
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/trabbc.F90

    r6140 r7037  
    8484      IF( l_trdtra )   THEN         ! Save the input temperature trend 
    8585         CALL wrk_alloc( jpi,jpj,jpk,   ztrdt ) 
     86!$OMP PARALLEL WORKSHARE 
    8687         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     88!$OMP END PARALLEL WORKSHARE 
    8789      ENDIF 
    8890      !                             !  Add the geothermal trend on temperature 
     91!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    8992      DO jj = 2, jpjm1 
    9093         DO ji = 2, jpim1 
     
    9699      ! 
    97100      IF( l_trdtra ) THEN        ! Send the trend for diagnostics 
     101!$OMP PARALLEL WORKSHARE 
    98102         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
     103!$OMP END PARALLEL WORKSHARE 
    99104         CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbc, ztrdt ) 
    100105         CALL wrk_dealloc( jpi,jpj,jpk,   ztrdt ) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90

    r6140 r7037  
    146146 
    147147      IF( l_trdtra )   THEN                      ! send the trends for further diagnostics 
     148!$OMP PARALLEL WORKSHARE 
    148149         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    149150         ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
     151!$OMP END PARALLEL WORKSHARE 
    150152         CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbl, ztrdt ) 
    151153         CALL trd_tra( kt, 'TRA', jp_sal, jptra_bbl, ztrds ) 
     
    195197      DO jn = 1, kjpt                                     ! tracer loop 
    196198         !                                                ! =========== 
     199!$OMP PARALLEL DO schedule(static) private(jj,ji,ik) 
    197200         DO jj = 1, jpj 
    198201            DO ji = 1, jpi 
     
    202205         END DO 
    203206         !                
     207!$OMP PARALLEL DO schedule(static) private(jj,ji,ik) 
    204208         DO jj = 2, jpjm1                                    ! Compute the trend 
    205209            DO ji = 2, jpim1 
     
    357361      ENDIF 
    358362      !                                        !* bottom variables (T, S, alpha, beta, depth, velocity) 
     363!$OMP PARALLEL DO schedule(static) private(jj,ji,ik) 
    359364      DO jj = 1, jpj 
    360365         DO ji = 1, jpi 
     
    374379      IF( nn_bbl_ldf == 1 ) THEN          !   diffusive bbl   ! 
    375380         !                                !-------------------! 
     381!$OMP PARALLEL DO schedule(static) private(jj,ji,za,zb,zgdrho,zsign) 
    376382         DO jj = 1, jpjm1                      ! (criteria for non zero flux: grad(rho).grad(h) < 0 ) 
    377383            DO ji = 1, fs_jpim1   ! vector opt. 
     
    406412         ! 
    407413         CASE( 1 )                                   != use of upper velocity 
     414!$OMP PARALLEL DO schedule(static) private(jj,ji,za,zb,zgdrho,zsign,zsigna) 
    408415            DO jj = 1, jpjm1                                 ! criteria: grad(rho).grad(h)<0  and grad(rho).grad(h)<0 
    409416               DO ji = 1, fs_jpim1   ! vector opt. 
     
    437444         CASE( 2 )                                 != bbl velocity = F( delta rho ) 
    438445            zgbbl = grav * rn_gambbl 
     446!$OMP PARALLEL DO schedule(static) private(jj,ji,iid,iis,ikud,ikus,za,zb,zgdrho,ijd,ijs,ikvd,ikvs) 
    439447            DO jj = 1, jpjm1                            ! criteria: rho_up > rho_down 
    440448               DO ji = 1, fs_jpim1   ! vector opt. 
     
    533541 
    534542      !                             !* vertical index of  "deep" bottom u- and v-points 
     543!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    535544      DO jj = 1, jpjm1                    ! (the "shelf" bottom k-indices are mbku and mbkv) 
    536545         DO ji = 1, jpim1 
     
    547556                                        !* sign of grad(H) at u- and v-points 
    548557      mgrhu(jpi,:) = 0   ;   mgrhu(:,jpj) = 0   ;   mgrhv(jpi,:) = 0   ;   mgrhv(:,jpj) = 0 
     558!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    549559      DO jj = 1, jpjm1 
    550560         DO ji = 1, jpim1 
     
    554564      END DO 
    555565 
     566!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    556567      DO jj = 1, jpjm1              !* bbl thickness at u- (v-) point 
    557568         DO ji = 1, jpim1                 ! minimum of top & bottom e3u_0 (e3v_0) 
     
    563574 
    564575      !                             !* masked diffusive flux coefficients 
     576!$OMP PARALLEL WORKSHARE 
    565577      ahu_bbl_0(:,:) = rn_ahtbbl * e2_e1u(:,:) * e3u_bbl_0(:,:) * umask(:,:,1) 
    566578      ahv_bbl_0(:,:) = rn_ahtbbl * e1_e2v(:,:) * e3v_bbl_0(:,:) * vmask(:,:,1) 
     579!$OMP END PARALLEL WORKSHARE 
    567580 
    568581 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/tradmp.F90

    r6140 r7037  
    102102      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    103103         CALL wrk_alloc( jpi,jpj,jpk,jpts,   ztrdts )  
     104!$OMP PARALLEL WORKSHARE 
    104105         ztrdts(:,:,:,:) = tsa(:,:,:,:)  
     106!$OMP END PARALLEL WORKSHARE 
    105107      ENDIF 
    106108      !                           !==  input T-S data at kt  ==! 
     
    111113      CASE( 0 )                        !*  newtonian damping throughout the water column  *! 
    112114         DO jn = 1, jpts 
     115!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    113116            DO jk = 1, jpkm1 
    114117               DO jj = 2, jpjm1 
     
    121124         ! 
    122125      CASE ( 1 )                       !*  no damping in the turbocline (avt > 5 cm2/s)  *! 
     126!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    123127         DO jk = 1, jpkm1 
    124128            DO jj = 2, jpjm1 
     
    135139         ! 
    136140      CASE ( 2 )                       !*  no damping in the mixed layer   *! 
     141!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    137142         DO jk = 1, jpkm1 
    138143            DO jj = 2, jpjm1 
     
    151156      ! 
    152157      IF( l_trdtra )   THEN       ! trend diagnostic 
     158!$OMP PARALLEL WORKSHARE 
    153159         ztrdts(:,:,:,:) = tsa(:,:,:,:) - ztrdts(:,:,:,:) 
     160!$OMP END PARALLEL WORKSHARE 
    154161         CALL trd_tra( kt, 'TRA', jp_tem, jptra_dmp, ztrdts(:,:,:,jp_tem) ) 
    155162         CALL trd_tra( kt, 'TRA', jp_sal, jptra_dmp, ztrdts(:,:,:,jp_sal) ) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r6748 r7037  
    124124         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    125125         ! 
     126!$OMP PARALLEL WORKSHARE 
    126127         akz     (:,:,:) = 0._wp       
    127128         ah_wslp2(:,:,:) = 0._wp 
     129!$OMP END PARALLEL WORKSHARE 
    128130      ENDIF 
    129131      !                                               ! set time step size (Euler/Leapfrog) 
     
    216218         !!---------------------------------------------------------------------- 
    217219!!gm : bug.... why (x,:,:)?   (1,jpj,:) and (jpi,1,:) should be sufficient.... 
    218 !$OMP PARALLEL WORKSHARE 
     220!$OMP PARALLEL 
     221!$OMP WORKSHARE 
    219222         zdit (1,:,:) = 0._wp     ;     zdit (jpi,:,:) = 0._wp 
    220223         zdjt (1,:,:) = 0._wp     ;     zdjt (jpi,:,:) = 0._wp 
    221 !$OMP END PARALLEL WORKSHARE 
     224!$OMP END WORKSHARE 
    222225         !!end 
    223226 
    224227         ! Horizontal tracer gradient  
    225 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     228!$OMP DO schedule(static) private(jk, jj, ji) 
    226229         DO jk = 1, jpkm1 
    227230            DO jj = 1, jpjm1 
     
    232235            END DO 
    233236         END DO 
     237!$OMP END DO NOWAIT 
     238!$OMP END PARALLEL 
    234239         IF( ln_zps ) THEN      ! botton and surface ocean correction of the horizontal gradient 
    235240!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     
    254259         !!   II - horizontal trend  (full) 
    255260         !!---------------------------------------------------------------------- 
    256 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     261!$OMP PARALLEL  
     262!$OMP DO schedule(static) private(jj, ji) 
    257263               DO jj = 1 , jpj            !==  Horizontal fluxes 
    258264                  DO ji = 1, jpi   ! vector opt. 
     
    261267                  END DO 
    262268               END DO 
    263 !$OMP PARALLEL DO schedule(static) private(jj, ji, zmsku, zmskv, zabe1, zabe2, zcof1, zcof2) 
     269!$OMP DO schedule(static) private(jj, ji, zmsku, zmskv, zabe1, zabe2, zcof1, zcof2) 
    264270               DO jj = 1 , jpjm1            !==  Horizontal fluxes 
    265271                  DO ji = 1, fs_jpim1   ! vector opt. 
     
    285291            END DO 
    286292            ! 
    287 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     293!$OMP DO schedule(static) private(jj, ji) 
    288294            DO jj = 2 , jpjm1          !== horizontal divergence and add to pta 
    289295               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    293299               END DO 
    294300            END DO 
     301!$OMP END DO NOWAIT 
    295302            DO jk = 2, jpkm1 
    296 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     303!$OMP DO schedule(static) private(jj, ji) 
    297304               DO jj = 1 , jpj            !==  Horizontal fluxes 
    298305                  DO ji = 1, jpi   ! vector opt. 
     
    301308                  END DO 
    302309               END DO 
    303 !$OMP PARALLEL DO schedule(static) private(jj, ji, zmsku, zmskv, zabe1, zabe2, zcof1, zcof2) 
     310!$OMP DO schedule(static) private(jj, ji, zmsku, zmskv, zabe1, zabe2, zcof1, zcof2) 
    304311               DO jj = 1 , jpjm1            !==  Horizontal fluxes 
    305312                  DO ji = 1, fs_jpim1   ! vector opt. 
     
    325332               END DO 
    326333            ! 
    327 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     334!$OMP DO schedule(static) private(jj, ji) 
    328335               DO jj = 2 , jpjm1          !== horizontal divergence and add to pta 
    329336                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    333340                  END DO 
    334341               END DO 
    335             END DO 
     342!$OMP END DO NOWAIT 
     343            END DO 
     344!$OMP END PARALLEL 
    336345 
    337346 
     
    340349         !!---------------------------------------------------------------------- 
    341350         ! 
    342 !$OMP PARALLEL WORKSHARE 
     351!$OMP PARALLEL 
     352!$OMP WORKSHARE 
    343353         ztfw(1,:,:) = 0._wp     ;     ztfw(jpi,:,:) = 0._wp 
    344354         ! 
     
    347357         !                          ! Surface and bottom vertical fluxes set to zero 
    348358         ztfw(:,:, 1 ) = 0._wp      ;      ztfw(:,:,jpk) = 0._wp 
    349 !$OMP END PARALLEL WORKSHARE 
     359!$OMP END WORKSHARE 
    350360          
    351 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zmsku, zmskv, zahu_w, zahv_w, zcoef3, zcoef4) 
     361!$OMP DO schedule(static) private(jk, jj, ji, zmsku, zmskv, zahu_w, zahv_w, zcoef3, zcoef4) 
    352362         DO jk = 2, jpkm1           ! interior (2=<jk=<jpk-1) 
    353363            DO jj = 2, jpjm1 
     
    374384            END DO 
    375385         END DO 
     386!$OMP END DO NOWAIT 
     387!$OMP END PARALLEL 
    376388         !                                !==  add the vertical 33 flux  ==! 
    377389         IF( ln_traldf_lap ) THEN               ! laplacian case: eddy coef = ah_wslp2 - akz 
     
    437449              ! 
    438450              IF( cdtype == 'TRA' .AND. jn == jp_tem  ) THEN 
     451!$OMP PARALLEL 
     452!$OMP WORKSHARE 
    439453                  z2d(:,:) = zftu(ji,jj,1)  
    440 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     454!$OMP END WORKSHARE 
     455!$OMP DO schedule(static) private(jk, jj, ji) 
    441456                  DO jk = 2, jpkm1 
    442457                     DO jj = 2, jpjm1 
     
    448463!!gm CAUTION I think there is an error of sign when using BLP operator.... 
    449464!!gm         a multiplication by zsign is required (to be checked twice !) 
    450 !$OMP PARALLEL WORKSHARE 
     465!$OMP WORKSHARE 
    451466                  z2d(:,:) = - rau0_rcp * z2d(:,:)     ! note sign is reversed to give down-gradient diffusive transports (#1043) 
    452 !$OMP END PARALLEL WORKSHARE 
     467!$OMP END WORKSHARE NOWAIT 
     468!$OMP END PARALLEL 
    453469                  CALL lbc_lnk( z2d, 'U', -1. ) 
    454470                  CALL iom_put( "udiff_heattr", z2d )                  ! heat transport in i-direction 
    455471                  ! 
    456 !$OMP PARALLEL WORKSHARE 
     472!$OMP PARALLEL 
     473!$OMP WORKSHARE 
    457474                  z2d(:,:) = zftv(ji,jj,1)  
    458 !$OMP END PARALLEL WORKSHARE 
    459 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     475!$OMP END WORKSHARE 
     476!$OMP DO schedule(static) private(jk, jj, ji) 
    460477                  DO jk = 2, jpkm1 
    461478                     DO jj = 2, jpjm1 
     
    465482                     END DO 
    466483                  END DO 
    467 !$OMP PARALLEL WORKSHARE 
     484!$OMP WORKSHARE 
    468485                  z2d(:,:) = - rau0_rcp * z2d(:,:)     ! note sign is reversed to give down-gradient diffusive transports (#1043) 
    469 !$OMP END PARALLEL WORKSHARE 
     486!$OMP END WORKSHARE NOWAIT 
     487!$OMP END PARALLEL  
    470488                  CALL lbc_lnk( z2d, 'V', -1. ) 
    471489                  CALL iom_put( "vdiff_heattr", z2d )                  !  heat transport in i-direction 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r6748 r7037  
    208208      DO jn = 1, kjpt 
    209209         ! 
     210!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztn,ztd) 
    210211         DO jk = 1, jpkm1 
    211212            DO jj = 2, jpjm1 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90

    r6790 r7037  
    144144         ELSE                                           ! No restart or restart not found: Euler forward time stepping 
    145145            z1_2 = 1._wp 
     146!$OMP PARALLEL WORKSHARE 
    146147            qsr_hc_b(:,:,:) = 0._wp 
     148!$OMP END PARALLEL WORKSHARE 
    147149         ENDIF 
    148150      ELSE                             !==  Swap of qsr heat content  ==! 
     
    203205         ! 
    204206         zcoef  = ( 1. - rn_abs ) / 3._wp    !* surface equi-partition in R-G-B 
     207!$OMP PARALLEL 
     208!$OMP DO schedule(static) private(jj,ji) 
    205209         DO jj = 2, jpjm1 
    206210            DO ji = fs_2, fs_jpim1 
     
    212216            END DO 
    213217         END DO 
     218!$OMP END DO NOWAIT 
    214219         ! 
    215220         DO jk = 2, nksr+1                   !* interior equi-partition in R-G-B depending of vertical profile of Chl 
     221!$OMP DO schedule(static) private(jj,ji,zchl,irgb) 
    216222            DO jj = 2, jpjm1 
    217223               DO ji = fs_2, fs_jpim1 
     
    224230            END DO 
    225231 
     232!$OMP DO schedule(static) private(jj,ji,zc0,zc1,zc2,zc3) 
    226233            DO jj = 2, jpjm1 
    227234               DO ji = fs_2, fs_jpim1 
     
    239246         END DO 
    240247         ! 
    241 !$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     248!$OMP DO schedule(static) private(jk,jj,ji) 
    242249         DO jk = 1, nksr                     !* now qsr induced heat content 
    243250            DO jj = 2, jpjm1 
     
    247254            END DO 
    248255         END DO 
     256!$OMP END DO NOWAIT 
     257!$OMP END PARALLEL 
    249258         ! 
    250259         CALL wrk_dealloc( jpi,jpj,        zekb, zekg, zekr        )  
     
    280289      ! 
    281290      IF( ln_qsr_ice ) THEN      ! sea-ice: store the 1st ocean level attenuation coefficient 
     291!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    282292         DO jj = 2, jpjm1  
    283293            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    294304         CALL wrk_alloc( jpi,jpj,jpk,   zetot ) 
    295305         ! 
     306!$OMP PARALLEL 
     307!$OMP WORKSHARE 
    296308         zetot(:,:,nksr+1:jpk) = 0._wp     ! below ~400m set to zero 
     309!$OMP END WORKSHARE 
    297310         DO jk = nksr, 1, -1 
    298             zetot(:,:,jk) = zetot(:,:,jk+1) + qsr_hc(:,:,jk) / r1_rau0_rcp 
     311!$OMP DO schedule(static) private(jj,ji) 
     312            DO jj = 1, jpj  
     313               DO ji = 1, jpi   ! vector opt. 
     314                  zetot(ji,jj,jk) = zetot(ji,jj,jk+1) + qsr_hc(ji,jj,jk) / r1_rau0_rcp 
     315               END DO 
     316            END DO 
     317!$OMP END DO NOWAIT 
    299318         END DO          
     319!$OMP END PARALLEL 
    300320         CALL iom_put( 'qsr3d', zetot )   ! 3D distribution of shortwave Radiation 
    301321         ! 
     
    309329      ! 
    310330      IF( l_trdtra ) THEN     ! qsr tracers trends saved for diagnostics 
     331!$OMP PARALLEL WORKSHARE 
    311332         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
     333!$OMP END PARALLEL WORKSHARE 
    312334         CALL trd_tra( kt, 'TRA', jp_tem, jptra_qsr, ztrdt ) 
    313335         CALL wrk_dealloc( jpi,jpj,jpk,   ztrdt )  
     
    444466         CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev  ) 
    445467      ELSE 
     468!$OMP PARALLEL WORKSHARE 
    446469         fraqsr_1lev(:,:) = 1._wp   ! default : no penetration 
     470!$OMP END PARALLEL WORKSHARE 
    447471      ENDIF 
    448472      ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf.F90

    r6748 r7037  
    8686      ! JMM avoid negative salinities near river outlet ! Ugly fix 
    8787      ! JMM : restore negative salinities to small salinities: 
     88!$OMP PARALLEL WORKSHARE 
    8889      WHERE( tsa(:,:,:,jp_sal) < 0._wp )   tsa(:,:,:,jp_sal) = 0.1_wp 
     90!$OMP END PARALLEL WORKSHARE 
    8991!!gm 
    9092 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90

    r6748 r7037  
    106106            ! 
    107107            ! vertical mixing coef.: avt for temperature, avs for salinity and passive tracers 
    108             IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN   ;   zwt(:,:,2:jpk) = avt  (:,:,2:jpk) 
    109             ELSE                                            ;   zwt(:,:,2:jpk) = fsavs(:,:,2:jpk) 
     108            IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN 
     109!$OMP PARALLEL WORKSHARE 
     110                zwt(:,:,2:jpk) = avt  (:,:,2:jpk) 
     111!$OMP END PARALLEL WORKSHARE 
     112            ELSE                                             
     113!$OMP PARALLEL WORKSHARE 
     114                zwt(:,:,2:jpk) = fsavs(:,:,2:jpk) 
     115!$OMP END PARALLEL WORKSHARE 
    110116            ENDIF 
    111117!$OMP PARALLEL WORKSHARE 
     
    136142            ! 
    137143            ! Diagonal, lower (i), upper (s)  (including the bottom boundary condition since avt is masked) 
    138 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     144!$OMP PARALLEL  
     145!$OMP DO schedule(static) private(jk, jj, ji) 
    139146            DO jk = 1, jpkm1 
    140147               DO jj = 2, jpjm1 
     
    167174            !   used as a work space array: its value is modified. 
    168175            ! 
    169 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     176!$OMP DO schedule(static) private(jj, ji) 
    170177            DO jj = 2, jpjm1        !* 1st recurrence:   Tk = Dk - Ik Sk-1 / Tk-1   (increasing k) 
    171178               DO ji = fs_2, fs_jpim1            ! done one for all passive tracers (so included in the IF instruction) 
     
    173180               END DO 
    174181            END DO 
     182!$OMP END DO NOWAIT  
    175183            DO jk = 2, jpkm1 
    176 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     184!$OMP DO schedule(static) private(jj, ji) 
    177185               DO jj = 2, jpjm1 
    178186                  DO ji = fs_2, fs_jpim1 
     
    180188                  END DO 
    181189               END DO 
    182             END DO 
     190!$OMP END DO NOWAIT  
     191            END DO 
     192!$OMP END PARALLEL  
    183193            ! 
    184194         ENDIF  
    185195         !          
    186 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     196!$OMP PARALLEL  
     197!$OMP DO schedule(static) private(jj, ji) 
    187198         DO jj = 2, jpjm1           !* 2nd recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
    188199            DO ji = fs_2, fs_jpim1 
     
    191202         END DO 
    192203         DO jk = 2, jpkm1 
    193 !$OMP PARALLEL DO schedule(static) private(jj, ji, zrhs) 
     204!$OMP DO schedule(static) private(jj, ji, zrhs) 
    194205            DO jj = 2, jpjm1 
    195206               DO ji = fs_2, fs_jpim1 
     
    200211         END DO 
    201212         ! 
    202 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     213!$OMP DO schedule(static) private(jj, ji) 
    203214         DO jj = 2, jpjm1           !* 3d recurrence:    Xk = (Zk - Sk Xk+1 ) / Tk   (result is the after tracer) 
    204215            DO ji = fs_2, fs_jpim1 
     
    207218         END DO 
    208219         DO jk = jpk-2, 1, -1 
    209 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     220!$OMP DO schedule(static) private(jj, ji) 
    210221            DO jj = 2, jpjm1 
    211222               DO ji = fs_2, fs_jpim1 
     
    214225               END DO 
    215226            END DO 
    216          END DO 
     227!$OMP END DO NOWAIT  
     228         END DO 
     229!$OMP END PARALLEL  
    217230         !                                            ! ================= ! 
    218231      END DO                                          !  end tracer loop  ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/zpshde.F90

    r6140 r7037  
    101101      IF( nn_timing == 1 )   CALL timing_start( 'zps_hde') 
    102102      ! 
     103!$OMP PARALLEL 
     104!$OMP WORKSHARE 
    103105      pgtu(:,:,:)=0._wp   ;   zti (:,:,:)=0._wp   ;   zhi (:,:  )=0._wp 
    104106      pgtv(:,:,:)=0._wp   ;   ztj (:,:,:)=0._wp   ;   zhj (:,:  )=0._wp 
     107!$OMP END WORKSHARE  
    105108      ! 
    106109      DO jn = 1, kjpt      !==   Interpolation of tracers at the last ocean level   ==! 
    107110         ! 
     111!$OMP DO schedule(static) private(jj,ji,iku,ikv,ze3wu,ze3wv,zmaxu,zmaxv) 
    108112         DO jj = 1, jpjm1 
    109113            DO ji = 1, jpim1 
     
    145149            END DO 
    146150         END DO 
     151!$OMP END DO 
     152!$OMP SINGLE 
    147153         CALL lbc_lnk( pgtu(:,:,jn), 'U', -1. )   ;   CALL lbc_lnk( pgtv(:,:,jn), 'V', -1. )   ! Lateral boundary cond. 
     154!$OMP END SINGLE 
    148155         ! 
    149156      END DO 
     157!$OMP END PARALLEL 
    150158      !                 
    151159      IF( PRESENT( prd ) ) THEN    !==  horizontal derivative of density anomalies (rd)  ==!    (optional part) 
     160!$OMP PARALLEL 
     161!$OMP WORKSHARE 
    152162         pgru(:,:) = 0._wp 
    153163         pgrv(:,:) = 0._wp                ! depth of the partial step level 
     164!$OMP END WORKSHARE NOWAIT 
     165!$OMP DO schedule(static) private(jj,ji,iku,ikv,ze3wu,ze3wv) 
    154166         DO jj = 1, jpjm1 
    155167            DO ji = 1, jpim1 
     
    166178            END DO 
    167179         END DO 
     180!$OMP END DO NOWAIT 
     181!$OMP END PARALLEL 
    168182         ! 
    169183         CALL eos( zti, zhi, zri )        ! interpolated density from zti, ztj  
    170184         CALL eos( ztj, zhj, zrj )        ! at the partial step depth output in  zri, zrj  
    171185         ! 
     186!$OMP PARALLEL DO schedule(static) private(jj,ji,iku,ikv,ze3wu,ze3wv) 
    172187         DO jj = 1, jpjm1                 ! Gradient of density at the last level  
    173188            DO ji = 1, jpim1 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90

    r6140 r7037  
    9999         CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'Y', trdty )  
    100100         CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'Z', trdt  )  
    101          CASE( jptra_bbc,    &        ! qsr, bbc: on temperature only, send to trd_tra_mng 
    102             &  jptra_qsr )   ;   trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
    103                                  ztrds(:,:,:) = 0._wp 
    104                                  CALL trd_tra_mng( trdt, ztrds, ktrd, kt ) 
     101         CASE( jptra_bbc, jptra_qsr ) ! qsr, bbc: on temperature only, send to trd_tra_mng 
     102!$OMP PARALLEL WORKSHARE 
     103               trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
     104               ztrds(:,:,:) = 0._wp 
     105!$OMP END PARALLEL WORKSHARE 
     106               CALL trd_tra_mng( trdt, ztrds, ktrd, kt ) 
    105107         CASE DEFAULT                 ! other trends: masked trends 
     108!$OMP PARALLEL WORKSHARE 
    106109            trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:)              ! mask & store 
     110!$OMP END PARALLEL WORKSHARE 
    107111         END SELECT 
    108112         ! 
     
    124128            CALL wrk_alloc( jpi, jpj, jpk, zwt, zws, ztrdt ) 
    125129            ! 
     130!$OMP PARALLEL WORKSHARE 
    126131            zwt(:,:, 1 ) = 0._wp   ;   zws(:,:, 1 ) = 0._wp            ! vertical diffusive fluxes 
    127132            zwt(:,:,jpk) = 0._wp   ;   zws(:,:,jpk) = 0._wp 
     133!$OMP END PARALLEL WORKSHARE 
     134!$OMP PARALLEL DO schedule(static) private(jk) 
    128135            DO jk = 2, jpk 
    129136               zwt(:,:,jk) =   avt(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
     
    131138            END DO 
    132139            ! 
     140!$OMP PARALLEL WORKSHARE 
    133141            ztrdt(:,:,jpk) = 0._wp   ;   ztrds(:,:,jpk) = 0._wp 
     142!$OMP END PARALLEL WORKSHARE 
     143!$OMP PARALLEL DO schedule(static) private(jk) 
    134144            DO jk = 1, jpkm1 
    135145               ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / e3t_n(:,:,jk) 
     
    141151            ! 
    142152         CASE DEFAULT                 ! other trends: mask and send T & S trends to trd_tra_mng 
     153!$OMP PARALLEL WORKSHARE 
    143154            ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
     155!$OMP END PARALLEL WORKSHARE 
    144156            CALL trd_tra_mng( trdt, ztrds, ktrd, kt )   
    145157         END SELECT 
     
    154166         CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Z', ztrds )  
    155167         CASE DEFAULT                 ! other trends: just masked  
     168!$OMP PARALLEL WORKSHARE 
    156169                                 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
     170!$OMP END PARALLEL WORKSHARE 
    157171         END SELECT 
    158172         !                            ! send trend to trd_trc 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90

    r6497 r7037  
    112112         ! Define the mask  
    113113         ! --------------- 
     114!$OMP PARALLEL 
     115!$OMP DO schedule(static) private(jj,ji,zrw,zaw,zbw,zdt,zds) 
    114116         DO jj = 1, jpj                                ! R=zrau = (alpha / beta) (dk[t] / dk[s]) 
    115117            DO ji = 1, jpi 
     
    128130            END DO 
    129131         END DO 
    130  
     132!$OMP END DO NOWAIT 
     133 
     134!$OMP DO schedule(static) private(jj,ji) 
    131135         DO jj = 1, jpj                                     ! indicators: 
    132136            DO ji = 1, jpi 
     
    155159         END DO 
    156160         ! mask zmsk in order to have avt and avs masked 
    157          zmsks(:,:) = zmsks(:,:) * wmask(:,:,jk) 
    158  
     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 
    159168 
    160169         ! Update avt and avs 
    161170         ! ------------------ 
    162171         ! Constant eddy coefficient: reset to the background value 
     172!$OMP DO schedule(static) private(jj,ji,zinr,zrr,zavfs,zavft,zavdt,zavds) 
    163173         DO jj = 1, jpj 
    164174            DO ji = 1, jpi 
     
    189199         ! -------------------------------- 
    190200!!gm to be changed following the definition of avm. 
     201!$OMP DO schedule(static) private(jj,ji) 
    191202         DO jj = 1, jpjm1 
    192203            DO ji = 1, fs_jpim1   ! vector opt. 
     
    199210            END DO 
    200211         END DO 
     212!$OMP END DO NOWAIT 
     213!$OMP END PARALLEL 
    201214         !                                                ! =============== 
    202215      END DO                                              !   End of slab 
     
    257270      IF( zdf_ddm_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_ddm_init : unable to allocate arrays' ) 
    258271      !                               ! initialization to masked Kz 
     272!$OMP PARALLEL WORKSHARE 
    259273      avs(:,:,:) = rn_avt0 * wmask(:,:,:)  
     274!$OMP END PARALLEL WORKSHARE 
    260275      ! 
    261276   END SUBROUTINE zdf_ddm_init 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90

    r6748 r7037  
    6868      CALL wrk_alloc( jpi,jpj,jpk,   zavt_evd, zavm_evd )  
    6969      ! 
     70!$OMP PARALLEL WORKSHARE 
    7071      zavt_evd(:,:,:) = avt(:,:,:)           ! set avt prior to evd application 
     72!$OMP END PARALLEL WORKSHARE 
    7173      ! 
    7274      SELECT CASE ( nn_evdm ) 
     
    7476      CASE ( 1 )           ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12) 
    7577         ! 
     78!$OMP PARALLEL 
     79!$OMP WORKSHARE 
    7680         zavm_evd(:,:,:) = avm(:,:,:)           ! set avm prior to evd application 
     81!$OMP END WORKSHARE 
    7782         ! 
    78 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     83!$OMP DO schedule(static) private(jk, jj, ji) 
    7984         DO jk = 1, jpkm1  
    8085            DO jj = 2, jpj             ! no vector opt. 
     
    9196            END DO 
    9297         END DO  
     98!$OMP END DO NOWAIT 
     99!$OMP END PARALLEL 
    93100         CALL lbc_lnk( avt , 'W', 1. )   ;   CALL lbc_lnk( avm , 'W', 1. )   ! Lateral boundary conditions 
    94101         CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. ) 
    95102         ! 
     103!$OMP PARALLEL WORKSHARE 
    96104         zavm_evd(:,:,:) = avm(:,:,:) - zavm_evd(:,:,:)   ! change in avm due to evd 
     105!$OMP END PARALLEL WORKSHARE 
    97106         CALL iom_put( "avm_evd", zavm_evd )              ! output this change 
    98107         ! 
     
    111120      END SELECT  
    112121 
     122!$OMP PARALLEL WORKSHARE 
    113123      zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:)   ! change in avt due to evd 
     124!$OMP END PARALLEL WORKSHARE 
    114125      CALL iom_put( "avt_evd", zavt_evd )              ! output this change 
    115126      ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfmxl.F90

    r6748 r7037  
    9595      ENDIF 
    9696 
     97      zN2_c = grav * rho_c * r1_rau0   ! convert density criteria into N^2 criteria 
     98 
    9799      ! w-level of the mixing and mixed layers 
    98 !$OMP PARALLEL WORKSHARE 
     100!$OMP PARALLEL 
     101!$OMP WORKSHARE 
    99102      nmln(:,:)  = nlb10               ! Initialization to the number of w ocean point 
    100103      hmlp(:,:)  = 0._wp               ! here hmlp used as a dummy variable, integrating vertically N^2 
    101 !$OMP END PARALLEL WORKSHARE 
    102       zN2_c = grav * rho_c * r1_rau0   ! convert density criteria into N^2 criteria 
     104!$OMP END WORKSHARE 
    103105      DO jk = nlb10, jpkm1 
     106!$OMP DO schedule(static) private(jj, ji, ikt) 
    104107         DO jj = 1, jpj                ! Mixed layer level: w-level  
    105108            DO ji = 1, jpi 
     
    112115      ! 
    113116      ! w-level of the turbocline and mixing layer (iom_use) 
    114 !$OMP PARALLEL WORKSHARE 
     117!$OMP WORKSHARE 
    115118      imld(:,:) = mbkt(:,:) + 1        ! Initialization to the number of w ocean point 
    116 !$OMP END PARALLEL WORKSHARE 
     119!$OMP END WORKSHARE 
    117120 
    118121      DO jk = jpkm1, nlb10, -1         ! from the bottom to nlb10  
     122!$OMP DO schedule(static) private(jj, ji) 
    119123         DO jj = 1, jpj 
    120124            DO ji = 1, jpi 
     
    124128      END DO 
    125129      ! depth of the mixing and mixed layers 
    126 !$OMP PARALLEL DO schedule(static) private(jj, ji, iiki, iikn) 
     130!$OMP DO schedule(static) private(jj, ji, iiki, iikn) 
    127131      DO jj = 1, jpj 
    128132         DO ji = 1, jpi 
     
    134138         END DO 
    135139      END DO 
     140!$OMP END DO NOWAIT 
     141!$OMP END PARALLEL 
    136142      ! no need to output in offline mode 
    137143      IF( .NOT.lk_offline ) THEN    
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r6748 r7037  
    299299         ! 
    300300         !                        !* total energy produce by LC : cumulative sum over jk 
    301          zpelc(:,:,1) =  MAX( rn2b(:,:,1), 0._wp ) * gdepw_n(:,:,1) * e3w_n(:,:,1) 
     301!$OMP PARALLEL 
     302!$OMP DO schedule(static) private(jj, ji) 
     303         DO jj =1, jpj 
     304            DO ji=1, jpi 
     305               zpelc(ji,jj,1) =  MAX( rn2b(ji,jj,1), 0._wp ) * gdepw_n(ji,jj,1) * e3w_n(ji,jj,1) 
     306            END DO 
     307         END DO 
    302308         DO jk = 2, jpk 
    303 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     309!$OMP DO schedule(static) private(jj, ji) 
    304310            DO jj =1, jpj 
    305311               DO ji=1, jpi 
     
    310316         !                        !* finite Langmuir Circulation depth 
    311317         zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) 
     318!$OMP WORKSHARE 
    312319         imlc(:,:) = mbkt(:,:) + 1       ! Initialization to the number of w ocean point (=2 over land) 
     320!$OMP END WORKSHARE 
    313321         DO jk = jpkm1, 2, -1 
     322!$OMP DO schedule(static) private(jj, ji, zus) 
    314323            DO jj = 1, jpj               ! Last w-level at which zpelc>=0.5*us*us  
    315324               DO ji = 1, jpi            !      with us=0.016*wind(starting from jpk-1) 
     
    320329         END DO 
    321330         !                               ! finite LC depth 
    322 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     331!$OMP DO schedule(static) private(jj, ji) 
    323332         DO jj = 1, jpj  
    324333            DO ji = 1, jpi 
     
    327336         END DO 
    328337         zcof = 0.016 / SQRT( zrhoa * zcdrag ) 
    329 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zus, zind, zwlc) 
     338!$OMP DO schedule(static) private(jk, jj, ji, zus, zind, zwlc) 
    330339         DO jk = 2, jpkm1         !* TKE Langmuir circulation source term added to en 
    331340            DO jj = 2, jpjm1 
     
    341350            END DO 
    342351         END DO 
     352!$OMP END DO NOWAIT 
     353!$OMP END PARALLEL 
    343354         ! 
    344355      ENDIF 
     
    387398      ENDIF 
    388399      !          
    389 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcof, zzd_up, zzd_lw, zesh2) 
     400!$OMP PARALLEL 
     401!$OMP DO schedule(static) private(jk, jj, ji, zcof, zzd_up, zzd_lw, zesh2) 
    390402      DO jk = 2, jpkm1           !* Matrix and right hand side in en 
    391403         DO jj = 2, jpjm1 
     
    421433      !                          !* Matrix inversion from level 2 (tke prescribed at level 1) 
    422434      DO jk = 3, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    423 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     435!$OMP DO schedule(static) private(jj, ji) 
    424436         DO jj = 2, jpjm1 
    425437            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    428440         END DO 
    429441      END DO 
    430 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     442!$OMP DO schedule(static) private(jj, ji) 
    431443      DO jj = 2, jpjm1                             ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    432444         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    435447      END DO 
    436448      DO jk = 3, jpkm1 
    437 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     449!$OMP DO schedule(static) private(jj, ji) 
    438450         DO jj = 2, jpjm1 
    439451            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    442454         END DO 
    443455      END DO 
    444 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     456!$OMP DO schedule(static) private(jj, ji) 
    445457      DO jj = 2, jpjm1                             ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    446458         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    449461      END DO 
    450462      DO jk = jpk-2, 2, -1 
    451 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     463!$OMP DO schedule(static) private(jj, ji) 
    452464         DO jj = 2, jpjm1 
    453465            DO ji = fs_2, fs_jpim1    ! vector opt. 
     
    456468         END DO 
    457469      END DO 
    458 !$OMP PARALLEL DO schedule(static) private(jk,jj, ji) 
     470!$OMP DO schedule(static) private(jk,jj, ji) 
    459471      DO jk = 2, jpkm1                             ! set the minimum value of tke 
    460472         DO jj = 2, jpjm1 
     
    464476         END DO 
    465477      END DO 
     478!$OMP END DO NOWAIT 
     479!$OMP END PARALLEL 
    466480 
    467481      !                            !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     
    589603      ENDIF 
    590604      ! 
    591 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zrn2) 
     605!$OMP PARALLEL 
     606!$OMP DO schedule(static) private(jk, jj, ji, zrn2) 
    592607      DO jk = 2, jpkm1              ! interior value : l=sqrt(2*e/n^2) 
    593608         DO jj = 2, jpjm1 
     
    601616      !                     !* Physical limits for the mixing length 
    602617      ! 
    603 !$OMP PARALLEL WORKSHARE 
     618!$OMP WORKSHARE 
    604619      zmxld(:,:, 1 ) = zmxlm(:,:,1)   ! surface set to the minimum value  
    605620      zmxld(:,:,jpk) = rmxl_min       ! last level  set to the minimum value 
    606 !$OMP END PARALLEL WORKSHARE 
     621!$OMP END WORKSHARE NOWAIT 
     622!$OMP END PARALLEL 
    607623      ! 
    608624      SELECT CASE ( nn_mxl ) 
     
    637653         ! 
    638654      CASE ( 2 )           ! |dk[xml]| bounded by e3t : 
     655!$OMP PARALLEL 
    639656         DO jk = 2, jpkm1         ! from the surface to the bottom : 
    640 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     657!$OMP DO schedule(static) private(jj, ji) 
    641658            DO jj = 2, jpjm1 
    642659               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    646663         END DO 
    647664         DO jk = jpkm1, 2, -1     ! from the bottom to the surface : 
    648 !$OMP PARALLEL DO schedule(static) private(jj, ji, zemxl) 
     665!$OMP DO schedule(static) private(jj, ji, zemxl) 
    649666            DO jj = 2, jpjm1 
    650667               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    655672            END DO 
    656673         END DO 
     674!$OMP END PARALLEL 
    657675         ! 
    658676      CASE ( 3 )           ! lup and ldown, |dk[xml]| bounded by e3t : 
     677!$OMP PARALLEL 
    659678         DO jk = 2, jpkm1         ! from the surface to the bottom : lup 
    660 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     679!$OMP DO schedule(static) private(jj, ji) 
    661680            DO jj = 2, jpjm1 
    662681               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    666685         END DO 
    667686         DO jk = jpkm1, 2, -1     ! from the bottom to the surface : ldown 
    668 !$OMP PARALLEL DO schedule(static) private(jj, ji) 
     687!$OMP DO schedule(static) private(jj, ji) 
    669688            DO jj = 2, jpjm1 
    670689               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    673692            END DO 
    674693         END DO 
    675 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemlm, zemlp) 
     694!$OMP DO schedule(static) private(jk, jj, ji, zemlm, zemlp) 
    676695         DO jk = 2, jpkm1 
    677696            DO jj = 2, jpjm1 
     
    684703            END DO 
    685704         END DO 
     705!$OMP END PARALLEL 
    686706         ! 
    687707      END SELECT 
     
    849869      ENDIF 
    850870      !                               !* set vertical eddy coef. to the background value 
    851 !$OMP PARALLEL DO schedule(static) private(jk) 
     871!$OMP PARALLEL 
     872!$OMP DO schedule(static) private(jk) 
    852873      DO jk = 1, jpk 
    853874         avt (:,:,jk) = avtb(jk) * wmask (:,:,jk) 
     
    856877         avmv(:,:,jk) = avmb(jk) * wvmask(:,:,jk) 
    857878      END DO 
     879!$OMP END DO NOWAIT 
     880!$OMP WORKSHARE 
    858881      dissl(:,:,:) = 1.e-12_wp 
     882!$OMP END WORKSHARE 
     883!$OMP END PARALLEL 
    859884      !                               
    860885      CALL tke_rst( nit000, 'READ' )  !* read or initialize all required files 
     
    918943           ENDIF 
    919944        ELSE                                   !* Start from rest 
    920 !$OMP PARALLEL WORKSHARE 
     945!$OMP PARALLEL 
     946!$OMP WORKSHARE 
    921947           en(:,:,:) = rn_emin * tmask(:,:,:) 
    922 !$OMP END PARALLEL WORKSHARE 
    923 !$OMP PARALLEL DO schedule(static) private(jk) 
     948!$OMP END WORKSHARE NOWAIT 
     949!$OMP DO schedule(static) private(jk) 
    924950           DO jk = 1, jpk                           ! set the Kz to the background value 
    925951              avt (:,:,jk) = avtb(jk) * wmask (:,:,jk) 
     
    928954              avmv(:,:,jk) = avmb(jk) * wvmask(:,:,jk) 
    929955           END DO 
     956!$OMP END DO NOWAIT 
     957!$OMP END PARALLEL 
    930958        ENDIF 
    931959        ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90

    r6497 r7037  
    121121      !                          ! ----------------------- ! 
    122122      !                             !* First estimation (with n2 bound by rn_n2min) bounded by 60 cm2/s 
    123       zav_tide(:,:,:) = MIN(  60.e-4, az_tmx(:,:,:) / MAX( rn_n2min, rn2(:,:,:) )  ) 
    124  
     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 WORKSHARE 
    125135      zkz(:,:) = 0.e0               !* Associated potential energy consummed over the whole water column 
     136!$OMP END WORKSHARE 
    126137      DO jk = 2, jpkm1 
    127          zkz(:,:) = zkz(:,:) + e3w_n(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zav_tide(:,:,jk) * wmask(:,:,jk) 
    128       END DO 
    129  
     138!$OMP DO schedule(static) private(jj, ji)  
     139         DO jj = 1, jpj 
     140            DO ji = 1, jpi 
     141               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) 
     142            END DO 
     143         END DO 
     144      END DO 
     145 
     146!$OMP DO schedule(static) private(jj, ji)  
    130147      DO jj = 1, jpj                !* Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz to recover en_tmx 
    131148         DO ji = 1, jpi 
     
    135152 
    136153      DO jk = 2, jpkm1     !* Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zav_tide bound by 300 cm2/s 
    137          zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) * wmask(:,:,jk)  !kz max = 300 cm2/s 
    138       END DO 
     154!$OMP DO schedule(static) private(jj, ji)  
     155         DO jj = 1, jpj 
     156            DO ji = 1, jpi 
     157               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 
     158            END DO 
     159         END DO 
     160!$OMP END DO NOWAIT 
     161      END DO 
     162!$OMP END PARALLEL 
    139163 
    140164      IF( kt == nit000 ) THEN       !* check at first time-step: diagnose the energy consumed by zav_tide 
    141165         ztpc = 0._wp 
     166!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztpc)  
    142167         DO jk= 1, jpk 
    143168            DO jj= 1, jpj 
     
    162187      !                          !   Update  mixing coefs  !                           
    163188      !                          ! ----------------------- ! 
     189!$OMP PARALLEL DO schedule(static) private(jk,jj,ji)  
    164190      DO jk = 2, jpkm1              !* update momentum & tracer diffusivity with tidal mixing 
    165          avt(:,:,jk) = avt(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 
    166          avm(:,:,jk) = avm(:,:,jk) + zav_tide(:,:,jk) * wmask(:,:,jk) 
     191         DO jj = 1, jpj 
     192            DO ji = 1, jpi  ! vector opt. 
     193               avt(ji,jj,jk) = avt(ji,jj,jk) + zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 
     194               avm(ji,jj,jk) = avm(ji,jj,jk) + zav_tide(ji,jj,jk) * wmask(ji,jj,jk) 
     195            END DO 
     196         END DO 
    167197         DO jj = 2, jpjm1 
    168198            DO ji = fs_2, fs_jpim1  ! vector opt. 
     
    225255 
    226256      !                             ! compute the form function using N2 at each time step 
     257!$OMP PARALLEL  
     258!$OMP WORKSHARE 
    227259      zempba_3d_1(:,:,jpk) = 0.e0 
    228260      zempba_3d_2(:,:,jpk) = 0.e0 
     261!$OMP END WORKSHARE 
     262!$OMP DO schedule(static) private(jk)  
    229263      DO jk = 1, jpkm1              
    230264         zdn2dz     (:,:,jk) = rn2(:,:,jk) - rn2(:,:,jk+1)           ! Vertical profile of dN2/dz 
     
    232266         zempba_3d_2(:,:,jk) =        MAX( 0.e0, rn2(:,:,jk) )       !    -        -    of N^2 
    233267      END DO 
    234       ! 
     268!$OMP END DO NOWAIT 
     269      ! 
     270!$OMP WORKSHARE 
    235271      zsum (:,:) = 0.e0 
    236272      zsum1(:,:) = 0.e0 
    237273      zsum2(:,:) = 0.e0 
     274!$OMP END WORKSHARE 
    238275      DO jk= 2, jpk 
    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 
     276!$OMP DO schedule(static) private(jj,ji)  
     277         DO jj= 1, jpj 
     278            DO ji= 1, jpi 
     279               zsum1(ji,jj) = zsum1(ji,jj) + zempba_3d_1(ji,jj,jk) * e3w_n(ji,jj,jk) * wmask(ji,jj,jk) 
     280               zsum2(ji,jj) = zsum2(ji,jj) + zempba_3d_2(ji,jj,jk) * e3w_n(ji,jj,jk) * wmask(ji,jj,jk)               
     281            END DO 
     282        END DO  
     283      END DO 
     284!$OMP DO schedule(static) private(jj,ji)  
    242285      DO jj = 1, jpj 
    243286         DO ji = 1, jpi 
     
    248291 
    249292      DO jk= 1, jpk 
     293!$OMP DO schedule(static) private(jj,ji,zcoef,ztpc)  
    250294         DO jj = 1, jpj 
    251295            DO ji = 1, jpi 
     
    259303         END DO 
    260304       END DO 
     305!$OMP DO schedule(static) private(jj,ji)  
    261306       DO jj = 1, jpj 
    262307          DO ji = 1, jpi 
     
    267312      !                             ! first estimation bounded by 10 cm2/s (with n2 bounded by rn_n2min)  
    268313      zcoef = rn_tfe_itf / ( rn_tfe * rau0 ) 
     314!$OMP DO schedule(static) private(jk,jj,ji)  
    269315      DO jk = 1, jpk 
    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  
     316         DO jj = 1, jpj 
     317            DO ji = 1, jpi 
     318               zavt_itf(ji,jj,jk) = MIN(  10.e-4, zcoef * en_tmx(ji,jj) * zsum(ji,jj) * zempba_3d(ji,jj,jk)   & 
     319            &                                      / MAX( rn_n2min, rn2(ji,jj,jk) ) * tmask(ji,jj,jk)  ) 
     320            END DO 
     321         END DO 
     322      END DO 
     323 
     324!$OMP WORKSHARE 
    274325      zkz(:,:) = 0.e0               ! Associated potential energy consummed over the whole water column 
     326!$OMP END WORKSHARE 
    275327      DO jk = 2, jpkm1 
    276          zkz(:,:) = zkz(:,:) + e3w_n(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zavt_itf(:,:,jk) * wmask(:,:,jk) 
    277       END DO 
    278  
     328!$OMP DO schedule(static) private(jj,ji)  
     329         DO jj = 1, jpj 
     330            DO ji = 1, jpi 
     331               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) 
     332            END DO 
     333         END DO 
     334      END DO 
     335 
     336!$OMP DO schedule(static) private(jj,ji)  
    279337      DO jj = 1, jpj                ! Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz to recover en_tmx 
    280338         DO ji = 1, jpi 
     
    283341      END DO 
    284342 
     343!$OMP DO schedule(static) private(jk,jj,ji)  
    285344      DO jk = 2, jpkm1              ! Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zavt_itf bound by 300 cm2/s 
    286          zavt_itf(:,:,jk) = zavt_itf(:,:,jk) * MIN( zkz(:,:), 120./10. ) * wmask(:,:,jk)   ! kz max = 120 cm2/s 
    287       END DO 
     345         DO jj = 1, jpj 
     346            DO ji = 1, jpi 
     347               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 
     348            END DO 
     349         END DO 
     350      END DO 
     351!$OMP END DO NOWAIT 
     352!$OMP END PARALLEL 
    288353 
    289354      IF( kt == nit000 ) THEN       ! diagnose the nergy consumed by zavt_itf 
    290355         ztpc = 0.e0 
     356!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztpc)  
    291357         DO jk= 1, jpk 
    292358            DO jj= 1, jpj 
     
    303369 
    304370      !                             ! Update pav with the ITF mixing coefficient 
     371!$OMP PARALLEL DO schedule(static) private(jk)  
    305372      DO jk = 2, jpkm1 
    306373         pav(:,:,jk) = pav     (:,:,jk) * ( 1.e0 - mask_itf(:,:) )   & 
     
    409476      !                                ! only the energy available for mixing is taken into account, 
    410477      !                                ! (mixing efficiency tidal dissipation efficiency) 
     478!$OMP PARALLEL 
     479 
     480!$OMP WORKSHARE 
    411481      en_tmx(:,:) = - rn_tfe * rn_me * ( zem2(:,:) * 1.25 + zek1(:,:) ) * ssmask(:,:) 
     482!$OMP END WORKSHARE 
    412483 
    413484!============ 
     
    416487!!     the error is thus ~1% which I feel comfortable with, compared to uncertainties in tidal energy dissipation. 
    417488      !                                ! Vertical structure (az_tmx) 
     489!$OMP DO schedule(static) private(jj, ji) 
    418490      DO jj = 1, jpj                         ! part independent of the level 
    419491         DO ji = 1, jpi 
     
    423495         END DO 
    424496      END DO 
     497!$OMP DO schedule(static) private(jk, jj, ji) 
    425498      DO jk= 1, jpk                          ! complete with the level-dependent part 
    426499         DO jj = 1, jpj 
     
    430503         END DO 
    431504      END DO 
     505!$OMP END DO NOWAIT 
     506!$OMP END PARALLEL 
    432507!=========== 
    433508      ! 
     
    436511         ! Total power consumption due to vertical mixing 
    437512         ! zpc = rau0 * 1/rn_me * rn2 * zav_tide 
     513         ztpc = 0._wp 
     514!$OMP PARALLEL 
     515!$OMP WORKSHARE 
    438516         zav_tide(:,:,:) = 0.e0 
     517!$OMP END WORKSHARE 
     518!$OMP DO schedule(static) private(jk) 
    439519         DO jk = 2, jpkm1 
    440520            zav_tide(:,:,jk) = az_tmx(:,:,jk) / MAX( rn_n2min, rn2(:,:,jk) ) 
    441521         END DO 
    442522         ! 
    443          ztpc = 0._wp 
    444          zpc(:,:,:) = MAX(rn_n2min,rn2(:,:,:)) * zav_tide(:,:,:) 
     523!$OMP DO schedule(static) private(jk, jj, ji) 
     524         DO jk= 1, jpk 
     525            DO jj = 1, jpj 
     526               DO ji = 1, jpi 
     527                  zpc(ji,jj,jk) = MAX(rn_n2min,rn2(ji,jj,jk)) * zav_tide(ji,jj,jk) 
     528               END DO 
     529            END DO 
     530         END DO 
     531!$OMP DO schedule(static) private(jk, jj, ji, ztpc) 
    445532         DO jk= 2, jpkm1 
    446533            DO jj = 1, jpj 
     
    450537            END DO 
    451538         END DO 
     539!$OMP END DO NOWAIT 
     540!$OMP END PARALLEL 
    452541         IF( lk_mpp )   CALL mpp_sum( ztpc ) 
    453542         ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc 
     
    457546         ! 
    458547         ! control print 2 
    459          zav_tide(:,:,:) = MIN( zav_tide(:,:,:), 60.e-4 )    
    460          zkz(:,:) = 0._wp 
     548!$OMP PARALLEL 
     549!$OMP DO schedule(static) private(jk, jj, ji) 
     550         DO jk= 1, jpk 
     551            DO jj = 1, jpj 
     552               DO ji = 1, jpi 
     553                  zav_tide(ji,jj,jk) = MIN( zav_tide(ji,jj,jk), 60.e-4 )    
     554                  zkz(ji,jj) = 0._wp 
     555               END DO 
     556            END DO 
     557         END DO 
     558 
    461559         DO jk = 2, jpkm1 
    462                zkz(:,:) = zkz(:,:) + e3w_n(:,:,jk) * MAX(0.e0, rn2(:,:,jk)) * rau0 * zav_tide(:,:,jk) * wmask(:,:,jk) 
     560!$OMP DO schedule(static) private(jj, ji) 
     561            DO jj = 1, jpj 
     562               DO ji = 1, jpi 
     563                  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) 
     564               END DO 
     565            END DO 
    463566         END DO 
    464567         ! Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz 
     568!$OMP DO schedule(static) private(jj, ji) 
    465569         DO jj = 1, jpj 
    466570            DO ji = 1, jpi 
     
    471575         END DO 
    472576         ztpc = 1.e50 
     577!$OMP DO schedule(static) private(jj, ji, ztpc) 
    473578         DO jj = 1, jpj 
    474579            DO ji = 1, jpi 
     
    478583            END DO 
    479584         END DO 
     585!$OMP SINGLE 
    480586         WRITE(numout,*) '          Min de zkz ', ztpc, ' Max = ', maxval(zkz(:,:) ) 
     587!$OMP END SINGLE  
    481588         ! 
     589!$OMP DO schedule(static) private(jk) 
    482590         DO jk = 2, jpkm1 
    483591            zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) * wmask(:,:,jk)  !kz max = 300 cm2/s 
    484592         END DO 
    485593         ztpc = 0._wp 
    486          zpc(:,:,:) = Max(0.e0,rn2(:,:,:)) * zav_tide(:,:,:) 
     594!$OMP DO schedule(static) private(jk, jj, ji) 
     595         DO jk= 1, jpk 
     596            DO jj = 1, jpj 
     597               DO ji = 1, jpi 
     598                  zpc(ji,jj,jk) = Max(0.e0,rn2(ji,jj,jk)) * zav_tide(ji,jj,jk) 
     599               END DO 
     600            END DO 
     601         END DO 
     602!$OMP DO schedule(static) private(jk, jj, ji, ztpc) 
    487603         DO jk= 1, jpk 
    488604            DO jj = 1, jpj 
     
    492608            END DO 
    493609         END DO 
     610!$OMP END DO NOWAIT 
     611!$OMP END PARALLEL 
    494612         IF( lk_mpp )   CALL mpp_sum( ztpc ) 
    495613         ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc 
     
    500618               &     / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask   (:,:,jk) * tmask_i(:,:) ) ) 
    501619            ztpc = 1.e50 
     620!$OMP PARALLEL DO schedule(static) private(ztpc, jj, ji) 
    502621            DO jj = 1, jpj 
    503622               DO ji = 1, jpi 
     
    512631         WRITE(numout,*)  
    513632         WRITE(numout,*) '          Initial profile of tidal vertical mixing' 
     633 
    514634         DO jk = 1, jpk 
     635!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    515636            DO jj = 1,jpj 
    516637               DO ji = 1,jpi 
     
    518639               END DO 
    519640            END DO 
     641 
    520642            ze_z =                  SUM( e1e2t(:,:) * zkz  (:,:)    * tmask_i(:,:) )   & 
    521643               &     / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) ) 
    522644            WRITE(numout,*) '                jk= ', jk,'   ', ze_z * 1.e4,' cm2/s' 
     645 
    523646         END DO 
    524647         DO jk = 1, jpk 
    525             zkz(:,:) = az_tmx(:,:,jk) /rn_n2min 
     648!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     649            DO jj = 1,jpj 
     650               DO ji = 1,jpi 
     651                  zkz(ji,jj) = az_tmx(ji,jj,jk) /rn_n2min 
     652               END DO 
     653            END DO 
     654 
    526655            ze_z =                  SUM( e1e2t(:,:) * zkz  (:,:)    * tmask_i(:,:) )   & 
    527656               &     / MAX( 1.e-20, SUM( e1e2t(:,:) * wmask(:,:,jk) * tmask_i(:,:) ) ) 
     
    689818      !                        !* Critical slope mixing: distribute energy over the time-varying ocean depth, 
    690819      !                                                 using an exponential decay from the seafloor. 
     820!$OMP PARALLEL 
     821!$OMP DO schedule(static) private(jj,ji) 
    691822      DO jj = 1, jpj                ! part independent of the level 
    692823         DO ji = 1, jpi 
     
    697828      END DO 
    698829 
     830!$OMP DO schedule(static) private(jk) 
    699831      DO jk = 2, jpkm1              ! complete with the level-dependent part 
    700832         emix_tmx(:,:,jk) = zfact(:,:) * (  EXP( ( gde3w_n(:,:,jk  ) - zhdep(:,:) ) / hcri_tmx(:,:) )                      & 
     
    702834            &                          / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 
    703835      END DO 
     836!$OMP END DO NOWAIT 
     837!$OMP END PARALLEL 
    704838 
    705839      !                        !* Pycnocline-intensified mixing: distribute energy over the time-varying  
     
    710844      CASE ( 1 )               ! Dissipation scales as N (recommended) 
    711845 
     846!$OMP PARALLEL 
     847!$OMP WORKSHARE 
    712848         zfact(:,:) = 0._wp 
     849!$OMP END WORKSHARE 
    713850         DO jk = 2, jpkm1              ! part independent of the level 
    714             zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) * wmask(:,:,jk) 
    715          END DO 
    716  
     851!$OMP DO schedule(static) private(jj,ji) 
     852            DO jj = 1, jpj                ! part independent of the level 
     853               DO ji = 1, jpi 
     854                  zfact(ji,jj) = zfact(ji,jj) + e3w_n(ji,jj,jk) * SQRT(  MAX( 0._wp, rn2(ji,jj,jk) )  ) * wmask(ji,jj,jk) 
     855               END DO 
     856            END DO 
     857         END DO 
     858 
     859!$OMP DO schedule(static) private(jj,ji) 
    717860         DO jj = 1, jpj 
    718861            DO ji = 1, jpi 
     
    721864         END DO 
    722865 
     866!$OMP DO schedule(static) private(jk) 
    723867         DO jk = 2, jpkm1              ! complete with the level-dependent part 
    724868            emix_tmx(:,:,jk) = emix_tmx(:,:,jk) + zfact(:,:) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) * wmask(:,:,jk) 
    725869         END DO 
     870!$OMP END DO NOWAIT 
     871!$OMP END PARALLEL 
    726872 
    727873      CASE ( 2 )               ! Dissipation scales as N^2 
    728874 
     875!$OMP PARALLEL 
     876!$OMP WORKSHARE 
    729877         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  
     878!$OMP END WORKSHARE 
     879         DO jk = 2, jpkm1             
     880!$OMP DO schedule(static) private(jj,ji) 
     881            DO jj = 1, jpj            
     882               DO ji = 1, jpi 
     883                  zfact(ji,jj) = zfact(ji,jj) + e3w_n(ji,jj,jk) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,jj,jk) 
     884               END DO 
     885            END DO 
     886         END DO 
     887 
     888!$OMP DO schedule(static) private(jj,ji) 
    734889         DO jj= 1, jpj 
    735890            DO ji = 1, jpi 
     
    738893         END DO 
    739894 
     895!$OMP DO schedule(static) private(jk) 
    740896         DO jk = 2, jpkm1              ! complete with the level-dependent part 
    741897            emix_tmx(:,:,jk) = emix_tmx(:,:,jk) + zfact(:,:) * MAX( 0._wp, rn2(:,:,jk) ) * wmask(:,:,jk) 
    742898         END DO 
     899!$OMP END DO NOWAIT 
     900!$OMP END PARALLEL 
    743901 
    744902      END SELECT 
     
    747905      !                        !* ocean depth as proportional to rn2 * exp(-z_wkb/rn_hbot) 
    748906       
     907!$OMP PARALLEL 
     908!$OMP WORKSHARE 
    749909      zwkb(:,:,:) = 0._wp 
    750910      zfact(:,:) = 0._wp 
     911!$OMP END WORKSHARE 
    751912      DO jk = 2, jpkm1 
    752          zfact(:,:) = zfact(:,:) + e3w_n(:,:,jk) * SQRT(  MAX( 0._wp, rn2(:,:,jk) )  ) * wmask(:,:,jk) 
    753          zwkb(:,:,jk) = zfact(:,:) 
    754       END DO 
    755  
     913!$OMP DO schedule(static) private(jj,ji) 
     914         DO jj = 1, jpj            
     915            DO ji = 1, jpi 
     916               zfact(ji,jj) = zfact(ji,jj) + e3w_n(ji,jj,jk) * SQRT(  MAX( 0._wp, rn2(ji,jj,jk) )  ) * wmask(ji,jj,jk) 
     917               zwkb(ji,jj,jk) = zfact(ji,jj) 
     918            END DO 
     919         END DO 
     920      END DO 
     921 
     922!$OMP DO schedule(static) private(jk,jj,ji) 
    756923      DO jk = 2, jpkm1 
    757924         DO jj = 1, jpj 
     
    762929         END DO 
    763930      END DO 
     931!$OMP WORKSHARE 
    764932      zwkb(:,:,1) = zhdep(:,:) * tmask(:,:,1) 
    765933 
    766934      zweight(:,:,:) = 0._wp 
     935!$OMP END WORKSHARE 
     936!$OMP DO schedule(static) private(jk) 
    767937      DO jk = 2, jpkm1 
    768938         zweight(:,:,jk) = MAX( 0._wp, rn2(:,:,jk) ) * hbot_tmx(:,:) * wmask(:,:,jk)                    & 
     
    770940      END DO 
    771941 
     942!$OMP WORKSHARE 
    772943      zfact(:,:) = 0._wp 
     944!$OMP END WORKSHARE 
    773945      DO jk = 2, jpkm1              ! part independent of the level 
    774          zfact(:,:) = zfact(:,:) + zweight(:,:,jk) 
    775       END DO 
    776  
     946!$OMP DO schedule(static) private(jj,ji) 
     947         DO jj = 1, jpj            
     948            DO ji = 1, jpi 
     949               zfact(ji,jj) = zfact(ji,jj) + zweight(ji,jj,jk) 
     950            END DO 
     951         END DO 
     952      END DO 
     953 
     954!$OMP DO schedule(static) private(jj,ji) 
    777955      DO jj = 1, jpj 
    778956         DO ji = 1, jpi 
     
    781959      END DO 
    782960 
     961!$OMP DO schedule(static) private(jk) 
    783962      DO jk = 2, jpkm1              ! complete with the level-dependent part 
    784963         emix_tmx(:,:,jk) = emix_tmx(:,:,jk) + zweight(:,:,jk) * zfact(:,:) * wmask(:,:,jk)   & 
    785964            &                                / ( gde3w_n(:,:,jk) - gde3w_n(:,:,jk-1) ) 
    786965      END DO 
     966!$OMP END DO NOWAIT 
    787967 
    788968 
    789969      ! Calculate molecular kinematic viscosity 
     970!$OMP WORKSHARE 
    790971      znu_t(:,:,:) = 1.e-4_wp * (  17.91_wp - 0.53810_wp * tsn(:,:,:,jp_tem) + 0.00694_wp * tsn(:,:,:,jp_tem) * tsn(:,:,:,jp_tem)  & 
    791972         &                                  + 0.02305_wp * tsn(:,:,:,jp_sal)  ) * tmask(:,:,:) * r1_rau0 
     973!$OMP END WORKSHARE 
     974!$OMP DO schedule(static) private(jk) 
    792975      DO jk = 2, jpkm1 
    793976         znu_w(:,:,jk) = 0.5_wp * ( znu_t(:,:,jk-1) + znu_t(:,:,jk) ) * wmask(:,:,jk) 
     
    795978 
    796979      ! Calculate turbulence intensity parameter Reb 
     980!$OMP DO schedule(static) private(jk) 
    797981      DO jk = 2, jpkm1 
    798982         zReb(:,:,jk) = emix_tmx(:,:,jk) / MAX( 1.e-20_wp, znu_w(:,:,jk) * rn2(:,:,jk) ) 
     
    800984 
    801985      ! Define internal wave-induced diffusivity 
     986!$OMP DO schedule(static) private(jk) 
    802987      DO jk = 2, jpkm1 
    803988         zav_wave(:,:,jk) = znu_w(:,:,jk) * zReb(:,:,jk) * r1_6   ! This corresponds to a constant mixing efficiency of 1/6 
    804989      END DO 
     990!$OMP END DO NOWAIT 
     991!$OMP END PARALLEL 
    805992 
    806993      IF( ln_mevar ) THEN              ! Variable mixing efficiency case : modify zav_wave in the 
     994!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    807995         DO jk = 2, jpkm1              ! energetic (Reb > 480) and buoyancy-controlled (Reb <10.224 ) regimes 
    808996            DO jj = 1, jpj 
     
    8181006      ENDIF 
    8191007 
     1008!$OMP PARALLEL DO schedule(static) private(jk) 
    8201009      DO jk = 2, jpkm1                 ! Bound diffusivity by molecular value and 100 cm2/s 
    8211010         zav_wave(:,:,jk) = MIN(  MAX( 1.4e-7_wp, zav_wave(:,:,jk) ), 1.e-2_wp  ) * wmask(:,:,jk) 
     
    8241013      IF( kt == nit000 ) THEN        !* Control print at first time-step: diagnose the energy consumed by zav_wave 
    8251014         ztpc = 0._wp 
     1015!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztpc) 
    8261016         DO jk = 2, jpkm1 
    8271017            DO jj = 1, jpj 
     
    8491039      !       
    8501040      IF( ln_tsdiff ) THEN          !* Option for differential mixing of salinity and temperature 
     1041!$OMP PARALLEL 
     1042!$OMP DO schedule(static) private(jk,jj,ji) 
    8511043         DO jk = 2, jpkm1              ! Calculate S/T diffusivity ratio as a function of Reb 
    8521044            DO jj = 1, jpj 
     
    8581050            END DO 
    8591051         END DO 
    860          CALL iom_put( "av_ratio", zav_ratio ) 
     1052!$OMP DO schedule(static) private(jk) 
    8611053         DO jk = 2, jpkm1           !* update momentum & tracer diffusivity with wave-driven mixing 
    8621054            fsavs(:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) * zav_ratio(:,:,jk) 
     
    8641056            avm  (:,:,jk) = avm(:,:,jk) + zav_wave(:,:,jk) 
    8651057         END DO 
     1058!$OMP END DO NOWAIT 
     1059!$OMP END PARALLEL 
     1060         CALL iom_put( "av_ratio", zav_ratio ) 
    8661061         ! 
    8671062      ELSE                          !* update momentum & tracer diffusivity with wave-driven mixing 
     1063!$OMP PARALLEL DO schedule(static) private(jk) 
    8681064         DO jk = 2, jpkm1 
    8691065            fsavs(:,:,jk) = avt(:,:,jk) + zav_wave(:,:,jk) 
     
    8731069      ENDIF 
    8741070 
     1071!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    8751072      DO jk = 2, jpkm1              !* update momentum diffusivity at wu and wv points 
    8761073         DO jj = 2, jpjm1 
     
    8881085                                    !  vertical integral of rau0 * Kz * N^2 (pcmap_tmx), energy density (emix_tmx) 
    8891086      IF( iom_use("bflx_tmx") .OR. iom_use("pcmap_tmx") ) THEN 
    890          bflx_tmx(:,:,:) = MAX( 0._wp, rn2(:,:,:) ) * zav_wave(:,:,:) 
     1087!$OMP PARALLEL 
     1088!$OMP DO schedule(static) private(jk,jj,ji) 
     1089      DO jk = 1, jpk 
     1090         DO jj = 1, jpj 
     1091            DO ji = 1, jpi 
     1092               bflx_tmx(ji,jj,jk) = MAX( 0._wp, rn2(ji,jj,jk) ) * zav_wave(ji,jj,jk) 
     1093            END DO 
     1094         END DO 
     1095      END DO 
     1096!$OMP END DO NOWAII 
     1097!$OMP WORKSHARE 
    8911098         pcmap_tmx(:,:) = 0._wp 
     1099!$OMP END WORKSHARE 
     1100!$OMP PARALLEL DO schedule(static) private(jk) 
    8921101         DO jk = 2, jpkm1 
    8931102            pcmap_tmx(:,:) = pcmap_tmx(:,:) + e3w_n(:,:,jk) * bflx_tmx(:,:,jk) * wmask(:,:,jk) 
    8941103         END DO 
     1104!$OMP WORKSHARE 
    8951105         pcmap_tmx(:,:) = rau0 * pcmap_tmx(:,:) 
     1106!$OMP END WORKSHARE NOWAIT 
     1107!$OMP END PARALLEL 
    8961108         CALL iom_put( "bflx_tmx", bflx_tmx ) 
    8971109         CALL iom_put( "pcmap_tmx", pcmap_tmx ) 
     
    9681180      ! ensures that avt remains larger than its molecular value (=1.4e-7). Therefore, avtb should  
    9691181      ! be set here to a very small value, and avmb to its (uniform) molecular value (=1.4e-6). 
     1182!$OMP PARALLEL WORKSHARE 
    9701183      avmb(:) = 1.4e-6_wp        ! viscous molecular value 
    9711184      avtb(:) = 1.e-10_wp        ! very small diffusive minimum (background avt is specified in zdf_tmx)     
    9721185      avtb_2d(:,:) = 1.e0_wp     ! uniform  
     1186!$OMP END PARALLEL WORKSHARE 
    9731187      IF(lwp) THEN                  ! Control print 
    9741188         WRITE(numout,*) 
     
    10031217      CALL iom_close(inum) 
    10041218 
     1219!$OMP PARALLEL WORKSHARE 
    10051220      ebot_tmx(:,:) = ebot_tmx(:,:) * ssmask(:,:) 
    10061221      epyc_tmx(:,:) = epyc_tmx(:,:) * ssmask(:,:) 
     
    10141229      zav_wave (:,:, 1 ) = 0._wp 
    10151230      zav_wave (:,:,jpk) = 0._wp 
     1231!$OMP END PARALLEL WORKSHARE 
    10161232 
    10171233      zbot = glob_sum( e1e2t(:,:) * ebot_tmx(:,:) ) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90

    r6140 r7037  
    6262      !     OF PHYTOPLANKTON AND DETRITUS 
    6363 
     64!$OMP PARALLEL 
     65!$OMP WORKSHARE 
    6466      xdiss(:,:,:) = 1. 
     67!$OMP END WORKSHARE 
    6568!!gm the use of nmld should be better here? 
     69!$OMP DO schedule(static) private(jk,jj,ji) 
    6670      DO jk = 2, jpkm1 
    6771         DO jj = 1, jpj 
     
    7276         END DO 
    7377      END DO 
     78!$OMP END DO NOWAIT 
     79!$OMP END PARALLEL 
    7480 
    7581      CALL p4z_opt  ( kt, knt )     ! Optic: PAR in the water column 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zche.F90

    r6291 r7037  
    154154      ! CHEMICAL CONSTANTS - SURFACE LAYER 
    155155      ! ---------------------------------- 
     156!$OMP PARALLEL 
     157!$OMP DO schedule(static) private(jj,ji,ztkel,zt,zt2,zsal,zsal2,zlogt,zcek1) 
    156158      DO jj = 1, jpj 
    157159         DO ji = 1, jpi 
     
    174176      ! OXYGEN SOLUBILITY - DEEP OCEAN 
    175177      ! ------------------------------- 
     178!$OMP DO schedule(static) private(jk,jj,ji,ztkel,zsal,zsal2,ztgg,ztgg2,ztgg3,ztgg4,ztgg5,zoxy) 
    176179      DO jk = 1, jpk 
    177180         DO jj = 1, jpj 
     
    196199      ! CHEMICAL CONSTANTS - DEEP OCEAN 
    197200      ! ------------------------------- 
     201!$OMP DO schedule(static) private(jk,jj,ji,zpres,ztkel,zsal,zsqrt,zsal15,zlogt,ztr,zis,zis2,zisqrt,ztc,zcl,zst,zft,zcks,zckf,zckb,zck1,zck2,zckw,zaksp0,zak1,zak2,zakb,zakw,zaksp1,zcpexp,zcpexp2,zbuf1,zbuf2) 
    198202      DO jk = 1, jpk 
    199203         DO jj = 1, jpj 
     
    317321         END DO 
    318322      END DO 
     323!$OMP END DO NOWAIT 
     324!$OMP END PARALLEL 
    319325      ! 
    320326      IF( nn_timing == 1 )  CALL timing_stop('p4z_che') 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90

    r6140 r7037  
    8282      ! 
    8383      CALL wrk_alloc( jpi,jpj,jpk,   zFe3, zFeL1, zTL1, ztotlig ) 
    84       zFe3 (:,:,:) = 0. 
    85       zFeL1(:,:,:) = 0. 
    86       zTL1 (:,:,:) = 0. 
    87       IF( ln_fechem ) THEN 
    88          CALL wrk_alloc( jpi,jpj,jpk,   zFe2, zFeL2, zTL2, zFeP ) 
    89          zFe2 (:,:,:) = 0. 
    90          zFeL2(:,:,:) = 0. 
    91          zTL2 (:,:,:) = 0. 
    92          zFeP (:,:,:) = 0. 
    93       ENDIF 
    9484 
    9585      ! Total ligand concentration : Ligands can be chosen to be constant or variable 
     
    9787      ! ------------------------------------------------- 
    9888      IF( ln_ligvar ) THEN 
    99          ztotlig(:,:,:) =  0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 
    100          ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. ) 
     89!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     90         DO jk = 1, jpk 
     91            DO jj = 1, jpj 
     92               DO ji = 1, jpi 
     93                  zFe3 (ji,jj,jk) = 0. 
     94                  zFeL1(ji,jj,jk) = 0. 
     95                  zTL1 (ji,jj,jk) = 0. 
     96                  ztotlig(ji,jj,jk) =  0.09 * trb(ji,jj,jk,jpdoc) * 1E6 + ligand * 1E9 
     97                  ztotlig(ji,jj,jk) =  MIN( ztotlig(ji,jj,jk), 10. ) 
     98               END DO 
     99            END DO 
     100         END DO 
    101101      ELSE 
     102!$OMP PARALLEL WORKSHARE 
    102103         ztotlig(:,:,:) = ligand * 1E9 
     104         zFe3 (:,:,:) = 0. 
     105         zFeL1(:,:,:) = 0. 
     106         zTL1 (:,:,:) = 0. 
     107!$OMP END PARALLEL WORKSHARE 
    103108      ENDIF 
    104109 
     
    109114         ! Chemistry is supposed to be fast enough to be at equilibrium 
    110115         ! ------------------------------------------------------------ 
     116         CALL wrk_alloc( jpi,jpj,jpk,   zFe2, zFeL2, zTL2, zFeP ) 
     117!$OMP PARALLEL  
     118!$OMP WORKSHARE 
     119         zFe2 (:,:,:) = 0. 
     120         zFeL2(:,:,:) = 0. 
     121         zTL2 (:,:,:) = 0. 
     122         zFeP (:,:,:) = 0. 
     123!$OMP END WORKSHARE 
     124!$OMP DO schedule(static) private(jk,jj,ji,ztligand,zionic,zph,zoxy,zkox,zkph2,zkph1,ztfe,za,zb,zc,zkappa1,zkappa2,za2,za1,za0,zp,zq,zp3,zq2,zd,zr,zphi,zxs,zfff,zfunc) 
    111125         DO jk = 1, jpkm1 
    112126            DO jj = 1, jpj 
     
    182196            END DO 
    183197         END DO 
     198!$OMP END DO NOWAIT  
     199!$OMP END PARALLEL  
    184200      ELSE 
    185201         ! ------------------------------------------------------------ 
     
    188204         ! Chemistry is supposed to be fast enough to be at equilibrium 
    189205         ! ------------------------------------------------------------ 
     206!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zkeq,zfesatur,ztfe) 
    190207         DO jk = 1, jpkm1 
    191208            DO jj = 1, jpj 
     
    209226      zdust = 0.         ! if no dust available 
    210227      ! 
     228!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zkeq,zfesatur,ztfe,zstep,zfeequi,zfecoll,ztrc,zlam1b,zscave,zdenom1,zdenom2,zlamfac,zdep,zcoag,zlam1a,zaggdfea,zaggdfeb) 
    211229      DO jk = 1, jpkm1 
    212230         DO jj = 1, jpj 
     
    223241                  zfeequi = ( zFe3(ji,jj,jk) + zFe2(ji,jj,jk) + zFeP(ji,jj,jk) ) * 1E-9 
    224242                  zfecoll = ( 0.3 * zFeL1(ji,jj,jk) + 0.5 * zFeL2(ji,jj,jk) ) * 1E-9 
     243               !  Define the bioavailable fraction of iron 
     244                  biron(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) - zFeP(ji,jj,jk) * 1E-9 ) 
    225245               ELSE 
    226246                  zfeequi = zFe3(ji,jj,jk) * 1E-9  
    227247                  zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 
     248                  biron(ji,jj,jk) = trb(ji,jj,jk,jpfer)  
    228249               ENDIF 
    229250#if defined key_kriest 
     
    278299      END DO 
    279300      ! 
    280       !  Define the bioavailable fraction of iron 
    281       !  ---------------------------------------- 
    282       IF( ln_fechem ) THEN 
    283           biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 
    284       ELSE 
    285           biron(:,:,:) = trb(:,:,:,jpfer)  
    286       ENDIF 
    287  
    288301      !  Output of some diagnostics variables 
    289302      !     --------------------------------- 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90

    r6291 r7037  
    119119#endif 
    120120 
     121!$OMP PARALLEL 
    121122      DO jm = 1, 10 
     123!$OMP DO schedule(static) private(jj,ji,zbot,zfact,zdic,zph,zalka,zalk,zah2) 
    122124         DO jj = 1, jpj 
    123125            DO ji = 1, jpi 
     
    142144            END DO 
    143145         END DO 
     146!$OMP END DO NOWAIT 
    144147      END DO 
    145148 
     
    152155      ! ------------------------------------------- 
    153156 
     157!$OMP DO schedule(static) private(jj,ji,ztc,ztc2,ztc3,ztc4,zsch_co2,zsch_o2,zws,zkgwan) 
    154158      DO jj = 1, jpj 
    155159         DO ji = 1, jpi 
     
    175179      END DO 
    176180 
     181!$OMP DO schedule(static) private(jj,ji,zfld,zflu,zfld16,zflu16) 
    177182      DO jj = 1, jpj 
    178183         DO ji = 1, jpi 
     
    191196         END DO 
    192197      END DO 
     198!$OMP END DO NOWAIT 
     199!$OMP END PARALLEL 
    193200 
    194201      t_oce_co2_flx     = glob_sum( oce_co2(:,:) )                    !  Total Flux of Carbon 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90

    r5656 r7037  
    4141      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    4242      ! 
    43       INTEGER  :: ji, jj                 ! dummy loop indices 
     43      INTEGER  :: ji, jj, jk             ! dummy loop indices 
    4444      REAL(wp) :: zvar                   ! local variable 
    4545      !!--------------------------------------------------------------------- 
     
    4949      ! Computation of phyto and zoo metabolic rate 
    5050      ! ------------------------------------------- 
    51       tgfunc (:,:,:) = EXP( 0.063913 * tsn(:,:,:,jp_tem) ) 
    52       tgfunc2(:,:,:) = EXP( 0.07608  * tsn(:,:,:,jp_tem) ) 
     51!$OMP PARALLEL 
     52!$OMP DO schedule(static) private(jk,jj,ji) 
     53      DO jk = 1, jpk 
     54         DO jj = 1, jpj 
     55            DO ji = 1, jpi 
     56               tgfunc (ji,jj,jk) = EXP( 0.063913 * tsn(ji,jj,jk,jp_tem) ) 
     57               tgfunc2(ji,jj,jk) = EXP( 0.07608  * tsn(ji,jj,jk,jp_tem) ) 
     58            END DO 
     59         END DO 
     60      END DO 
    5361 
    5462      ! Computation of the silicon dependant half saturation  constant for silica uptake 
    5563      ! --------------------------------------------------- 
    56       DO ji = 1, jpi 
    57          DO jj = 1, jpj 
     64!$OMP DO schedule(static) private(jj,ji,zvar) 
     65      DO jj = 1, jpj 
     66         DO ji = 1, jpi 
    5867            zvar = trb(ji,jj,1,jpsil) * trb(ji,jj,1,jpsil) 
    5968            xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zvar / ( xksilim * xksilim + zvar ) ) * 1e-6 ) 
     
    6271      ! 
    6372      IF( nday_year == nyear_len(1) ) THEN 
     73!$OMP WORKSHARE 
    6474         xksi   (:,:) = xksimax(:,:) 
    6575         xksimax(:,:) = 0._wp 
     76!$OMP END WORKSHARE NOWAIT 
    6677      ENDIF 
     78!$OMP END PARALLEL 
    6779      ! 
    6880      IF( nn_timing == 1 )  CALL timing_stop('p4z_int') 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90

    r5836 r7037  
    8383      IF( nn_timing == 1 )  CALL timing_start('p4z_lim') 
    8484      ! 
     85!$OMP PARALLEL 
     86!$OMP DO schedule(static) private(jk,jj,ji,zno3,zferlim,zconcd,zconcd2,zconcn,zconcn2,z1_trbphy,z1_trbdia,zconc1d,zconc1dnh4,zconc0n,zconc0nnh4,zdenom,zlim1,zlim2,zlim3,zlim4,zratio,zironmin) 
    8587      DO jk = 1, jpkm1 
    8688         DO jj = 1, jpj 
     
    159161         END DO 
    160162      END DO 
     163!$OMP END DO NOWAIT 
    161164 
    162165      ! Compute the fraction of nanophytoplankton that is made of calcifiers 
    163166      ! -------------------------------------------------------------------- 
     167!$OMP DO schedule(static) private(jk,jj,ji,zlim1,zlim2,zlim3,ztem1,ztem2,zetot1,zetot2) 
    164168      DO jk = 1, jpkm1 
    165169         DO jj = 1, jpj 
     
    185189         END DO 
    186190      END DO 
     191!$OMP END DO NOWAIT 
     192!$OMP END PARALLEL 
    187193      ! 
    188194      ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90

    r6291 r7037  
    7272      CALL wrk_alloc( jpi, jpj, jpk, zco3, zcaldiss ) 
    7373      ! 
     74 
     75!$OMP PARALLEL 
     76!$OMP WORKSHARE 
    7477      zco3    (:,:,:) = 0. 
    7578      zcaldiss(:,:,:) = 0. 
     79!$OMP END WORKSHARE 
    7680      !     ------------------------------------------- 
    7781      !     COMPUTE [CO3--] and [H+] CONCENTRATIONS 
     
    8084      DO jn = 1, 5                               !  BEGIN OF ITERATION 
    8185         ! 
     86!$OMP DO schedule(static) private(jk, jj, ji, zfact, zph, zdic, zalka, zalk, zaldi, zah2) 
    8287         DO jk = 1, jpkm1 
    8388            DO jj = 1, jpj 
     
    109114      !     --------------------------------------------------------- 
    110115 
     116!$OMP DO schedule(static) private(jk, jj, ji, zcalcon, zfact, zomegaca, zexcess0, zexcess, zdispot) 
    111117      DO jk = 1, jpkm1 
    112118         DO jj = 1, jpj 
     
    142148         END DO 
    143149      END DO 
     150!$OMP END DO NOWAIT 
     151!$OMP END PARALLEL 
    144152      ! 
    145153 
     
    151159      ELSE 
    152160         IF( ln_diatrc ) THEN 
    153             trc3d(:,:,:,jp_pcs0_3d    ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) 
    154             trc3d(:,:,:,jp_pcs0_3d + 1) = zco3(:,:,:)              * tmask(:,:,:) 
    155             trc3d(:,:,:,jp_pcs0_3d + 2) = aksp(:,:,:) / calcon     * tmask(:,:,:) 
     161!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     162         DO jk = 1, jpk 
     163            DO jj = 1, jpj 
     164               DO ji = 1, jpi 
     165                  trc3d(ji,jj,jk,jp_pcs0_3d    ) = -1. * LOG10( hi(ji,jj,jk) ) * tmask(ji,jj,jk) 
     166                  trc3d(ji,jj,jk,jp_pcs0_3d + 1) = zco3(ji,jj,jk)              * tmask(ji,jj,jk) 
     167                  trc3d(ji,jj,jk,jp_pcs0_3d + 2) = aksp(ji,jj,jk) / calcon     * tmask(ji,jj,jk) 
     168               END DO 
     169            END DO 
     170         END DO 
    156171         ENDIF 
    157172      ENDIF 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90

    r5836 r7037  
    8989      IF( lk_iomput ) THEN 
    9090         CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     91!$OMP PARALLEL WORKSHARE 
    9192         zgrazing(:,:,:) = 0._wp 
     93!$OMP END PARALLEL WORKSHARE 
    9294      ENDIF 
    9395 
     96!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zcompam,zstep,zfact,zrespz2,ztortz2,zcompadi,zcompaz,zcompaph,zcompapoc,zfood,zfoodlim,zdenom,zdenom2,zgraze2,zgrazd,zgrazz,zgrazn,zgrazpoc,zgraznf,zgrazf,zgrazpof,zgrazffeg,zgrazfffg,zgrazffep,zgrazfffp,zgraztot,zproport,zratio,zratio2,zfrac,zfracfe,zgraztotf,zgrasrat,zgrasratn,zepshert,zepsherv,zgrarem2,zgrafer2,zgrapoc2,zgrarsig,zmortz2,zmortzgoc,zprcaca) 
    9497      DO jk = 1, jpkm1 
    9598         DO jj = 1, jpj 
     
    249252         CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
    250253         IF( iom_use( "GRAZ2" ) ) THEN 
     254!$OMP PARALLEL WORKSHARE 
    251255            zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !   Total grazing of phyto by zooplankton 
     256!$OMP END PARALLEL WORKSHARE 
    252257            CALL iom_put( "GRAZ2", zw3d ) 
    253258         ENDIF 
    254259         IF( iom_use( "PCAL" ) ) THEN 
     260!$OMP PARALLEL WORKSHARE 
    255261            zw3d(:,:,:) = prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)   !  Calcite production 
     262!$OMP END PARALLEL WORKSHARE 
    256263            CALL iom_put( "PCAL", zw3d )   
    257264         ENDIF 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90

    r5836 r7037  
    8585      IF( lk_iomput )  CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
    8686      ! 
     87!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zcompaz,zstep,zfact,zrespz,ztortz,zcompadi,zcompaph,zcompapoc,zfood,zfoodlim,zdenom,zdenom2,zgraze,zgrazp,zgrazm,zgrazsd,zgrazpf,zgrazmf,zgrazsf,zgraztot,zgraztotf,zgraztotn,zgrasrat,zgrasratn,zepshert,zepsherv,zgrafer,zgrarem,zgrapoc,zgrarsig,zmortz,zprcaca) 
    8788      DO jk = 1, jpkm1 
    8889         DO jj = 1, jpj 
     
    191192         CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
    192193         IF( iom_use( "GRAZ1" ) ) THEN 
     194!$OMP PARALLEL WORKSHARE 
    193195            zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton 
     196!$OMP END PARALLEL WORKSHARE 
    194197            CALL iom_put( "GRAZ1", zw3d ) 
    195198         ENDIF 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90

    r5836 r7037  
    7979      IF( nn_timing == 1 )  CALL timing_start('p4z_nano') 
    8080      ! 
     81!$OMP PARALLEL 
     82!$OMP WORKSHARE 
    8183      prodcal(:,:,:) = 0.  !: calcite production variable set to zero 
     84!$OMP END WORKSHARE 
     85!$OMP DO schedule(static) private(jk,jj,ji,zcompaph,zstep,zsizerat,zrespp,ztortp,zmortp,zfactfe,zfactch,zprcaca,zfracal) 
    8286      DO jk = 1, jpkm1 
    8387         DO jj = 1, jpj 
     
    132136         END DO 
    133137      END DO 
     138!$OMP END DO NOWAIT 
     139!$OMP END PARALLEL 
    134140      ! 
    135141       IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     
    166172      !     ------------------------------------------------------------ 
    167173 
     174!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zcompadi,zstep,zlim2,zlim1,zrespp2,ztortp2,zmortp2,zfactfe,zfactch,zfactsi) 
    168175      DO jk = 1, jpkm1 
    169176         DO jj = 1, jpj 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r6140 r7037  
    8888      !     Initialisation of variables used to compute PAR 
    8989      !     ----------------------------------------------- 
     90!$OMP PARALLEL 
     91!$OMP WORKSHARE 
    9092      ze1(:,:,:) = 0._wp 
    9193      ze2(:,:,:) = 0._wp 
    9294      ze3(:,:,:) = 0._wp 
     95!$OMP END WORKSHARE NOWAIT 
    9396      !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
     97!$OMP DO schedule(static) private(jk,jj,ji,zchl,irgb) 
    9498      DO jk = 1, jpkm1                         !  -------------------------------------------------------- 
    9599         DO jj = 1, jpj 
     
    105109         END DO 
    106110      END DO 
     111!$OMP END DO NOWAIT 
     112!$OMP END PARALLEL 
    107113      !                                        !* Photosynthetically Available Radiation (PAR) 
    108114      !                                        !  -------------------------------------- 
    109115      IF( l_trcdm2dc ) THEN                     !  diurnal cycle 
    110116         ! 1% of qsr to compute euphotic layer 
     117!$OMP PARALLEL WORKSHARE 
    111118         zqsr100(:,:) = 0.01 * qsr_mean(:,:)     !  daily mean qsr 
     119!$OMP END PARALLEL WORKSHARE 
    112120         ! 
    113121         CALL p4z_opt_par( kt, qsr_mean, ze1, ze2, ze3 )  
    114122         ! 
     123!$OMP PARALLEL DO schedule(static) private(jk) 
    115124         DO jk = 1, nksrp       
    116125            etot_ndcy(:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     
    121130         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 )  
    122131         ! 
     132!$OMP PARALLEL DO schedule(static) private(jk) 
    123133         DO jk = 1, nksrp       
    124134            etot(:,:,jk) =  ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 
     
    127137      ELSE 
    128138         ! 1% of qsr to compute euphotic layer 
     139!$OMP PARALLEL WORKSHARE 
    129140         zqsr100(:,:) = 0.01 * qsr(:,:) 
     141!$OMP END PARALLEL WORKSHARE 
    130142         ! 
    131143         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 )  
    132144         ! 
     145!$OMP PARALLEL  
     146!$OMP DO schedule(static) private(jk) 
    133147         DO jk = 1, nksrp       
    134148            etot (:,:,jk) =        ze1(:,:,jk) +        ze2(:,:,jk) +       ze3(:,:,jk) 
     
    136150            ediat(:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
    137151         END DO 
     152!$OMP WORKSHARE 
    138153         etot_ndcy(:,:,:) =  etot(:,:,:)  
     154!$OMP END WORKSHARE NOWAIT 
     155!$OMP END PARALLEL 
    139156      ENDIF 
    140157 
     
    144161         CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3, pe0=ze0 ) 
    145162         ! 
     163!$OMP PARALLEL  
     164!$OMP WORKSHARE 
    146165         etot3(:,:,1) =  qsr(:,:) * tmask(:,:,1) 
     166!$OMP END WORKSHARE 
     167!$OMP DO schedule(static) private(jk) 
    147168         DO jk = 2, nksrp + 1 
    148169            etot3(:,:,jk) =  ( ze0(:,:,jk) + ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ) * tmask(:,:,jk) 
    149170         END DO 
     171!$OMP END DO NOWAIT 
     172!$OMP END PARALLEL 
    150173         !                                     !  ------------------------ 
    151174      ENDIF 
    152175      !                                        !* Euphotic depth and level 
     176!$OMP PARALLEL  
     177!$OMP WORKSHARE 
    153178      neln(:,:) = 1                            !  ------------------------ 
    154179      heup(:,:) = 300. 
     180!$OMP END WORKSHARE 
    155181 
    156182      DO jk = 2, nksrp 
     183!$OMP DO schedule(static) private(jj,ji) 
    157184         DO jj = 1, jpj 
    158185           DO ji = 1, jpi 
     
    166193      END DO 
    167194      ! 
    168       heup(:,:) = MIN( 300., heup(:,:) ) 
     195!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     196      DO jj = 1, jpj 
     197         DO ji = 1, jpi 
     198            heup(ji,jj) = MIN( 300. , heup(ji,jj)) 
     199        END DO 
     200      END DO 
    169201      !                                        !* mean light over the mixed layer 
     202!$OMP WORKSHARE 
    170203      zdepmoy(:,:)   = 0.e0                    !  ------------------------------- 
    171204      zetmp1 (:,:)   = 0.e0 
     
    173206      zetmp3 (:,:)   = 0.e0 
    174207      zetmp4 (:,:)   = 0.e0 
     208!$OMP END WORKSHARE 
    175209 
    176210      DO jk = 1, nksrp 
     211!$OMP DO schedule(static) private(jj,ji) 
    177212         DO jj = 1, jpj 
    178213            DO ji = 1, jpi 
     
    186221            END DO 
    187222         END DO 
     223!$OMP END DO NOWAIT 
    188224      END DO 
    189225      ! 
     226!$OMP WORKSHARE 
    190227      emoy(:,:,:) = etot(:,:,:)       ! remineralisation 
    191228      zpar(:,:,:) = etot_ndcy(:,:,:)  ! diagnostic : PAR with no diurnal cycle  
    192       ! 
     229!$OMP END WORKSHARE 
     230      ! 
     231!$OMP DO schedule(static) private(jk,jj,ji,z1_dep) 
    193232      DO jk = 1, nksrp 
    194233         DO jj = 1, jpj 
     
    204243         END DO 
    205244      END DO 
     245!$OMP END DO NOWAIT 
     246!$OMP END PARALLEL 
    206247      ! 
    207248      IF( lk_iomput ) THEN 
     
    213254      ELSE 
    214255         IF( ln_diatrc ) THEN        ! save output diagnostics 
     256!$OMP PARALLEL WORKSHARE 
    215257            trc2d(:,:,  jp_pcs0_2d + 10) = heup(:,:  ) * tmask(:,:,1) 
    216258            trc3d(:,:,:,jp_pcs0_3d + 3)  = etot(:,:,:) * tmask(:,:,:) 
     259!$OMP END PARALLEL WORKSHARE 
    217260         ENDIF 
    218261      ENDIF 
     
    244287 
    245288      !  Real shortwave 
    246       IF( ln_varpar ) THEN  ;  zqsr(:,:) = par_varsw(:,:) * pqsr(:,:) 
    247       ELSE                  ;  zqsr(:,:) = xparsw         * pqsr(:,:) 
     289      IF( ln_varpar ) THEN   
     290!$OMP PARALLEL WORKSHARE 
     291          zqsr(:,:) = par_varsw(:,:) * pqsr(:,:) 
     292!$OMP END PARALLEL WORKSHARE 
     293      ELSE                  
     294!$OMP PARALLEL WORKSHARE 
     295          zqsr(:,:) = xparsw         * pqsr(:,:) 
     296!$OMP END PARALLEL WORKSHARE 
    248297      ENDIF 
    249298      ! 
    250299      IF( PRESENT( pe0 ) ) THEN     !  W-level 
    251300         ! 
     301!$OMP PARALLEL 
     302!$OMP WORKSHARE 
    252303         pe0(:,:,1) = pqsr(:,:) - 3. * zqsr(:,:)    !   ( 1 - 3 * alpha ) * q 
    253304         pe1(:,:,1) = zqsr(:,:)          
    254305         pe2(:,:,1) = zqsr(:,:) 
    255306         pe3(:,:,1) = zqsr(:,:) 
     307!$OMP END WORKSHARE 
    256308         ! 
    257309         DO jk = 2, nksrp + 1 
     310!$OMP DO schedule(static) private(jj,ji) 
    258311            DO jj = 1, jpj 
    259312               DO ji = 1, jpi 
     
    265318              ! 
    266319            END DO 
     320!$OMP END DO NOWAIT 
    267321            ! 
    268322         END DO 
     323!$OMP END PARALLEL 
    269324        ! 
    270325      ELSE   ! T- level 
    271326        ! 
    272         pe1(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekb(:,:,1) ) 
    273         pe2(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekg(:,:,1) ) 
    274         pe3(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekr(:,:,1) ) 
     327!$OMP PARALLEL 
     328!$OMP DO schedule(static) private(jj,ji) 
     329      DO jj = 1, jpj 
     330         DO ji = 1, jpi 
     331            pe1(ji,jj,1) = zqsr(ji,jj) * EXP( -0.5 * ekb(ji,jj,1) ) 
     332            pe2(ji,jj,1) = zqsr(ji,jj) * EXP( -0.5 * ekg(ji,jj,1) ) 
     333            pe3(ji,jj,1) = zqsr(ji,jj) * EXP( -0.5 * ekr(ji,jj,1) ) 
     334         END DO 
     335      END DO 
    275336        ! 
    276337        DO jk = 2, nksrp       
     338!$OMP DO schedule(static) private(jj,ji) 
    277339           DO jj = 1, jpj 
    278340              DO ji = 1, jpi 
     
    282344              END DO 
    283345           END DO 
     346!$OMP END DO NOWAIT 
    284347        END DO     
     348!$OMP END PARALLEL 
    285349        ! 
    286350      ENDIF 
     
    315379         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_par > 1 ) ) THEN 
    316380            CALL fld_read( kt, 1, sf_par ) 
     381!$OMP PARALLEL WORKSHARE 
    317382            par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) / 3.0 
     383!$OMP END PARALLEL WORKSHARE 
    318384         ENDIF 
    319385      ENDIF 
     
    391457      IF(lwp) WRITE(numout,*) '        level of light extinction = ', nksrp, ' ref depth = ', gdepw_1d(nksrp+1), ' m' 
    392458      ! 
     459!$OMP PARALLEL WORKSHARE 
    393460                         ekr      (:,:,:) = 0._wp 
    394461                         ekb      (:,:,:) = 0._wp 
     
    398465                         enano    (:,:,:) = 0._wp 
    399466                         ediat    (:,:,:) = 0._wp 
    400       IF( ln_qsr_bio )   etot3    (:,:,:) = 0._wp 
     467!$OMP END PARALLEL WORKSHARE 
     468      IF( ln_qsr_bio ) THEN 
     469!$OMP PARALLEL WORKSHARE 
     470                         etot3    (:,:,:) = 0._wp 
     471!$OMP END PARALLEL WORKSHARE 
     472      END IF 
    401473      !  
    402474      IF( nn_timing == 1 )  CALL timing_stop('p4z_opt_init') 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90

    r6140 r7037  
    9494      CALL wrk_alloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd ) 
    9595      ! 
     96!$OMP PARALLEL WORKSHARE 
    9697      zprorca (:,:,:) = 0._wp 
    9798      zprorcad(:,:,:) = 0._wp 
     
    110111      ! Computation of the optimal production 
    111112      prmax(:,:,:) = 0.6_wp * r1_rday * tgfunc(:,:,:)  
    112       IF( lk_degrad )  prmax(:,:,:) = prmax(:,:,:) * facvol(:,:,:)  
     113 
     114      ! day length in hours 
     115      zstrn(:,:) = 0. 
     116!$OMP END PARALLEL WORKSHARE 
     117 
     118      IF( lk_degrad ) THEN 
     119!$OMP PARALLEL WORKSHARE 
     120        prmax(:,:,:) = prmax(:,:,:) * facvol(:,:,:)  
     121!$OMP END PARALLEL WORKSHARE 
     122      END IF 
    113123 
    114124      ! compute the day length depending on latitude and the day 
     
    116126      zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
    117127 
    118       ! day length in hours 
    119       zstrn(:,:) = 0. 
     128!$OMP PARALLEL 
     129!$OMP DO schedule(static) private(jj,ji,zargu) 
    120130      DO jj = 1, jpj 
    121131         DO ji = 1, jpi 
     
    127137 
    128138      ! Impact of the day duration on phytoplankton growth 
     139!$OMP DO schedule(static) private(jk,jj,ji,zval) 
    129140      DO jk = 1, jpkm1 
    130141         DO jj = 1 ,jpj 
     
    139150         END DO 
    140151      END DO 
     152!$OMP END DO 
    141153 
    142154      ! Maximum light intensity 
     155!$OMP WORKSHARE 
    143156      WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 
    144157      zstrn(:,:) = 24. / zstrn(:,:) 
     158!$OMP END WORKSHARE NOWAIT 
     159!$OMP END PARALLEL 
    145160 
    146161      IF( ln_newprod ) THEN 
     162!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztn,zadap,zconctemp,zconctemp2,znanotot,zdiattot,zpislopen,zpislope2n,zmaxday) 
    147163         DO jk = 1, jpkm1 
    148164            DO jj = 1, jpj 
     
    180196         END DO 
    181197      ELSE 
     198!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztn,zadap,zconctemp,zconctemp2,znanotot,zpislopen,zpislope2n) 
    182199         DO jk = 1, jpkm1 
    183200            DO jj = 1, jpj 
     
    222239      !  Computation of a proxy of the N/C ratio 
    223240      !  --------------------------------------- 
     241!$OMP PARALLEL  
     242!$OMP DO schedule(static) private(jk,jj,ji,zval) 
    224243      DO jk = 1, jpkm1 
    225244         DO jj = 1, jpj 
     
    234253         END DO 
    235254      END DO 
    236  
    237  
     255!$OMP END DO NOWAIT 
     256 
     257 
     258!$OMP DO schedule(static) private(jk,jj,ji,zlim,zsilim,zsilfac,zsiborn,zsilfac2) 
    238259      DO jk = 1, jpkm1 
    239260         DO jj = 1, jpj 
     
    260281         END DO 
    261282      END DO 
     283!$OMP END DO NOWAIT 
    262284 
    263285      !  Computation of the limitation term due to a mixed layer deeper than the euphotic depth 
     286!$OMP DO schedule(static) private(jj,ji,zmxltst,zmxlday) 
    264287      DO jj = 1, jpj 
    265288         DO ji = 1, jpi 
     
    272295  
    273296      !  Mixed-layer effect on production                                                                                
     297!$OMP DO schedule(static) private(jk,jj,ji) 
    274298      DO jk = 1, jpkm1 
    275299         DO jj = 1, jpj 
     
    284308 
    285309      ! Computation of the various production terms  
     310!$OMP DO schedule(static) private(jk,jj,ji,zratio,zmax) 
    286311      DO jk = 1, jpkm1 
    287312         DO jj = 1, jpj 
     
    314339         END DO 
    315340      END DO 
     341!$OMP END DO NOWAIT 
     342!$OMP END PARALLEL 
    316343 
    317344      IF( ln_newprod ) THEN 
     345!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,znanotot,zprod,zdiattot) 
    318346         DO jk = 1, jpkm1 
    319347            DO jj = 1, jpj 
     
    341369         END DO 
    342370      ELSE 
     371!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,znanotot,zprod,zdiattot) 
    343372         DO jk = 1, jpkm1 
    344373            DO jj = 1, jpj 
     
    364393 
    365394      !   Update the arrays TRA which contain the biological sources and sinks 
     395!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zproreg,zproreg2) 
    366396      DO jk = 1, jpkm1 
    367397         DO jj = 1, jpj 
     
    403433          ! 
    404434          IF( iom_use( "PPPHY" ) .OR. iom_use( "PPPHY2" ) )  THEN 
     435!$OMP PARALLEL WORKSHARE 
    405436              zw3d(:,:,:) = zprorca (:,:,:) * zfact * tmask(:,:,:)  ! primary production by nanophyto 
     437!$OMP END PARALLEL WORKSHARE 
    406438              CALL iom_put( "PPPHY"  , zw3d ) 
    407439              ! 
     440!$OMP PARALLEL WORKSHARE 
    408441              zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:)  ! primary production by diatomes 
     442!$OMP END PARALLEL WORKSHARE 
    409443              CALL iom_put( "PPPHY2"  , zw3d ) 
    410444          ENDIF 
    411445          IF( iom_use( "PPNEWN" ) .OR. iom_use( "PPNEWD" ) )  THEN 
     446!$OMP PARALLEL WORKSHARE 
    412447              zw3d(:,:,:) = zpronew (:,:,:) * zfact * tmask(:,:,:)  ! new primary production by nanophyto 
     448!$OMP END PARALLEL WORKSHARE 
    413449              CALL iom_put( "PPNEWN"  , zw3d ) 
    414450              ! 
     451!$OMP PARALLEL WORKSHARE 
    415452              zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:)  ! new primary production by diatomes 
     453!$OMP END PARALLEL WORKSHARE 
    416454              CALL iom_put( "PPNEWD"  , zw3d ) 
    417455          ENDIF 
    418456          IF( iom_use( "PBSi" ) )  THEN 
     457!$OMP PARALLEL WORKSHARE 
    419458              zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) ! biogenic silica production 
     459!$OMP END PARALLEL WORKSHARE 
    420460              CALL iom_put( "PBSi"  , zw3d ) 
    421461          ENDIF 
    422462          IF( iom_use( "PFeN" ) .OR. iom_use( "PFeD" ) )  THEN 
     463!$OMP PARALLEL WORKSHARE 
    423464              zw3d(:,:,:) = zprofen(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron production by nanophyto 
     465!$OMP END PARALLEL WORKSHARE 
    424466              CALL iom_put( "PFeN"  , zw3d ) 
    425467              ! 
     468!$OMP PARALLEL WORKSHARE 
    426469              zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron production by  diatomes 
     470!$OMP END PARALLEL WORKSHARE 
    427471              CALL iom_put( "PFeD"  , zw3d ) 
    428472          ENDIF 
    429473          IF( iom_use( "Mumax" ) )  THEN 
     474!$OMP PARALLEL WORKSHARE 
    430475              zw3d(:,:,:) = prmax(:,:,:) * tmask(:,:,:)   ! Maximum growth rate 
     476!$OMP END PARALLEL WORKSHARE 
    431477              CALL iom_put( "Mumax"  , zw3d ) 
    432478          ENDIF 
    433479          IF( iom_use( "MuN" ) .OR. iom_use( "MuD" ) )  THEN 
     480!$OMP PARALLEL WORKSHARE 
    434481              zw3d(:,:,:) = zprbio(:,:,:) * xlimphy(:,:,:) * tmask(:,:,:)  ! Realized growth rate for nanophyto 
     482!$OMP END PARALLEL WORKSHARE 
    435483              CALL iom_put( "MuN"  , zw3d ) 
    436484              ! 
     485!$OMP PARALLEL WORKSHARE 
    437486              zw3d(:,:,:) =  zprdia(:,:,:) * xlimdia(:,:,:) * tmask(:,:,:)  ! Realized growth rate for diatoms 
     487!$OMP END PARALLEL WORKSHARE 
    438488              CALL iom_put( "MuD"  , zw3d ) 
    439489          ENDIF 
    440490          IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) )  THEN 
     491!$OMP PARALLEL WORKSHARE 
    441492              zw3d(:,:,:) = zprbio (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 
     493!$OMP END PARALLEL WORKSHARE 
    442494              CALL iom_put( "LNlight"  , zw3d ) 
    443495              ! 
     496!$OMP PARALLEL WORKSHARE 
    444497              zw3d(:,:,:) =  zprdia (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:)  ! light limitation term 
     498!$OMP END PARALLEL WORKSHARE 
    445499              CALL iom_put( "LDlight"  , zw3d ) 
    446500          ENDIF 
    447501          IF( iom_use( "TPP" ) )  THEN 
     502!$OMP PARALLEL WORKSHARE 
    448503              zw3d(:,:,:) = ( zprorca(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:)  ! total primary production 
     504!$OMP END PARALLEL WORKSHARE 
    449505              CALL iom_put( "TPP"  , zw3d ) 
    450506          ENDIF 
    451507          IF( iom_use( "TPNEW" ) )  THEN 
     508!$OMP PARALLEL WORKSHARE 
    452509              zw3d(:,:,:) = ( zpronew(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:)  ! total new production 
     510!$OMP END PARALLEL WORKSHARE 
    453511              CALL iom_put( "TPNEW"  , zw3d ) 
    454512          ENDIF 
    455513          IF( iom_use( "TPBFE" ) )  THEN 
     514!$OMP PARALLEL WORKSHARE 
    456515              zw3d(:,:,:) = ( zprofen(:,:,:) + zprofed(:,:,:) ) * zfact * tmask(:,:,:)  ! total biogenic iron production 
     516!$OMP END PARALLEL WORKSHARE 
    457517              CALL iom_put( "TPBFE"  , zw3d ) 
    458518          ENDIF 
    459519          IF( iom_use( "INTPPPHY" ) .OR. iom_use( "INTPPPHY2" ) ) THEN   
     520!$OMP PARALLEL 
     521!$OMP WORKSHARE 
    460522             zw2d(:,:) = 0. 
     523!$OMP END WORKSHARE 
    461524             DO jk = 1, jpkm1 
    462                zw2d(:,:) = zw2d(:,:) + zprorca (:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated  primary produc. by nano 
     525!$OMP DO schedule(static) private(jj,ji) 
     526                DO jj = 1, jpj 
     527                   DO ji =1 ,jpi 
     528                      zw2d(ji,jj) = zw2d(ji,jj) + zprorca (ji,jj,jk) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! vert. integrated  primary produc. by nano 
     529                   END DO 
     530                END DO 
     531!$OMP END DO NOWAIT 
    463532             ENDDO 
     533!$OMP END PARALLEL 
    464534             CALL iom_put( "INTPPPHY" , zw2d ) 
    465535             ! 
     536!$OMP PARALLEL 
     537!$OMP WORKSHARE 
    466538             zw2d(:,:) = 0. 
     539!$OMP END WORKSHARE 
    467540             DO jk = 1, jpkm1 
    468                 zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated  primary produc. by diatom 
     541!$OMP DO schedule(static) private(jj,ji) 
     542                DO jj = 1, jpj 
     543                   DO ji =1 ,jpi 
     544                      zw2d(ji,jj) = zw2d(ji,jj) + zprorcad(ji,jj,jk) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert. integrated  primary produc. by diatom 
     545                   END DO 
     546                END DO 
     547!$OMP END DO NOWAIT 
    469548             ENDDO 
     549!$OMP END PARALLEL 
    470550             CALL iom_put( "INTPPPHY2" , zw2d ) 
    471551          ENDIF 
    472552          IF( iom_use( "INTPP" ) ) THEN    
     553!$OMP PARALLEL 
     554!$OMP WORKSHARE 
    473555             zw2d(:,:) = 0. 
     556!$OMP END WORKSHARE 
    474557             DO jk = 1, jpkm1 
    475                 zw2d(:,:) = zw2d(:,:) + ( zprorca(:,:,jk) + zprorcad(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated pp 
     558!$OMP DO schedule(static) private(jj,ji) 
     559                DO jj = 1, jpj 
     560                   DO ji =1 ,jpi 
     561                      zw2d(ji,jj) = zw2d(ji,jj) + ( zprorca(ji,jj,jk) + zprorcad(ji,jj,jk) ) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert. integrated pp 
     562                   END DO 
     563                END DO 
     564!$OMP END DO NOWAIT 
    476565             ENDDO 
     566!$OMP END PARALLEL 
    477567             CALL iom_put( "INTPP" , zw2d ) 
    478568          ENDIF 
    479569          IF( iom_use( "INTPNEW" ) ) THEN     
     570!$OMP PARALLEL 
     571!$OMP WORKSHARE 
    480572             zw2d(:,:) = 0. 
     573!$OMP END WORKSHARE 
    481574             DO jk = 1, jpkm1 
    482                 zw2d(:,:) = zw2d(:,:) + ( zpronew(:,:,jk) + zpronewd(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated new prod 
     575!$OMP DO schedule(static) private(jj,ji) 
     576                DO jj = 1, jpj 
     577                   DO ji =1 ,jpi 
     578                      zw2d(ji,jj) = zw2d(ji,jj) + ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! vert. integrated new prod 
     579                   END DO 
     580                END DO 
     581!$OMP END DO NOWAIT 
    483582             ENDDO 
     583!$OMP END PARALLEL 
    484584             CALL iom_put( "INTPNEW" , zw2d ) 
    485585          ENDIF 
    486586          IF( iom_use( "INTPBFE" ) ) THEN           !   total biogenic iron production  ( vertically integrated ) 
     587!$OMP PARALLEL 
     588!$OMP WORKSHARE 
    487589             zw2d(:,:) = 0. 
     590!$OMP END WORKSHARE 
    488591             DO jk = 1, jpkm1 
    489                 zw2d(:,:) = zw2d(:,:) + ( zprofen(:,:,jk) + zprofed(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert integr. bfe prod 
     592!$OMP DO schedule(static) private(jj,ji) 
     593                DO jj = 1, jpj 
     594                   DO ji =1 ,jpi 
     595                      zw2d(ji,jj) = zw2d(ji,jj) + ( zprofen(ji,jj,jk) + zprofed(ji,jj,jk) ) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk) ! vert integr. bfe prod 
     596                   END DO 
     597                END DO 
     598!$OMP END DO NOWAIT 
    490599             ENDDO 
     600!$OMP END PARALLEL 
    491601            CALL iom_put( "INTPBFE" , zw2d ) 
    492602          ENDIF 
    493603          IF( iom_use( "INTPBSI" ) ) THEN           !   total biogenic silica production  ( vertically integrated ) 
     604!$OMP PARALLEL 
     605!$OMP WORKSHARE 
    494606             zw2d(:,:) = 0. 
     607!$OMP END WORKSHARE 
    495608             DO jk = 1, jpkm1 
    496                 zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * zysopt(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert integr. bsi prod 
     609!$OMP DO schedule(static) private(jj,ji) 
     610                DO jj = 1, jpj 
     611                   DO ji =1 ,jpi 
     612                      zw2d(ji,jj) = zw2d(ji,jj) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * e3t_n(ji,jj,jk) * zfact * tmask(ji,jj,jk)  ! vert integr. bsi prod 
     613                   END DO 
     614                END DO 
     615!$OMP END DO NOWAIT 
    497616             ENDDO 
     617!$OMP END PARALLEL 
    498618             CALL iom_put( "INTPBSI" , zw2d ) 
    499619          ENDIF 
     
    506626        IF( ln_diatrc ) THEN 
    507627           zfact = 1.e+3 * rfact2r 
     628!$OMP PARALLEL WORKSHARE 
    508629           trc3d(:,:,:,jp_pcs0_3d + 4)  = zprorca (:,:,:) * zfact * tmask(:,:,:) 
    509630           trc3d(:,:,:,jp_pcs0_3d + 5)  = zprorcad(:,:,:) * zfact * tmask(:,:,:) 
     
    515636           trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zfact * tmask(:,:,:) 
    516637#  endif 
     638!$OMP END PARALLEL WORKSHARE 
    517639        ENDIF 
    518640     ENDIF 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90

    r6140 r7037  
    8989 
    9090      ! Initialisation of temprary arrys 
     91!$OMP PARALLEL 
     92!$OMP WORKSHARE 
    9193      zdepprod(:,:,:) = 1._wp 
    9294      ztempbac(:,:)   = 0._wp 
     95!$OMP END WORKSHARE 
    9396 
    9497      ! Computation of the mean phytoplankton concentration as 
     
    98101      ! ------------------------------------------------------- 
    99102      DO jk = 1, jpkm1 
     103!$OMP DO schedule(static) private(jj,ji,zdep,zdepmin) 
    100104         DO jj = 1, jpj 
    101105            DO ji = 1, jpi 
     
    111115            END DO 
    112116         END DO 
    113       END DO 
    114  
     117!$OMP END DO NOWAIT 
     118      END DO 
     119 
     120!$OMP DO schedule(static) private(jk,jj,ji) 
    115121      DO jk = 1, jpkm1 
    116122         DO jj = 1, jpj 
     
    124130      END DO 
    125131 
     132!$OMP DO schedule(static) private(jk,jj,ji,zstep,zremik,zolimit) 
    126133      DO jk = 1, jpkm1 
    127134         DO jj = 1, jpj 
     
    153160 
    154161 
     162!$OMP DO schedule(static) private(jk,jj,ji,zstep,zonitr) 
    155163      DO jk = 1, jpkm1 
    156164         DO jj = 1, jpj 
     
    174182         END DO 
    175183      END DO 
     184!$OMP END DO NOWAIT 
     185!$OMP END PARALLEL 
    176186 
    177187       IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     
    181191       ENDIF 
    182192 
     193!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zbactfer) 
    183194      DO jk = 1, jpkm1 
    184195         DO jj = 1, jpj 
     
    210221       ENDIF 
    211222 
     223!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zstep,zremip,zorem,zofer,zorem2,zofer2) 
    212224      DO jk = 1, jpkm1 
    213225         DO jj = 1, jpj 
     
    261273       ENDIF 
    262274 
     275!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zstep,zsatur,zsatur2,znusil,znusil2,zdep,ztem,zfactdep,zsiremin,zosil) 
    263276      DO jk = 1, jpkm1 
    264277         DO jj = 1, jpj 
     
    303316      ! -------------------------------------------------------------------- 
    304317 
     318!$OMP PARALLEL DO schedule(static) private(jk) 
    305319      DO jk = 1, jpkm1 
    306320         tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zolimi (:,:,jk) + denitr(:,:,jk) 
     
    318332          ! 
    319333          IF( iom_use( "REMIN" ) )  THEN 
     334!$OMP PARALLEL WORKSHARE 
    320335              zw3d(:,:,:) = zolimi(:,:,:) * tmask(:,:,:) * zfact !  Remineralisation rate 
     336!$OMP END PARALLEL WORKSHARE 
    321337              CALL iom_put( "REMIN"  , zw3d ) 
    322338          ENDIF 
    323339          IF( iom_use( "DENIT" ) )  THEN 
     340!$OMP PARALLEL WORKSHARE 
    324341              zw3d(:,:,:) = denitr(:,:,:) * rdenit * rno3 * tmask(:,:,:) * zfact ! Denitrification 
     342!$OMP END PARALLEL WORKSHARE 
    325343              CALL iom_put( "DENIT"  , zw3d ) 
    326344          ENDIF 
     
    381399      ENDIF 
    382400      ! 
     401!$OMP PARALLEL WORKSHARE 
    383402      nitrfac (:,:,:) = 0._wp 
    384403      denitr  (:,:,:) = 0._wp 
    385404      denitnh4(:,:,:) = 0._wp 
     405!$OMP END PARALLEL WORKSHARE 
    386406      ! 
    387407   END SUBROUTINE p4z_rem_init 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90

    r6140 r7037  
    114114            CALL fld_read( kt, 1, sf_dust ) 
    115115            IF( nn_ice_tr == -1 .AND. .NOT. ln_ironice ) THEN 
    116                dust(:,:) = sf_dust(1)%fnow(:,:,1) 
     116!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     117            DO jj = 1, jpj 
     118               DO ji = 1, jpi 
     119                  dust(ji,jj) = sf_dust(1)%fnow(ji,jj,1) 
     120               END DO 
     121            END DO 
    117122            ELSE 
    118                dust(:,:) = sf_dust(1)%fnow(:,:,1) * ( 1.0 - fr_i(:,:) ) 
     123!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     124            DO jj = 1, jpj 
     125               DO ji = 1, jpi 
     126                  dust(ji,jj) = sf_dust(1)%fnow(ji,jj,1) * ( 1.0 - fr_i(ji,jj) ) 
     127               END DO 
     128            END DO 
    119129            ENDIF 
    120130         ENDIF 
     
    124134         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_solub > 1 ) ) THEN 
    125135            CALL fld_read( kt, 1, sf_solub ) 
    126             solub(:,:) = sf_solub(1)%fnow(:,:,1) 
     136!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     137            DO jj = 1, jpj 
     138               DO ji = 1, jpi 
     139                  solub(ji,jj) = sf_solub(1)%fnow(ji,jj,1) 
     140               END DO 
     141            END DO 
    127142         ENDIF 
    128143      ENDIF 
     
    134149         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_riv > 1 ) ) THEN 
    135150            CALL fld_read( kt, 1, sf_river ) 
     151!$OMP PARALLEL DO schedule(static) private(jj, ji, zcoef) 
    136152            DO jj = 1, jpj 
    137153               DO ji = 1, jpi 
     
    156172         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_ndep > 1 ) ) THEN 
    157173            CALL fld_read( kt, 1, sf_ndepo ) 
     174!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    158175            DO jj = 1, jpj 
    159176               DO ji = 1, jpi 
     
    261278      ! online configuration : computed in sbcrnf 
    262279      IF( lk_offline ) THEN 
     280!$OMP PARALLEL WORKSHARE 
    263281        nk_rnf(:,:) = 1 
    264282        h_rnf (:,:) = gdept_n(:,:,1) 
     283!$OMP END PARALLEL WORKSHARE 
    265284      ENDIF 
    266285 
     
    434453         IF (lwp) WRITE(numout,*) ' Level corresponding to 50m depth ',  ik50,' ', gdept_1d(ik50+1) 
    435454         IF (lwp) WRITE(numout,*) 
     455!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zmaskt) 
    436456         DO jk = 1, ik50 
    437457            DO jj = 2, jpjm1 
     
    448468         CALL lbc_lnk( zcmask , 'T', 1. )      ! lateral boundary conditions on cmask   (sign unchanged) 
    449469         ! 
     470!$OMP PARALLEL 
     471!$OMP DO schedule(static) private(jk, jj, ji, zexpide, zdenitide) 
    450472         DO jk = 1, jpk 
    451473            DO jj = 1, jpj 
     
    457479            END DO 
    458480         END DO 
     481!$OMP END DO NOWAIT 
    459482         ! Coastal supply of iron 
    460483         ! ------------------------- 
     484!$OMP WORKSHARE 
    461485         ironsed(:,:,jpk) = 0._wp 
     486!$OMP END WORKSHARE 
     487!$OMP DO schedule(static) private(jk) 
    462488         DO jk = 1, jpkm1 
    463489            ironsed(:,:,jk) = sedfeinput * zcmask(:,:,jk) / ( e3t_n(:,:,jk) * rday ) 
    464490         END DO 
     491!$OMP END DO NOWAIT 
     492!$OMP END PARALLEL 
    465493         DEALLOCATE( zcmask) 
    466494      ENDIF 
     
    479507         CALL iom_close( numhydro ) 
    480508         ! 
     509!$OMP PARALLEL WORKSHARE 
    481510         hydrofe(:,:,:) = ( hydrofe(:,:,:) * hratio ) / ( cvol(:,:,:) * ryyss + rtrn ) / 1000._wp 
     511!$OMP END PARALLEL WORKSHARE 
    482512         ! 
    483513      ENDIF 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90

    r6140 r7037  
    8282      CALL wrk_alloc( jpi, jpj, jpk, zsoufer ) 
    8383 
     84!$OMP PARALLEL WORKSHARE 
    8485      zdenit2d(:,:) = 0.e0 
    8586      zbureff (:,:) = 0.e0 
     
    8788      zwork2  (:,:) = 0.e0 
    8889      zwork3  (:,:) = 0.e0 
     90!$OMP END PARALLEL WORKSHARE 
    8991 
    9092      ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. 
     
    9395         !                                               
    9496         CALL wrk_alloc( jpi, jpj, zironice ) 
    95          !                                               
     97!$OMP PARALLEL  
     98!$OMP DO schedule(static) private(jj,ji,zdep,zwflux,zfminus,zfplus)  
    9699         DO jj = 1, jpj 
    97100            DO ji = 1, jpi 
     
    104107         END DO 
    105108         ! 
     109!$OMP WORKSHARE 
    106110         tra(:,:,1,jpfer) = tra(:,:,1,jpfer) + zironice(:,:)  
     111!$OMP END WORKSHARE NOWAIT 
     112!$OMP END PARALLEL 
    107113         !  
    108114         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironice" ) )   & 
     
    121127         !                                              ! Iron and Si deposition at the surface 
    122128         IF( ln_solub ) THEN 
    123             zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss  
     129!$OMP PARALLEL WORKSHARE  
     130            zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss 
     131!$OMP END PARALLEL WORKSHARE  
    124132         ELSE 
    125             zirondep(:,:,1) = dustsolub  * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss  
     133!$OMP PARALLEL WORKSHARE  
     134            zirondep(:,:,1) = dustsolub  * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss 
     135!$OMP END PARALLEL WORKSHARE  
    126136         ENDIF 
    127          zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1  
    128          zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r  
     137!$OMP PARALLEL WORKSHARE  
     138         zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1 
     139         zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r 
     140!$OMP END PARALLEL WORKSHARE  
    129141         !                                              ! Iron solubilization of particles in the water column 
    130142         !                                              ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/j 
    131143         zwdust = 0.03 * rday / ( wdust * 55.85 ) / ( 270. * rday ) 
     144!$OMP DO schedule(static) private(jk)  
    132145         DO jk = 2, jpkm1 
    133146            zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept_n(:,:,jk) / 540. ) 
    134147         END DO 
    135148         !                                              ! Iron solubilization of particles in the water column 
     149!$OMP PARALLEL  
     150!$OMP WORKSHARE  
    136151         tra(:,:,1,jppo4) = tra(:,:,1,jppo4) + zpdep   (:,:) 
    137152         tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep  (:,:) 
    138153         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + zirondep(:,:,:)  
     154!$OMP END WORKSHARE  
     155!$OMP END PARALLEL  
    139156         !  
    140157         IF( lk_iomput ) THEN 
     
    146163            ENDIF 
    147164         ELSE                                     
    148             IF( ln_diatrc )  & 
    149               &  trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1) * 1.e+3 * rfact2r * e3t_n(:,:,1) * tmask(:,:,1) 
     165            IF( ln_diatrc )  THEN 
     166!$OMP PARALLEL WORKSHARE 
     167             trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1) * 1.e+3 * rfact2r * e3t_n(:,:,1) * tmask(:,:,1) 
     168!$OMP END PARALLEL WORKSHARE 
     169            ENDIF 
    150170         ENDIF 
    151171         CALL wrk_dealloc( jpi, jpj,      zpdep, zsidep ) 
     
    157177      ! ---------------------------------------------------------- 
    158178      IF( ln_river ) THEN 
     179!$OMP DO schedule(static) private(jj,ji,jk)  
    159180         DO jj = 1, jpj 
    160181            DO ji = 1, jpi 
     
    174195      ! ---------------------------------------------------------- 
    175196      IF( ln_ndepo ) THEN 
     197!$OMP PARALLEL WORKSHARE  
    176198         tra(:,:,1,jpno3) = tra(:,:,1,jpno3) + nitdep(:,:) * rfact2 
    177199         tra(:,:,1,jptal) = tra(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2 
     200!$OMP END PARALLEL WORKSHARE  
    178201      ENDIF 
    179202 
     
    181204      ! ------------------------------------------------------ 
    182205      IF( ln_ironsed ) THEN 
     206!$OMP PARALLEL WORKSHARE  
    183207         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 
     208!$OMP END PARALLEL WORKSHARE  
    184209         ! 
    185210         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) )   & 
     
    190215      ! ------------------------------------------------------ 
    191216      IF( ln_hydrofe ) THEN 
     217!$OMP PARALLEL WORKSHARE  
    192218         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 
     219!$OMP END PARALLEL WORKSHARE  
    193220         ! 
    194221         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) )   & 
     
    199226      ! to avoid CFL problems above the sediments 
    200227      ! -------------------------------------------------------------------- 
     228!$OMP PARALLEL 
     229!$OMP DO schedule(static) private(jj,ji,ikt,zdep)  
    201230      DO jj = 1, jpj 
    202231         DO ji = 1, jpi 
     
    213242      ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 
    214243      ! ------------------------------------------------------- 
     244!$OMP DO schedule(static) private(jj,ji,ikt,zflx,zo2,zno3,zdep)  
    215245      DO jj = 1, jpj 
    216246         DO ji = 1, jpi 
     
    242272      ! The factor for calcite comes from the alkalinity effect 
    243273      ! ------------------------------------------------------------- 
     274!$OMP DO schedule(static) private(jj,ji,ikt,zfactcal)  
    244275      DO jj = 1, jpj 
    245276         DO ji = 1, jpi 
     
    260291         END DO 
    261292      END DO 
     293 
     294!$OMP SINGLE 
    262295      zsumsedsi  = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * r1_rday 
    263296      zsumsedpo4 = glob_sum( zwork2(:,:) * e1e2t(:,:) ) * r1_rday 
     
    271304      zrivsil =  1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / ( zsumsedsi + rtrn ) 
    272305#endif 
    273  
     306!$OMP END SINGLE 
     307 
     308!$OMP DO schedule(static) private(jj,ji,ikt,zdep,zws4,zwsc,zsiloss,zcaloss,zfactcal,zrivalk)  
    274309      DO jj = 1, jpj 
    275310         DO ji = 1, jpi 
     
    298333      END DO 
    299334 
     335!$OMP DO schedule(static) private(jj,ji,ikt,zdep,zws3,zws4,zrivno3,zwstpoc,zpdenit,z1pdenit,zolimit,zdenitt)  
    300336      DO jj = 1, jpj 
    301337         DO ji = 1, jpi 
     
    336372         END DO 
    337373      END DO 
    338  
     374!$OMP END DO NOWAIT 
    339375      ! Nitrogen fixation process 
    340376      ! Small source iron from particulate inorganic iron 
    341377      !----------------------------------- 
     378!$OMP DO schedule(static) private(jk,jj,ji,zlim,zfact,ztrfer,ztrpo4,zlight)  
    342379      DO jk = 1, jpkm1 
    343380         DO jj = 1, jpj 
     
    363400      ! Nitrogen change due to nitrogen fixation 
    364401      ! ---------------------------------------- 
     402!$OMP DO schedule(static) private(jk,jj,ji,zfact)  
    365403      DO jk = 1, jpkm1 
    366404         DO jj = 1, jpj 
     
    376414         END DO  
    377415      END DO 
     416!$OMP END DO NOWAIT 
     417!$OMP END PARALLEL 
    378418 
    379419      IF( lk_iomput ) THEN 
     
    384424               zwork1(:,:) = 0. 
    385425               DO jk = 1, jpkm1 
    386                  zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * zfact * e3t_n(:,:,jk) * tmask(:,:,jk) 
     426!$OMP PARALLEL DO schedule(static) private(jj,ji)  
     427                  DO jj = 1, jpj 
     428                     DO ji = 1, jpi 
     429                        zwork1(ji,jj) = zwork1(ji,jj) + nitrpot(ji,jj,jk) * nitrfix * zfact * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 
     430                     END DO 
     431                  END DO  
    387432               ENDDO 
    388433               CALL iom_put( "INTNFIX" , zwork1 )  
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90

    r6140 r7037  
    102102      !    by data and from the coagulation theory 
    103103      !    ----------------------------------------------------------- 
     104!$OMP PARALLEL 
     105!$OMP DO schedule(static) private(jk, jj, ji, zmax, zfact) 
    104106      DO jk = 1, jpkm1 
    105107         DO jj = 1, jpj 
     
    113115 
    114116      ! limit the values of the sinking speeds to avoid numerical instabilities   
     117!$OMP WORKSHARE 
    115118      wsbio3(:,:,:) = wsbio 
    116119      wscal (:,:,:) = wsbio4(:,:,:) 
     120!$OMP END WORKSHARE NOWAIT 
     121!$OMP END PARALLEL 
    117122      ! 
    118123      ! OA This is (I hope) a temporary solution for the problem that may  
     
    131136        iiter1 = 1 
    132137        iiter2 = 1 
     138!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zwsmax, iiter1, iiter2) 
    133139        DO jk = 1, jpkm1 
    134140          DO jj = 1, jpj 
     
    150156      ENDIF 
    151157 
     158!$OMP PARALLEL 
     159!$OMP DO schedule(static) private(jk, jj, ji, zwsmax) 
    152160      DO jk = 1,jpkm1 
    153161         DO jj = 1, jpj 
     
    161169         END DO 
    162170      END DO 
     171!$OMP END DO NOWAIT 
    163172 
    164173      !  Initializa to zero all the sinking arrays  
    165174      !   ----------------------------------------- 
     175!$OMP WORKSHARE 
    166176      sinking (:,:,:) = 0.e0 
    167177      sinking2(:,:,:) = 0.e0 
     
    170180      sinksil (:,:,:) = 0.e0 
    171181      sinkfer2(:,:,:) = 0.e0 
     182!$OMP END WORKSHARE NOWAIT 
     183!$OMP END PARALLEL 
    172184 
    173185      !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
     
    187199      !  Exchange between organic matter compartments due to coagulation/disaggregation 
    188200      !  --------------------------------------------------- 
     201!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zstep, zfact, zagg, zagg1, zagg2, zagg3, zagg4, zaggfe, zaggdoc, zaggdoc2, zaggdoc3) 
    189202      DO jk = 1, jpkm1 
    190203         DO jj = 1, jpj 
     
    235248 
    236249     ! Total carbon export per year 
    237      IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
    238         &   t_oce_co2_exp = glob_sum( ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * e1e2t(:,:) * tmask(:,:,1) ) 
     250     IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  ) & 
     251 &        t_oce_co2_exp = glob_sum( ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * e1e2t(:,:) * tmask(:,:,1) ) 
    239252     ! 
    240253     IF( lk_iomput ) THEN 
     
    245258          ! 
    246259          IF( iom_use( "EPC100" ) )  THEN 
     260!$OMP PARALLEL WORKSHARE 
    247261              zw2d(:,:) = ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * zfact * tmask(:,:,1) ! Export of carbon at 100m 
     262!$OMP END PARALLEL WORKSHARE 
    248263              CALL iom_put( "EPC100"  , zw2d ) 
    249264          ENDIF 
    250265          IF( iom_use( "EPFE100" ) )  THEN 
     266!$OMP PARALLEL WORKSHARE 
    251267              zw2d(:,:) = ( sinkfer(:,:,ik100) + sinkfer2(:,:,ik100) ) * zfact * tmask(:,:,1) ! Export of iron at 100m 
     268!$OMP END PARALLEL WORKSHARE 
    252269              CALL iom_put( "EPFE100"  , zw2d ) 
    253270          ENDIF 
    254271          IF( iom_use( "EPCAL100" ) )  THEN 
     272!$OMP PARALLEL WORKSHARE 
    255273              zw2d(:,:) = sinkcal(:,:,ik100) * zfact * tmask(:,:,1) ! Export of calcite at 100m 
     274!$OMP END PARALLEL WORKSHARE 
    256275              CALL iom_put( "EPCAL100"  , zw2d ) 
    257276          ENDIF 
    258277          IF( iom_use( "EPSI100" ) )  THEN 
     278!$OMP PARALLEL WORKSHARE 
    259279              zw2d(:,:) =  sinksil(:,:,ik100) * zfact * tmask(:,:,1) ! Export of bigenic silica at 100m 
     280!$OMP END PARALLEL WORKSHARE 
    260281              CALL iom_put( "EPSI100"  , zw2d ) 
    261282          ENDIF 
    262283          IF( iom_use( "EXPC" ) )  THEN 
     284!$OMP PARALLEL WORKSHARE 
    263285              zw3d(:,:,:) = ( sinking(:,:,:) + sinking2(:,:,:) ) * zfact * tmask(:,:,:) ! Export of carbon in the water column 
     286!$OMP END PARALLEL WORKSHARE 
    264287              CALL iom_put( "EXPC"  , zw3d ) 
    265288          ENDIF 
    266289          IF( iom_use( "EXPFE" ) )  THEN 
     290!$OMP PARALLEL WORKSHARE 
    267291              zw3d(:,:,:) = ( sinkfer(:,:,:) + sinkfer2(:,:,:) ) * zfact * tmask(:,:,:) ! Export of iron  
     292!$OMP END PARALLEL WORKSHARE 
    268293              CALL iom_put( "EXPFE"  , zw3d ) 
    269294          ENDIF 
    270295          IF( iom_use( "EXPCAL" ) )  THEN 
     296!$OMP PARALLEL WORKSHARE 
    271297              zw3d(:,:,:) = sinkcal(:,:,:) * zfact * tmask(:,:,:) ! Export of calcite  
     298!$OMP END PARALLEL WORKSHARE 
    272299              CALL iom_put( "EXPCAL"  , zw3d ) 
    273300          ENDIF 
    274301          IF( iom_use( "EXPSI" ) )  THEN 
     302!$OMP PARALLEL WORKSHARE 
    275303              zw3d(:,:,:) = sinksil(:,:,:) * zfact * tmask(:,:,:) ! Export of bigenic silica 
     304!$OMP END PARALLEL WORKSHARE 
    276305              CALL iom_put( "EXPSI"  , zw3d ) 
    277306          ENDIF 
     
    284313         IF( ln_diatrc ) THEN 
    285314            zfact = 1.e3 * rfact2r 
     315!$OMP PARALLEL WORKSHARE 
    286316            trc2d(:,:,jp_pcs0_2d + 4) = sinking (:,:,ik100) * zfact * tmask(:,:,1) 
    287317            trc2d(:,:,jp_pcs0_2d + 5) = sinking2(:,:,ik100) * zfact * tmask(:,:,1) 
     
    290320            trc2d(:,:,jp_pcs0_2d + 8) = sinksil (:,:,ik100) * zfact * tmask(:,:,1) 
    291321            trc2d(:,:,jp_pcs0_2d + 9) = sinkcal (:,:,ik100) * zfact * tmask(:,:,1) 
     322!$OMP END PARALLEL WORKSHARE 
    292323         ENDIF 
    293324      ENDIF 
     
    359390      !     --------------------------------------------------------- 
    360391 
    361       znum3d(:,:,:) = 0.e0 
    362392      zval1 = 1. + xkr_zeta 
    363393      zval2 = 1. + xkr_zeta + xkr_eta 
    364394      zval3 = 1. + xkr_eta 
    365  
     395!$OMP PARALLEL 
     396!$OMP WORKSHARE 
     397      znum3d(:,:,:) = 0.e0 
     398!$OMP END WORKSHARE 
    366399      !     Computation of the vertical sinking speed : Kriest et Evans, 2000 
    367400      !     ----------------------------------------------------------------- 
    368401 
     402!$OMP DO schedule(static) private(jk, jj, ji, znum, zeps, zfm, zgm, zdiv, zdiv1) 
    369403      DO jk = 1, jpkm1 
    370404         DO jj = 1, jpj 
     
    391425         END DO 
    392426      END DO 
    393  
    394       wscal(:,:,:) = MAX( wsbio3(:,:,:), 30._wp ) 
     427!$OMP END DO NOWAIT 
     428!$OMP DO schedule(static) private(jk, jj, ji) 
     429      DO jk = 1, jpk 
     430         DO jj = 1, jpj 
     431            DO ji = 1, jpi 
     432               wscal(ji,jj,jk) = MAX( wsbio3(ji,jj,jk), 30._wp ) 
     433            END DO 
     434         END DO 
     435      END DO 
     436!$OMP END DO NOWAIT 
    395437 
    396438      !   INITIALIZE TO ZERO ALL THE SINKING ARRAYS 
    397439      !   ----------------------------------------- 
    398  
     440!$OMP WORKSHARE 
    399441      sinking (:,:,:) = 0.e0 
    400442      sinking2(:,:,:) = 0.e0 
     
    402444      sinkfer (:,:,:) = 0.e0 
    403445      sinksil (:,:,:) = 0.e0 
    404  
     446!$OMP END WORKSHARE NOWAIT 
     447!$OMP END PARALLEL 
    405448     !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
    406449     !   ----------------------------------------------------- 
     
    428471      zval4 = 4. + xkr_eta 
    429472 
     473!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, znum, zeps, zfm, zsm, zdiv, zdiv1, zdiv2, zdiv3, zdiv4, zdiv5, zagg, zagg1, zagg2, zagg3, zagg4, zagg5, zfract, zaggdoc, zaggdoc1, zaggsh, zaggsi, znumdoc) 
    430474      DO jk = 1,jpkm1 
    431475         DO jj = 1,jpj 
     
    532576          ! 
    533577          IF( iom_use( "EPC100" ) )  THEN 
     578!$OMP PARALLEL WORKSHARE 
    534579              zw2d(:,:) = sinking(:,:,ik100) * zfact * tmask(:,:,1) ! Export of carbon at 100m 
     580!$OMP END PARALLEL WORKSHARE 
    535581              CALL iom_put( "EPC100"  , zw2d ) 
    536582          ENDIF 
    537583          IF( iom_use( "EPN100" ) )  THEN 
     584!$OMP PARALLEL WORKSHARE 
    538585              zw2d(:,:) = sinking2(:,:,ik100) * zfact * tmask(:,:,1) ! Export of number of aggregates ? 
     586!$OMP END PARALLEL WORKSHARE 
    539587              CALL iom_put( "EPN100"  , zw2d ) 
    540588          ENDIF 
    541589          IF( iom_use( "EPCAL100" ) )  THEN 
     590!$OMP PARALLEL WORKSHARE 
    542591              zw2d(:,:) = sinkcal(:,:,ik100) * zfact * tmask(:,:,1) ! Export of calcite at 100m 
     592!$OMP END PARALLEL WORKSHARE 
    543593              CALL iom_put( "EPCAL100"  , zw2d ) 
    544594          ENDIF 
    545595          IF( iom_use( "EPSI100" ) )  THEN 
     596!$OMP PARALLEL WORKSHARE 
    546597              zw2d(:,:) = sinksil(:,:,ik100) * zfact * tmask(:,:,1) ! Export of bigenic silica at 100m 
     598!$OMP END PARALLEL WORKSHARE 
    547599              CALL iom_put( "EPSI100"  , zw2d ) 
    548600          ENDIF 
    549601          IF( iom_use( "EXPC" ) )  THEN 
     602!$OMP PARALLEL WORKSHARE 
    550603              zw3d(:,:,:) = sinking(:,:,:) * zfact * tmask(:,:,:) ! Export of carbon in the water column 
     604!$OMP END PARALLEL WORKSHARE 
    551605              CALL iom_put( "EXPC"  , zw3d ) 
    552606          ENDIF 
    553607          IF( iom_use( "EXPN" ) )  THEN 
     608!$OMP PARALLEL WORKSHARE 
    554609              zw3d(:,:,:) = sinking(:,:,:) * zfact * tmask(:,:,:) ! Export of carbon in the water column 
     610!$OMP END PARALLEL WORKSHARE 
    555611              CALL iom_put( "EXPN"  , zw3d ) 
    556612          ENDIF 
    557613          IF( iom_use( "EXPCAL" ) )  THEN 
     614!$OMP PARALLEL WORKSHARE 
    558615              zw3d(:,:,:) = sinkcal(:,:,:) * zfact * tmask(:,:,:) ! Export of calcite  
     616!$OMP END PARALLEL WORKSHARE 
    559617              CALL iom_put( "EXPCAL"  , zw3d ) 
    560618          ENDIF 
    561619          IF( iom_use( "EXPSI" ) )  THEN 
     620!$OMP PARALLEL WORKSHARE 
    562621              zw3d(:,:,:) = sinksil(:,:,:) * zfact * tmask(:,:,:) ! Export of bigenic silica 
     622!$OMP END PARALLEL WORKSHARE 
    563623              CALL iom_put( "EXPSI"  , zw3d ) 
    564624          ENDIF 
    565625          IF( iom_use( "XNUM" ) )  THEN 
     626!$OMP PARALLEL WORKSHARE 
    566627              zw3d(:,:,:) =  znum3d(:,:,:) * tmask(:,:,:) !  Number of particles on aggregats 
     628!$OMP END PARALLEL WORKSHARE 
    567629              CALL iom_put( "XNUM"  , zw3d ) 
    568630          ENDIF 
    569631          IF( iom_use( "WSC" ) )  THEN 
     632!$OMP PARALLEL WORKSHARE 
    570633              zw3d(:,:,:) = wsbio3(:,:,:) * tmask(:,:,:) ! Sinking speed of carbon particles 
     634!$OMP END PARALLEL WORKSHARE 
    571635              CALL iom_put( "WSC"  , zw3d ) 
    572636          ENDIF 
    573637          IF( iom_use( "WSN" ) )  THEN 
     638!$OMP PARALLEL WORKSHARE 
    574639              zw3d(:,:,:) = wsbio4(:,:,:) * tmask(:,:,:) ! Sinking speed of particles number 
     640!$OMP END PARALLEL WORKSHARE 
    575641              CALL iom_put( "WSN"  , zw3d ) 
    576642          ENDIF 
     
    581647         IF( ln_diatrc ) THEN 
    582648            zfact = 1.e3 * rfact2r 
     649!$OMP PARALLEL WORKSHARE 
    583650            trc2d(:,:  ,jp_pcs0_2d + 4)  = sinking (:,:,ik100)  * zfact * tmask(:,:,1) 
    584651            trc2d(:,:  ,jp_pcs0_2d + 5)  = sinking2(:,:,ik100)  * zfact * tmask(:,:,1) 
     
    593660            trc3d(:,:,:,jp_pcs0_3d + 16) = wsbio3  (:,:,:)              * tmask(:,:,:) 
    594661            trc3d(:,:,:,jp_pcs0_3d + 17) = wsbio4  (:,:,:)              * tmask(:,:,:) 
     662!$OMP END PARALLEL WORKSHARE 
    595663         ENDIF 
    596664      ENDIF 
     
    795863 
    796864      zstep = rfact2 / FLOAT( kiter ) / 2. 
    797  
    798       ztraz(:,:,:) = 0.e0 
    799       zakz (:,:,:) = 0.e0 
    800       ztrb (:,:,:) = trb(:,:,:,jp_tra) 
    801  
     865!$OMP PARALLEL 
     866!$OMP DO schedule(static) private(jk, jj, ji) 
     867      DO jk = 1, jpk 
     868         DO jj = 1, jpj 
     869            DO ji = 1, jpi 
     870               ztraz(ji,jj,jk) = 0.e0 
     871               zakz (ji,jj,jk) = 0.e0 
     872               ztrb (ji,jj,jk) = trb(ji,jj,jk,jp_tra) 
     873            END DO 
     874         END DO 
     875      END DO 
     876!$OMP END DO NOWAIT 
     877!$OMP DO schedule(static) private(jk) 
    802878      DO jk = 1, jpkm1 
    803879         zwsink2(:,:,jk+1) = -pwsink(:,:,jk) / rday * tmask(:,:,jk+1)  
    804880      END DO 
    805       zwsink2(:,:,1) = 0.e0 
     881 
     882!$OMP DO schedule(static) private(jj, ji) 
     883      DO jj = 1, jpj 
     884         DO ji = 1, jpi 
     885            zwsink2(ji,jj,1) = 0.e0 
     886         END DO 
     887      END DO 
     888!$OMP END DO NOWAIT 
     889!$OMP END PARALLEL 
     890 
    806891      IF( lk_degrad ) THEN 
     892!$OMP PARALLEL WORKSHARE 
    807893         zwsink2(:,:,:) = zwsink2(:,:,:) * facvol(:,:,:) 
     894!$OMP END PARALLEL WORKSHARE 
    808895      ENDIF 
    809896 
     
    812899      DO jn = 1, 2 
    813900         !  first guess of the slopes interior values 
     901!$OMP PARALLEL 
     902!$OMP DO schedule(static) private(jk) 
    814903         DO jk = 2, jpkm1 
    815904            ztraz(:,:,jk) = ( trb(:,:,jk-1,jp_tra) - trb(:,:,jk,jp_tra) ) * tmask(:,:,jk) 
    816905         END DO 
    817          ztraz(:,:,1  ) = 0.0 
    818          ztraz(:,:,jpk) = 0.0 
     906!$OMP END DO NOWAIT 
     907 
     908!$OMP DO schedule(static) private(jj, ji) 
     909      DO jj = 1, jpj 
     910         DO ji = 1, jpi 
     911            ztraz(ji,jj,1  ) = 0.0 
     912            ztraz(ji,jj,jpk) = 0.0 
     913         END DO 
     914      END DO 
    819915 
    820916         ! slopes 
     917!$OMP DO schedule(static) private(jk, jj, ji, zign) 
    821918         DO jk = 2, jpkm1 
    822919            DO jj = 1,jpj 
     
    829926          
    830927         ! Slopes limitation 
     928!$OMP DO schedule(static) private(jk, jj, ji) 
    831929         DO jk = 2, jpkm1 
    832930            DO jj = 1, jpj 
     
    839937          
    840938         ! vertical advective flux 
     939!$OMP DO schedule(static) private(jk, jj, ji, zigma, zew) 
    841940         DO jk = 1, jpkm1 
    842941            DO jj = 1, jpj       
     
    849948         END DO 
    850949         ! 
    851          ! Boundary conditions 
    852          psinkflx(:,:,1  ) = 0.e0 
    853          psinkflx(:,:,jpk) = 0.e0 
     950!$OMP DO schedule(static) private(jj, ji) 
     951         DO jj = 1, jpj 
     952            DO ji = 1, jpi 
     953                ! Boundary conditions 
     954               psinkflx(ji,jj,1  ) = 0.e0 
     955               psinkflx(ji,jj,jpk) = 0.e0 
     956            END DO 
     957         END DO 
    854958          
     959!$OMP DO schedule(static) private(jk, jj, ji, zflx) 
    855960         DO jk=1,jpkm1 
    856961            DO jj = 1,jpj 
     
    861966            END DO 
    862967         END DO 
    863  
     968!$OMP END DO NOWAIT 
     969!$OMP END PARALLEL 
    864970      ENDDO 
    865  
     971!$OMP PARALLEL 
     972!$OMP DO schedule(static) private(jk, jj, ji, zflx) 
    866973      DO jk = 1,jpkm1 
    867974         DO jj = 1,jpj 
     
    873980      END DO 
    874981 
    875       trb(:,:,:,jp_tra) = ztrb(:,:,:) 
    876       psinkflx(:,:,:)   = 2. * psinkflx(:,:,:) 
     982!$OMP DO schedule(static) private(jk, jj, ji) 
     983      DO jk = 1, jpk 
     984         DO jj = 1, jpj 
     985            DO ji = 1, jpi 
     986               trb(ji,jj,jk,jp_tra) = ztrb(ji,jj,jk) 
     987               psinkflx(ji,jj,jk)   = 2. * psinkflx(ji,jj,jk) 
     988            END DO 
     989         END DO 
     990      END DO 
     991!$OMP END DO NOWAIT 
     992!$OMP END PARALLEL 
    877993      ! 
    878994      CALL wrk_dealloc( jpi, jpj, jpk, ztraz, zakz, zwsink2, ztrb ) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90

    r6421 r7037  
    109109      IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 
    110110         DO jn = jp_pcs0, jp_pcs1              !   SMS on tracer without Asselin time-filter 
    111             trb(:,:,:,jn) = trn(:,:,:,jn) 
     111!$OMP DO schedule(static) private(jk, jj, ji) 
     112            DO jk = 1, jpk 
     113               DO jj = 1, jpj 
     114                  DO ji = 1, jpi 
     115                     trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 
     116                  END DO 
     117               END DO 
     118            END DO 
    112119         END DO 
    113120      ENDIF 
     
    135142         CALL p4z_flx( kt, jnt )   ! Compute surface fluxes 
    136143         ! 
     144!$OMP PARALLEL 
     145!$OMP WORKSHARE 
    137146         xnegtr(:,:,:) = 1.e0 
     147!$OMP END WORKSHARE 
    138148         DO jn = jp_pcs0, jp_pcs1 
     149!$OMP DO schedule(static) private(jk, jj, ji, ztra) 
    139150            DO jk = 1, jpk 
    140151               DO jj = 1, jpj 
     
    151162         !                                !  
    152163         DO jn = jp_pcs0, jp_pcs1 
    153            trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 
     164!$OMP DO schedule(static) private(jk, jj, ji) 
     165            DO jk = 1, jpk 
     166               DO jj = 1, jpj 
     167                  DO ji = 1, jpi 
     168                     trb(ji,jj,jk,jn) = trb(ji,jj,jk,jn) + xnegtr(ji,jj,jk) * tra(ji,jj,jk,jn) 
     169                  END DO 
     170               END DO 
     171            END DO 
    154172         END DO 
    155173        ! 
    156174         DO jn = jp_pcs0, jp_pcs1 
    157             tra(:,:,:,jn) = 0._wp 
     175!$OMP DO schedule(static) private(jk, jj, ji) 
     176            DO jk = 1, jpk 
     177               DO jj = 1, jpj 
     178                  DO ji = 1, jpi 
     179                     tra(ji,jj,jk,jn) = 0._wp 
     180                  END DO 
     181               END DO 
     182            END DO 
     183!$OMP END DO NOWAIT 
    158184         END DO 
     185!$OMP END PARALLEL 
    159186         ! 
    160187         IF( ln_top_euler ) THEN 
    161188            DO jn = jp_pcs0, jp_pcs1 
    162                trn(:,:,:,jn) = trb(:,:,:,jn) 
     189!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     190               DO jk = 1, jpk 
     191                  DO jj = 1, jpj 
     192                     DO ji = 1, jpi 
     193                        trn(ji,jj,jk,jn) = trb(ji,jj,jk,jn) 
     194                     END DO 
     195                  END DO 
     196               END DO 
    163197            END DO 
    164198         ENDIF 
     
    169203      zcoef1 = 1.e0 / xkr_massp  
    170204      zcoef2 = 1.e0 / xkr_massp / 1.1 
     205!$OMP PARALLEL DO schedule(static) private(jk) 
    171206      DO jk = 1,jpkm1 
    172207         trb(:,:,jk,jpnum) = MAX(  trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk)  ) 
     
    321356      ! Set PH from  total alkalinity, borat (???), akb3 (???) and ak23 (???) 
    322357      ! -------------------------------------------------------- 
     358!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztmas,ztmas1,zcaralk,zco3,zbicarb) 
    323359      DO jk = 1, jpk 
    324360         DO jj = 1, jpj 
     
    370406            CALL iom_get( numrtr, jpdom_autoglo, 'Silicamax' , xksimax(:,:)  ) 
    371407         ELSE 
     408!$OMP PARALLEL WORKSHARE 
    372409            xksimax(:,:) = xksi(:,:) 
     410!$OMP END PARALLEL WORKSHARE 
    373411         ENDIF 
    374412         ! 
     
    407445      REAL(wp) ::  silmean = 91.51     ! mean value of silicate 
    408446      ! 
     447      INTEGER ::   ji, jj, jk 
    409448      REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn 
    410449      REAL(wp) :: zalksumb, zpo4sumb, zno3sumb, zsilsumb 
     450      REAL(wp), POINTER, DIMENSION(:,:,:) :: zctrn_jptal, zctrn_jppo4, zctrn_jppo3, zctrn_jpsil !workspace arrays 
     451      REAL(wp), POINTER, DIMENSION(:,:,:) :: zctrb_jptal, zctrb_jppo4, zctrb_jppo3, zctrb_jpsil !workspace arrays 
    411452      !!--------------------------------------------------------------------- 
    412453 
     
    417458 
    418459      IF( cp_cfg == "orca" .AND. .NOT. lk_c1d ) THEN      ! ORCA configuration (not 1D) ! 
    419          !                                                    ! --------------------------- ! 
     460        CALL wrk_alloc( jpi, jpj, jpk, zctrn_jptal, zctrn_jppo4, zctrn_jppo3, zctrn_jpsil ) 
     461        CALL wrk_alloc( jpi, jpj, jpk, zctrb_jptal, zctrb_jppo4, zctrb_jppo3, zctrb_jpsil ) 
    420462         ! set total alkalinity, phosphate, nitrate & silicate 
    421463         zarea          = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6               
    422  
    423          zalksumn = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
    424          zpo4sumn = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
    425          zno3sumn = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
    426          zsilsumn = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     464!$OMP PARALLEL 
     465!$OMP DO schedule(static) private(jk,jj,ji) 
     466            DO jk = 1, jpk 
     467               DO jj = 1, jpj 
     468                  DO ji = 1, jpi 
     469                     zctrn_jptal(ji,jj,jk) = trn(ji,jj,jk,jptal) * cvol(ji,jj,jk) 
     470                     zctrn_jppo4(ji,jj,jk) = trn(ji,jj,jk,jppo4) * cvol(ji,jj,jk) 
     471                     zctrn_jppo3(ji,jj,jk) = trn(ji,jj,jk,jpno3) * cvol(ji,jj,jk) 
     472                     zctrn_jpsil(ji,jj,jk) = trn(ji,jj,jk,jpsil) * cvol(ji,jj,jk) 
     473                  END DO 
     474               END DO 
     475            END DO 
     476!$OMP SINGLE 
     477         zalksumn = glob_sum( zctrn_jptal(:,:,:)  ) * zarea 
     478         zpo4sumn = glob_sum( zctrn_jppo4(:,:,:)  ) * zarea * po4r 
     479         zno3sumn = glob_sum( zctrn_jppo3(:,:,:)  ) * zarea * rno3 
     480         zsilsumn = glob_sum( zctrn_jpsil(:,:,:)  ) * zarea 
     481!$OMP END SINGLE 
     482 
     483!$OMP DO schedule(static) private(jk,jj,ji) 
     484            DO jk = 1, jpk 
     485               DO jj = 1, jpj 
     486                  DO ji = 1, jpi 
     487                     trn(ji,jj,jk,jpsil) = MIN( 400.e-6,trn(ji,jj,jk,jpsil) * silmean / zsilsumn ) 
     488                     trn(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) * alkmean / zalksumn 
     489                     trn(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) * po4mean / zpo4sumn 
     490                     trn(ji,jj,jk,jpno3) = trn(ji,jj,jk,jpno3) * no3mean / zno3sumn 
     491                  END DO 
     492               END DO 
     493            END DO 
     494!$OMP END DO NOWAIT 
     495!$OMP END PARALLEL 
     496 
     497         IF(lwp) THEN 
     498                WRITE(numout,*) '       TALKN mean : ', zalksumn 
     499                WRITE(numout,*) '       PO4N  mean : ', zpo4sumn 
     500                WRITE(numout,*) '       NO3N  mean : ', zno3sumn 
     501                WRITE(numout,*) '       SiO3N mean : ', zsilsumn 
     502         END IF 
     503         ! 
     504         IF( .NOT. ln_top_euler ) THEN 
     505!$OMP PARALLEL 
     506!$OMP DO schedule(static) private(jk,jj,ji) 
     507            DO jk = 1, jpk 
     508               DO jj = 1, jpj 
     509                  DO ji = 1, jpi 
     510                     zctrb_jptal(ji,jj,jk) = trb(ji,jj,jk,jptal) * cvol(ji,jj,jk) 
     511                     zctrb_jppo4(ji,jj,jk) = trb(ji,jj,jk,jppo4) * cvol(ji,jj,jk) 
     512                     zctrb_jppo3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * cvol(ji,jj,jk) 
     513                     zctrb_jpsil(ji,jj,jk) = trb(ji,jj,jk,jpsil) * cvol(ji,jj,jk) 
     514                  END DO 
     515               END DO 
     516            END DO 
     517!$OMP SINGLE  
     518            zalksumb = glob_sum( zctrb_jptal(:,:,:)  ) * zarea 
     519            zpo4sumb = glob_sum( zctrb_jppo4(:,:,:)  ) * zarea * po4r 
     520            zno3sumb = glob_sum( zctrb_jppo3(:,:,:)  ) * zarea * rno3 
     521            zsilsumb = glob_sum( zctrb_jpsil(:,:,:)  ) * zarea 
     522!$OMP END SINGLE             
     523 
     524!$OMP DO schedule(static) private(jk,jj,ji) 
     525            DO jk = 1, jpk 
     526               DO jj = 1, jpj 
     527                  DO ji = 1, jpi 
     528                     trb(ji,jj,jk,jpsil) = MIN( 400.e-6,trb(ji,jj,jk,jpsil) * silmean / zsilsumb ) 
     529                     trb(ji,jj,jk,jptal) = trb(ji,jj,jk,jptal) * alkmean / zalksumb 
     530                     trb(ji,jj,jk,jppo4) = trb(ji,jj,jk,jppo4) * po4mean / zpo4sumb 
     531                     trb(ji,jj,jk,jpno3) = trb(ji,jj,jk,jpno3) * no3mean / zno3sumb 
     532                  END DO 
     533               END DO 
     534            END DO 
     535!$OMP END DO NOWAIT 
     536!$OMP END PARALLEL 
    427537  
    428          IF(lwp) WRITE(numout,*) '       TALKN mean : ', zalksumn 
    429          trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 
    430  
    431          IF(lwp) WRITE(numout,*) '       PO4N  mean : ', zpo4sumn 
    432          trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 
    433  
    434          IF(lwp) WRITE(numout,*) '       NO3N  mean : ', zno3sumn 
    435          trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 
    436  
    437          IF(lwp) WRITE(numout,*) '       SiO3N mean : ', zsilsumn 
    438          trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 
    439          ! 
    440          ! 
    441          IF( .NOT. ln_top_euler ) THEN 
    442             zalksumb = glob_sum( trb(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
    443             zpo4sumb = glob_sum( trb(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
    444             zno3sumb = glob_sum( trb(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
    445             zsilsumb = glob_sum( trb(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
    446   
    447             IF(lwp) WRITE(numout,*) ' ' 
    448             IF(lwp) WRITE(numout,*) '       TALKB mean : ', zalksumb 
    449             trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 
    450  
    451             IF(lwp) WRITE(numout,*) '       PO4B  mean : ', zpo4sumb 
    452             trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 
    453  
    454             IF(lwp) WRITE(numout,*) '       NO3B  mean : ', zno3sumb 
    455             trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 
    456  
    457             IF(lwp) WRITE(numout,*) '       SiO3B mean : ', zsilsumb 
    458             trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 
     538            IF(lwp) THEN 
     539                WRITE(numout,*) ' ' 
     540                WRITE(numout,*) '       TALKB mean : ', zalksumb 
     541                WRITE(numout,*) '       PO4B  mean : ', zpo4sumb 
     542                WRITE(numout,*) '       NO3B  mean : ', zno3sumb 
     543                WRITE(numout,*) '       SiO3B mean : ', zsilsumb 
     544            END IF 
    459545        ENDIF 
    460546        ! 
     547        CALL wrk_dealloc( jpi, jpj, jpk, zctrb_jptal, zctrb_jppo4, zctrb_jppo3, zctrb_jpsil ) 
     548        CALL wrk_dealloc( jpi, jpj, jpk, zctrn_jptal, zctrn_jppo4, zctrn_jppo3, zctrn_jpsil ) 
    461549      ENDIF 
    462550        ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90

    r6140 r7037  
    9494      ENDIF 
    9595      !                                               !==  effective transport  ==! 
     96!$OMP PARALLEL DO schedule(static) private(jk) 
    9697      DO jk = 1, jpkm1 
    9798         zun(:,:,jk) = e2u  (:,:) * e3u_n(:,:,jk) * un(:,:,jk)                   ! eulerian transport 
     
    101102      ! 
    102103      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN                                 ! add z-tilde and/or vvl corrections 
     104!$OMP PARALLEL WORKSHARE 
    103105         zun(:,:,:) = zun(:,:,:) + un_td(:,:,:) 
    104106         zvn(:,:,:) = zvn(:,:,:) + vn_td(:,:,:) 
     107!$OMP END PARALLEL WORKSHARE 
    105108      ENDIF 
    106109      ! 
     
    110113      IF( ln_mle    )   CALL tra_adv_mle( kt, nittrc000, zun, zvn, zwn, 'TRC' )  ! add the mle transport 
    111114      ! 
     115!$OMP PARALLEL WORKSHARE 
    112116      zun(:,:,jpk) = 0._wp                                                       ! no transport trough the bottom 
    113117      zvn(:,:,jpk) = 0._wp 
    114118      zwn(:,:,jpk) = 0._wp 
     119!$OMP END PARALLEL WORKSHARE 
    115120      ! 
    116121      ! 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/TRP/trcbbl.F90

    r5836 r7037  
    6161      IF( l_trdtrc )  THEN 
    6262         CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrtrd ) ! temporary save of trends 
     63!$OMP PARALLEL WORKSHARE 
    6364         ztrtrd(:,:,:,:)  = tra(:,:,:,:) 
     65!$OMP END PARALLEL WORKSHARE 
    6466      ENDIF 
    6567 
     
    8890      IF( l_trdtrc )   THEN                      ! save the horizontal diffusive trends for further diagnostics 
    8991        DO jn = 1, jptra 
     92!$OMP PARALLEL WORKSHARE 
    9093           ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn) 
     94!$OMP END PARALLEL WORKSHARE 
    9195           CALL trd_tra( kt, 'TRC', jn, jptra_bbl, ztrtrd(:,:,:,jn) ) 
    9296        END DO 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/TRP/trcldf.F90

    r6403 r7037  
    7676      IF( l_trdtrc )  THEN 
    7777         CALL wrk_alloc( jpi,jpj,jpk,jptra,   ztrtrd ) 
     78!$OMP PARALLEL WORKSHARE 
    7879         ztrtrd(:,:,:,:)  = tra(:,:,:,:) 
     80!$OMP END PARALLEL WORKSHARE 
    7981      ENDIF 
    8082      !                                  !* set the lateral diffusivity coef. for passive tracer       
    8183      CALL wrk_alloc( jpi,jpj,jpk,   zahu, zahv ) 
     84!$OMP PARALLEL 
     85!$OMP WORKSHARE 
    8286      zahu(:,:,:) = rldf * ahtu(:,:,:)  
    8387      zahv(:,:,:) = rldf * ahtv(:,:,:) 
     88!$OMP END WORKSHARE 
    8489      !                                  !* Enhanced zonal diffusivity coefficent in the equatorial domain 
     90!$OMP DO schedule(static) private(jk,jj,ji,zdep) 
    8591      DO jk= 1, jpk 
    8692         DO jj = 1, jpj 
     
    9399         END DO 
    94100      END DO 
     101!$OMP END DO NOWAIT 
     102!$OMP END PARALLEL 
    95103      ! 
    96104      SELECT CASE ( nldf )                     !* compute lateral mixing trend and add it to the general trend 
     
    112120      IF( l_trdtrc )   THEN                    ! send the trends for further diagnostics 
    113121        DO jn = 1, jptra 
     122!$OMP PARALLEL WORKSHARE 
    114123           ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn) 
     124!$OMP END PARALLEL WORKSHARE 
    115125           CALL trd_tra( kt, 'TRC', jn, jptra_ldf, ztrtrd(:,:,:,jn) ) 
    116126        END DO 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90

    r6140 r7037  
    7979      INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    8080      ! 
    81       INTEGER  ::   jk, jn   ! dummy loop indices 
     81      INTEGER  ::   jk, jn, jj, ji   ! dummy loop indices 
    8282      REAL(wp) ::   zfact            ! temporary scalar 
    8383      CHARACTER (len=22) :: charout 
     
    108108      IF( l_trdtrc )  THEN             ! trends: store now fields before the Asselin filter application 
    109109         CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrdt ) 
     110!$OMP PARALLEL WORKSHARE 
    110111         ztrdt(:,:,:,:)  = trn(:,:,:,:) 
     112!$OMP END PARALLEL WORKSHARE 
    111113      ENDIF 
    112114      !                                ! Leap-Frog + Asselin filter time stepping 
    113115      IF( neuler == 0 .AND. kt == nittrc000 ) THEN    ! Euler time-stepping at first time-step (only swap) 
    114116         DO jn = 1, jptra 
     117!$OMP PARALLEL DO schedule(static) private(jk) 
    115118            DO jk = 1, jpkm1 
    116119               trn(:,:,jk,jn) = tra(:,:,jk,jn) 
     
    134137            DO jk = 1, jpkm1 
    135138               zfact = 1._wp / r2dttrc   
    136                ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact  
     139!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     140               DO jj = 1, jpj 
     141                  DO ji = 1, jpi 
     142                     ztrdt(ji,jj,jk,jn) = ( trb(ji,jj,jk,jn) - ztrdt(ji,jj,jk,jn) ) * zfact  
     143                  END DO 
     144               END DO 
    137145               CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 
    138146            END DO 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90

    r5836 r7037  
    138138      REAL(wp) :: ztrcorb, ztrmasb   ! temporary scalars 
    139139      REAL(wp) :: zcoef, ztrcorn, ztrmasn   !    "         " 
    140       REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrtrdb, ztrtrdn   ! workspace arrays 
     140      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrtrdb, ztrtrdn  ! workspace arrays 
     141      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zcptrbmax, zcptrnmax, zcptrbmin, zcptrnmin   ! workspace arrays 
    141142      REAL(wp) :: zs2rdt 
    142143      LOGICAL ::   lldebug = .FALSE. 
     
    145146  
    146147      IF( l_trdtrc )  CALL wrk_alloc( jpi, jpj, jpk, ztrtrdb, ztrtrdn ) 
    147        
     148      CALL wrk_alloc( jpi, jpj, jpk, zcptrbmax, zcptrnmax, zcptrbmin, zcptrnmin ) 
    148149      IF( PRESENT( cpreserv )  ) THEN   !  total tracer concentration is preserved  
    149150       
     
    154155 
    155156            IF( l_trdtrc ) THEN 
    156                ztrtrdb(:,:,:) = ptrb(:,:,:,jn)                        ! save input trb for trend computation 
    157                ztrtrdn(:,:,:) = ptrn(:,:,:,jn)                        ! save input trn for trend computation 
    158             ENDIF 
    159             !                                                         ! sum over the global domain  
    160             ztrcorb = glob_sum( MIN( 0., ptrb(:,:,:,jn) ) * cvol(:,:,:) ) 
    161             ztrcorn = glob_sum( MIN( 0., ptrn(:,:,:,jn) ) * cvol(:,:,:) ) 
    162  
    163             ztrmasb = glob_sum( MAX( 0., ptrb(:,:,:,jn) ) * cvol(:,:,:) ) 
    164             ztrmasn = glob_sum( MAX( 0., ptrn(:,:,:,jn) ) * cvol(:,:,:) ) 
     157!$OMP PARALLEL WORKSHARE 
     158                     ztrtrdb(:,:,:) = ptrb(:,:,:,jn)                        ! save input trb for trend computation 
     159                     ztrtrdn(:,:,:) = ptrn(:,:,:,jn) 
     160!$OMP END PARALLEL WORKSHARE 
     161            ENDIF 
     162            !                                                         ! sum over the global domain 
     163!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     164            DO jk = 1, jpk 
     165               DO jj = 1, jpj 
     166                  DO ji = 1, jpi 
     167                     zcptrbmin(ji,jj,jk) = MIN( 0., ptrb(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 
     168                     zcptrnmin(ji,jj,jk) = MIN( 0., ptrn(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 
     169                     zcptrbmax(ji,jj,jk) = MAX( 0., ptrb(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 
     170                     zcptrnmax(ji,jj,jk) = MAX( 0., ptrn(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 
     171                  END DO 
     172               END DO 
     173            END DO 
     174            ztrcorb = glob_sum( zcptrbmin(:,:,:) ) 
     175            ztrcorn = glob_sum( zcptrnmin(:,:,:) ) 
     176            ztrmasb = glob_sum( zcptrbmax(:,:,:) ) 
     177            ztrmasn = glob_sum( zcptrnmax(:,:,:) ) 
    165178 
    166179            IF( ztrcorb /= 0 ) THEN 
    167180               zcoef = 1. + ztrcorb / ztrmasb 
     181!$OMP PARALLEL DO schedule(static) private(jk) 
    168182               DO jk = 1, jpkm1 
    169183                  ptrb(:,:,jk,jn) = MAX( 0., ptrb(:,:,jk,jn) ) 
     
    174188            IF( ztrcorn /= 0 ) THEN 
    175189               zcoef = 1. + ztrcorn / ztrmasn 
     190!$OMP PARALLEL DO schedule(static) private(jk) 
    176191               DO jk = 1, jpkm1 
    177192                  ptrn(:,:,jk,jn) = MAX( 0., ptrn(:,:,jk,jn) ) 
     
    183198               ! 
    184199               zs2rdt = 1. / ( 2. * rdt ) 
     200!$OMP PARALLEL WORKSHARE 
    185201               ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 
    186202               ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt  
     203!$OMP END PARALLEL WORKSHARE 
     204 
    187205               CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb )       ! Asselin-like trend handling 
    188206               CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrdn )       ! standard     trend handling 
     
    198216 
    199217           IF( l_trdtrc ) THEN 
     218!$OMP PARALLEL 
     219!$OMP WORKSHARE 
    200220              ztrtrdb(:,:,:) = ptrb(:,:,:,jn)                        ! save input trb for trend computation 
    201221              ztrtrdn(:,:,:) = ptrn(:,:,:,jn)                        ! save input trn for trend computation 
    202            ENDIF 
    203  
     222!$OMP END WORKSHARE NOWAIT 
     223 
     224!$OMP DO schedule(static) private(jk,jj,ji) 
    204225            DO jk = 1, jpkm1 
    205226               DO jj = 1, jpj 
     
    210231               END DO 
    211232            END DO 
    212           
    213             IF( l_trdtrc ) THEN 
    214233               ! 
    215234               zs2rdt = 1. / ( 2. * rdt * FLOAT( nn_dttrc ) ) 
     235!$OMP WORKSHARE 
    216236               ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 
    217237               ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt  
     238!$OMP END WORKSHARE NOWAIT 
     239!$OMP END PARALLEL 
    218240               CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb )       ! Asselin-like trend handling 
    219241               CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrdn )       ! standard     trend handling 
    220242              ! 
     243            ELSE 
     244!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     245               DO jk = 1, jpkm1 
     246                  DO jj = 1, jpj 
     247                     DO ji = 1, jpi 
     248                        ptrn(ji,jj,jk,jn) = MAX( 0. , ptrn(ji,jj,jk,jn) ) 
     249                        ptrb(ji,jj,jk,jn) = MAX( 0. , ptrb(ji,jj,jk,jn) ) 
     250                     END DO 
     251                  END DO 
     252               END DO 
    221253            ENDIF 
    222254            ! 
     
    226258 
    227259      IF( l_trdtrc )  CALL wrk_dealloc( jpi, jpj, jpk, ztrtrdb, ztrtrdn ) 
     260      CALL wrk_dealloc( jpi, jpj, jpk, zcptrbmax, zcptrnmax, zcptrbmin, zcptrnmin ) 
    228261 
    229262   END SUBROUTINE trc_rad_sms 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90

    r6309 r7037  
    109109         ELSE                                         ! No restart or restart not found: Euler forward time stepping 
    110110           zfact = 1._wp 
     111!$OMP PARALLEL WORKSHARE 
    111112           sbc_trc_b(:,:,:) = 0._wp 
     113!$OMP END PARALLEL WORKSHARE 
    112114         ENDIF 
    113115      ELSE                                         ! Swap of forcing fields 
    114116         IF( ln_top_euler ) THEN 
    115117            zfact = 1._wp 
     118!$OMP PARALLEL WORKSHARE 
    116119            sbc_trc_b(:,:,:) = 0._wp 
     120!$OMP END PARALLEL WORKSHARE 
    117121         ELSE 
    118122            zfact = 0.5_wp 
     123!$OMP PARALLEL WORKSHARE 
    119124            sbc_trc_b(:,:,:) = sbc_trc(:,:,:) 
     125!$OMP END PARALLEL WORKSHARE 
    120126         ENDIF 
    121127         ! 
     
    127133      ! 
    128134      IF( .NOT. lk_offline .AND. .NOT.ln_linssh ) THEN  ! online coupling with vvl 
     135!$OMP PARALLEL WORKSHARE 
    129136         zsfx(:,:) = 0._wp 
     137!$OMP END PARALLEL WORKSHARE 
    130138      ELSE                                      ! online coupling free surface or offline with free surface 
     139!$OMP PARALLEL WORKSHARE 
    131140         zsfx(:,:) = emp(:,:) 
     141!$OMP END PARALLEL WORKSHARE 
    132142      ENDIF 
    133143 
     
    135145      DO jn = 1, jptra 
    136146         ! 
    137          IF( l_trdtrc )   ztrtrd(:,:,:) = tra(:,:,:,jn)  ! save trends 
    138  
     147         IF( l_trdtrc ) THEN 
     148!$OMP PARALLEL WORKSHARE 
     149            ztrtrd(:,:,:) = tra(:,:,:,jn)  ! save trends 
     150!$OMP END PARALLEL WORKSHARE 
     151         END IF 
    139152         IF ( nn_ice_tr == -1 ) THEN  ! No tracers in sea ice (null concentration in sea ice) 
    140153 
     154!$OMP PARALLEL DO schedule(static) private(jj, ji)  
    141155            DO jj = 2, jpj 
    142156               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    146160 
    147161         ELSE 
    148  
     162!$OMP PARALLEL DO schedule(static) private(jj,ji,zse3t,zftra,zcd,ztfx,zdtra,zratio) 
    149163            DO jj = 2, jpj 
    150164               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    170184         CALL lbc_lnk( sbc_trc(:,:,jn), 'T', 1. ) 
    171185         !                                       Concentration dilution effect on tracers due to evaporation & precipitation  
     186!$OMP PARALLEL DO schedule(static) private(jj,ji,zse3t)  
    172187         DO jj = 2, jpj 
    173188            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    178193         ! 
    179194         IF( l_trdtrc ) THEN 
     195!$OMP PARALLEL WORKSHARE 
    180196            ztrtrd(:,:,:) = tra(:,:,:,jn) - ztrtrd(:,:,:) 
     197!$OMP END PARALLEL WORKSHARE 
    181198            CALL trd_tra( kt, 'TRC', jn, jptra_nsr, ztrtrd ) 
    182199         END IF 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90

    r6140 r7037  
    7171      IF( l_trdtrc )  THEN 
    7272         CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrtrd ) 
     73!$OMP PARALLEL WORKSHARE 
    7374         ztrtrd(:,:,:,:)  = tra(:,:,:,:) 
     75!$OMP END PARALLEL WORKSHARE 
    7476      ENDIF 
    7577 
     
    8183      IF( l_trdtrc )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    8284         DO jn = 1, jptra 
     85!$OMP PARALLEL DO schedule(static) private(jk) 
    8386            DO jk = 1, jpkm1 
    8487               ztrtrd(:,:,jk,jn) = ( ( tra(:,:,jk,jn) - trb(:,:,jk,jn) ) / r2dttrc ) - ztrtrd(:,:,jk,jn) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/trcini.F90

    r6309 r7037  
    117117      !!---------------------------------------------------------------------- 
    118118      !                                                              ! masked grid volume 
     119!$OMP PARALLEL DO schedule(static) private(jk) 
    119120      DO jk = 1, jpk 
    120121         cvol(:,:,jk) = e1e2t(:,:) * e3t_n(:,:,jk) * tmask(:,:,jk) 
    121122      END DO 
    122       IF( lk_degrad )   cvol(:,:,:) = cvol(:,:,:) * facvol(:,:,:)    ! degrad option: reduction by facvol 
     123      IF( lk_degrad ) THEN   
     124!$OMP PARALLEL WORKSHARE 
     125         cvol(:,:,:) = cvol(:,:,:) * facvol(:,:,:)    ! degrad option: reduction by facvol 
     126!$OMP END PARALLEL WORKSHARE 
     127      END IF 
    123128      !                                                              ! total volume of the ocean  
    124129      areatot = glob_sum( cvol(:,:,:) ) 
     
    224229                  jl = n_trc_index(jn)  
    225230                  CALL trc_dta( nit000, sf_trcdta(jl) )   ! read tracer data at nit000 
     231!$OMP PARALLEL WORKSHARE 
    226232                  trn(:,:,:,jn) = sf_trcdta(jl)%fnow(:,:,:) * tmask(:,:,:) * rf_trfac(jl) 
     233!$OMP END PARALLEL WORKSHARE 
    227234                  ! 
    228235                  IF( .NOT.ln_trcdmp .AND. .NOT.ln_trcdmp_clo ) THEN      !== deallocate data structure   ==! 
     
    238245        ENDIF 
    239246        ! 
     247!$OMP PARALLEL WORKSHARE 
    240248        trb(:,:,:,:) = trn(:,:,:,:) 
     249!$OMP END PARALLEL WORKSHARE 
    241250        !  
    242251      ENDIF 
    243252  
     253!$OMP PARALLEL WORKSHARE 
    244254      tra(:,:,:,:) = 0._wp 
     255!$OMP END PARALLEL WORKSHARE 
    245256      !                                                         ! Partial top/bottom cell: GRADh(trn) 
    246257   END SUBROUTINE trc_ini_state 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/trcrst.F90

    r6140 r7037  
    279279      ENDIF 
    280280      ! 
     281!$OMP PARALLEL DO schedule(static) private(jk) 
    281282      DO jk = 1, jpk 
    282283         zvol(:,:,jk) = e1e2t(:,:) * e3t_a(:,:,jk) * tmask(:,:,jk) 
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/TOP_SRC/trcstp.F90

    r6140 r7037  
    5454      !!------------------------------------------------------------------- 
    5555      INTEGER, INTENT( in ) ::  kt      ! ocean time-step index 
    56       INTEGER               ::  jk, jn  ! dummy loop indices 
     56      INTEGER               ::  jk, jn, jj, ji  ! dummy loop indices 
    5757      REAL(wp)              ::  ztrai 
    5858      CHARACTER (len=25)    ::  charout  
     59      REAL(wp), POINTER, DIMENSION(:,:,:) :: zctrn   ! workspace array 
    5960 
    6061      !!------------------------------------------------------------------- 
    6162      ! 
     63      CALL wrk_alloc( jpi, jpj, jpk, zctrn) 
    6264      IF( nn_timing == 1 )   CALL timing_start('trc_stp') 
    6365      ! 
     
    6567      ! 
    6668      IF( .NOT.ln_linssh ) THEN                                           ! update ocean volume due to ssh temporal evolution 
     69!$OMP PARALLEL  
     70!$OMP DO schedule(static) private(jk)  
    6771         DO jk = 1, jpk 
    6872            cvol(:,:,jk) = e1e2t(:,:) * e3t_n(:,:,jk) * tmask(:,:,jk) 
    6973         END DO 
    70          IF( lk_degrad )  cvol(:,:,:) = cvol(:,:,:) * facvol(:,:,:)       ! degrad option: reduction by facvol 
     74         IF( lk_degrad ) THEN 
     75!$OMP WORKSHARE 
     76             cvol(:,:,:) = cvol(:,:,:) * facvol(:,:,:)       ! degrad option: reduction by facvol 
     77!$OMP END WORKSHARE NOWAIT 
     78         END IF 
     79!$OMP END PARALLEL 
    7180         areatot         = glob_sum( cvol(:,:,:) ) 
    7281      ENDIF 
     
    8392         ENDIF 
    8493         ! 
     94!$OMP PARALLEL WORKSHARE 
    8595         tra(:,:,:,:) = 0.e0 
     96!$OMP END PARALLEL WORKSHARE 
    8697         ! 
    8798                                   CALL trc_rst_opn  ( kt )       ! Open tracer restart file  
     
    105116      ztrai = 0._wp                                                   !  content of all tracers 
    106117      DO jn = 1, jptra 
    107          ztrai = ztrai + glob_sum( trn(:,:,:,jn) * cvol(:,:,:)   ) 
     118 
     119!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     120            DO jk = 1, jpk 
     121               DO jj = 1, jpj 
     122                  DO ji = 1, jpi 
     123                     zctrn(ji,jj,jk) = trn(ji,jj,jk,jn) * cvol(ji,jj,jk) 
     124                  END DO 
     125               END DO 
     126            END DO 
     127 
     128         ztrai = ztrai + glob_sum( zctrn(:,:,:)   ) 
     129 
    108130      END DO 
    109131      IF( lwp ) WRITE(numstr,9300) kt,  ztrai / areatot 
    1101329300  FORMAT(i10,e18.10) 
    111133      ! 
     134      CALL wrk_dealloc( jpi, jpj, jpk, zctrn) 
     135 
    112136      IF( nn_timing == 1 )   CALL timing_stop('trc_stp') 
    113       ! 
     137 
    114138   END SUBROUTINE trc_stp 
    115139 
     
    128152      !!---------------------------------------------------------------------- 
    129153      INTEGER, INTENT(in) ::   kt 
    130       INTEGER  :: jn 
     154      INTEGER  :: jn, jj, ji 
    131155      !!---------------------------------------------------------------------- 
    132156      ! 
     
    147171         ! 
    148172         ALLOCATE( qsr_arr(jpi,jpj,nb_rec_per_days ) ) 
     173!$OMP PARALLEL  
     174!$OMP DO schedule(static) private(jn, ji, jj) 
    149175         DO jn = 1, nb_rec_per_days 
    150             qsr_arr(:,:,jn) = qsr(:,:) 
     176             DO jj = 1, jpj 
     177                DO ji = 1, jpi  
     178                   qsr_arr(ji,jj,jn) = qsr(ji,jj) 
     179                END DO 
     180             END DO 
    151181         ENDDO 
    152          qsr_mean(:,:) = qsr(:,:) 
     182!$OMP DO schedule(static) private(ji, jj) 
     183             DO jj = 1, jpj 
     184                DO ji = 1, jpi  
     185                   qsr_mean(ji,jj) = qsr(ji,jj) 
     186                END DO 
     187             END DO 
     188!$OMP END DO NOWAIT 
     189!$OMP END PARALLEL 
    153190         ! 
    154191         isecfst  = nsec_year + nsec1jan000   !   number of seconds between Jan. 1st 00h of nit000 year and the middle of time step 
     
    163200             &                      ' time = ', (iseclast+rdt*nn_dttrc/2.)/3600.,'hours ' 
    164201          isecfst = iseclast 
     202!$OMP PARALLEL  
    165203          DO jn = 1, nb_rec_per_days - 1 
    166              qsr_arr(:,:,jn) = qsr_arr(:,:,jn+1) 
     204!$OMP DO schedule(static) private(ji, jj) 
     205             DO jj = 1, jpj 
     206                DO ji = 1, jpi  
     207                   qsr_arr(ji,jj,jn) = qsr_arr(ji,jj,jn+1) 
     208                END DO 
     209             END DO 
    167210          END DO 
     211!$OMP WORKSHARE 
    168212          qsr_arr (:,:,nb_rec_per_days) = qsr(:,:) 
     213!$OMP END WORKSHARE 
    169214          qsr_mean(:,:                ) = SUM( qsr_arr(:,:,:), 3 ) / nb_rec_per_days 
     215!$OMP END PARALLEL 
    170216      ENDIF 
    171217      ! 
Note: See TracChangeset for help on using the changeset viewer.