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/SBC/geo2ocean.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/OPA_SRC/SBC/geo2ocean.F90

    r6140 r7698  
    6666      !                                                             ! 'ij->e' = (i,j) components to east 
    6767      !                                                             ! 'ij->n' = (i,j) components to north 
     68      INTEGER  ::   ji, jj                                          ! dummy loop indices 
    6869      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::   prot       
    6970      !!---------------------------------------------------------------------- 
     
    8283      CASE( 'en->i' )                  ! east-north to i-component 
    8384         SELECT CASE (cd_type) 
    84          CASE ('T')   ;   prot(:,:) = pxin(:,:) * gcost(:,:) + pyin(:,:) * gsint(:,:) 
    85          CASE ('U')   ;   prot(:,:) = pxin(:,:) * gcosu(:,:) + pyin(:,:) * gsinu(:,:) 
    86          CASE ('V')   ;   prot(:,:) = pxin(:,:) * gcosv(:,:) + pyin(:,:) * gsinv(:,:) 
    87          CASE ('F')   ;   prot(:,:) = pxin(:,:) * gcosf(:,:) + pyin(:,:) * gsinf(:,:) 
     85         CASE ('T')    
     86!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     87            DO jj = 1, jpj 
     88               DO ji = 1, jpi 
     89                  prot(ji,jj) = pxin(ji,jj) * gcost(ji,jj) + pyin(ji,jj) * gsint(ji,jj) 
     90               END DO 
     91            END DO 
     92         CASE ('U') 
     93!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     94            DO jj = 1, jpj 
     95               DO ji = 1, jpi 
     96                  prot(ji,jj) = pxin(ji,jj) * gcosu(ji,jj) + pyin(ji,jj) * gsinu(ji,jj) 
     97               END DO 
     98            END DO 
     99         CASE ('V') 
     100!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     101            DO jj = 1, jpj 
     102               DO ji = 1, jpi 
     103                  prot(ji,jj) = pxin(ji,jj) * gcosv(ji,jj) + pyin(ji,jj) * gsinv(ji,jj) 
     104               END DO 
     105            END DO 
     106         CASE ('F') 
     107!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     108            DO jj = 1, jpj 
     109               DO ji = 1, jpi 
     110                  prot(ji,jj) = pxin(ji,jj) * gcosf(ji,jj) + pyin(ji,jj) * gsinf(ji,jj) 
     111               END DO 
     112            END DO 
    88113         CASE DEFAULT   ;   CALL ctl_stop( 'Only T, U, V and F grid points are coded' ) 
    89114         END SELECT 
    90115      CASE ('en->j')                   ! east-north to j-component 
    91116         SELECT CASE (cd_type) 
    92          CASE ('T')   ;   prot(:,:) = pyin(:,:) * gcost(:,:) - pxin(:,:) * gsint(:,:) 
    93          CASE ('U')   ;   prot(:,:) = pyin(:,:) * gcosu(:,:) - pxin(:,:) * gsinu(:,:) 
    94          CASE ('V')   ;   prot(:,:) = pyin(:,:) * gcosv(:,:) - pxin(:,:) * gsinv(:,:)    
    95          CASE ('F')   ;   prot(:,:) = pyin(:,:) * gcosf(:,:) - pxin(:,:) * gsinf(:,:)    
     117         CASE ('T') 
     118!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     119            DO jj = 1, jpj 
     120               DO ji = 1, jpi 
     121                  prot(ji,jj) = pyin(ji,jj) * gcost(ji,jj) - pxin(ji,jj) * gsint(ji,jj) 
     122               END DO 
     123            END DO 
     124         CASE ('U') 
     125!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     126            DO jj = 1, jpj 
     127               DO ji = 1, jpi 
     128                  prot(ji,jj) = pyin(ji,jj) * gcosu(ji,jj) - pxin(ji,jj) * gsinu(ji,jj) 
     129               END DO 
     130            END DO 
     131         CASE ('V')    
     132!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     133            DO jj = 1, jpj 
     134               DO ji = 1, jpi 
     135                  prot(ji,jj) = pyin(ji,jj) * gcosv(ji,jj) - pxin(ji,jj) * gsinv(ji,jj) 
     136               END DO 
     137            END DO 
     138         CASE ('F')    
     139!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     140            DO jj = 1, jpj 
     141               DO ji = 1, jpi 
     142                  prot(ji,jj) = pyin(ji,jj) * gcosf(ji,jj) - pxin(ji,jj) * gsinf(ji,jj) 
     143               END DO 
     144            END DO 
    96145         CASE DEFAULT   ;   CALL ctl_stop( 'Only T, U, V and F grid points are coded' ) 
    97146         END SELECT 
    98147      CASE ('ij->e')                   ! (i,j)-components to east 
    99148         SELECT CASE (cd_type) 
    100          CASE ('T')   ;   prot(:,:) = pxin(:,:) * gcost(:,:) - pyin(:,:) * gsint(:,:) 
    101          CASE ('U')   ;   prot(:,:) = pxin(:,:) * gcosu(:,:) - pyin(:,:) * gsinu(:,:) 
    102          CASE ('V')   ;   prot(:,:) = pxin(:,:) * gcosv(:,:) - pyin(:,:) * gsinv(:,:) 
    103          CASE ('F')   ;   prot(:,:) = pxin(:,:) * gcosf(:,:) - pyin(:,:) * gsinf(:,:) 
     149         CASE ('T') 
     150!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     151            DO jj = 1, jpj 
     152               DO ji = 1, jpi 
     153                  prot(ji,jj) = pxin(ji,jj) * gcost(ji,jj) - pyin(ji,jj) * gsint(ji,jj) 
     154               END DO 
     155            END DO 
     156         CASE ('U') 
     157!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     158            DO jj = 1, jpj 
     159               DO ji = 1, jpi 
     160                  prot(ji,jj) = pxin(ji,jj) * gcosu(ji,jj) - pyin(ji,jj) * gsinu(ji,jj) 
     161               END DO 
     162            END DO 
     163         CASE ('V') 
     164!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     165            DO jj = 1, jpj 
     166               DO ji = 1, jpi 
     167                  prot(ji,jj) = pxin(ji,jj) * gcosv(ji,jj) - pyin(ji,jj) * gsinv(ji,jj) 
     168               END DO 
     169            END DO 
     170         CASE ('F') 
     171!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     172            DO jj = 1, jpj 
     173               DO ji = 1, jpi 
     174                  prot(ji,jj) = pxin(ji,jj) * gcosf(ji,jj) - pyin(ji,jj) * gsinf(ji,jj) 
     175               END DO 
     176            END DO 
    104177         CASE DEFAULT   ;   CALL ctl_stop( 'Only T, U, V and F grid points are coded' ) 
    105178         END SELECT 
    106179      CASE ('ij->n')                   ! (i,j)-components to north  
    107180         SELECT CASE (cd_type) 
    108          CASE ('T')   ;   prot(:,:) = pyin(:,:) * gcost(:,:) + pxin(:,:) * gsint(:,:) 
    109          CASE ('U')   ;   prot(:,:) = pyin(:,:) * gcosu(:,:) + pxin(:,:) * gsinu(:,:) 
    110          CASE ('V')   ;   prot(:,:) = pyin(:,:) * gcosv(:,:) + pxin(:,:) * gsinv(:,:) 
    111          CASE ('F')   ;   prot(:,:) = pyin(:,:) * gcosf(:,:) + pxin(:,:) * gsinf(:,:) 
     181         CASE ('T') 
     182!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     183            DO jj = 1, jpj 
     184               DO ji = 1, jpi 
     185                  prot(ji,jj) = pyin(ji,jj) * gcost(ji,jj) + pxin(ji,jj) * gsint(ji,jj) 
     186               END DO 
     187            END DO 
     188         CASE ('U') 
     189!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     190            DO jj = 1, jpj 
     191               DO ji = 1, jpi 
     192                  prot(ji,jj) = pyin(ji,jj) * gcosu(ji,jj) + pxin(ji,jj) * gsinu(ji,jj) 
     193               END DO 
     194            END DO 
     195         CASE ('V') 
     196!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     197            DO jj = 1, jpj 
     198               DO ji = 1, jpi 
     199                  prot(ji,jj) = pyin(ji,jj) * gcosv(ji,jj) + pxin(ji,jj) * gsinv(ji,jj) 
     200               END DO 
     201            END DO 
     202         CASE ('F') 
     203!$OMP PARALLEL DO schedule(static) private(jj,ji) 
     204            DO jj = 1, jpj 
     205               DO ji = 1, jpi 
     206                  prot(ji,jj) = pyin(ji,jj) * gcosf(ji,jj) + pxin(ji,jj) * gsinf(ji,jj) 
     207               END DO 
     208            END DO 
    112209         CASE DEFAULT   ;   CALL ctl_stop( 'Only T, U, V and F grid points are coded' ) 
    113210         END SELECT 
     
    157254      ! (computation done on the north stereographic polar plane) 
    158255      ! 
     256!$OMP PARALLEL 
     257!$OMP DO schedule(static) private(jj,ji,zlam,zphi,zxnpt,zynpt,znnpt,zxnpu,zynpu,znnpu,zxnpv,zynpv,znnpv,zxnpf) & 
     258!$OMP& private(zynpf,znnpf,zlan,zphh,zxvvt,zyvvt,znvvt,zxffu,zyffu,znffu,zxffv,zyffv,znffv,zxuuf,zyuuf,znuuf) 
    159259      DO jj = 2, jpjm1 
    160260         DO ji = fs_2, jpi   ! vector opt. 
     
    248348      ! =============== ! 
    249349 
     350!$OMP DO schedule(static) private(jj,ji) 
    250351      DO jj = 2, jpjm1 
    251352         DO ji = fs_2, jpi   ! vector opt. 
     
    268369         END DO 
    269370      END DO 
     371!$OMP END DO NOWAIT 
     372!$OMP END PARALLEL 
    270373 
    271374      ! =========================== ! 
Note: See TracChangeset for help on using the changeset viewer.