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 6748 for branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_fct.F90 – NEMO

Ignore:
Timestamp:
2016-06-28T11:53:56+02:00 (8 years ago)
Author:
mocavero
Message:

GYRE hybrid parallelization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_fct.F90

    r6140 r6748  
    9898      IF( l_trd )  THEN 
    9999         CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 
     100!$OMP PARALLEL WORKSHARE 
    100101         ztrdx(:,:,:) = 0._wp   ;    ztrdy(:,:,:) = 0._wp   ;   ztrdz(:,:,:) = 0._wp 
     102!$OMP END PARALLEL WORKSHARE 
    101103      ENDIF 
    102104      ! 
    103105      !                          ! surface & bottom value : flux set to zero one for all 
     106!$OMP PARALLEL WORKSHARE 
    104107      zwz(:,:, 1 ) = 0._wp             
    105108      zwx(:,:,jpk) = 0._wp   ;   zwy(:,:,jpk) = 0._wp    ;    zwz(:,:,jpk) = 0._wp 
    106109      ! 
    107110      zwi(:,:,:) = 0._wp         
     111!$OMP END PARALLEL WORKSHARE 
    108112      ! 
    109113      DO jn = 1, kjpt            !==  loop over the tracers  ==! 
     
    111115         !        !==  upstream advection with initial mass fluxes & intermediate update  ==! 
    112116         !                    !* upstream tracer flux in the i and j direction  
     117!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui,zfm_ui) 
    113118         DO jk = 1, jpkm1 
    114119            DO jj = 1, jpjm1 
     
    125130         END DO 
    126131         !                    !* upstream tracer flux in the k direction *! 
     132!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 
    127133         DO jk = 2, jpkm1        ! Interior value ( multiplied by wmask) 
    128134            DO jj = 1, jpj 
     
    146152         ENDIF 
    147153         !                
     154!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ztra) 
    148155         DO jk = 1, jpkm1     !* trend and after field with monotonic scheme 
    149156            DO jj = 2, jpjm1 
     
    163170         !                 
    164171         IF( l_trd )  THEN             ! trend diagnostics (contribution of upstream fluxes) 
     172!$OMP PARALLEL WORKSHARE 
    165173            ztrdx(:,:,:) = zwx(:,:,:)   ;    ztrdy(:,:,:) = zwy(:,:,:)  ;   ztrdz(:,:,:) = zwz(:,:,:) 
     174!$OMP END PARALLEL WORKSHARE 
    166175         END IF 
    167176         !                             ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
     
    176185         ! 
    177186         CASE(  2  )                   !- 2nd order centered 
     187!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    178188            DO jk = 1, jpkm1 
    179189               DO jj = 1, jpjm1 
     
    186196            ! 
    187197         CASE(  4  )                   !- 4th order centered 
     198!$OMP PARALLEL WORKSHARE 
    188199            zltu(:,:,jpk) = 0._wp            ! Bottom value : flux set to zero 
    189200            zltv(:,:,jpk) = 0._wp 
     201!$OMP END PARALLEL WORKSHARE 
     202!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    190203            DO jk = 1, jpkm1                 ! Laplacian 
    191204               DO jj = 1, jpjm1                    ! 1st derivative (gradient) 
     
    204217            CALL lbc_lnk( zltu, 'T', 1. )   ;    CALL lbc_lnk( zltv, 'T', 1. )   ! Lateral boundary cond. (unchanged sgn) 
    205218            ! 
     219!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zC2t_u, zC2t_v) 
    206220            DO jk = 1, jpkm1                 ! Horizontal advective fluxes 
    207221               DO jj = 1, jpjm1 
     
    217231            ! 
    218232         CASE(  41 )                   !- 4th order centered       ==>>   !!gm coding attempt   need to be tested 
     233!$OMP PARALLEL WORKSHARE 
    219234            ztu(:,:,jpk) = 0._wp             ! Bottom value : flux set to zero 
    220235            ztv(:,:,jpk) = 0._wp 
     236!$OMP END PARALLEL WORKSHARE 
     237!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    221238            DO jk = 1, jpkm1                 ! 1st derivative (gradient) 
    222239               DO jj = 1, jpjm1 
     
    229246            CALL lbc_lnk( ztu, 'U', -1. )   ;    CALL lbc_lnk( ztv, 'V', -1. )   ! Lateral boundary cond. (unchanged sgn) 
    230247            ! 
     248!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zC2t_u, zC2t_v, zC4t_u, zC4t_v) 
    231249            DO jk = 1, jpkm1                 ! Horizontal advective fluxes 
    232250               DO jj = 2, jpjm1 
     
    249267         ! 
    250268         CASE(  2  )                   !- 2nd order centered 
     269!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    251270            DO jk = 2, jpkm1     
    252271               DO jj = 2, jpjm1 
     
    260279         CASE(  4  )                   !- 4th order COMPACT 
    261280            CALL interp_4th_cpt( ptn(:,:,:,jn) , ztw )   ! zwt = COMPACT interpolation of T at w-point 
     281!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    262282            DO jk = 2, jpkm1 
    263283               DO jj = 2, jpjm1 
     
    282302         !        !==  final trend with corrected fluxes  ==! 
    283303         ! 
     304!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    284305         DO jk = 1, jpkm1 
    285306            DO jj = 2, jpjm1 
     
    294315         ! 
    295316         IF( l_trd ) THEN     ! trend diagnostics (contribution of upstream fluxes) 
     317!$OMP PARALLEL WORKSHARE 
    296318            ztrdx(:,:,:) = ztrdx(:,:,:) + zwx(:,:,:)  ! <<< Add to previously computed 
    297319            ztrdy(:,:,:) = ztrdy(:,:,:) + zwy(:,:,:)  ! <<< Add to previously computed 
    298320            ztrdz(:,:,:) = ztrdz(:,:,:) + zwz(:,:,:)  ! <<< Add to previously computed 
     321!$OMP END PARALLEL WORKSHARE 
    299322            ! 
    300323            CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) ) 
     
    626649      zbig  = 1.e+40_wp 
    627650      zrtrn = 1.e-15_wp 
     651!$OMP PARALLEL WORKSHARE 
    628652      zbetup(:,:,:) = 0._wp   ;   zbetdo(:,:,:) = 0._wp 
     653!$OMP END PARALLEL WORKSHARE 
    629654 
    630655      ! Search local extrema 
     
    636661         &        paft * tmask + zbig * ( 1._wp - tmask )  ) 
    637662 
     663!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, ikm1, zup, zdo, zpos, zneg, zbt) 
    638664      DO jk = 1, jpkm1 
    639665         ikm1 = MAX(jk-1,1) 
     
    674700      ! 3. monotonic flux in the i & j direction (paa & pbb) 
    675701      ! ---------------------------------------- 
     702!$OMP PARALLEL DO schedule(static) private(jk, jj, ji, za, zb, zc, zav, zbv, zcv, zau, zbu, zcu) 
    676703      DO jk = 1, jpkm1 
    677704         DO jj = 2, jpjm1 
Note: See TracChangeset for help on using the changeset viewer.