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

Changeset 4032


Ignore:
Timestamp:
2013-09-21T16:15:51+02:00 (11 years ago)
Author:
epico
Message:

The hybrid parallel version OpenMP+MPI has been introduced for the GYRE configuration. A further refinement is needed to remove dependencies in those loops not parallelized yet (whenever possible)

Location:
branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM
Files:
1 added
23 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90

    r3704 r4032  
    176176      IF( lk_diaar5 ) THEN 
    177177         z3d(:,:,jpk) = 0.e0 
     178!$OMP PARALLEL DO schedule(static) private(jk) 
    178179         DO jk = 1, jpkm1 
    179180            z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) 
     
    698699      CALL histwrite( nid_V, "vomecrty", it, vn            , ndim_V , ndex_V  )   ! j-current 
    699700      IF( ln_traldf_gdia ) THEN 
     701!$OMP PARALLEL DO schedule(static) private(jk) 
    700702         DO jk=1,jpk-1 
    701703            zw3d(:,:,jk) = (psiy_eiv(:,:,jk+1) - psiy_eiv(:,:,jk))/fse3v(:,:,jk)  ! v_eiv = -dpsiy/dz 
     
    713715      CALL histwrite( nid_W, "vovecrtz", it, wn             , ndim_T, ndex_T )    ! vert. current 
    714716      IF( ln_traldf_gdia ) THEN 
     717!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    715718         DO jk=1,jpk-1 
    716719            DO jj = 2, jpjm1 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r4006 r4032  
    780780      IF( nn_timing == 1 )  CALL timing_start('zgr_zco') 
    781781      ! 
     782!$OMP PARALLEL DO schedule(static) private(jk) 
    782783      DO jk = 1, jpk 
    783784            gdept(:,:,jk) = gdept_0(jk) 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90

    r3764 r4032  
    345345         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    346346 
     347!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    347348         DO jk = 1, jpk 
    348349            DO jj = 1, jpj 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90

    r3294 r4032  
    8888      INTEGER ::   ii, ij, ijt, iju, ierr   ! local integer 
    8989      REAL(wp) ::  zraur, zdep              ! local scalar 
    90       REAL(wp), POINTER,  DIMENSION(:,:) ::   zwu   ! specific 2D workspace 
    91       REAL(wp), POINTER,  DIMENSION(:,:) ::   zwv   ! specific 2D workspace 
     90      REAL(wp), POINTER,  DIMENSION(:,:,:) ::   zwu   ! specific 3D workspace 
     91      REAL(wp), POINTER,  DIMENSION(:,:,:) ::   zwv   ! specific 3D workspace 
    9292      !!---------------------------------------------------------------------- 
    9393      ! 
    9494      IF( nn_timing == 1 )  CALL timing_start('div_cur') 
    9595      ! 
    96       CALL wrk_alloc( jpi  , jpj+2, zwu               ) 
    97       CALL wrk_alloc( jpi+4, jpj  , zwv, kjstart = -1 ) 
     96      CALL wrk_alloc( jpi  , jpj+2, jk, zwu,               ) 
     97      CALL wrk_alloc( jpi+4, jpj  , jk, zwv, kjstart = -1 ) 
    9898      ! 
    9999      IF( kt == nit000 ) THEN 
     
    104104 
    105105      !                                                ! =============== 
     106!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    106107      DO jk = 1, jpkm1                                 ! Horizontal slab 
    107108         !                                             ! =============== 
     
    136137         DO jj = 1, jpj 
    137138            DO ji = 1, jpi 
    138                zwu(ji,jj) = e1u(ji,jj) * un(ji,jj,jk) 
    139                zwv(ji,jj) = e2v(ji,jj) * vn(ji,jj,jk) 
     139               zwu(ji,jj,jk) = e1u(ji,jj) * un(ji,jj,jk) 
     140               zwv(ji,jj,jk) = e2v(ji,jj) * vn(ji,jj,jk) 
    140141            END DO   
    141142         END DO   
     
    143144         ! East-West boundary conditions 
    144145         IF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6) THEN 
    145             zwv(  0  ,:) = zwv(jpi-2,:) 
    146             zwv( -1  ,:) = zwv(jpi-3,:) 
    147             zwv(jpi+1,:) = zwv(  3  ,:) 
    148             zwv(jpi+2,:) = zwv(  4  ,:) 
     146            zwv(  0  ,:,jk) = zwv(jpi-2,:,jk) 
     147            zwv( -1  ,:,jk) = zwv(jpi-3,:,jk) 
     148            zwv(jpi+1,:,jk) = zwv(  3  ,:,jk) 
     149            zwv(jpi+2,:,jk) = zwv(  4  ,:,jk) 
    149150         ELSE 
    150             zwv(  0  ,:) = 0.e0 
    151             zwv( -1  ,:) = 0.e0 
    152             zwv(jpi+1,:) = 0.e0 
    153             zwv(jpi+2,:) = 0.e0 
     151            zwv(  0  ,:,jk) = 0.e0 
     152            zwv( -1  ,:,jk) = 0.e0 
     153            zwv(jpi+1,:,jk) = 0.e0 
     154            zwv(jpi+2,:,jk) = 0.e0 
    154155         ENDIF 
    155156 
     
    157158         IF( nperio == 3 .OR. nperio == 4 ) THEN 
    158159            ! north fold ( Grid defined with a T-point pivot) ORCA 2 degre 
    159             zwu(jpi,jpj+1) = 0.e0 
    160             zwu(jpi,jpj+2) = 0.e0 
     160            zwu(jpi,jpj+1,jk) = 0.e0 
     161            zwu(jpi,jpj+2,jk) = 0.e0 
    161162            DO ji = 1, jpi-1 
    162163               iju = jpi - ji + 1 
    163                zwu(ji,jpj+1) = - zwu(iju,jpj-3) 
    164                zwu(ji,jpj+2) = - zwu(iju,jpj-4) 
     164               zwu(ji,jpj+1,jk) = - zwu(iju,jpj-3,jk) 
     165               zwu(ji,jpj+2,jk) = - zwu(iju,jpj-4,jk) 
    165166            END DO 
    166167         ELSEIF( nperio == 5 .OR. nperio == 6 ) THEN 
    167168            ! north fold ( Grid defined with a F-point pivot) ORCA 0.5 degre\ 
    168             zwu(jpi,jpj+1) = 0.e0 
    169             zwu(jpi,jpj+2) = 0.e0 
     169            zwu(jpi,jpj+1,jk) = 0.e0 
     170            zwu(jpi,jpj+2,jk) = 0.e0 
    170171            DO ji = 1, jpi-1 
    171172               iju = jpi - ji 
    172                zwu(ji,jpj  ) = - zwu(iju,jpj-1) 
    173                zwu(ji,jpj+1) = - zwu(iju,jpj-2) 
    174                zwu(ji,jpj+2) = - zwu(iju,jpj-3) 
     173               zwu(ji,jpj,jk  ) = - zwu(iju,jpj-1,jk) 
     174               zwu(ji,jpj+1,jk) = - zwu(iju,jpj-2,jk) 
     175               zwu(ji,jpj+2,jk) = - zwu(iju,jpj-3,jk) 
    175176            END DO 
    176177            DO ji = -1, jpi+2 
    177178               ijt = jpi - ji + 1 
    178                zwv(ji,jpj) = - zwv(ijt,jpj-2) 
     179               zwv(ji,jpj,jk) = - zwv(ijt,jpj-2,jk) 
    179180            END DO 
    180181            DO ji = jpi/2+1, jpi+2 
    181182               ijt = jpi - ji + 1 
    182                zwv(ji,jpjm1) = - zwv(ijt,jpjm1) 
     183               zwv(ji,jpjm1,jk) = - zwv(ijt,jpjm1,jk) 
    183184            END DO 
    184185         ELSE 
    185186            ! closed 
    186             zwu(:,jpj+1) = 0.e0 
    187             zwu(:,jpj+2) = 0.e0 
     187            zwu(:,jpj+1,jk) = 0.e0 
     188            zwu(:,jpj+2,jk) = 0.e0 
    188189         ENDIF 
    189190 
     
    191192         DO jj = 1, jpjm1 
    192193            DO ji = 1, fs_jpim1   ! vector opt. 
    193                rotn(ji,jj,jk) = (  zwv(ji+1,jj  ) - zwv(ji,jj)      & 
    194                   &              - zwu(ji  ,jj+1) + zwu(ji,jj)  ) * fmask(ji,jj,jk) / ( e1f(ji,jj)*e2f(ji,jj) ) 
     194               rotn(ji,jj,jk) = (  zwv(ji+1,jj,jk  ) - zwv(ji,jj,jk)      & 
     195                  &              - zwu(ji  ,jj+1,jk) + zwu(ji,jj,jk)  ) * fmask(ji,jj,jk) / ( e1f(ji,jj)*e2f(ji,jj) ) 
    195196            END DO 
    196197         END DO 
     
    201202            ij = njcoa(jl,1,jk) 
    202203            rotn(ii,ij,jk) = 1. / ( e1f(ii,ij) * e2f(ii,ij) )   & 
    203                            * ( + 4. * zwv(ii+1,ij) - zwv(ii+2,ij) + 0.2 * zwv(ii+3,ij) ) 
     204                           * ( + 4. * zwv(ii+1,ij,jk) - zwv(ii+2,ij,jk) + 0.2 * zwv(ii+3,ij,jk) ) 
    204205         END DO 
    205206         DO jl = 1, npcoa(2,jk) 
     
    207208            ij = njcoa(jl,2,jk) 
    208209            rotn(ii,ij,jk) = 1./(e1f(ii,ij)*e2f(ii,ij))   & 
    209                *(-4.*zwv(ii,ij)+zwv(ii-1,ij)-0.2*zwv(ii-2,ij)) 
     210               *(-4.*zwv(ii,ij,jk)+zwv(ii-1,ij,jk)-0.2*zwv(ii-2,ij,jk)) 
    210211         END DO 
    211212         DO jl = 1, npcoa(3,jk) 
     
    213214            ij = njcoa(jl,3,jk) 
    214215            rotn(ii,ij,jk) = -1. / ( e1f(ii,ij)*e2f(ii,ij) )   & 
    215                * ( +4. * zwu(ii,ij+1) - zwu(ii,ij+2) + 0.2 * zwu(ii,ij+3) ) 
     216               * ( +4. * zwu(ii,ij+1,jk) - zwu(ii,ij+2,jk) + 0.2 * zwu(ii,ij+3,jk) ) 
    216217         END DO 
    217218         DO jl = 1, npcoa(4,jk) 
     
    219220            ij = njcoa(jl,4,jk) 
    220221            rotn(ii,ij,jk) = -1. / ( e1f(ii,ij)*e2f(ii,ij) )   & 
    221                * ( -4. * zwu(ii,ij) + zwu(ii,ij-1) - 0.2 * zwu(ii,ij-2) ) 
     222               * ( -4. * zwu(ii,ij,jk) + zwu(ii,ij-1,jk) - 0.2 * zwu(ii,ij-2,jk) ) 
    222223         END DO 
    223224         !                                             ! =============== 
     
    284285 
    285286      !                                                ! =============== 
     287!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    286288      DO jk = 1, jpkm1                                 ! Horizontal slab 
    287289         !                                             ! =============== 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynkeg.F90

    r3294 r4032  
    7979       
    8080      !                                                ! =============== 
     81!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zu, zv) 
    8182      DO jk = 1, jpkm1                                 ! Horizontal slab 
    8283         !                                             ! =============== 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_lap.F90

    r3294 r4032  
    7777      ENDIF 
    7878      !                                                ! =============== 
     79!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze2u, ze1v, zua, zva) 
    7980      DO jk = 1, jpkm1                                 ! Horizontal slab 
    8081         !                                             ! =============== 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90

    r3764 r4032  
    133133      ! 
    134134      IF( ln_dynadv_vec .OR. .NOT. lk_vvl ) THEN      ! applied on velocity 
     135!$OMP PARALLEL DO schedule(static) private(jk) 
    135136         DO jk = 1, jpkm1 
    136137            ua(:,:,jk) = ( ub(:,:,jk) + z2dt * ua(:,:,jk) ) * umask(:,:,jk) 
     
    138139         END DO 
    139140      ELSE                                            ! applied on thickness weighted velocity 
     141!$OMP PARALLEL DO schedule(static) private(jk) 
    140142         DO jk = 1, jpkm1 
    141143            ua(:,:,jk) = (          ub(:,:,jk) * fse3u_b(:,:,jk)      & 
     
    190192      ! ------------------------------------------ 
    191193      IF( neuler == 0 .AND. kt == nit000 ) THEN        !* Euler at first time-step: only swap 
     194!$OMP PARALLEL DO schedule(static) private(jk) 
    192195         DO jk = 1, jpkm1 
    193196            un(:,:,jk) = ua(:,:,jk)                          ! un <-- ua 
     
    198201         IF( .NOT. lk_vvl ) THEN          ! Fixed volume ! 
    199202            !                             ! =============! 
     203!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zuf, zvf) 
    200204            DO jk = 1, jpkm1                               
    201205               DO jj = 1, jpj 
     
    215219            !                             ! ================! 
    216220            ! 
     221!$OMP PARALLEL DO schedule(static) private(jk) 
    217222            DO jk = 1, jpkm1                 ! Before scale factor at t-points 
    218223               fse3t_b(:,:,jk) = fse3t_n(:,:,jk)                                   & 
     
    228233               CALL dom_vvl_2( kt, fse3u_b(:,:,:), fse3v_b(:,:,:) ) 
    229234               ! 
     235!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zuf, zvf) 
    230236               DO jk = 1, jpkm1                       ! Leap-Frog - Asselin filter and swap: applied on velocity 
    231237                  DO jj = 1, jpj                      !                                                 -------- 
     
    246252               CALL dom_vvl_2( kt, ze3u_f, ze3v_f )   ! before scale factors at u- & v-pts (computed from fse3t_b) 
    247253               ! 
     254!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zue3b, zve3b, zue3n, zve3n, zue3a, zve3a, zuf, zvf) 
    248255               DO jk = 1, jpkm1                       ! Leap-Frog - Asselin filter and swap:  
    249256                  DO jj = 1, jpj                      !                   applied on thickness weighted velocity 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_flt.F90

    r4010 r4032  
    140140         ! 
    141141         IF( ln_dynadv_vec ) THEN      ! vector form : applied on velocity 
     142!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    142143            DO jk = 1, jpkm1 
    143144               DO jj = 2, jpjm1 
     
    150151            ! 
    151152         ELSE                          ! flux form : applied on thickness weighted velocity 
     153!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    152154            DO jk = 1, jpkm1 
    153155               DO jj = 2, jpjm1 
     
    173175            END DO  
    174176         END DO  
     177!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    175178         DO jk = 1, jpkm1              ! unweighted time stepping  
    176179            DO jj = 2, jpjm1 
     
    345348      !                       trend, the leap-frog time stepping will not 
    346349      !                       be done in dynnxt.F90 routine) 
     350!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    347351      DO jk = 1, jpkm1 
    348352         DO jj = 2, jpjm1 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90

    r3802 r4032  
    225225      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    226226      REAL(wp) ::   zx1, zy1, zfact2, zx2, zy2   ! local scalars 
    227       REAL(wp), POINTER, DIMENSION(:,:) :: zwx, zwy, zwz 
     227      REAL(wp), POINTER, DIMENSION(:,:,:) :: zwx, zwy, zwz 
    228228      !!---------------------------------------------------------------------- 
    229229      ! 
    230230      IF( nn_timing == 1 )  CALL timing_start('vor_ene') 
    231231      ! 
    232       CALL wrk_alloc( jpi, jpj, zwx, zwy, zwz )  
     232      CALL wrk_alloc( jpi, jpj, jpk, zwx, zwy, zwz )  
    233233      ! 
    234234      IF( kt == nit000 ) THEN 
     
    242242!CDIR PARALLEL DO PRIVATE( zwx, zwy, zwz ) 
    243243      !                                                ! =============== 
     244!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zy1, zy2, zx1, zx2) 
    244245      DO jk = 1, jpkm1                                 ! Horizontal slab 
    245246         !                                             ! =============== 
     
    248249         ! ----------------------------------------- 
    249250         SELECT CASE( kvor )      ! vorticity considered 
    250          CASE ( 1 )   ;   zwz(:,:) =                  ff(:,:)      ! planetary vorticity (Coriolis) 
    251          CASE ( 2 )   ;   zwz(:,:) =   rotn(:,:,jk)                ! relative  vorticity 
     251         CASE ( 1 )   ;   zwz(:,:,jk) =                  ff(:,:)      ! planetary vorticity (Coriolis) 
     252         CASE ( 2 )   ;   zwz(:,:,jk) =   rotn(:,:,jk)                ! relative  vorticity 
    252253         CASE ( 3 )                                                ! metric term 
    253254            DO jj = 1, jpjm1 
    254255               DO ji = 1, fs_jpim1   ! vector opt. 
    255                   zwz(ji,jj) = (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
     256                  zwz(ji,jj,jk) = (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
    256257                       &         - ( un(ji  ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
    257258                       &     * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) 
    258259               END DO 
    259260            END DO 
    260          CASE ( 4 )   ;   zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) )    ! total (relative + planetary vorticity) 
     261         CASE ( 4 )   ;   zwz(:,:,jk) = ( rotn(:,:,jk) + ff(:,:) )    ! total (relative + planetary vorticity) 
    261262         CASE ( 5 )                                                ! total (coriolis + metric) 
    262263            DO jj = 1, jpjm1 
    263264               DO ji = 1, fs_jpim1   ! vector opt. 
    264                   zwz(ji,jj) = ( ff (ji,jj)                                                                       & 
     265                  zwz(ji,jj,jk) = ( ff (ji,jj)                                                                       & 
    265266                       &       + (   ( vn(ji+1,jj  ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj  ) - e2v(ji,jj) )       & 
    266267                       &           - ( un(ji  ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji  ,jj+1) - e1u(ji,jj) )   )   & 
     
    272273 
    273274         IF( ln_sco ) THEN 
    274             zwz(:,:) = zwz(:,:) / fse3f(:,:,jk) 
    275             zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 
    276             zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 
     275            zwz(:,:,jk) = zwz(:,:,jk) / fse3f(:,:,jk) 
     276            zwx(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 
     277            zwy(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 
    277278         ELSE 
    278             zwx(:,:) = e2u(:,:) * un(:,:,jk) 
    279             zwy(:,:) = e1v(:,:) * vn(:,:,jk) 
     279            zwx(:,:,jk) = e2u(:,:) * un(:,:,jk) 
     280            zwy(:,:,jk) = e1v(:,:) * vn(:,:,jk) 
    280281         ENDIF 
    281282 
     
    284285         DO jj = 2, jpjm1 
    285286            DO ji = fs_2, fs_jpim1   ! vector opt. 
    286                zy1 = zwy(ji,jj-1) + zwy(ji+1,jj-1) 
    287                zy2 = zwy(ji,jj  ) + zwy(ji+1,jj  ) 
    288                zx1 = zwx(ji-1,jj) + zwx(ji-1,jj+1) 
    289                zx2 = zwx(ji  ,jj) + zwx(ji  ,jj+1) 
    290                pua(ji,jj,jk) = pua(ji,jj,jk) + zfact2 / e1u(ji,jj) * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
    291                pva(ji,jj,jk) = pva(ji,jj,jk) - zfact2 / e2v(ji,jj) * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 )  
     287               zy1 = zwy(ji,jj-1,jk) + zwy(ji+1,jj-1,jk) 
     288               zy2 = zwy(ji,jj, jk  ) + zwy(ji+1,jj, jk  ) 
     289               zx1 = zwx(ji-1,jj,jk) + zwx(ji-1,jj+1,jk) 
     290               zx2 = zwx(ji  ,jj, jk) + zwx(ji  ,jj+1, jk) 
     291               pua(ji,jj,jk) = pua(ji,jj,jk) + zfact2 / e1u(ji,jj) * ( zwz(ji  ,jj-1,jk) * zy1 + zwz(ji,jj,jk) * zy2 ) 
     292               pva(ji,jj,jk) = pva(ji,jj,jk) - zfact2 / e2v(ji,jj) * ( zwz(ji-1,jj,jk  ) * zx1 + zwz(ji,jj,jk) * zx2 )  
    292293            END DO   
    293294         END DO   
     
    295296      END DO                                           !   End of slab 
    296297      !                                                ! =============== 
    297       CALL wrk_dealloc( jpi, jpj, zwx, zwy, zwz )  
     298      CALL wrk_dealloc( jpi, jpj, jpk, zwx, zwy, zwz )  
    298299      ! 
    299300      IF( nn_timing == 1 )  CALL timing_stop('vor_ene') 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynzad.F90

    r3294 r4032  
    6060      REAL(wp) ::   zua, zva        ! temporary scalars 
    6161      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zwuw , zwvw 
    62       REAL(wp), POINTER, DIMENSION(:,:  ) ::  zww 
    6362      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrdu, ztrdv 
    6463      !!---------------------------------------------------------------------- 
     
    6665      IF( nn_timing == 1 )  CALL timing_start('dyn_zad') 
    6766      ! 
    68       CALL wrk_alloc( jpi,jpj, zww )  
    6967      CALL wrk_alloc( jpi,jpj,jpk, zwuw , zwvw )  
    7068      ! 
     
    8078      ENDIF 
    8179       
     80!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    8281      DO jk = 2, jpkm1              ! Vertical momentum advection at level w and u- and v- vertical 
    83          DO jj = 2, jpj                   ! vertical fluxes  
    84             DO ji = fs_2, jpi             ! vector opt. 
    85                zww(ji,jj) = 0.25 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk) 
    86             END DO 
    87          END DO 
    8882         DO jj = 2, jpjm1                 ! vertical momentum advection at w-point 
    8983            DO ji = fs_2, fs_jpim1        ! vector opt. 
    90                zwuw(ji,jj,jk) = ( zww(ji+1,jj  ) + zww(ji,jj) ) * ( un(ji,jj,jk-1)-un(ji,jj,jk) ) 
    91                zwvw(ji,jj,jk) = ( zww(ji  ,jj+1) + zww(ji,jj) ) * ( vn(ji,jj,jk-1)-vn(ji,jj,jk) ) 
     84               zwuw(ji,jj,jk) = ( 0.25 * e1t(ji+1,jj) * e2t(ji+1,jj) * wn(ji+1,jj,jk) + 0.25 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk)) * ( un(ji,jj,jk-1)-un(ji,jj,jk) ) 
     85               zwvw(ji,jj,jk) = ( 0.25 * e1t(ji,jj+1) * e2t(ji,jj+1) * wn(ji,jj+1,jk) + 0.25 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk)) * ( vn(ji,jj,jk-1)-vn(ji,jj,jk) ) 
    9286            END DO   
    9387         END DO    
     
    10296      END DO 
    10397 
     98!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zua, zva) 
    10499      DO jk = 1, jpkm1              ! Vertical momentum advection at u- and v-points 
    105100         DO jj = 2, jpjm1 
     
    125120         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    126121      ! 
    127       CALL wrk_dealloc( jpi,jpj, zww )  
    128122      CALL wrk_dealloc( jpi,jpj,jpk, zwuw , zwvw )  
    129123      ! 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90

    r3625 r4032  
    116116      ! non zero value at the ocean bottom depending on the bottom friction used. 
    117117      ! 
     118!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcoef, zzwi, zzws) 
    118119      DO jk = 1, jpkm1        ! Matrix 
    119120         DO jj = 2, jpjm1  
     
    187188 
    188189      ! Normalization to obtain the general momentum trend ua 
     190!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    189191      DO jk = 1, jpkm1 
    190192         DO jj = 2, jpjm1    
     
    202204      ! non zero value at the ocean bottom depending on the bottom friction used 
    203205      ! 
     206!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcoef, zzwi, zzws) 
    204207      DO jk = 1, jpkm1        ! Matrix 
    205208         DO jj = 2, jpjm1    
     
    273276 
    274277      ! Normalization to obtain the general momentum trend va 
     278!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    275279      DO jk = 1, jpkm1 
    276280         DO jj = 2, jpjm1    
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r3764 r4032  
    130130      IF( lk_vvl ) THEN                           !  Regridding: Update Now Vertical coord.  !   (only in vvl case) 
    131131         !                                        !------------------------------------------! 
     132!$OMP PARALLEL DO schedule(static) private(jk) 
    132133         DO jk = 1, jpkm1 
    133134            fsdept(:,:,jk) = fsdept_n(:,:,jk)         ! now local depths stored in fsdep. arrays 
     
    229230         CALL wrk_alloc( jpi,jpj,jpk, z3d ) 
    230231         z2d(:,:) = rau0 * e1t(:,:) * e2t(:,:) 
     232!$OMP PARALLEL DO schedule(static) private(jk) 
    231233         DO jk = 1, jpk 
    232234            z3d(:,:,jk) = wn(:,:,jk) * z2d(:,:) 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90

    r4017 r4032  
    760760         ! 
    761761         ! WARNING ptab is defined only between nld and nle 
     762!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    762763         DO jk = 1, jpk 
    763764            DO jj = nlcj+1, jpj                 ! added line(s)   (inner only) 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90

    r3848 r4032  
    125125      zwz(:,:,:) = 0._wp 
    126126      ! 
     127!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    127128      DO jk = 1, jpk             !==   i- & j-gradient of density   ==! 
    128129         DO jj = 1, jpjm1 
     
    148149      ! 
    149150      zdzr(:,:,1) = 0._wp        !==   Local vertical density gradient at T-point   == !   (evaluated from N^2) 
     151!$OMP PARALLEL DO schedule(static) private(jk) 
    150152      DO jk = 2, jpkm1 
    151153         !                                ! zdzr = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 
     
    165167      ! ===========================      | vslp = d/dj( prd ) / d/dz( prd ) 
    166168      ! 
     169!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zau, zav, zbu, zbv, zfj, zfi) 
    167170      DO jk = 2, jpkm1                            !* Slopes at u and v points 
    168171         DO jj = 2, jpjm1 
     
    203206      ! 
    204207      !                                            !* horizontal Shapiro filter 
     208!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    205209      DO jk = 2, jpkm1 
    206210         DO jj = 2, jpjm1, MAX(1, jpj-3)                        ! rows jj=2 and =jpjm1 only 
     
    247251      ! ===========================      | wslpj = mij( d/dj( prd ) / d/dz( prd ) 
    248252      ! 
     253!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbw, zfk, zck, zbi, zbj, zai, zaj, zci, zcj) 
    249254      DO jk = 2, jpkm1 
    250255         DO jj = 2, jpjm1 
     
    285290      ! 
    286291      !                                           !* horizontal Shapiro filter 
     292!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcofw, zck) 
    287293      DO jk = 2, jpkm1 
    288294         DO jj = 2, jpjm1, MAX(1, jpj-3)                        ! rows jj=2 and =jpjm1 only 
     
    658664      ! 
    659665      !                                            !==   surface mixed layer mask   ! 
     666!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ik) 
    660667      DO jk = 1, jpk                               ! =1 inside the mixed layer, =0 otherwise 
    661668# if defined key_vectopt_loop 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r3625 r4032  
    135135         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
    136136         ! 
     137!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zrhop, zaw, za, zb1, za1, zkw, zk0, ze, zbw, zb, zd, zc, zr1, zr2, zr3, zr4, zt, zs, zh, zsr) 
    137138         DO jk = 1, jpkm1 
    138139            DO jj = 1, jpj 
     
    178179         ! 
    179180      CASE( 1 )                !==  Linear formulation function of temperature only  ==! 
     181!$OMP PARALLEL DO schedule(static) private(jk) 
    180182         DO jk = 1, jpkm1 
    181183            prd(:,:,jk) = ( 0.0285_wp - rn_alpha * pts(:,:,jk,jp_tem) ) * tmask(:,:,jk) 
     
    183185         ! 
    184186      CASE( 2 )                !==  Linear formulation function of temperature and salinity  ==! 
     187!$OMP PARALLEL DO schedule(static) private(jk) 
    185188         DO jk = 1, jpkm1 
    186189            prd(:,:,jk) = ( rn_beta  * pts(:,:,jk,jp_sal) - rn_alpha * pts(:,:,jk,jp_tem) ) * tmask(:,:,jk) 
     
    266269         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
    267270         ! 
     271!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zrhop, zaw, za, zb1, za1, zkw, zk0, ze, zbw, zb, zd, zc, zr1, zr2, zr3, zr4, zt, zs, zh, zsr) 
    268272         DO jk = 1, jpkm1 
    269273            DO jj = 1, jpj 
     
    312316         ! 
    313317      CASE( 1 )                !==  Linear formulation = F( temperature )  ==! 
     318!$OMP PARALLEL DO schedule(static) private(jk) 
    314319         DO jk = 1, jpkm1 
    315320            prd  (:,:,jk) = ( 0.0285_wp - rn_alpha * pts(:,:,jk,jp_tem) )        * tmask(:,:,jk) 
     
    318323         ! 
    319324      CASE( 2 )                !==  Linear formulation = F( temperature , salinity )  ==! 
     325!$OMP PARALLEL DO schedule(static) private(jk) 
    320326         DO jk = 1, jpkm1 
    321327            prd  (:,:,jk) = ( rn_beta  * pts(:,:,jk,jp_sal) - rn_alpha * pts(:,:,jk,jp_tem) )        * tmask(:,:,jk) 
     
    516522      ! 
    517523      CASE( 0 )                !==  Jackett and McDougall (1994) formulation  ==! 
     524#if defined key_zdfddm 
     525!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zgde3w, zt, zs, zh, zalbet, zbeta, zds) 
     526#else 
     527!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zgde3w, zt, zs, zh, zalbet, zbeta) 
     528#endif 
    518529         DO jk = 2, jpkm1 
    519530            DO jj = 1, jpj 
     
    563574         ! 
    564575      CASE( 1 )                !==  Linear formulation = F( temperature )  ==! 
     576!$OMP PARALLEL DO schedule(static) private(jk) 
    565577         DO jk = 2, jpkm1 
    566578            pn2(:,:,jk) = grav * rn_alpha * ( pts(:,:,jk-1,jp_tem) - pts(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk) 
     
    568580         ! 
    569581      CASE( 2 )                !==  Linear formulation = F( temperature , salinity )  ==! 
     582!$OMP PARALLEL DO schedule(static) private(jk) 
    570583         DO jk = 2, jpkm1 
    571584            pn2(:,:,jk) = grav * (  rn_alpha * ( pts(:,:,jk-1,jp_tem) - pts(:,:,jk,jp_tem) )      & 
     
    574587         END DO 
    575588#if defined key_zdfddm 
     589!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zds) 
    576590         DO jk = 2, jpkm1                                 ! Rrau = (alpha / beta) (dk[t] / dk[s]) 
    577591            DO jj = 1, jpj 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90

    r3718 r4032  
    8787      ! 
    8888      !                                               !==  effective transport  ==! 
     89!$OMP PARALLEL DO schedule(static) private(jk) 
    8990      DO jk = 1, jpkm1 
    9091         zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)                  ! eulerian transport only 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90

    r3625 r4032  
    116116         ! -------------------------------------------------------------------- 
    117117         ! upstream tracer flux in the i and j direction 
     118!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui, zfm_ui) 
    118119         DO jk = 1, jpkm1 
    119120            DO jj = 1, jpjm1 
     
    136137         ENDIF 
    137138         ! Interior value 
     139!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 
    138140         DO jk = 2, jpkm1 
    139141            DO jj = 1, jpj 
     
    147149 
    148150         ! total advective trend 
     151!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 
    149152         DO jk = 1, jpkm1 
    150153            z2dtt = p2dt(jk) 
     
    179182         ! -------------------------------------------------- 
    180183         ! antidiffusive flux on i and j 
     184!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    181185         DO jk = 1, jpkm1 
    182186            DO jj = 1, jpjm1 
     
    191195         zwz(:,:,1) = 0.e0         ! Surface value 
    192196         ! 
     197!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    193198         DO jk = 2, jpkm1          ! Interior value 
    194199            DO jj = 1, jpj 
     
    208213         ! 5. final trend with corrected fluxes 
    209214         ! ------------------------------------ 
     215!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 
    210216         DO jk = 1, jpkm1 
    211217            DO jj = 2, jpjm1 
     
    292298         &        paft * tmask + zbig * ( 1.e0 - tmask )  ) 
    293299 
     300!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zpos, zneg, zbt, ikm1, z2dtt, zup, zdo) 
    294301      DO jk = 1, jpkm1 
    295302         ikm1 = MAX(jk-1,1) 
     
    331338      ! 3. monotonic flux in the i & j direction (paa & pbb) 
    332339      ! ---------------------------------------- 
     340!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, za, zb, zc, zav, zbv, zcv, zau, zbu, zcu) 
    333341      DO jk = 1, jpkm1 
    334342         DO jj = 2, jpjm1 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r3805 r4032  
    110110      REAL(wp)                         ::   zztmp               ! local scalar 
    111111#endif 
     112      REAL(wp) :: zdkt_scal1, zdkt_scal2, zdkt_scal3, zdk1t_scal1, zdk1t_scal2, zdk1t_scal3 
    112113      REAL(wp), POINTER, DIMENSION(:,:  ) ::  zdkt, zdk1t, z2d 
    113114      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zdit, zdjt, ztfw  
     
    139140 
    140141         ! Horizontal tracer gradient  
     142!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    141143         DO jk = 1, jpkm1 
    142144            DO jj = 1, jpjm1 
     
    161163!CDIR PARALLEL DO PRIVATE( zdk1t )  
    162164         !                                                ! =============== 
    163          DO jk = 1, jpkm1                                 ! Horizontal slab 
     165         !                                             ! =============== 
     166         ! 1. Vertical tracer gradient at level jk and jk+1 
     167         ! ------------------------------------------------ 
     168         ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2) 
     169         zdk1t(:,:) = ( ptb(:,:,1,jn) - ptb(:,:,2,jn) ) * tmask(:,:,2) 
     170         zdkt(:,:) = zdk1t(:,:) 
     171 
     172         ! 2. Horizontal fluxes 
     173         ! --------------------    
     174         DO jj = 1 , jpjm1 
     175            DO ji = 1, fs_jpim1   ! vector opt. 
     176               zabe1 = ( fsahtu(ji,jj,1) + pahtb0 ) * e2u(ji,jj) * fse3u(ji,jj,1) / e1u(ji,jj) 
     177               zabe2 = ( fsahtv(ji,jj,1) + pahtb0 ) * e1v(ji,jj) * fse3v(ji,jj,1) / e2v(ji,jj) 
     178               ! 
     179               zmsku = 1. / MAX(  tmask(ji+1,jj,1  ) + tmask(ji,jj,2)   & 
     180                  &             + tmask(ji+1,jj,2) + tmask(ji,jj,1  ), 1. ) 
     181               ! 
     182               zmskv = 1. / MAX(  tmask(ji,jj+1,1  ) + tmask(ji,jj,2)   & 
     183                  &             + tmask(ji,jj+1,2) + tmask(ji,jj,1  ), 1. ) 
     184               ! 
     185               zcof1 = - fsahtu(ji,jj,1) * e2u(ji,jj) * uslp(ji,jj,1) * zmsku 
     186               zcof2 = - fsahtv(ji,jj,1) * e1v(ji,jj) * vslp(ji,jj,1) * zmskv 
     187               ! 
     188               zftu(ji,jj,1 ) = (  zabe1 * zdit(ji,jj,1)   & 
     189                  &              + zcof1 * (  zdkt (ji+1,jj) + zdk1t(ji,jj)      & 
     190                  &                         + zdk1t(ji+1,jj) + zdkt (ji,jj)  )  ) * umask(ji,jj,1) 
     191               zftv(ji,jj,1) = (  zabe2 * zdjt(ji,jj,1)   & 
     192                  &              + zcof2 * (  zdkt (ji,jj+1) + zdk1t(ji,jj)      & 
     193                  &                         + zdk1t(ji,jj+1) + zdkt (ji,jj)  )  ) * vmask(ji,jj,1)                   
     194            END DO 
     195         END DO 
     196 
     197         ! II.4 Second derivative (divergence) and add to the general trend 
     198         ! ---------------------------------------------------------------- 
     199         DO jj = 2 , jpjm1 
     200            DO ji = fs_2, fs_jpim1   ! vector opt. 
     201               zbtr = 1.0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,1) ) 
     202               ztra = zbtr * ( zftu(ji,jj,1) - zftu(ji-1,jj,1) + zftv(ji,jj,1) - zftv(ji,jj-1,1)  ) 
     203               pta(ji,jj,1,jn) = pta(ji,jj,1,jn) + ztra 
     204            END DO 
     205         END DO 
     206!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zdkt_scal1, zdkt_scal2, zdkt_scal3, zdk1t_scal1, zdk1t_scal2, zdk1t_scal3, zbtr, ztra, zcof1, zcof2, zabe1, zabe2, zmskv, zmsku) 
     207         DO jk = 2, jpkm1                                 ! Horizontal slab 
    164208            !                                             ! =============== 
    165209            ! 1. Vertical tracer gradient at level jk and jk+1 
    166210            ! ------------------------------------------------ 
    167211            ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2) 
    168             zdk1t(:,:) = ( ptb(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * tmask(:,:,jk+1) 
    169             ! 
    170             IF( jk == 1 ) THEN   ;   zdkt(:,:) = zdk1t(:,:) 
    171             ELSE                 ;   zdkt(:,:) = ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) * tmask(:,:,jk) 
    172             ENDIF 
    173212 
    174213            ! 2. Horizontal fluxes 
     
    176215            DO jj = 1 , jpjm1 
    177216               DO ji = 1, fs_jpim1   ! vector opt. 
     217                  zdk1t_scal1 = ( ptb(ji,jj,jk,jn) - ptb(ji,jj,jk+1,jn) ) * tmask(ji,jj,jk+1) 
     218                  zdk1t_scal2 = ( ptb(ji+1,jj,jk,jn) - ptb(ji+1,jj,jk+1,jn) ) * tmask(ji+1,jj,jk+1) 
     219                  zdk1t_scal3 = ( ptb(ji,jj+1,jk,jn) - ptb(ji,jj+1,jk+1,jn) ) * tmask(ji,jj+1,jk+1) 
     220                  zdkt_scal1 = ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 
     221                  zdkt_scal2 = ( ptb(ji+1,jj,jk-1,jn) - ptb(ji+1,jj,jk,jn) ) * tmask(ji+1,jj,jk) 
     222                  zdkt_scal3 = ( ptb(ji,jj+1,jk-1,jn) - ptb(ji,jj+1,jk,jn) ) * tmask(ji,jj+1,jk) 
    178223                  zabe1 = ( fsahtu(ji,jj,jk) + pahtb0 ) * e2u(ji,jj) * fse3u(ji,jj,jk) / e1u(ji,jj) 
    179224                  zabe2 = ( fsahtv(ji,jj,jk) + pahtb0 ) * e1v(ji,jj) * fse3v(ji,jj,jk) / e2v(ji,jj) 
     
    189234                  ! 
    190235                  zftu(ji,jj,jk ) = (  zabe1 * zdit(ji,jj,jk)   & 
    191                      &              + zcof1 * (  zdkt (ji+1,jj) + zdk1t(ji,jj)      & 
    192                      &                         + zdk1t(ji+1,jj) + zdkt (ji,jj)  )  ) * umask(ji,jj,jk) 
     236                     &              + zcof1 * (  zdkt_scal2 + zdk1t_scal1      & 
     237                     &                         + zdk1t_scal2 + zdkt_scal1  )  ) * umask(ji,jj,jk) 
    193238                  zftv(ji,jj,jk) = (  zabe2 * zdjt(ji,jj,jk)   & 
    194                      &              + zcof2 * (  zdkt (ji,jj+1) + zdk1t(ji,jj)      & 
    195                      &                         + zdk1t(ji,jj+1) + zdkt (ji,jj) )  ) * vmask(ji,jj,jk)                   
     239                     &              + zcof2 * (  zdkt_scal3 + zdk1t_scal1      & 
     240                     &                         + zdk1t_scal3 + zdkt_scal1 )  ) * vmask(ji,jj,jk)                   
    196241               END DO 
    197242            END DO 
     
    261306          
    262307         ! interior (2=<jk=<jpk-1) 
     308!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcoef0, zmsku, zmskv, zcoef3, zcoef4) 
    263309         DO jk = 2, jpkm1 
    264310            DO jj = 2, jpjm1 
     
    285331         ! I.5 Divergence of vertical fluxes added to the general tracer trend 
    286332         ! ------------------------------------------------------------------- 
     333!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 
    287334         DO jk = 1, jpkm1 
    288335            DO jj = 2, jpjm1 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r3294 r4032  
    136136      IF( neuler == 0 .AND. kt == nit000 ) THEN       ! Euler time-stepping at first time-step (only swap) 
    137137         DO jn = 1, jpts 
     138!$OMP PARALLEL DO schedule(static) private(jk) 
    138139            DO jk = 1, jpkm1 
    139140               tsn(:,:,jk,jn) = tsa(:,:,jk,jn)     
     
    154155      ! trends computation 
    155156      IF( l_trdtra ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
     157!$OMP PARALLEL DO schedule(static) private(jk, zfact) 
    156158         DO jk = 1, jpkm1 
    157159            zfact = 1.e0 / r2dtra(jk)              
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90

    r3680 r4032  
    145145      IF( lk_qsr_bio .AND. ln_qsr_bio ) THEN      !  bio-model fluxes  : all vertical coordinates  ! 
    146146         !                                        ! ============================================== ! 
     147!$OMP PARALLEL DO schedule(static) private(jk) 
    147148         DO jk = 1, jpkm1 
    148149            qsr_hc(:,:,jk) = r1_rau0_rcp * ( etot3(:,:,jk) - etot3(:,:,jk+1) ) 
    149150         END DO 
    150151         !                                        Add to the general trend 
     152!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, z1_e3t) 
    151153         DO jk = 1, jpkm1 
    152154            DO jj = 2, jpjm1  
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90

    r3294 r4032  
    125125            ! isoneutral diffusion: add the contribution  
    126126            IF( ln_traldf_grif    ) THEN     ! Griffies isoneutral diff 
     127!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    127128               DO jk = 2, jpkm1 
    128129                  DO jj = 2, jpjm1 
     
    133134               END DO 
    134135            ELSE IF( l_traldf_rot ) THEN     ! standard isoneutral diff 
     136!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    135137               DO jk = 2, jpkm1 
    136138                  DO jj = 2, jpjm1 
     
    145147#endif 
    146148            ! Diagonal, lower (i), upper (s)  (including the bottom boundary condition since avt is masked) 
     149!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ze3ta, ze3tn) 
    147150            DO jk = 1, jpkm1 
    148151               DO jj = 2, jpjm1 
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90

    r3294 r4032  
    7777         zavm_evd(:,:,:) = avm(:,:,:)           ! set avm prior to evd application 
    7878         ! 
     79!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    7980         DO jk = 1, jpkm1  
    8081#if defined key_vectopt_loop 
     
    108109         ! 
    109110      CASE DEFAULT         ! enhance vertical eddy diffusivity only (if rn2<-1.e-12)  
     111!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    110112         DO jk = 1, jpkm1 
    111113!!!         WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd   ! agissant sur T SEUL!  
  • branches/2013/dev_r4017_CMCC_MPI_OpenMP/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r3680 r4032  
    303303         zcof = 0.016 / SQRT( zrhoa * zcdrag ) 
    304304!CDIR NOVERRCHK 
     305!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zus, zind, zwlc) 
    305306         DO jk = 2, jpkm1         !* TKE Langmuir circulation source term added to en 
    306307!CDIR NOVERRCHK 
     
    327328      !                     ! zdiag : diagonal zd_up : upper diagonal zd_lw : lower diagonal 
    328329      ! 
     330!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    329331      DO jk = 2, jpkm1           !* Shear production at uw- and vw-points (energy conserving form) 
    330332         DO jj = 1, jpj                 ! here avmu, avmv used as workspace 
     
    342344      END DO 
    343345      ! 
     346!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcof, zzd_up, zesh2, zzd_lw) 
    344347      DO jk = 2, jpkm1           !* Matrix and right hand side in en 
    345348         DO jj = 2, jpjm1 
     
    396399         END DO 
    397400      END DO 
     401!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    398402      DO jk = 2, jpkm1                             ! set the minimum value of tke 
    399403         DO jj = 2, jpjm1 
     
    408412      !                            !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    409413      IF( nn_etau == 1 ) THEN           !* penetration below the mixed layer (rn_efr fraction) 
     414!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    410415         DO jk = 2, jpkm1 
    411416            DO jj = 2, jpjm1 
     
    426431      ELSEIF( nn_etau == 3 ) THEN       !* penetration belox the mixed layer (HF variability) 
    427432!CDIR NOVERRCHK 
     433!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ztau, zdif, ztx2, zty2) 
    428434         DO jk = 2, jpkm1 
    429435!CDIR NOVERRCHK 
     
    514520      ! 
    515521!CDIR NOVERRCHK 
     522!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zrn2) 
    516523      DO jk = 2, jpkm1              ! interior value : l=sqrt(2*e/n^2) 
    517524!CDIR NOVERRCHK 
     
    533540      ! 
    534541      CASE ( 0 )           ! bounded by the distance to surface and bottom 
     542!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl) 
    535543         DO jk = 2, jpkm1 
    536544            DO jj = 2, jpjm1 
     
    545553         ! 
    546554      CASE ( 1 )           ! bounded by the vertical scale factor 
     555!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl) 
    547556         DO jk = 2, jpkm1 
    548557            DO jj = 2, jpjm1 
     
    589598         END DO 
    590599!CDIR NOVERRCHK 
     600!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zemxl, zemlp) 
    591601         DO jk = 2, jpkm1 
    592602!CDIR NOVERRCHK 
     
    613623      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    614624!CDIR NOVERRCHK 
     625!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zsqen, zav) 
    615626      DO jk = 1, jpkm1            !* vertical eddy viscosity & diffivity at w-points 
    616627!CDIR NOVERRCHK 
     
    628639      CALL lbc_lnk( avm, 'W', 1. )      ! Lateral boundary conditions (sign unchanged) 
    629640      ! 
     641!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    630642      DO jk = 2, jpkm1            !* vertical eddy viscosity at u- and v-points 
    631643         DO jj = 2, jpjm1 
     
    639651      ! 
    640652      IF( nn_pdl == 1 ) THEN      !* Prandtl number case: update avt 
     653!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zcoef, zdku, zdkv, zpdlr, zri) 
    641654         DO jk = 2, jpkm1 
    642655            DO jj = 2, jpjm1 
     
    757770      ENDIF 
    758771      !                               !* set vertical eddy coef. to the background value 
     772!$OMP PARALLEL DO schedule(static) private(jk) 
    759773      DO jk = 1, jpk 
    760774         avt (:,:,jk) = avtb(jk) * tmask(:,:,jk) 
Note: See TracChangeset for help on using the changeset viewer.