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/LIM_SRC_3/limadv_umx.F90 – NEMO

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

update trunk with OpenMP parallelization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limadv_umx.F90

    r7646 r7698  
    7575      !  upstream advection with initial mass fluxes & intermediate update 
    7676      ! -------------------------------------------------------------------- 
     77!$OMP PARALLEL 
     78!$OMP DO schedule(static) private(jj,ji,zfp_ui,zfm_ui,zfp_vj,zfm_vj) 
    7779      DO jj = 1, jpjm1         ! upstream tracer flux in the i and j direction 
    7880         DO ji = 1, fs_jpim1   ! vector opt. 
     
    8688      END DO 
    8789       
     90!$OMP DO schedule(static) private(jj,ji,ztra) 
    8891      DO jj = 2, jpjm1            ! total intermediate advective trends 
    8992         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    9598         END DO 
    9699      END DO 
     100!$OMP END PARALLEL 
    97101      CALL lbc_lnk( zt_ups, 'T', 1. )        ! Lateral boundary conditions   (unchanged sign) 
    98102       
     
    101105      SELECT CASE( nn_limadv_ord ) 
    102106      CASE ( 20 )                          ! centered second order 
     107!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    103108         DO jj = 2, jpjm1 
    104109            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    111116         CALL macho( kt, nn_limadv_ord, pdt, ptc, puc, pvc, pubox, pvbox, zt_u, zt_v ) 
    112117         ! 
     118!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    113119         DO jj = 2, jpjm1 
    114120            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    122128      ! antidiffusive flux : high order minus low order 
    123129      ! -------------------------------------------------- 
     130!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    124131      DO jj = 2, jpjm1 
    125132         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    136143      ! final trend with corrected fluxes 
    137144      ! ------------------------------------ 
     145!$OMP PARALLEL DO schedule(static) private(jj,ji,ztra) 
    138146      DO jj = 2, jpjm1 
    139147         DO ji = fs_2, fs_jpim1   ! vector opt.   
     
    187195         ! 
    188196         !                                                           !--  advective form update in zzt  --! 
     197!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    189198         DO jj = 2, jpjm1 
    190199            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    205214         ! 
    206215         !                                                           !--  advective form update in zzt  --! 
     216!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    207217         DO jj = 2, jpjm1 
    208218            DO ji = fs_2, fs_jpim1 
     
    253263      ! 
    254264      !                                                     !--  Laplacian in i-direction  --! 
     265!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    255266      DO jj = 2, jpjm1         ! First derivative (gradient) 
    256267         DO ji = 1, fs_jpim1 
     
    265276      ! 
    266277      !                                                     !--  BiLaplacian in i-direction  --! 
     278!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    267279      DO jj = 2, jpjm1         ! Third derivative 
    268280         DO ji = 1, fs_jpim1 
     
    281293      CASE( 1 )                                                   !==  1st order central TIM  ==! (Eq. 21) 
    282294         !         
     295!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    283296         DO jj = 1, jpj 
    284297            DO ji = 1, fs_jpim1   ! vector opt. 
     
    290303      CASE( 2 )                                                   !==  2nd order central TIM  ==! (Eq. 23) 
    291304         ! 
     305!$OMP PARALLEL DO schedule(static) private(jj,ji,zcu) 
    292306         DO jj = 1, jpj 
    293307            DO ji = 1, fs_jpim1   ! vector opt. 
     
    301315      CASE( 3 )                                                   !==  3rd order central TIM  ==! (Eq. 24) 
    302316         ! 
     317!$OMP PARALLEL DO schedule(static) private(jj,ji,zcu,zdx2) 
    303318         DO jj = 1, jpj 
    304319            DO ji = 1, fs_jpim1   ! vector opt. 
     
    315330      CASE( 4 )                                                   !==  4th order central TIM  ==! (Eq. 27) 
    316331         ! 
     332!$OMP PARALLEL DO schedule(static) private(jj,ji,zcu,zdx2) 
    317333         DO jj = 1, jpj 
    318334            DO ji = 1, fs_jpim1   ! vector opt. 
     
    329345      CASE( 5 )                                                   !==  5th order central TIM  ==! (Eq. 29) 
    330346         ! 
     347!$OMP PARALLEL DO schedule(static) private(jj,ji,zcu,zdx2,zdx4) 
    331348         DO jj = 1, jpj 
    332349            DO ji = 1, fs_jpim1   ! vector opt. 
     
    380397      ! 
    381398      !                                                     !--  Laplacian in j-direction  --! 
     399!$OMP PARALLEL 
     400!$OMP DO schedule(static) private(jj,ji) 
    382401      DO jj = 1, jpjm1         ! First derivative (gradient) 
    383402         DO ji = fs_2, fs_jpim1 
     
    385404         END DO 
    386405      END DO 
     406!$OMP DO schedule(static) private(jj,ji) 
    387407      DO jj = 2, jpjm1         ! Second derivative (Laplacian) 
    388408         DO ji = fs_2, fs_jpim1 
     
    390410         END DO 
    391411      END DO 
     412!$OMP END PARALLEL 
    392413      CALL lbc_lnk( ztv2, 'T', 1. ) 
    393414      ! 
    394415      !                                                     !--  BiLaplacian in j-direction  --! 
     416!$OMP PARALLEL 
     417!$OMP DO schedule(static) private(jj,ji) 
    395418      DO jj = 1, jpjm1         ! First derivative 
    396419         DO ji = fs_2, fs_jpim1 
     
    398421         END DO 
    399422      END DO 
     423!$OMP DO schedule(static) private(jj,ji) 
    400424      DO jj = 2, jpjm1         ! Second derivative 
    401425         DO ji = fs_2, fs_jpim1 
     
    403427         END DO 
    404428      END DO 
     429!$OMP END PARALLEL 
    405430      CALL lbc_lnk( ztv4, 'T', 1. ) 
    406431      ! 
     
    410435      CASE( 1 )                                                   !==  1st order central TIM  ==! (Eq. 21) 
    411436         !         
     437!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    412438         DO jj = 1, jpjm1 
    413439            DO ji = 1, jpi 
     
    418444         ! 
    419445      CASE( 2 )                                                   !==  2nd order central TIM  ==! (Eq. 23) 
     446!$OMP PARALLEL DO schedule(static) private(jj,ji,zcv) 
    420447         DO jj = 1, jpjm1 
    421448            DO ji = 1, jpi 
     
    429456      CASE( 3 )                                                   !==  3rd order central TIM  ==! (Eq. 24) 
    430457         ! 
     458!$OMP PARALLEL DO schedule(static) private(jj,ji,zcv,zdy2) 
    431459         DO jj = 1, jpjm1 
    432460            DO ji = 1, jpi 
     
    443471      CASE( 4 )                                                   !==  4th order central TIM  ==! (Eq. 27) 
    444472         ! 
     473!$OMP PARALLEL DO schedule(static) private(jj,ji,zcv,zdy2) 
    445474         DO jj = 1, jpjm1 
    446475            DO ji = 1, jpi 
     
    457486      CASE( 5 )                                                   !==  5th order central TIM  ==! (Eq. 29) 
    458487         ! 
     488!$OMP PARALLEL DO schedule(static) private(jj,ji,zcv,zdy2,zdy4) 
    459489         DO jj = 1, jpjm1 
    460490            DO ji = 1, jpi 
     
    513543 
    514544      ! clem test 
     545!$OMP PARALLEL DO schedule(static) private(jj,ji) 
    515546      DO jj = 2, jpjm1 
    516547         DO ji = fs_2, fs_jpim1   ! vector opt.   
     
    522553 
    523554      ! Determine ice masks for before and after tracers  
    524       WHERE( pbef(:,:) == 0._wp .AND. paft(:,:) == 0._wp .AND. zdiv(:,:) == 0._wp )   ;   zmsk(:,:) = 0._wp 
    525       ELSEWHERE                                                                       ;   zmsk(:,:) = 1._wp * tmask(:,:,1) 
    526       END WHERE 
     555!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     556      DO jj = 1, jpj 
     557         DO ji = 1, jpi   
     558            IF( pbef(ji,jj) == 0._wp .AND. paft(ji,jj) == 0._wp .AND. zdiv(ji,jj) == 0._wp ) THEN 
     559               zmsk(ji,jj) = 0._wp 
     560            ELSE 
     561               zmsk(ji,jj) = 1._wp * tmask(ji,jj,1) 
     562            END IF 
     563         END DO 
     564      END DO 
    527565 
    528566      ! Search local extrema 
     
    533571!      zbdo(:,:) = MIN( pbef(:,:) * tmask(:,:,1) + zbig * ( 1.e0 - tmask(:,:,1) ),   & 
    534572!         &             paft(:,:) * tmask(:,:,1) + zbig * ( 1.e0 - tmask(:,:,1) )  ) 
    535       zbup(:,:) = MAX( pbef(:,:) * zmsk(:,:) - zbig * ( 1.e0 - zmsk(:,:) ),   & 
    536          &             paft(:,:) * zmsk(:,:) - zbig * ( 1.e0 - zmsk(:,:) )  ) 
    537       zbdo(:,:) = MIN( pbef(:,:) * zmsk(:,:) + zbig * ( 1.e0 - zmsk(:,:) ),   & 
    538          &             paft(:,:) * zmsk(:,:) + zbig * ( 1.e0 - zmsk(:,:) )  ) 
    539573 
    540574      z1_dt = 1._wp / pdt 
     575 
     576!$OMP PARALLEL 
     577!$OMP DO schedule(static) private(jj,ji) 
     578      DO jj = 1, jpj 
     579         DO ji = 1, jpi   
     580            zbup(ji,jj) = MAX( pbef(ji,jj) * zmsk(ji,jj) - zbig * ( 1.e0 - zmsk(ji,jj) ),   & 
     581               &             paft(ji,jj) * zmsk(ji,jj) - zbig * ( 1.e0 - zmsk(ji,jj) )  ) 
     582            zbdo(ji,jj) = MIN( pbef(ji,jj) * zmsk(ji,jj) + zbig * ( 1.e0 - zmsk(ji,jj) ),   & 
     583               &             paft(ji,jj) * zmsk(ji,jj) + zbig * ( 1.e0 - zmsk(ji,jj) )  ) 
     584         END DO 
     585      END DO 
     586 
     587!$OMP DO schedule(static) private(jj,ji,zup,zdo,zpos,zneg,zbt) 
    541588      DO jj = 2, jpjm1 
    542589         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    557604         END DO 
    558605      END DO 
     606!$OMP END PARALLEL 
    559607      CALL lbc_lnk_multi( zbetup, 'T', 1., zbetdo, 'T', 1. )   ! lateral boundary cond. (unchanged sign) 
    560608 
    561609      ! monotonic flux in the i & j direction (paa & pbb) 
    562610      ! ------------------------------------- 
     611!$OMP PARALLEL DO schedule(static) private(jj,ji,zau,zbu,zcu,zav,zbv,zcv) 
    563612      DO jj = 2, jpjm1 
    564613         DO ji = fs_2, fs_jpim1   ! vector opt. 
Note: See TracChangeset for help on using the changeset viewer.