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 7508 for branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/domngb.F90 – NEMO

Ignore:
Timestamp:
2016-12-19T13:15:59+01:00 (8 years ago)
Author:
mocavero
Message:

changes on code duplication and workshare construct

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6519_HPC_4/NEMOGCM/NEMO/OPA_SRC/DOM/domngb.F90

    r6748 r7508  
    4242      CHARACTER(len=1), INTENT(in   ) ::   cdgrid       ! grid name 'T', 'U', 'V', 'W' 
    4343      ! 
    44       INTEGER :: ik         ! working level 
     44      INTEGER :: ik, jj, ji         ! working level 
    4545      INTEGER , DIMENSION(2) ::   iloc 
    4646      REAL(wp)               ::   zlon, zmini 
     
    5252      CALL wrk_alloc( jpi,jpj,   zglam, zgphi, zmask, zdist ) 
    5353      ! 
    54       zmask(:,:) = 0._wp 
     54!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     55      DO jj = 1, jpj 
     56         DO ji = 1, jpi 
     57            zmask(ji,jj) = 0._wp 
     58         END DO 
     59      END DO 
    5560      ik = 1 
    5661      IF ( PRESENT(kkk) ) ik=kkk 
    5762      SELECT CASE( cdgrid ) 
    5863      CASE( 'U' ) 
    59 !$OMP PARALLEL WORKSHARE 
    60       zglam(:,:) = glamu(:,:) ; zgphi(:,:) = gphiu(:,:) ; zmask(nldi:nlei,nldj:nlej) = umask(nldi:nlei,nldj:nlej,ik) 
    61 !$OMP END PARALLEL WORKSHARE 
     64!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     65      DO jj = 1, jpj 
     66         DO ji = 1, jpi 
     67            zglam(ji,jj) = glamu(ji,jj) ; zgphi(ji,jj) = gphiu(ji,jj) 
     68         END DO 
     69      END DO 
     70      zmask(nldi:nlei,nldj:nlej) = umask(nldi:nlei,nldj:nlej,ik) 
    6271      CASE( 'V' )   
    63 !$OMP PARALLEL WORKSHARE 
    64       zglam(:,:) = glamv(:,:) ; zgphi(:,:) = gphiv(:,:) ; zmask(nldi:nlei,nldj:nlej) = vmask(nldi:nlei,nldj:nlej,ik) 
    65 !$OMP END PARALLEL WORKSHARE 
     72!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     73      DO jj = 1, jpj 
     74         DO ji = 1, jpi 
     75            zglam(ji,jj) = glamv(ji,jj) ; zgphi(ji,jj) = gphiv(ji,jj) 
     76         END DO 
     77      END DO 
     78      zmask(nldi:nlei,nldj:nlej) = vmask(nldi:nlei,nldj:nlej,ik) 
    6679      CASE( 'F' )   
    67 !$OMP PARALLEL WORKSHARE 
    68       zglam(:,:) = glamf(:,:) ; zgphi(:,:) = gphif(:,:) ; zmask(nldi:nlei,nldj:nlej) = fmask(nldi:nlei,nldj:nlej,ik) 
    69 !$OMP END PARALLEL WORKSHARE 
     80!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     81      DO jj = 1, jpj 
     82         DO ji = 1, jpi 
     83            zglam(ji,jj) = glamf(ji,jj) ; zgphi(ji,jj) = gphif(ji,jj) 
     84         END DO 
     85      END DO 
     86      zmask(nldi:nlei,nldj:nlej) = fmask(nldi:nlei,nldj:nlej,ik) 
    7087      CASE DEFAULT  
    71 !$OMP PARALLEL WORKSHARE 
    72       zglam(:,:) = glamt(:,:) ; zgphi(:,:) = gphit(:,:) ; zmask(nldi:nlei,nldj:nlej) = tmask(nldi:nlei,nldj:nlej,ik) 
    73 !$OMP END PARALLEL WORKSHARE 
     88!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     89      DO jj = 1, jpj 
     90         DO ji = 1, jpi 
     91            zglam(ji,jj) = glamt(ji,jj) ; zgphi(ji,jj) = gphit(ji,jj) 
     92         END DO 
     93      END DO 
     94      zmask(nldi:nlei,nldj:nlej) = tmask(nldi:nlei,nldj:nlej,ik) 
    7495      END SELECT 
    7596 
    7697      IF (jphgr_msh /= 2 .AND. jphgr_msh /= 3) THEN 
    7798         zlon       = MOD( plon       + 720., 360. )                                     ! plon between    0 and 360 
    78          zglam(:,:) = MOD( zglam(:,:) + 720., 360. )                                     ! glam between    0 and 360 
    79          IF( zlon > 270. )   zlon = zlon - 360.                                          ! zlon between  -90 and 270 
    80          IF( zlon <  90. )   WHERE( zglam(:,:) > 180. ) zglam(:,:) = zglam(:,:) - 360.   ! glam between -180 and 180 
    81          zglam(:,:) = zglam(:,:) - zlon 
     99!$OMP PARALLEL DO schedule(static) private(jj, ji, zglam, zlon) 
     100         DO jj = 1, jpj 
     101            DO ji = 1, jpi 
     102               zglam(ji,jj) = MOD( zglam(ji,jj) + 720., 360. )                                     ! glam between    0 and 360 
     103               IF( zlon > 270. )   zlon = zlon - 360.                                          ! zlon between  -90 and 270 
     104               IF( zlon <  90. ) THEN 
     105                 IF( zglam(ji,jj) > 180. ) zglam(ji,jj) = zglam(ji,jj) - 360.   ! glam between -180 and 180 
     106               END IF 
     107               zglam(ji,jj) = zglam(ji,jj) - zlon 
     108            END DO 
     109         END DO 
    82110      ELSE 
    83          zglam(:,:) = zglam(:,:) - plon 
     111!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     112         DO jj = 1, jpj 
     113            DO ji = 1, jpi 
     114               zglam(ji,jj) = zglam(ji,jj) - plon 
     115            END DO 
     116         END DO 
    84117      END IF 
    85 !$OMP PARALLEL WORKSHARE 
    86       zgphi(:,:) = zgphi(:,:) - plat 
    87       zdist(:,:) = zglam(:,:) * zglam(:,:) + zgphi(:,:) * zgphi(:,:) 
    88 !$OMP END PARALLEL WORKSHARE 
     118!$OMP PARALLEL DO schedule(static) private(jj, ji) 
     119      DO jj = 1, jpj 
     120         DO ji = 1, jpi 
     121            zgphi(ji,jj) = zgphi(ji,jj) - plat 
     122            zdist(ji,jj) = zglam(ji,jj) * zglam(ji,jj) + zgphi(ji,jj) * zgphi(ji,jj) 
     123         END DO 
     124      END DO 
    89125      IF( lk_mpp ) THEN   
    90126         CALL mpp_minloc( zdist(:,:), zmask, zmini, kii, kjj) 
Note: See TracChangeset for help on using the changeset viewer.