Changeset 7037


Ignore:
Timestamp:
2016-10-18T15:32:04+02:00 (4 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