New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 7698 for trunk/NEMOGCM/NEMO/OPA_SRC/TRA – NEMO

Ignore:
Timestamp:
2017-02-18T10:02:03+01:00 (7 years ago)
Author:
mocavero
Message:

update trunk with OpenMP parallelization

Location:
trunk/NEMOGCM/NEMO/OPA_SRC/TRA
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r7646 r7698  
    237237      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    238238         ! 
     239!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn3, zn2, zn1, zn0, zn) 
    239240         DO jk = 1, jpkm1 
    240241            DO jj = 1, jpj 
     
    277278      CASE( np_seos )                !==  simplified EOS  ==! 
    278279         ! 
     280!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn) 
    279281         DO jk = 1, jpkm1 
    280282            DO jj = 1, jpj 
     
    345347            END DO 
    346348            ! 
     349!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, jsmp, jdof, zh, zt, zstemp, zs, ztm, zn3, zn2, zn1) 
    347350            DO jk = 1, jpkm1 
    348351               DO jj = 1, jpj 
     
    399402         ! Non-stochastic equation of state 
    400403         ELSE 
     404!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn3, zn2, zn1, zn0, zn) 
    401405            DO jk = 1, jpkm1 
    402406               DO jj = 1, jpj 
     
    441445      CASE( np_seos )                !==  simplified EOS  ==! 
    442446         ! 
     447!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn) 
    443448         DO jk = 1, jpkm1 
    444449            DO jj = 1, jpj 
     
    493498      IF( nn_timing == 1 )   CALL timing_start('eos2d') 
    494499      ! 
    495       prd(:,:) = 0._wp 
     500!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     501      DO jj = 1, jpj 
     502         DO ji = 1, jpi 
     503            prd(ji,jj) = 0._wp 
     504         END DO 
     505      END DO 
    496506      ! 
    497507      SELECT CASE( neos ) 
     
    499509      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    500510         ! 
     511!$OMP PARALLEL DO schedule(static) private(jj, ji, zh, zt, zs, zn3, zn2, zn1, zn0, zn) 
    501512         DO jj = 1, jpjm1 
    502513            DO ji = 1, fs_jpim1   ! vector opt. 
     
    538549      CASE( np_seos )                !==  simplified EOS  ==! 
    539550         ! 
     551!$OMP PARALLEL DO schedule(static) private(jj, ji, zh, zt, zs, zn) 
    540552         DO jj = 1, jpjm1 
    541553            DO ji = 1, fs_jpim1   ! vector opt. 
     
    589601      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    590602         ! 
     603!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn3, zn2, zn1, zn0, zn) 
    591604         DO jk = 1, jpkm1 
    592605            DO jj = 1, jpj 
     
    646659      CASE( np_seos )                  !==  simplified EOS  ==! 
    647660         ! 
     661!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn) 
    648662         DO jk = 1, jpkm1 
    649663            DO jj = 1, jpj 
     
    698712      IF( nn_timing == 1 ) CALL timing_start('rab_2d') 
    699713      ! 
    700       pab(:,:,:) = 0._wp 
     714!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     715         DO jk = 1, jpts 
     716            DO jj = 1, jpj 
     717               DO ji = 1, jpi 
     718                  pab(ji,jj,jk) = 0._wp 
     719               END DO 
     720            END DO 
     721         END DO 
    701722      ! 
    702723      SELECT CASE ( neos ) 
     
    704725      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    705726         ! 
     727!$OMP PARALLEL DO schedule(static) private(jj, ji, zh, zt, zs, zn3, zn2, zn1, zn0, zn) 
    706728         DO jj = 1, jpjm1 
    707729            DO ji = 1, fs_jpim1   ! vector opt. 
     
    762784      CASE( np_seos )                  !==  simplified EOS  ==! 
    763785         ! 
     786!$OMP PARALLEL DO schedule(static) private(jj, ji, zh, zt, zs, zn) 
    764787         DO jj = 1, jpjm1 
    765788            DO ji = 1, fs_jpim1   ! vector opt. 
     
    917940      IF( nn_timing == 1 ) CALL timing_start('bn2') 
    918941      ! 
     942!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zrw, zaw, zbw) 
    919943      DO jk = 2, jpkm1           ! interior points only (2=< jk =< jpkm1 ) 
    920944         DO jj = 1, jpj          ! surface and bottom value set to zero one for all in istate.F90 
     
    952976      !!                Rational approximation to TEOS10 algorithm (rms error on WOA13 values: 4.0e-5 degC) 
    953977      !!---------------------------------------------------------------------- 
    954       REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::   ctmp   ! Cons. Temp   [Celsius] 
    955       REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::   psal   ! salinity     [psu] 
     978      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::   ctmp   ! Cons. Temp [Celsius] 
     979      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::   psal   ! salinity   [psu] 
    956980      ! Leave result array automatic rather than making explicitly allocated 
    957981      REAL(wp), DIMENSION(jpi,jpj) ::   ptmp   ! potential temperature [Celsius] 
     
    969993      z1_T0   = 1._wp/40._wp 
    970994      ! 
     995!$OMP PARALLEL DO schedule(static) private(jj, ji, zt, zs, ztm, zn,zd) 
    971996      DO jj = 1, jpj 
    972997         DO ji = 1, jpi 
     
    10241049         ! 
    10251050         z1_S0 = 1._wp / 35.16504_wp 
     1051!$OMP PARALLEL 
     1052!$OMP DO schedule(static) private(jj, ji, zs) 
    10261053         DO jj = 1, jpj 
    10271054            DO ji = 1, jpi 
     
    10311058            END DO 
    10321059         END DO 
    1033          ptf(:,:) = ptf(:,:) * psal(:,:) 
    1034          ! 
    1035          IF( PRESENT( pdep ) )   ptf(:,:) = ptf(:,:) - 7.53e-4 * pdep(:,:) 
     1060!$OMP DO schedule(static) private(jj, ji) 
     1061         DO jj = 1, jpj 
     1062            DO ji = 1, jpi 
     1063               ptf(ji,jj) = ptf(ji,jj) * psal(ji,jj) 
     1064            END DO 
     1065         END DO 
     1066!$OMP END PARALLEL 
     1067         ! 
     1068         IF( PRESENT( pdep ) ) THEN 
     1069!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     1070           DO jj = 1, jpj 
     1071              DO ji = 1, jpi 
     1072                 ptf(ji,jj) = ptf(ji,jj) - 7.53e-4 * pdep(ji,jj) 
     1073              END DO 
     1074           END DO 
     1075         END IF 
    10361076         ! 
    10371077      CASE ( np_eos80 )                !==  PT,SP (UNESCO formulation)  ==! 
    10381078         ! 
    1039          ptf(:,:) = ( - 0.0575_wp + 1.710523e-3_wp * SQRT( psal(:,:) )   & 
    1040             &                     - 2.154996e-4_wp *       psal(:,:)   ) * psal(:,:) 
     1079!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     1080         DO jj = 1, jpj 
     1081            DO ji = 1, jpi 
     1082            ptf(ji,jj) = ( - 0.0575_wp + 1.710523e-3_wp * SQRT( psal(ji,jj) )   & 
     1083               &                     - 2.154996e-4_wp *       psal(ji,jj)   ) * psal(ji,jj) 
     1084            END DO 
     1085         END DO 
    10411086            ! 
    1042          IF( PRESENT( pdep ) )   ptf(:,:) = ptf(:,:) - 7.53e-4 * pdep(:,:) 
     1087         IF( PRESENT( pdep ) ) THEN 
     1088!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     1089           DO jj = 1, jpj 
     1090              DO ji = 1, jpi 
     1091                 ptf(ji,jj) = ptf(ji,jj) - 7.53e-4 * pdep(ji,jj) 
     1092              END DO 
     1093           END DO 
     1094         END IF 
    10431095         ! 
    10441096      CASE DEFAULT 
     
    11341186      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    11351187         ! 
     1188!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn2, zn1, zn0, zn) 
    11361189         DO jk = 1, jpkm1 
    11371190            DO jj = 1, jpj 
     
    11971250      CASE( np_seos )                !==  Vallis (2006) simplified EOS  ==! 
    11981251         ! 
     1252!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zh, zt, zs, ztm, zn) 
    11991253         DO jk = 1, jpkm1 
    12001254            DO jj = 1, jpj 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90

    r7646 r7698  
    8888      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    8989      ! 
    90       INTEGER ::   jk   ! dummy loop index 
     90      INTEGER :: ji, jj, jk   ! dummy loop index 
    9191      REAL(wp), POINTER, DIMENSION(:,:,:) :: zun, zvn, zwn 
    9292      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrdt, ztrds   ! 3D workspace 
     
    9898      ! 
    9999      !                                          ! set time step 
    100       zun(:,:,:) = 0.0 
    101       zvn(:,:,:) = 0.0 
    102       zwn(:,:,:) = 0.0 
     100!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     101      DO jk = 1, jpk 
     102         DO jj = 1, jpj 
     103            DO ji = 1, jpi 
     104               zun(ji,jj,jk) = 0.0 
     105               zvn(ji,jj,jk) = 0.0 
     106               zwn(ji,jj,jk) = 0.0 
     107            END DO 
     108         END DO 
     109      END DO 
    103110      !     
    104111      IF( neuler == 0 .AND. kt == nit000 ) THEN     ! at nit000 
     
    110117      !                                         !==  effective transport  ==! 
    111118      IF( ln_wave .AND. ln_sdw )  THEN 
     119!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    112120         DO jk = 1, jpkm1                                                       ! eulerian transport + Stokes Drift 
    113             zun(:,:,jk) = e2u  (:,:) * e3u_n(:,:,jk) * ( un(:,:,jk) + usd(:,:,jk) ) 
    114             zvn(:,:,jk) = e1v  (:,:) * e3v_n(:,:,jk) * ( vn(:,:,jk) + vsd(:,:,jk) ) 
    115             zwn(:,:,jk) = e1e2t(:,:)                 * ( wn(:,:,jk) + wsd(:,:,jk) ) 
     121            DO jj = 1, jpj 
     122               DO ji = 1, jpi 
     123                  zun(ji,jj,jk) = e2u(ji,jj) * e3u_n(ji,jj,jk) * ( un(ji,jj,jk) + usd(ji,jj,jk) ) 
     124                  zvn(ji,jj,jk) = e1v(ji,jj) * e3v_n(ji,jj,jk) * ( vn(ji,jj,jk) + vsd(ji,jj,jk) ) 
     125                  zwn(ji,jj,jk) = e1e2t(ji,jj) * ( wn(ji,jj,jk) + wsd(ji,jj,jk) ) 
     126               END DO 
     127            END DO 
    116128         END DO 
    117129      ELSE 
     130!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    118131         DO jk = 1, jpkm1 
    119             zun(:,:,jk) = e2u  (:,:) * e3u_n(:,:,jk) * un(:,:,jk)               ! eulerian transport only 
    120             zvn(:,:,jk) = e1v  (:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
    121             zwn(:,:,jk) = e1e2t(:,:)                 * wn(:,:,jk) 
     132            DO jj = 1, jpj 
     133               DO ji = 1, jpi 
     134                  zun(ji,jj,jk) = e2u  (ji,jj) * e3u_n(ji,jj,jk) * un(ji,jj,jk)    ! eulerian transport only 
     135                  zvn(ji,jj,jk) = e1v  (ji,jj) * e3v_n(ji,jj,jk) * vn(ji,jj,jk) 
     136                  zwn(ji,jj,jk) = e1e2t(ji,jj)                   * wn(ji,jj,jk) 
     137               END DO 
     138            END DO 
    122139         END DO 
    123140      ENDIF 
    124141      ! 
    125142      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN                                ! add z-tilde and/or vvl corrections 
    126          zun(:,:,:) = zun(:,:,:) + un_td(:,:,:) 
    127          zvn(:,:,:) = zvn(:,:,:) + vn_td(:,:,:) 
    128       ENDIF 
    129       ! 
    130       zun(:,:,jpk) = 0._wp                                                      ! no transport trough the bottom 
    131       zvn(:,:,jpk) = 0._wp 
    132       zwn(:,:,jpk) = 0._wp 
     143!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     144         DO jk = 1, jpk 
     145            DO jj = 1, jpj 
     146               DO ji = 1, jpi 
     147                  zun(ji,jj,jk) = zun(ji,jj,jk) + un_td(ji,jj,jk) 
     148                  zvn(ji,jj,jk) = zvn(ji,jj,jk) + vn_td(ji,jj,jk) 
     149               END DO 
     150            END DO 
     151         END DO 
     152      ENDIF 
     153      ! 
     154!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     155      DO jj = 1, jpj 
     156         DO ji = 1, jpi 
     157            zun(ji,jj,jpk) = 0._wp                                              ! no transport trough the bottom 
     158            zvn(ji,jj,jpk) = 0._wp 
     159            zwn(ji,jj,jpk) = 0._wp 
     160         END DO 
     161      END DO 
    133162      ! 
    134163      IF( ln_ldfeiv .AND. .NOT. ln_traldf_triad )   & 
     
    147176      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    148177         CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    149          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    150          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     178!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     179         DO jk = 1, jpk 
     180            DO jj = 1, jpj 
     181               DO ji = 1, jpi 
     182                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) 
     183                  ztrds(ji,jj,jk) = tsa(ji,jj,jk,jp_sal) 
     184               END DO 
     185            END DO 
     186         END DO 
    151187      ENDIF 
    152188      ! 
     
    169205      ! 
    170206      IF( l_trdtra )   THEN                      ! save the advective trends for further diagnostics 
     207!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    171208         DO jk = 1, jpkm1 
    172             ztrdt(:,:,jk) = tsa(:,:,jk,jp_tem) - ztrdt(:,:,jk) 
    173             ztrds(:,:,jk) = tsa(:,:,jk,jp_sal) - ztrds(:,:,jk) 
     209            DO jj = 1, jpj 
     210               DO ji = 1, jpi 
     211                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) - ztrdt(ji,jj,jk) 
     212                  ztrds(ji,jj,jk) = tsa(ji,jj,jk,jp_sal) - ztrds(ji,jj,jk) 
     213               END DO 
     214            END DO 
    174215         END DO 
    175216         CALL trd_tra( kt, 'TRA', jp_tem, jptra_totad, ztrdt ) 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_fct.F90

    r7646 r7698  
    113113      IF( l_trd .OR. l_hst )  THEN 
    114114         CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 
    115          ztrdx(:,:,:) = 0._wp   ;    ztrdy(:,:,:) = 0._wp   ;   ztrdz(:,:,:) = 0._wp 
     115!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     116         DO jk = 1, jpk 
     117            DO jj = 1, jpj 
     118               DO ji = 1, jpi 
     119                  ztrdx(ji,jj,jk) = 0._wp 
     120                  ztrdy(ji,jj,jk) = 0._wp 
     121                  ztrdz(ji,jj,jk) = 0._wp 
     122               END DO 
     123            END DO 
     124         END DO 
    116125      ENDIF 
    117126      ! 
    118127      IF( l_ptr ) THEN   
    119128         CALL wrk_alloc( jpi, jpj, jpk, zptry ) 
    120          zptry(:,:,:) = 0._wp 
     129!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     130         DO jk = 1, jpk 
     131            DO jj = 1, jpj 
     132               DO ji = 1, jpi 
     133                  zptry(ji,jj,jk) = 0._wp 
     134               END DO 
     135            END DO 
     136         END DO 
    121137      ENDIF 
    122138      !                          ! surface & bottom value : flux set to zero one for all 
    123       zwz(:,:, 1 ) = 0._wp             
    124       zwx(:,:,jpk) = 0._wp   ;   zwy(:,:,jpk) = 0._wp    ;    zwz(:,:,jpk) = 0._wp 
    125       ! 
    126       zwi(:,:,:) = 0._wp         
     139!$OMP PARALLEL 
     140!$OMP DO schedule(static) private(jj, ji) 
     141      DO jj = 1, jpj 
     142         DO ji = 1, jpi 
     143            zwz(ji,jj, 1 ) = 0._wp 
     144            zwx(ji,jj,jpk) = 0._wp 
     145            zwy(ji,jj,jpk) = 0._wp 
     146            zwz(ji,jj,jpk) = 0._wp 
     147         END DO 
     148      END DO 
     149!$OMP END DO NOWAIT 
     150!$OMP DO schedule(static) private(jk, jj, ji) 
     151      DO jk = 1, jpk 
     152         DO jj = 1, jpj 
     153            DO ji = 1, jpi 
     154               zwi(ji,jj,jk) = 0._wp 
     155            END DO 
     156         END DO 
     157      END DO 
     158!$OMP END PARALLEL 
    127159      ! 
    128160      DO jn = 1, kjpt            !==  loop over the tracers  ==! 
     
    130162         !        !==  upstream advection with initial mass fluxes & intermediate update  ==! 
    131163         !                    !* upstream tracer flux in the i and j direction  
     164!$OMP PARALLEL 
     165!$OMP DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui,zfm_ui) 
    132166         DO jk = 1, jpkm1 
    133167            DO jj = 1, jpjm1 
     
    143177            END DO 
    144178         END DO 
     179!$OMP END DO NOWAIT 
    145180         !                    !* upstream tracer flux in the k direction *! 
     181!$OMP DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 
    146182         DO jk = 2, jpkm1        ! Interior value ( multiplied by wmask) 
    147183            DO jj = 1, jpj 
     
    153189            END DO 
    154190         END DO 
     191!$OMP END PARALLEL 
    155192         IF( ln_linssh ) THEN    ! top ocean value (only in linear free surface as zwz has been w-masked) 
    156193            IF( ln_isfcav ) THEN             ! top of the ice-shelf cavities and at the ocean surface 
     194!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    157195               DO jj = 1, jpj 
    158196                  DO ji = 1, jpi 
     
    161199               END DO    
    162200            ELSE                             ! no cavities: only at the ocean surface 
    163                zwz(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) 
     201!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     202               DO jj = 1, jpj 
     203                  DO ji = 1, jpi 
     204                     zwz(ji,jj,1) = pwn(ji,jj,1) * ptb(ji,jj,1,jn) 
     205                  END DO 
     206               END DO 
    164207            ENDIF 
    165208         ENDIF 
    166209         !                
     210!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ztra) 
    167211         DO jk = 1, jpkm1     !* trend and after field with monotonic scheme 
    168212            DO jj = 2, jpjm1 
     
    181225         !                 
    182226         IF( l_trd .OR. l_hst )  THEN             ! trend diagnostics (contribution of upstream fluxes) 
    183             ztrdx(:,:,:) = zwx(:,:,:)   ;   ztrdy(:,:,:) = zwy(:,:,:)   ;   ztrdz(:,:,:) = zwz(:,:,:) 
     227!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     228            DO jk = 1, jpk 
     229               DO jj = 1, jpj 
     230                  DO ji = 1, jpi 
     231                     ztrdx(ji,jj,jk) = zwx(ji,jj,jk) 
     232                     ztrdy(ji,jj,jk) = zwy(ji,jj,jk) 
     233                     ztrdz(ji,jj,jk) = zwz(ji,jj,jk) 
     234                  END DO 
     235               END DO 
     236            END DO 
    184237         END IF 
    185238         !                             ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    186          IF( l_ptr )  zptry(:,:,:) = zwy(:,:,:)  
     239         IF( l_ptr ) THEN 
     240!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     241            DO jk = 1, jpk 
     242               DO jj = 1, jpj 
     243                  DO ji = 1, jpi 
     244                     zptry(ji,jj,jk) = zwy(ji,jj,jk) 
     245                  END DO 
     246               END DO 
     247            END DO 
     248         END IF 
    187249         ! 
    188250         !        !==  anti-diffusive flux : high order minus low order  ==! 
     
    191253         ! 
    192254         CASE(  2  )                   !- 2nd order centered 
     255!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    193256            DO jk = 1, jpkm1 
    194257               DO jj = 1, jpjm1 
     
    201264            ! 
    202265         CASE(  4  )                   !- 4th order centered 
    203             zltu(:,:,jpk) = 0._wp            ! Bottom value : flux set to zero 
    204             zltv(:,:,jpk) = 0._wp 
     266!$OMP PARALLEL  
     267!$OMP DO schedule(static) private(jj, ji) 
     268            DO jj = 1, jpj 
     269               DO ji = 1, jpi 
     270                  zltu(ji,jj,jpk) = 0._wp            ! Bottom value : flux set to zero 
     271                  zltv(ji,jj,jpk) = 0._wp 
     272               END DO 
     273            END DO 
     274!$OMP DO schedule(static) private(jk, jj, ji) 
    205275            DO jk = 1, jpkm1                 ! Laplacian 
    206276               DO jj = 1, jpjm1                    ! 1st derivative (gradient) 
     
    217287               END DO 
    218288            END DO 
     289!$OMP END PARALLEL 
    219290            CALL lbc_lnk( zltu, 'T', 1. )   ;    CALL lbc_lnk( zltv, 'T', 1. )   ! Lateral boundary cond. (unchanged sgn) 
    220291            ! 
     292!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zC2t_u, zC2t_v) 
    221293            DO jk = 1, jpkm1                 ! Horizontal advective fluxes 
    222294               DO jj = 1, jpjm1 
     
    232304            ! 
    233305         CASE(  41 )                   !- 4th order centered       ==>>   !!gm coding attempt   need to be tested 
    234             ztu(:,:,jpk) = 0._wp             ! Bottom value : flux set to zero 
    235             ztv(:,:,jpk) = 0._wp 
     306!$OMP PARALLEL 
     307!$OMP DO schedule(static) private(jj, ji) 
     308            DO jj = 1, jpj 
     309               DO ji = 1, jpi 
     310                  ztu(ji,jj,jpk) = 0._wp             ! Bottom value : flux set to zero 
     311                  ztv(ji,jj,jpk) = 0._wp 
     312               END DO 
     313            END DO 
     314!$OMP DO schedule(static) private(jk, jj, ji) 
    236315            DO jk = 1, jpkm1                 ! 1st derivative (gradient) 
    237316               DO jj = 1, jpjm1 
     
    242321               END DO 
    243322            END DO 
     323!$OMP END PARALLEL 
    244324            CALL lbc_lnk( ztu, 'U', -1. )   ;    CALL lbc_lnk( ztv, 'V', -1. )   ! Lateral boundary cond. (unchanged sgn) 
    245325            ! 
     326!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zC2t_u, zC2t_v, zC4t_u, zC4t_v) 
    246327            DO jk = 1, jpkm1                 ! Horizontal advective fluxes 
    247328               DO jj = 2, jpjm1 
     
    264345         ! 
    265346         CASE(  2  )                   !- 2nd order centered 
     347!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    266348            DO jk = 2, jpkm1     
    267349               DO jj = 2, jpjm1 
     
    275357         CASE(  4  )                   !- 4th order COMPACT 
    276358            CALL interp_4th_cpt( ptn(:,:,:,jn) , ztw )   ! zwt = COMPACT interpolation of T at w-point 
     359!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    277360            DO jk = 2, jpkm1 
    278361               DO jj = 2, jpjm1 
     
    285368         END SELECT 
    286369         IF( ln_linssh ) THEN    ! top ocean value: high order = upstream  ==>>  zwz=0 
    287             zwz(:,:,1) = 0._wp   ! only ocean surface as interior zwz values have been w-masked 
     370!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     371            DO jj = 1, jpj 
     372               DO ji = 1, jpi 
     373                  zwz(ji,jj,1) = 0._wp   ! only ocean surface as interior zwz values have been w-masked 
     374               END DO 
     375            END DO 
    288376         ENDIF 
    289377         ! 
     
    297385         !        !==  final trend with corrected fluxes  ==! 
    298386         ! 
     387!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    299388         DO jk = 1, jpkm1 
    300389            DO jj = 2, jpjm1 
     
    309398         ! 
    310399         IF( l_trd .OR. l_hst ) THEN     ! trend diagnostics (contribution of upstream fluxes) 
    311             ztrdx(:,:,:) = ztrdx(:,:,:) + zwx(:,:,:)  ! <<< Add to previously computed 
    312             ztrdy(:,:,:) = ztrdy(:,:,:) + zwy(:,:,:)  ! <<< Add to previously computed 
    313             ztrdz(:,:,:) = ztrdz(:,:,:) + zwz(:,:,:)  ! <<< Add to previously computed 
     400!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     401            DO jk = 1, jpk 
     402               DO jj = 1, jpj 
     403                  DO ji = 1, jpi 
     404                     ztrdx(ji,jj,jk) = ztrdx(ji,jj,jk) + zwx(ji,jj,jk)  ! <<< Add to previously computed 
     405                     ztrdy(ji,jj,jk) = ztrdy(ji,jj,jk) + zwy(ji,jj,jk)  ! <<< Add to previously computed 
     406                     ztrdz(ji,jj,jk) = ztrdz(ji,jj,jk) + zwz(ji,jj,jk)  ! <<< Add to previously computed 
     407                  END DO 
     408               END DO 
     409            END DO 
    314410         ENDIF 
    315411            ! 
     
    325421         !                                ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    326422         IF( l_ptr ) THEN   
    327             zptry(:,:,:) = zptry(:,:,:) + zwy(:,:,:)  ! <<< Add to previously computed 
     423!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     424            DO jk = 1, jpk 
     425               DO jj = 1, jpj 
     426                  DO ji = 1, jpi 
     427                     zptry(ji,jj,jk) = zptry(ji,jj,jk) + zwy(ji,jj,jk)  ! <<< Add to previously computed 
     428                  END DO 
     429               END DO 
     430            END DO 
    328431            CALL dia_ptr_hst( jn, 'adv', zptry(:,:,:) ) 
    329432         ENDIF 
     
    662765      zbig  = 1.e+40_wp 
    663766      zrtrn = 1.e-15_wp 
    664       zbetup(:,:,:) = 0._wp   ;   zbetdo(:,:,:) = 0._wp 
    665767 
    666768      ! Search local extrema 
     
    672774         &        paft * tmask + zbig * ( 1._wp - tmask )  ) 
    673775 
     776!$OMP PARALLEL 
     777!$OMP DO schedule(static) private(jk, jj, ji) 
     778      DO jk = 1, jpk 
     779         DO jj = 1, jpj 
     780            DO ji = 1, jpi 
     781               zbetup(ji,jj,jk) = 0._wp 
     782               zbetdo(ji,jj,jk) = 0._wp 
     783            END DO 
     784         END DO 
     785      END DO 
     786!$OMP DO schedule(static) private(jk, jj, ji, ikm1, zup, zdo, zpos, zneg, zbt) 
    674787      DO jk = 1, jpkm1 
    675788         ikm1 = MAX(jk-1,1) 
     
    706819         END DO 
    707820      END DO 
     821!$OMP END PARALLEL 
    708822      CALL lbc_lnk( zbetup, 'T', 1. )   ;   CALL lbc_lnk( zbetdo, 'T', 1. )   ! lateral boundary cond. (unchanged sign) 
    709823 
    710824      ! 3. monotonic flux in the i & j direction (paa & pbb) 
    711825      ! ---------------------------------------- 
     826!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, za, zb, zc, zav, zbv, zcv, zau, zbu, zcu) 
    712827      DO jk = 1, jpkm1 
    713828         DO jj = 2, jpjm1 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mle.F90

    r7646 r7698  
    327327            IF( ierr /= 0 )   CALL ctl_stop( 'tra_adv_mle_init: failed to allocate arrays' ) 
    328328            z1_t2 = 1._wp / ( rn_time * rn_time ) 
     329!$OMP PARALLEL DO schedule(static) private(jj, ji, zfu, zfv) 
    329330            DO jj = 2, jpj                           ! "coriolis+ time^-1" at u- & v-points 
    330331               DO ji = fs_2, jpi   ! vector opt. 
     
    347348         ! 
    348349         z1_t2 = 1._wp / ( rn_time * rn_time ) 
    349          r1_ft(:,:) = 1._wp / SQRT(  ff_t(:,:) * ff_t(:,:) + z1_t2  ) 
     350!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     351         DO jj = 1, jpj 
     352            DO ji = 1, jpi 
     353               r1_ft(ji,jj) = 1._wp / SQRT(  ff_t(ji,jj) * ff_t(ji,jj) + z1_t2 ) 
     354            END DO 
     355         END DO 
    350356         ! 
    351357      ENDIF 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mus.F90

    r7646 r7698  
    108108         ! 
    109109         ALLOCATE( xind(jpi,jpj,jpk), STAT=ierr ) 
    110          xind(:,:,:) = 1._wp              ! set equal to 1 where up-stream is not needed 
     110!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     111         DO jk = 1, jpk 
     112            DO jj = 1, jpj 
     113               DO ji = 1, jpi 
     114                  xind(ji,jj,jk) = 1._wp              ! set equal to 1 where up-stream is not needed 
     115               END DO 
     116            END DO 
     117         END DO 
    111118         ! 
    112119         IF( ld_msc_ups ) THEN            ! define the upstream indicator (if asked) 
    113120            ALLOCATE( upsmsk(jpi,jpj), STAT=ierr ) 
    114             upsmsk(:,:) = 0._wp                             ! not upstream by default 
     121!$OMP PARALLEL 
     122!$OMP DO schedule(static) private(jj, ji) 
     123            DO jj = 1, jpj 
     124               DO ji = 1, jpi 
     125                  upsmsk(ji,jj) = 0._wp                             ! not upstream by default 
     126               END DO 
     127            END DO 
    115128            ! 
     129!$OMP DO schedule(static) private(jk,jj,ji) 
    116130            DO jk = 1, jpkm1 
    117                xind(:,:,jk) = 1._wp                              &                 ! =>1 where up-stream is not needed 
    118                   &         - MAX ( rnfmsk(:,:) * rnfmsk_z(jk),  &                 ! =>0 near runoff mouths (& closed sea outflows) 
    119                   &                 upsmsk(:,:)                ) * tmask(:,:,jk)   ! =>0 in some user defined area 
    120             END DO 
     131               DO jj = 1, jpj 
     132                  DO ji = 1, jpi 
     133                     xind(ji,jj,jk) = 1._wp                              &                   ! =>1 where up-stream is not needed 
     134                        &         - MAX ( rnfmsk(ji,jj) * rnfmsk_z(jk),  &                   ! =>0 near runoff mouths (& closed sea outflows) 
     135                        &                 upsmsk(ji,jj)                ) * tmask(ji,jj,jk)   ! =>0 in some user defined area 
     136                  END DO 
     137               END DO 
     138            END DO 
     139!$OMP END DO NOWAIT 
     140!$OMP END PARALLEL 
    121141         ENDIF  
    122142         ! 
     
    136156         ! 
    137157         !                                !-- first guess of the slopes 
    138          zwx(:,:,jpk) = 0._wp                   ! bottom values 
    139          zwy(:,:,jpk) = 0._wp   
     158!$OMP PARALLEL 
     159!$OMP DO schedule(static) private(jj, ji) 
     160         DO jj = 1, jpj 
     161            DO ji = 1, jpi 
     162               zwx(ji,jj,jpk) = 0._wp           ! bottom values 
     163               zwy(ji,jj,jpk) = 0._wp 
     164            END DO 
     165         END DO 
     166!$OMP DO schedule(static) private(jk, jj, ji) 
    140167         DO jk = 1, jpkm1                       ! interior values 
    141168            DO jj = 1, jpjm1       
     
    146173           END DO 
    147174         END DO 
     175!$OMP END DO NOWAIT 
     176!$OMP END PARALLEL 
    148177         CALL lbc_lnk( zwx, 'U', -1. )          ! lateral boundary conditions   (changed sign) 
    149178         CALL lbc_lnk( zwy, 'V', -1. ) 
    150179         !                                !-- Slopes of tracer 
    151          zslpx(:,:,jpk) = 0._wp                 ! bottom values 
    152          zslpy(:,:,jpk) = 0._wp 
     180!$OMP PARALLEL 
     181!$OMP DO schedule(static) private(jj, ji) 
     182         DO jj = 1, jpj 
     183            DO ji = 1, jpi 
     184               zslpx(ji,jj,jpk) = 0._wp                 ! bottom values 
     185               zslpy(ji,jj,jpk) = 0._wp 
     186            END DO 
     187         END DO 
     188!$OMP DO schedule(static) private(jk, jj, ji) 
    153189         DO jk = 1, jpkm1                       ! interior values 
    154190            DO jj = 2, jpj 
     
    162198         END DO 
    163199         ! 
     200!$OMP DO schedule(static) private(jk, jj, ji) 
    164201         DO jk = 1, jpkm1                 !-- Slopes limitation 
    165202            DO jj = 2, jpj 
     
    175212         END DO 
    176213         ! 
     214!$OMP DO schedule(static) private(jk, jj, ji, z0u, zalpha, zu, zv, zzwx, zzwy, z0v) 
    177215         DO jk = 1, jpkm1                 !-- MUSCL horizontal advective fluxes 
    178216            DO jj = 2, jpjm1 
     
    195233            END DO 
    196234         END DO 
     235!$OMP END DO NOWAIT 
     236!$OMP END PARALLEL 
    197237         CALL lbc_lnk( zwx, 'U', -1. )   ;   CALL lbc_lnk( zwy, 'V', -1. )   ! lateral boundary conditions   (changed sign) 
    198238         ! 
     239!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    199240         DO jk = 1, jpkm1                 !-- Tracer advective trend 
    200241            DO jj = 2, jpjm1       
     
    219260         ! 
    220261         !                                !-- first guess of the slopes 
    221          zwx(:,:, 1 ) = 0._wp                   ! surface & bottom boundary conditions 
    222          zwx(:,:,jpk) = 0._wp 
     262!$OMP PARALLEL  
     263!$OMP DO schedule(static) private(jj, ji) 
     264         DO jj = 1, jpj 
     265            DO ji = 1, jpi 
     266               zwx(ji,jj, 1 ) = 0._wp           ! surface & bottom boundary conditions 
     267               zwx(ji,jj,jpk) = 0._wp 
     268           END DO 
     269         END DO 
     270!$OMP DO schedule(static) private(jk, jj, ji) 
    223271         DO jk = 2, jpkm1                       ! interior values 
    224             zwx(:,:,jk) = tmask(:,:,jk) * ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) 
     272            DO jj = 1, jpj 
     273               DO ji = 1, jpi 
     274                  zwx(ji,jj,jk) = tmask(ji,jj,jk) * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
     275              END DO 
     276            END DO 
    225277         END DO 
    226278         !                                !-- Slopes of tracer 
    227          zslpx(:,:,1) = 0._wp                   ! surface values 
     279!$OMP END DO NOWAIT 
     280!$OMP DO schedule(static) private(jj, ji) 
     281         DO jj = 1, jpj 
     282            DO ji = 1, jpi 
     283               zslpx(ji,jj,1) = 0._wp                   ! surface values 
     284           END DO 
     285         END DO 
     286!$OMP DO schedule(static) private(jk, jj, ji) 
    228287         DO jk = 2, jpkm1                       ! interior value 
    229288            DO jj = 1, jpj 
     
    234293            END DO 
    235294         END DO 
     295!$OMP DO schedule(static) private(jk, jj, ji) 
    236296         DO jk = 2, jpkm1                 !-- Slopes limitation 
    237297            DO jj = 1, jpj                      ! interior values 
     
    243303            END DO 
    244304         END DO 
     305!$OMP DO schedule(static) private(jk, jj, ji, z0w, zalpha, zw, zzwx, zzwy) 
    245306         DO jk = 1, jpk-2                 !-- vertical advective flux 
    246307            DO jj = 2, jpjm1       
     
    255316            END DO 
    256317         END DO 
     318!$OMP END DO NOWAIT 
     319!$OMP END PARALLEL 
    257320         IF( ln_linssh ) THEN                   ! top values, linear free surface only 
    258321            IF( ln_isfcav ) THEN                      ! ice-shelf cavities (top of the ocean) 
     322!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    259323               DO jj = 1, jpj 
    260324                  DO ji = 1, jpi 
     
    263327               END DO    
    264328            ELSE                                      ! no cavities: only at the ocean surface 
    265                zwx(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) 
     329!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     330               DO jj = 1, jpj 
     331                  DO ji = 1, jpi 
     332                     zwx(ji,jj,1) = pwn(ji,jj,1) * ptb(ji,jj,1,jn) 
     333                  END DO 
     334               END DO 
    266335            ENDIF 
    267336         ENDIF 
    268337         ! 
     338!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    269339         DO jk = 1, jpkm1                 !-- vertical advective trend 
    270340            DO jj = 2, jpjm1       
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trabbc.F90

    r7646 r7698  
    7676      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    7777      ! 
    78       INTEGER  ::   ji, jj    ! dummy loop indices 
     78      INTEGER  ::   ji, jj, jk    ! dummy loop indices 
    7979      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrdt 
    8080      !!---------------------------------------------------------------------- 
     
    8484      IF( l_trdtra )   THEN         ! Save the input temperature trend 
    8585         CALL wrk_alloc( jpi,jpj,jpk,   ztrdt ) 
    86          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     86!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     87         DO jk = 1, jpk 
     88            DO jj = 1, jpj 
     89               DO ji = 1, jpi 
     90                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) 
     91               END DO 
     92            END DO 
     93         END DO 
    8794      ENDIF 
    8895      !                             !  Add the geothermal trend on temperature 
     96!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    8997      DO jj = 2, jpjm1 
    9098         DO ji = 2, jpim1 
     
    96104      ! 
    97105      IF( l_trdtra ) THEN        ! Send the trend for diagnostics 
    98          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
     106!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     107         DO jk = 1, jpk 
     108            DO jj = 1, jpj 
     109               DO ji = 1, jpi 
     110                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) - ztrdt(ji,jj,jk) 
     111               END DO 
     112            END DO 
     113         END DO 
    99114         CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbc, ztrdt ) 
    100115         CALL wrk_dealloc( jpi,jpj,jpk,   ztrdt ) 
     
    162177         CASE ( 1 )                          !* constant flux 
    163178            IF(lwp) WRITE(numout,*) '      *** constant heat flux  =   ', rn_geoflx_cst 
    164             qgh_trd0(:,:) = r1_rau0_rcp * rn_geoflx_cst 
     179!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     180            DO jj = 1, jpj 
     181               DO ji = 1, jpi 
     182                  qgh_trd0(ji,jj) = r1_rau0_rcp * rn_geoflx_cst 
     183               END DO 
     184            END DO 
    165185            ! 
    166186         CASE ( 2 )                          !* variable geothermal heat flux : read the geothermal fluxes in mW/m2 
     
    179199 
    180200            CALL fld_read( nit000, 1, sf_qgh )                         ! Read qgh data 
    181             qgh_trd0(:,:) = r1_rau0_rcp * sf_qgh(1)%fnow(:,:,1) * 1.e-3 ! conversion in W/m2 
     201!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     202            DO jj = 1, jpj 
     203               DO ji = 1, jpi 
     204                  qgh_trd0(ji,jj) = r1_rau0_rcp * sf_qgh(1)%fnow(ji,jj,1) * 1.e-3 ! conversion in W/m2 
     205               END DO 
     206            END DO 
    182207            ! 
    183208         CASE DEFAULT 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90

    r7646 r7698  
    105105      !!---------------------------------------------------------------------- 
    106106      INTEGER, INTENT( in ) ::   kt   ! ocean time-step 
     107      INTEGER  ::   ji, jj, jk        ! dummy loop indices 
    107108      ! 
    108109      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrdt, ztrds 
     
    113114      IF( l_trdtra )   THEN                         !* Save the input trends 
    114115         CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    115          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    116          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     116!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     117         DO jk = 1, jpk 
     118            DO jj = 1, jpj 
     119               DO ji = 1, jpi 
     120                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) 
     121                  ztrds(ji,jj,jk) = tsa(ji,jj,jk,jp_sal) 
     122               END DO 
     123            END DO 
     124         END DO 
    117125      ENDIF 
    118126 
     
    146154 
    147155      IF( l_trdtra )   THEN                      ! send the trends for further diagnostics 
    148          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    149          ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
     156!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     157         DO jk = 1, jpk 
     158            DO jj = 1, jpj 
     159               DO ji = 1, jpi 
     160                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) - ztrdt(ji,jj,jk) 
     161                  ztrds(ji,jj,jk) = tsa(ji,jj,jk,jp_sal) - ztrds(ji,jj,jk) 
     162               END DO 
     163            END DO 
     164         END DO 
    150165         CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbl, ztrdt ) 
    151166         CALL trd_tra( kt, 'TRA', jp_sal, jptra_bbl, ztrds ) 
     
    195210      DO jn = 1, kjpt                                     ! tracer loop 
    196211         !                                                ! =========== 
     212!$OMP PARALLEL DO schedule(static) private(jj,ji,ik) 
    197213         DO jj = 1, jpj 
    198214            DO ji = 1, jpi 
     
    202218         END DO 
    203219         !                
     220!$OMP PARALLEL DO schedule(static) private(jj,ji,ik) 
    204221         DO jj = 2, jpjm1                                    ! Compute the trend 
    205222            DO ji = 2, jpim1 
     
    357374      ENDIF 
    358375      !                                        !* bottom variables (T, S, alpha, beta, depth, velocity) 
     376!$OMP PARALLEL DO schedule(static) private(jj,ji,ik) 
    359377      DO jj = 1, jpj 
    360378         DO ji = 1, jpi 
     
    374392      IF( nn_bbl_ldf == 1 ) THEN          !   diffusive bbl   ! 
    375393         !                                !-------------------! 
     394!$OMP PARALLEL DO schedule(static) private(jj,ji,za,zb,zgdrho,zsign) 
    376395         DO jj = 1, jpjm1                      ! (criteria for non zero flux: grad(rho).grad(h) < 0 ) 
    377396            DO ji = 1, fs_jpim1   ! vector opt. 
     
    406425         ! 
    407426         CASE( 1 )                                   != use of upper velocity 
     427!$OMP PARALLEL DO schedule(static) private(jj,ji,za,zb,zgdrho,zsign,zsigna) 
    408428            DO jj = 1, jpjm1                                 ! criteria: grad(rho).grad(h)<0  and grad(rho).grad(h)<0 
    409429               DO ji = 1, fs_jpim1   ! vector opt. 
     
    437457         CASE( 2 )                                 != bbl velocity = F( delta rho ) 
    438458            zgbbl = grav * rn_gambbl 
     459!$OMP PARALLEL DO schedule(static) private(jj,ji,iid,iis,ikud,ikus,za,zb,zgdrho,ijd,ijs,ikvd,ikvs) 
    439460            DO jj = 1, jpjm1                            ! criteria: rho_up > rho_down 
    440461               DO ji = 1, fs_jpim1   ! vector opt. 
     
    533554 
    534555      !                             !* vertical index of  "deep" bottom u- and v-points 
     556!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    535557      DO jj = 1, jpjm1                    ! (the "shelf" bottom k-indices are mbku and mbkv) 
    536558         DO ji = 1, jpim1 
     
    547569      !                                 !* sign of grad(H) at u- and v-points 
    548570      mgrhu(jpi,:) = 0   ;   mgrhu(:,jpj) = 0   ;   mgrhv(jpi,:) = 0   ;   mgrhv(:,jpj) = 0 
     571!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    549572      DO jj = 1, jpjm1 
    550573         DO ji = 1, jpim1 
     
    554577      END DO 
    555578      ! 
     579!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    556580      DO jj = 1, jpjm1              !* bbl thickness at u- (v-) point 
    557581         DO ji = 1, jpim1                 ! minimum of top & bottom e3u_0 (e3v_0) 
     
    563587      ! 
    564588      !                             !* masked diffusive flux coefficients 
    565       ahu_bbl_0(:,:) = rn_ahtbbl * e2_e1u(:,:) * e3u_bbl_0(:,:) * umask(:,:,1) 
    566       ahv_bbl_0(:,:) = rn_ahtbbl * e1_e2v(:,:) * e3v_bbl_0(:,:) * vmask(:,:,1) 
     589!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     590      DO jj = 1, jpj 
     591         DO ji = 1, jpi 
     592            ahu_bbl_0(ji,jj) = rn_ahtbbl * e2_e1u(ji,jj) * e3u_bbl_0(ji,jj) * umask(ji,jj,1) 
     593            ahv_bbl_0(ji,jj) = rn_ahtbbl * e1_e2v(ji,jj) * e3v_bbl_0(ji,jj) * vmask(ji,jj,1) 
     594         END DO 
     595      END DO 
    567596 
    568597      ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/tradmp.F90

    r7646 r7698  
    102102      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    103103         CALL wrk_alloc( jpi,jpj,jpk,jpts,   ztrdts )  
    104          ztrdts(:,:,:,:) = tsa(:,:,:,:)  
     104         DO jn = 1, jpts 
     105!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     106            DO jk = 1, jpk 
     107               DO jj = 1, jpj 
     108                  DO ji = 1, jpi 
     109                     ztrdts(ji,jj,jk,jn) = tsa(ji,jj,jk,jn)  
     110                  END DO 
     111               END DO 
     112            END DO 
     113         END DO 
    105114      ENDIF 
    106115      !                           !==  input T-S data at kt  ==! 
     
    111120      CASE( 0 )                        !*  newtonian damping throughout the water column  *! 
    112121         DO jn = 1, jpts 
     122!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    113123            DO jk = 1, jpkm1 
    114124               DO jj = 2, jpjm1 
     
    121131         ! 
    122132      CASE ( 1 )                       !*  no damping in the turbocline (avt > 5 cm2/s)  *! 
     133!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    123134         DO jk = 1, jpkm1 
    124135            DO jj = 2, jpjm1 
     
    135146         ! 
    136147      CASE ( 2 )                       !*  no damping in the mixed layer   *! 
     148!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    137149         DO jk = 1, jpkm1 
    138150            DO jj = 2, jpjm1 
     
    151163      ! 
    152164      IF( l_trdtra )   THEN       ! trend diagnostic 
    153          ztrdts(:,:,:,:) = tsa(:,:,:,:) - ztrdts(:,:,:,:) 
     165         DO jn = 1, jpts 
     166!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     167            DO jk = 1, jpk 
     168               DO jj = 1, jpj 
     169                  DO ji = 1, jpi 
     170                     ztrdts(ji,jj,jk,jn) = tsa(ji,jj,jk,jn) - ztrdts(ji,jj,jk,jn) 
     171                  END DO 
     172               END DO 
     173            END DO 
     174         END DO 
    154175         CALL trd_tra( kt, 'TRA', jp_tem, jptra_dmp, ztrdts(:,:,:,jp_tem) ) 
    155176         CALL trd_tra( kt, 'TRA', jp_sal, jptra_dmp, ztrdts(:,:,:,jp_sal) ) 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf.F90

    r7646 r7698  
    5757      !!---------------------------------------------------------------------- 
    5858      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     59      INTEGER ::   jk, jj, ji         ! dummy loop indices 
    5960      !! 
    6061      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrdt, ztrds 
     
    6566      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    6667         CALL wrk_alloc( jpi,jpj,jpk,   ztrdt, ztrds )  
    67          ztrdt(:,:,:) = tsa(:,:,:,jp_tem)  
    68          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     68!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     69         DO jk = 1, jpk 
     70            DO jj = 1, jpj 
     71               DO ji = 1, jpi 
     72                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) 
     73                  ztrds(ji,jj,jk) = tsa(ji,jj,jk,jp_sal) 
     74               END DO 
     75            END DO 
     76         END DO 
    6977      ENDIF 
    7078      ! 
     
    8189      ! 
    8290      IF( l_trdtra )   THEN                    !* save the horizontal diffusive trends for further diagnostics 
    83          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    84          ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
     91!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     92         DO jk = 1, jpk 
     93            DO jj = 1, jpj 
     94               DO ji = 1, jpi 
     95                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) - ztrdt(ji,jj,jk) 
     96                  ztrds(ji,jj,jk) = tsa(ji,jj,jk,jp_sal) - ztrds(ji,jj,jk) 
     97               END DO 
     98            END DO 
     99         END DO 
    85100         CALL trd_tra( kt, 'TRA', jp_tem, jptra_ldf, ztrdt ) 
    86101         CALL trd_tra( kt, 'TRA', jp_sal, jptra_ldf, ztrds ) 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r7646 r7698  
    125125         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    126126         ! 
    127          akz     (:,:,:) = 0._wp       
    128          ah_wslp2(:,:,:) = 0._wp 
     127!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     128         DO jk = 1, jpk 
     129            DO jj = 1, jpj 
     130               DO ji = 1, jpi 
     131                  akz     (ji,jj,jk) = 0._wp 
     132                  ah_wslp2(ji,jj,jk) = 0._wp 
     133               END DO 
     134            END DO 
     135         END DO 
    129136      ENDIF 
    130137      !    
     
    151158      IF( kpass == 1 ) THEN                  !==  first pass only  ==! 
    152159         ! 
     160!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zmsku, zmskv, zahu_w, zahv_w) 
    153161         DO jk = 2, jpkm1 
    154162            DO jj = 2, jpjm1 
     
    172180         ! 
    173181         IF( ln_traldf_msc ) THEN                ! stabilizing vertical diffusivity coefficient 
     182!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    174183            DO jk = 2, jpkm1 
    175184               DO jj = 2, jpjm1 
     
    185194            ! 
    186195            IF( ln_traldf_blp ) THEN                ! bilaplacian operator 
     196!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    187197               DO jk = 2, jpkm1 
    188198                  DO jj = 1, jpjm1 
     
    194204               END DO 
    195205            ELSEIF( ln_traldf_lap ) THEN              ! laplacian operator 
     206!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze3w_2, zcoef0) 
    196207               DO jk = 2, jpkm1 
    197208                  DO jj = 1, jpjm1 
     
    206217           ! 
    207218         ELSE                                    ! 33 flux set to zero with akz=ah_wslp2 ==>> computed in full implicit 
    208             akz(:,:,:) = ah_wslp2(:,:,:)       
     219!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     220           DO jk = 1, jpk 
     221              DO jj = 1, jpj 
     222                 DO ji = 1, jpi 
     223                    akz(ji,jj,jk) = ah_wslp2(ji,jj,jk) 
     224                 END DO 
     225              END DO 
     226           END DO 
    209227         ENDIF 
    210228      ENDIF 
     
    218236         !!---------------------------------------------------------------------- 
    219237!!gm : bug.... why (x,:,:)?   (1,jpj,:) and (jpi,1,:) should be sufficient.... 
    220          zdit (1,:,:) = 0._wp     ;     zdit (jpi,:,:) = 0._wp 
    221          zdjt (1,:,:) = 0._wp     ;     zdjt (jpi,:,:) = 0._wp 
     238!$OMP PARALLEL 
     239!$OMP DO schedule(static) private(jk, jj) 
     240         DO jk = 1, jpk 
     241            DO jj = 1, jpj 
     242               zdit (1,jj,jk) = 0._wp     ;     zdit (jpi,jj,jk) = 0._wp 
     243               zdjt (1,jj,jk) = 0._wp     ;     zdjt (jpi,jj,jk) = 0._wp 
     244            END DO 
     245         END DO 
    222246         !!end 
    223247 
    224248         ! Horizontal tracer gradient  
     249!$OMP DO schedule(static) private(jk, jj, ji) 
    225250         DO jk = 1, jpkm1 
    226251            DO jj = 1, jpjm1 
     
    231256            END DO 
    232257         END DO 
     258!$OMP END PARALLEL 
    233259         IF( ln_zps ) THEN      ! botton and surface ocean correction of the horizontal gradient 
     260!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    234261            DO jj = 1, jpjm1              ! bottom correction (partial bottom cell) 
    235262               DO ji = 1, fs_jpim1   ! vector opt. 
     
    239266            END DO 
    240267            IF( ln_isfcav ) THEN      ! first wet level beneath a cavity 
     268!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    241269               DO jj = 1, jpjm1 
    242270                  DO ji = 1, fs_jpim1   ! vector opt. 
     
    252280         !!---------------------------------------------------------------------- 
    253281         ! 
     282!$OMP PARALLEL 
    254283         DO jk = 1, jpkm1                                 ! Horizontal slab 
    255284            ! 
    256285            !                             !== Vertical tracer gradient 
    257             zdk1t(:,:) = ( ptb(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * wmask(:,:,jk+1)     ! level jk+1 
    258             ! 
    259             IF( jk == 1 ) THEN   ;   zdkt(:,:) = zdk1t(:,:)                          ! surface: zdkt(jk=1)=zdkt(jk=2) 
    260             ELSE                 ;   zdkt(:,:) = ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) * wmask(:,:,jk) 
     286!$OMP DO schedule(static) private(jj, ji) 
     287            DO jj = 1 , jpj 
     288               DO ji = 1, jpi 
     289                  zdk1t(ji,jj) = ( ptb(ji,jj,jk,jn) - ptb(ji,jj,jk+1,jn) ) * wmask(ji,jj,jk+1)     ! level jk+1 
     290               END DO 
     291            END DO 
     292            ! 
     293            IF( jk == 1 ) THEN    
     294!$OMP DO schedule(static) private(jj, ji) 
     295               DO jj = 1 , jpj 
     296                  DO ji = 1, jpi 
     297                     zdkt(ji,jj) = zdk1t(ji,jj)                          ! surface: zdkt(jk=1)=zdkt(jk=2) 
     298                  END DO 
     299               END DO 
     300            ELSE   
     301!$OMP DO schedule(static) private(jj, ji) 
     302               DO jj = 1 , jpj 
     303                  DO ji = 1, jpi 
     304                     zdkt(ji,jj) = ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * wmask(ji,jj,jk) 
     305                  END DO 
     306               END DO 
    261307            ENDIF 
     308!$OMP DO schedule(static) private(jj, ji, zmsku, zmskv, zabe1, zabe2, zcof1, zcof2) 
    262309            DO jj = 1 , jpjm1            !==  Horizontal fluxes 
    263310               DO ji = 1, fs_jpim1   ! vector opt. 
     
    283330            END DO 
    284331            ! 
     332!$OMP DO schedule(static) private(jj, ji) 
    285333            DO jj = 2 , jpjm1          !== horizontal divergence and add to pta 
    286334               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    296344         !!---------------------------------------------------------------------- 
    297345         ! 
    298          ztfw(1,:,:) = 0._wp     ;     ztfw(jpi,:,:) = 0._wp 
     346!$OMP DO schedule(static) private(jk, jj) 
     347         DO jk = 1, jpk 
     348            DO jj = 1, jpj 
     349               ztfw(1,jj,jk) = 0._wp     ;     ztfw(jpi,jj,jk) = 0._wp 
     350            END DO 
     351         END DO 
    299352         ! 
    300353         ! Vertical fluxes 
    301354         ! --------------- 
    302355         !                          ! Surface and bottom vertical fluxes set to zero 
    303          ztfw(:,:, 1 ) = 0._wp      ;      ztfw(:,:,jpk) = 0._wp 
     356!$OMP DO schedule(static) private(jj, ji) 
     357         DO jj = 1, jpj 
     358            DO ji = 1, jpi 
     359               ztfw(ji,jj, 1 ) = 0._wp      ;      ztfw(ji,jj,jpk) = 0._wp 
     360            END DO 
     361         END DO 
    304362          
     363!$OMP DO schedule(static) private(jk, jj, ji, zmsku, zmskv, zahu_w, zahv_w, zcoef3, zcoef4) 
    305364         DO jk = 2, jpkm1           ! interior (2=<jk=<jpk-1) 
    306365            DO jj = 2, jpjm1 
     
    327386            END DO 
    328387         END DO 
     388!$OMP END PARALLEL 
    329389         !                                !==  add the vertical 33 flux  ==! 
    330390         IF( ln_traldf_lap ) THEN               ! laplacian case: eddy coef = ah_wslp2 - akz 
     391!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    331392            DO jk = 2, jpkm1        
    332393               DO jj = 1, jpjm1 
     
    342403            SELECT CASE( kpass ) 
    343404            CASE(  1  )                            ! 1st pass : eddy coef = ah_wslp2 
     405!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    344406               DO jk = 2, jpkm1  
    345407                  DO jj = 1, jpjm1 
     
    352414               END DO  
    353415            CASE(  2  )                         ! 2nd pass : eddy flux = ah_wslp2 and akz applied on ptb  and ptbb gradients, resp. 
     416!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    354417               DO jk = 2, jpkm1  
    355418                  DO jj = 1, jpjm1 
     
    364427         ENDIF 
    365428         !          
     429!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    366430         DO jk = 1, jpkm1                 !==  Divergence of vertical fluxes added to pta  ==! 
    367431            DO jj = 2, jpjm1 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r7646 r7698  
    121121      IF( l_trdtra )   THEN                     
    122122         CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    123          ztrdt(:,:,jk) = 0._wp 
    124          ztrds(:,:,jk) = 0._wp 
     123!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     124         DO jk = 1, jpk 
     125            DO jj = 1, jpj 
     126               DO ji = 1, jpi 
     127                  ztrdt(ji,jj,jk) = 0._wp  
     128                  ztrds(ji,jj,jk) = 0._wp 
     129               END DO 
     130            END DO 
     131         END DO 
    125132         IF( ln_traldf_iso ) THEN              ! diagnose the "pure" Kz diffusive trend  
    126133            CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdfp, ztrdt ) 
     
    129136         ! total trend for the non-time-filtered variables.  
    130137            zfact = 1.0 / rdt 
    131          DO jk = 1, jpkm1 
    132             ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem) - tsn(:,:,jk,jp_tem) ) * zfact  
    133             ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal) - tsn(:,:,jk,jp_sal) ) * zfact  
     138!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     139         DO jk = 1, jpkm1 
     140            DO jj = 1, jpj 
     141               DO ji = 1, jpi 
     142                  ztrdt(ji,jj,jk) = ( tsa(ji,jj,jk,jp_tem) - tsn(ji,jj,jk,jp_tem) ) * zfact 
     143                  ztrds(ji,jj,jk) = ( tsa(ji,jj,jk,jp_sal) - tsn(ji,jj,jk,jp_sal) ) * zfact 
     144               END DO 
     145            END DO 
    134146         END DO 
    135147         CALL trd_tra( kt, 'TRA', jp_tem, jptra_tot, ztrdt ) 
     
    137149         ! Store now fields before applying the Asselin filter  
    138150         ! in order to calculate Asselin filter trend later. 
    139          ztrdt(:,:,:) = tsn(:,:,:,jp_tem)  
    140          ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
     151!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     152         DO jk = 1, jpkm1 
     153            DO jj = 1, jpj 
     154               DO ji = 1, jpi 
     155                  ztrdt(ji,jj,jk) = tsn(ji,jj,jk,jp_tem) 
     156                  ztrds(ji,jj,jk) = tsn(ji,jj,jk,jp_sal) 
     157               END DO 
     158            END DO 
     159         END DO 
    141160      ENDIF 
    142161 
    143162      IF( neuler == 0 .AND. kt == nit000 ) THEN       ! Euler time-stepping at first time-step (only swap) 
    144163         DO jn = 1, jpts 
     164!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    145165            DO jk = 1, jpkm1 
    146                tsn(:,:,jk,jn) = tsa(:,:,jk,jn)     
     166               DO jj = 1, jpj 
     167                  DO ji = 1, jpi 
     168                     tsn(ji,jj,jk,jn) = tsa(ji,jj,jk,jn)     
     169                  END DO 
     170               END DO 
    147171            END DO 
    148172         END DO 
     
    163187      ! 
    164188      IF( l_trdtra ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
    165          DO jk = 1, jpkm1 
    166             zfact = 1._wp / r2dt              
    167             ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 
    168             ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact 
     189!$OMP PARALLEL DO schedule(static) private(jk, zfact) 
     190         DO jk = 1, jpkm1 
     191            DO jj = 1, jpj 
     192               DO ji = 1, jpi 
     193                  zfact = 1._wp / r2dt              
     194                  ztrdt(ji,jj,jk) = ( tsb(ji,jj,jk,jp_tem) - ztrdt(ji,jj,jk) ) * zfact 
     195                  ztrds(ji,jj,jk) = ( tsb(ji,jj,jk,jp_sal) - ztrds(ji,jj,jk) ) * zfact 
     196               END DO 
     197            END DO 
    169198         END DO 
    170199         CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     
    214243      DO jn = 1, kjpt 
    215244         ! 
     245!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,ztn,ztd) 
    216246         DO jk = 1, jpkm1 
    217247            DO jj = 2, jpjm1 
     
    280310      ! 
    281311      DO jn = 1, kjpt       
     312!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zfact1,zfact2,ze3t_b,ze3t_n,ze3t_a,ze3t_d,ze3t_f,ztc_b,ztc_n,ztc_a,ztc_d,ztc_f) 
    282313         DO jk = 1, jpkm1 
    283314            zfact1 = atfp * p2dt 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90

    r7646 r7698  
    128128      IF( l_trdtra ) THEN      ! trends diagnostic: save the input temperature trend 
    129129         CALL wrk_alloc( jpi,jpj,jpk,   ztrdt )  
    130          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     130!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     131            DO jk = 1, jpk 
     132               DO jj = 1, jpj 
     133                  DO ji = 1, jpi 
     134                     ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) 
     135                  END DO 
     136               END DO 
     137            END DO 
    131138      ENDIF 
    132139      ! 
     
    142149         ELSE                                           ! No restart or restart not found: Euler forward time stepping 
    143150            z1_2 = 1._wp 
    144             qsr_hc_b(:,:,:) = 0._wp 
     151!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     152            DO jk = 1, jpk 
     153               DO jj = 1, jpj 
     154                  DO ji = 1, jpi 
     155                     qsr_hc_b(ji,jj,jk) = 0._wp 
     156                  END DO 
     157               END DO 
     158            END DO 
    145159         ENDIF 
    146160      ELSE                             !==  Swap of qsr heat content  ==! 
    147161         z1_2 = 0.5_wp 
    148          qsr_hc_b(:,:,:) = qsr_hc(:,:,:) 
     162!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     163            DO jk = 1, jpk 
     164               DO jj = 1, jpj 
     165                  DO ji = 1, jpi 
     166                     qsr_hc_b(ji,jj,jk) = qsr_hc(ji,jj,jk) 
     167                  END DO 
     168               END DO 
     169            END DO 
    149170      ENDIF 
    150171      ! 
     
    155176      CASE( np_BIO )                   !==  bio-model fluxes  ==! 
    156177         ! 
     178!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    157179         DO jk = 1, nksr 
    158             qsr_hc(:,:,jk) = r1_rau0_rcp * ( etot3(:,:,jk) - etot3(:,:,jk+1) ) 
     180            DO jj = 1, jpj 
     181               DO ji = 1, jpi 
     182                  qsr_hc(ji,jj,jk) = r1_rau0_rcp * ( etot3(ji,jj,jk) - etot3(ji,jj,jk+1) ) 
     183               END DO 
     184             END DO 
    159185         END DO 
    160186         ! 
     
    166192         IF( nqsr == np_RGBc ) THEN          !*  Variable Chlorophyll 
    167193            CALL fld_read( kt, 1, sf_chl )         ! Read Chl data and provides it at the current time step 
     194!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zchl,zCtot,zze,zpsi,zlogc,zlogc2,zlogc3,zCb,zCmax,zpsimax,zdelpsi,zCze) 
    168195            DO jk = 1, nksr + 1 
    169196               DO jj = 2, jpjm1                       ! Separation in R-G-B depending of the surface Chl 
     
    190217            END DO 
    191218         ELSE                                !* constant chrlorophyll 
     219!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    192220           DO jk = 1, nksr + 1 
    193               zchl3d(:,:,jk) = 0.05  
     221              DO jj = 1, jpj 
     222                 DO ji = 1, jpi 
     223                    zchl3d(ji,jj,jk) = 0.05 
     224                 ENDDO 
     225              ENDDO 
    194226            ENDDO 
    195227         ENDIF 
    196228         ! 
    197229         zcoef  = ( 1. - rn_abs ) / 3._wp    !* surface equi-partition in R-G-B 
     230!$OMP PARALLEL 
     231!$OMP DO schedule(static) private(jj,ji) 
    198232         DO jj = 2, jpjm1 
    199233            DO ji = fs_2, fs_jpim1 
     
    205239            END DO 
    206240         END DO 
     241!$OMP END DO NOWAIT 
    207242         ! 
    208243         DO jk = 2, nksr+1                   !* interior equi-partition in R-G-B depending of vertical profile of Chl 
     244!$OMP DO schedule(static) private(jj,ji,zchl,irgb) 
    209245            DO jj = 2, jpjm1 
    210246               DO ji = fs_2, fs_jpim1 
     
    217253            END DO 
    218254 
     255!$OMP DO schedule(static) private(jj,ji,zc0,zc1,zc2,zc3) 
    219256            DO jj = 2, jpjm1 
    220257               DO ji = fs_2, fs_jpim1 
     
    232269         END DO 
    233270         ! 
     271!$OMP DO schedule(static) private(jk,jj,ji) 
    234272         DO jk = 1, nksr                     !* now qsr induced heat content 
    235273            DO jj = 2, jpjm1 
     
    239277            END DO 
    240278         END DO 
     279!$OMP END PARALLEL 
    241280         ! 
    242281         CALL wrk_dealloc( jpi,jpj,        zekb, zekg, zekr        )  
     
    247286         zz0 =        rn_abs   * r1_rau0_rcp      ! surface equi-partition in 2-bands 
    248287         zz1 = ( 1. - rn_abs ) * r1_rau0_rcp 
     288!$OMP PARALLEL DO schedule(static) private(jk,jj,ji,zc0,zc1) 
    249289         DO jk = 1, nksr                          ! solar heat absorbed at T-point in the top 400m  
    250290            DO jj = 2, jpjm1 
     
    260300      ! 
    261301      !                          !-----------------------------! 
     302!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    262303      DO jk = 1, nksr            !  update to the temp. trend  ! 
    263304         DO jj = 2, jpjm1        !-----------------------------! 
     
    270311      ! 
    271312      IF( ln_qsr_ice ) THEN      ! sea-ice: store the 1st ocean level attenuation coefficient 
     313!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    272314         DO jj = 2, jpjm1  
    273315            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    284326         CALL wrk_alloc( jpi,jpj,jpk,   zetot ) 
    285327         ! 
    286          zetot(:,:,nksr+1:jpk) = 0._wp     ! below ~400m set to zero 
     328!$OMP PARALLEL 
     329!$OMP DO schedule(static) private(jj,ji) 
     330         DO jj = 1, jpj  
     331            DO ji = 1, jpi   ! vector opt. 
     332               zetot(ji,jj,nksr+1:jpk) = 0._wp     ! below ~400m set to zero 
     333            END DO 
     334         END DO 
    287335         DO jk = nksr, 1, -1 
    288             zetot(:,:,jk) = zetot(:,:,jk+1) + qsr_hc(:,:,jk) / r1_rau0_rcp 
     336!$OMP DO schedule(static) private(jj,ji) 
     337            DO jj = 1, jpj  
     338               DO ji = 1, jpi   ! vector opt. 
     339                  zetot(ji,jj,jk) = zetot(ji,jj,jk+1) + qsr_hc(ji,jj,jk) / r1_rau0_rcp 
     340               END DO 
     341            END DO 
    289342         END DO          
     343!$OMP END PARALLEL 
    290344         CALL iom_put( 'qsr3d', zetot )   ! 3D distribution of shortwave Radiation 
    291345         ! 
     
    299353      ! 
    300354      IF( l_trdtra ) THEN     ! qsr tracers trends saved for diagnostics 
    301          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
     355!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     356         DO jk = 1, jpk 
     357            DO jj = 1, jpj 
     358               DO ji = 1, jpi 
     359                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) - ztrdt(ji,jj,jk) 
     360               END DO 
     361            END DO 
     362         END DO 
    302363         CALL trd_tra( kt, 'TRA', jp_tem, jptra_qsr, ztrdt ) 
    303364         CALL wrk_dealloc( jpi,jpj,jpk,   ztrdt )  
     
    426487      END SELECT 
    427488      ! 
    428       qsr_hc(:,:,:) = 0._wp     ! now qsr heat content set to zero where it will not be computed 
     489!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
     490      DO jk = 1, jpk 
     491         DO jj = 1, jpj 
     492            DO ji = 1, jpi 
     493               qsr_hc(ji,jj,jk) = 0._wp     ! now qsr heat content set to zero where it will not be computed 
     494            END DO 
     495         END DO 
     496      END DO 
    429497      ! 
    430498      ! 1st ocean level attenuation coefficient (used in sbcssm) 
     
    432500         CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev  ) 
    433501      ELSE 
    434          fraqsr_1lev(:,:) = 1._wp   ! default : no penetration 
     502!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     503         DO jj = 1, jpj 
     504            DO ji = 1, jpi 
     505               fraqsr_1lev(ji,jj) = 1._wp   ! default : no penetration 
     506            END DO 
     507         END DO 
    435508      ENDIF 
    436509      ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90

    r6701 r7698  
    8888      IF( l_trdtra ) THEN                    !* Save ta and sa trends 
    8989         CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds )  
    90          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    91          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     90!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     91         DO jk = 1, jpk 
     92            DO jj = 1, jpj 
     93               DO ji = 1, jpi 
     94                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) 
     95                  ztrds(ji,jj,jk) = tsa(ji,jj,jk,jp_sal) 
     96               END DO 
     97            END DO 
     98         END DO 
    9299      ENDIF 
    93100      ! 
    94101!!gm  This should be moved into sbcmod.F90 module ? (especially now that ln_traqsr is read in namsbc namelist) 
    95102      IF( .NOT.ln_traqsr ) THEN     ! no solar radiation penetration 
    96          qns(:,:) = qns(:,:) + qsr(:,:)      ! total heat flux in qns 
    97          qsr(:,:) = 0._wp                     ! qsr set to zero 
     103!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     104         DO jj = 1, jpj 
     105            DO ji = 1, jpi 
     106               qns(ji,jj) = qns(ji,jj) + qsr(ji,jj)      ! total heat flux in qns 
     107               qsr(ji,jj) = 0._wp                     ! qsr set to zero 
     108            END DO 
     109         END DO 
    98110      ENDIF 
    99111 
     
    111123         ELSE                                   ! No restart or restart not found: Euler forward time stepping 
    112124            zfact = 1._wp 
    113             sbc_tsc(:,:,:) = 0._wp 
    114             sbc_tsc_b(:,:,:) = 0._wp 
     125            DO jn = 1, jpts 
     126!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     127               DO jj = 1, jpj 
     128                  DO ji = 1, jpi 
     129                     sbc_tsc(ji,jj,jn) = 0._wp 
     130                     sbc_tsc_b(ji,jj,jn) = 0._wp 
     131                  END DO 
     132               END DO 
     133            END DO 
    115134         ENDIF 
    116135      ELSE                                !* other time-steps: swap of forcing fields 
    117136         zfact = 0.5_wp 
    118          sbc_tsc_b(:,:,:) = sbc_tsc(:,:,:) 
     137         DO jn = 1, jpts 
     138!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     139            DO jj = 1, jpj 
     140               DO ji = 1, jpi 
     141                  sbc_tsc_b(ji,jj,jn) = sbc_tsc(ji,jj,jn) 
     142               END DO 
     143            END DO 
     144         END DO 
    119145      ENDIF 
    120146      !                             !==  Now sbc tracer content fields  ==! 
     147!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    121148      DO jj = 2, jpj 
    122149         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    126153      END DO 
    127154      IF( ln_linssh ) THEN                !* linear free surface   
     155!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    128156         DO jj = 2, jpj                         !==>> add concentration/dilution effect due to constant volume cell 
    129157            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    137165      ! 
    138166      DO jn = 1, jpts               !==  update tracer trend  ==! 
     167!$OMP PARALLEL DO schedule(static) private(jj, ji) 
    139168         DO jj = 2, jpj 
    140169            DO ji = fs_2, fs_jpim1   ! vector opt.   
     
    218247      ! 
    219248      IF( ln_iscpl .AND. ln_hsb) THEN         ! input of heat and salt due to river runoff  
     249!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zdep) 
    220250         DO jk = 1,jpk 
    221251            DO jj = 2, jpj  
     
    232262 
    233263      IF( l_trdtra )   THEN                      ! save the horizontal diffusive trends for further diagnostics 
    234          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    235          ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
     264!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     265         DO jk = 1, jpk 
     266            DO jj = 1, jpj 
     267               DO ji = 1, jpi 
     268                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) - ztrdt(ji,jj,jk) 
     269                  ztrds(ji,jj,jk) = tsa(ji,jj,jk,jp_sal) - ztrds(ji,jj,jk) 
     270               END DO   
     271            END DO   
     272         END DO 
    236273         CALL trd_tra( kt, 'TRA', jp_tem, jptra_nsr, ztrdt ) 
    237274         CALL trd_tra( kt, 'TRA', jp_sal, jptra_nsr, ztrds ) 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf.F90

    r7646 r7698  
    5858      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    5959      ! 
    60       INTEGER  ::   jk                   ! Dummy loop indices 
     60      INTEGER  ::   jk, jj, ji           ! Dummy loop indices 
    6161      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrdt, ztrds   ! 3D workspace 
    6262      !!--------------------------------------------------------------------- 
     
    7272      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    7373         CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    74          ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
    75          ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     74!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     75         DO jk = 1, jpk 
     76            DO jj = 1, jpj 
     77               DO ji = 1, jpi 
     78                  ztrdt(ji,jj,jk) = tsa(ji,jj,jk,jp_tem) 
     79                  ztrds(ji,jj,jk) = tsa(ji,jj,jk,jp_sal) 
     80               END DO 
     81            END DO 
     82         END DO 
    7683      ENDIF 
    7784      ! 
     
    8491      ! JMM avoid negative salinities near river outlet ! Ugly fix 
    8592      ! JMM : restore negative salinities to small salinities: 
    86       WHERE( tsa(:,:,:,jp_sal) < 0._wp )   tsa(:,:,:,jp_sal) = 0.1_wp 
     93!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
     94      DO jk = 1, jpk 
     95         DO jj = 1, jpj 
     96            DO ji = 1, jpi 
     97               IF( tsa(ji,jj,jk,jp_sal) < 0._wp )   tsa(ji,jj,jk,jp_sal) = 0.1_wp 
     98            END DO 
     99         END DO 
     100      END DO 
    87101!!gm 
    88102 
    89103      IF( l_trdtra )   THEN                      ! save the vertical diffusive trends for further diagnostics 
     104!$OMP PARALLEL DO schedule(static) private(jk,jj,ji) 
    90105         DO jk = 1, jpkm1 
    91             ztrdt(:,:,jk) = ( ( tsa(:,:,jk,jp_tem) - tsb(:,:,jk,jp_tem) ) / r2dt ) - ztrdt(:,:,jk) 
    92             ztrds(:,:,jk) = ( ( tsa(:,:,jk,jp_sal) - tsb(:,:,jk,jp_sal) ) / r2dt ) - ztrds(:,:,jk) 
     106            DO jj = 1, jpj 
     107               DO ji = 1, jpi 
     108                  ztrdt(ji,jj,jk) = ( ( tsa(ji,jj,jk,jp_tem) - tsb(ji,jj,jk,jp_tem) ) / r2dt ) - ztrdt(ji,jj,jk) 
     109                  ztrds(ji,jj,jk) = ( ( tsa(ji,jj,jk,jp_sal) - tsb(ji,jj,jk,jp_sal) ) / r2dt ) - ztrds(ji,jj,jk) 
     110               END DO 
     111            END DO 
    93112         END DO 
    94113!!gm this should be moved in trdtra.F90 and done on all trends 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90

    r6140 r7698  
    106106            ! 
    107107            ! vertical mixing coef.: avt for temperature, avs for salinity and passive tracers 
    108             IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN   ;   zwt(:,:,2:jpk) = avt  (:,:,2:jpk) 
    109             ELSE                                            ;   zwt(:,:,2:jpk) = fsavs(:,:,2:jpk) 
     108            IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN 
     109!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     110               DO jj = 1, jpj 
     111                  DO ji = 1, jpi 
     112                     zwt(ji,jj,2:jpk) = avt  (ji,jj,2:jpk) 
     113                  END DO 
     114               END DO 
     115            ELSE                                             
     116!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     117               DO jj = 1, jpj 
     118                  DO ji = 1, jpi 
     119                     zwt(ji,jj,2:jpk) = fsavs(ji,jj,2:jpk) 
     120                  END DO 
     121               END DO 
    110122            ENDIF 
    111             zwt(:,:,1) = 0._wp 
     123!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     124            DO jj = 1, jpj 
     125               DO ji = 1, jpi 
     126                  zwt(ji,jj,1) = 0._wp 
     127               END DO 
     128            END DO 
    112129            ! 
    113130            IF( l_ldfslp ) THEN            ! isoneutral diffusion: add the contribution  
    114131               IF( ln_traldf_msc  ) THEN     ! MSC iso-neutral operator  
     132!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    115133                  DO jk = 2, jpkm1 
    116134                     DO jj = 2, jpjm1 
     
    121139                  END DO 
    122140               ELSE                          ! standard or triad iso-neutral operator 
     141!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    123142                  DO jk = 2, jpkm1 
    124143                     DO jj = 2, jpjm1 
     
    132151            ! 
    133152            ! Diagonal, lower (i), upper (s)  (including the bottom boundary condition since avt is masked) 
     153!$OMP PARALLEL  
     154!$OMP DO schedule(static) private(jk, jj, ji) 
    134155            DO jk = 1, jpkm1 
    135156               DO jj = 2, jpjm1 
     
    162183            !   used as a work space array: its value is modified. 
    163184            ! 
     185!$OMP DO schedule(static) private(jj, ji) 
    164186            DO jj = 2, jpjm1        !* 1st recurrence:   Tk = Dk - Ik Sk-1 / Tk-1   (increasing k) 
    165187               DO ji = fs_2, fs_jpim1            ! done one for all passive tracers (so included in the IF instruction) 
     
    167189               END DO 
    168190            END DO 
     191!$OMP END DO NOWAIT  
    169192            DO jk = 2, jpkm1 
     193!$OMP DO schedule(static) private(jj, ji) 
    170194               DO jj = 2, jpjm1 
    171195                  DO ji = fs_2, fs_jpim1 
     
    174198               END DO 
    175199            END DO 
     200!$OMP END PARALLEL  
    176201            ! 
    177202         ENDIF  
    178203         !          
     204!$OMP PARALLEL  
     205!$OMP DO schedule(static) private(jj, ji) 
    179206         DO jj = 2, jpjm1           !* 2nd recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
    180207            DO ji = fs_2, fs_jpim1 
     
    183210         END DO 
    184211         DO jk = 2, jpkm1 
     212!$OMP DO schedule(static) private(jj, ji, zrhs) 
    185213            DO jj = 2, jpjm1 
    186214               DO ji = fs_2, fs_jpim1 
     
    191219         END DO 
    192220         ! 
     221!$OMP DO schedule(static) private(jj, ji) 
    193222         DO jj = 2, jpjm1           !* 3d recurrence:    Xk = (Zk - Sk Xk+1 ) / Tk   (result is the after tracer) 
    194223            DO ji = fs_2, fs_jpim1 
     
    197226         END DO 
    198227         DO jk = jpk-2, 1, -1 
     228!$OMP DO schedule(static) private(jj, ji) 
    199229            DO jj = 2, jpjm1 
    200230               DO ji = fs_2, fs_jpim1 
     
    204234            END DO 
    205235         END DO 
     236!$OMP END PARALLEL  
    206237         !                                            ! ================= ! 
    207238      END DO                                          !  end tracer loop  ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/zpshde.F90

    r6140 r7698  
    101101      IF( nn_timing == 1 )   CALL timing_start( 'zps_hde') 
    102102      ! 
    103       pgtu(:,:,:)=0._wp   ;   zti (:,:,:)=0._wp   ;   zhi (:,:  )=0._wp 
    104       pgtv(:,:,:)=0._wp   ;   ztj (:,:,:)=0._wp   ;   zhj (:,:  )=0._wp 
     103      DO jn = 1, kjpt 
     104!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     105         DO jj = 1, jpjm1 
     106            DO ji = 1, jpim1 
     107               pgtu(ji,jj,jn)=0._wp   ;   zti (ji,jj,jn)=0._wp 
     108               pgtv(ji,jj,jn)=0._wp   ;   ztj (ji,jj,jn)=0._wp 
     109            END DO 
     110         END DO 
     111      END DO 
     112!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     113      DO jj = 1, jpjm1 
     114         DO ji = 1, jpim1 
     115            zhi (ji,jj  )=0._wp 
     116            zhj (ji,jj  )=0._wp 
     117         END DO 
     118       END DO 
    105119      ! 
    106120      DO jn = 1, kjpt      !==   Interpolation of tracers at the last ocean level   ==! 
    107121         ! 
     122!$OMP PARALLEL DO schedule(static) private(jj,ji,iku,ikv,ze3wu,ze3wv,zmaxu,zmaxv) 
    108123         DO jj = 1, jpjm1 
    109124            DO ji = 1, jpim1 
     
    150165      !                 
    151166      IF( PRESENT( prd ) ) THEN    !==  horizontal derivative of density anomalies (rd)  ==!    (optional part) 
    152          pgru(:,:) = 0._wp 
    153          pgrv(:,:) = 0._wp                ! depth of the partial step level 
     167!$OMP PARALLEL 
     168!$OMP DO schedule(static) private(jj,ji) 
     169         DO jj = 1, jpjm1 
     170            DO ji = 1, jpim1 
     171               pgru(ji,jj) = 0._wp 
     172               pgrv(ji,jj) = 0._wp                ! depth of the partial step level 
     173            END DO 
     174         END DO 
     175!$OMP END DO NOWAIT 
     176!$OMP DO schedule(static) private(jj,ji,iku,ikv,ze3wu,ze3wv) 
    154177         DO jj = 1, jpjm1 
    155178            DO ji = 1, jpim1 
     
    166189            END DO 
    167190         END DO 
     191!$OMP END DO NOWAIT 
     192!$OMP END PARALLEL 
    168193         ! 
    169194         CALL eos( zti, zhi, zri )        ! interpolated density from zti, ztj  
    170195         CALL eos( ztj, zhj, zrj )        ! at the partial step depth output in  zri, zrj  
    171196         ! 
     197!$OMP PARALLEL DO schedule(static) private(jj,ji,iku,ikv,ze3wu,ze3wv) 
    172198         DO jj = 1, jpjm1                 ! Gradient of density at the last level  
    173199            DO ji = 1, jpim1 
Note: See TracChangeset for help on using the changeset viewer.