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/LBC – 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/LBC/lib_mpp.F90

    r7646 r7698  
    381381         ! 
    382382         ! WARNING ptab is defined only between nld and nle 
     383!$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 
    383384         DO jk = 1, jpk 
    384385            DO jj = nlcj+1, jpj                 ! added line(s)   (inner only) 
     
    399400         !                                        !* Cyclic east-west 
    400401         IF( nbondi == 2 .AND. (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) ) THEN 
    401             ptab( 1 ,:,:) = ptab(jpim1,:,:) 
    402             ptab(jpi,:,:) = ptab(  2  ,:,:) 
     402!$OMP PARALLEL DO schedule(static) private(jk, jj) 
     403            DO jk = 1, jpk 
     404               DO jj = 1, jpj 
     405                  ptab( 1 ,jj,jk) = ptab(jpim1,jj,jk) 
     406                  ptab(jpi,jj,jk) = ptab(  2  ,jj,jk) 
     407               END DO 
     408            END DO 
    403409         ELSE                                     !* closed 
    404             IF( .NOT. cd_type == 'F' )   ptab(     1       :jpreci,:,:) = zland    ! south except F-point 
    405                                          ptab(nlci-jpreci+1:jpi   ,:,:) = zland    ! north 
     410            IF( .NOT. cd_type == 'F' ) THEN 
     411!$OMP PARALLEL DO schedule(static) private(jk, jj) 
     412               DO jk = 1, jpk 
     413                  DO jj = 1, jpj 
     414                     ptab(     1       :jpreci,jj,jk) = zland    ! south except F-point 
     415                  END DO 
     416               END DO 
     417            END IF 
     418!$OMP PARALLEL DO schedule(static) private(jk, jj) 
     419            DO jk = 1, jpk 
     420               DO jj = 1, jpj 
     421                  ptab(nlci-jpreci+1:jpi   ,jj,jk) = zland    ! north 
     422               END DO 
     423            END DO 
    406424         ENDIF 
    407425                                          ! North-south cyclic 
    408426         IF ( nbondj == 2 .AND. jperio == 7 )    THEN !* cyclic north south only with no mpp split in latitude 
    409             ptab(:,1 , :) = ptab(:, jpjm1,:) 
    410             ptab(:,jpj,:) = ptab(:,     2,:) 
     427!$OMP PARALLEL DO schedule(static) private(jk, ji) 
     428            DO jk = 1, jpk 
     429               DO ji = 1, jpi 
     430                  ptab(ji,1 , jk) = ptab(ji, jpjm1,jk) 
     431                  ptab(ji,jpj,jk) = ptab(ji,     2,jk) 
     432               END DO 
     433            END DO 
    411434         ELSE   !                                   ! North-South boundaries (closed) 
    412             IF( .NOT. cd_type == 'F' )   ptab(:,     1       :jprecj,:) = zland       ! south except F-point 
    413                                          ptab(:,nlcj-jprecj+1:jpj   ,:) = zland       ! north 
     435            IF( .NOT. cd_type == 'F' )   THEN 
     436!$OMP PARALLEL DO schedule(static) private(jk, ji) 
     437               DO jk = 1, jpk 
     438                  DO ji = 1, jpi 
     439                     ptab(ji,     1       :jprecj,jk) = zland       ! south except F-point 
     440                  END DO 
     441               END DO 
     442            END IF 
     443!$OMP PARALLEL DO schedule(static) private(jk, ji) 
     444            DO jk = 1, jpk 
     445               DO ji = 1, jpi 
     446                  ptab(ji,nlcj-jprecj+1:jpj   ,jk) = zland       ! north 
     447               END DO 
     448            END DO 
    414449         ENDIF 
    415450         ! 
     
    423458      CASE ( -1, 0, 1 )                ! all exept 2 (i.e. close case) 
    424459         iihom = nlci-nreci 
    425          DO jl = 1, jpreci 
    426             zt3ew(:,jl,:,1) = ptab(jpreci+jl,:,:) 
    427             zt3we(:,jl,:,1) = ptab(iihom +jl,:,:) 
     460!$OMP PARALLEL DO schedule(static) private(jk, jj, jl) 
     461         DO jk = 1, jpk 
     462            DO jj = 1, jpj 
     463               DO jl = 1, jpreci 
     464                  zt3ew(jj,jl,jk,1) = ptab(jpreci+jl,jj,jk) 
     465                  zt3we(jj,jl,jk,1) = ptab(iihom +jl,jj,jk) 
     466               END DO 
     467            END DO 
    428468         END DO 
    429469      END SELECT 
     
    455495      SELECT CASE ( nbondi ) 
    456496      CASE ( -1 ) 
    457          DO jl = 1, jpreci 
    458             ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    459          END DO 
    460       CASE ( 0 ) 
    461          DO jl = 1, jpreci 
    462             ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
    463             ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    464          END DO 
    465       CASE ( 1 ) 
    466          DO jl = 1, jpreci 
    467             ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
     497!$OMP PARALLEL DO schedule(static) private(jk, jj, jl) 
     498         DO jk = 1, jpk 
     499            DO jl = 1, jpreci 
     500               DO jj = 1, jpj 
     501                  ptab(iihom+jl,jj,jk) = zt3ew(jj,jl,jk,2) 
     502               END DO 
     503            END DO 
     504         END DO 
     505      CASE ( 0 ) 
     506!$OMP PARALLEL DO schedule(static) private(jk, jj, jl) 
     507         DO jk = 1, jpk 
     508            DO jl = 1, jpreci 
     509               DO jj = 1, jpj 
     510                  ptab(jl      ,jj,jk) = zt3we(jj,jl,jk,2) 
     511                  ptab(iihom+jl,jj,jk) = zt3ew(jj,jl,jk,2) 
     512               END DO 
     513            END DO 
     514         END DO 
     515      CASE ( 1 ) 
     516!$OMP PARALLEL DO schedule(static) private(jk, jj, jl) 
     517         DO jk = 1, jpk 
     518            DO jl = 1, jpreci 
     519               DO jj = 1, jpj 
     520                  ptab(jl      ,jj,jk) = zt3we(jj,jl,jk,2) 
     521               END DO 
     522            END DO 
    468523         END DO 
    469524      END SELECT 
     
    475530      IF( nbondj /= 2 ) THEN      ! Read Dirichlet lateral conditions 
    476531         ijhom = nlcj-nrecj 
    477          DO jl = 1, jprecj 
    478             zt3sn(:,jl,:,1) = ptab(:,ijhom +jl,:) 
    479             zt3ns(:,jl,:,1) = ptab(:,jprecj+jl,:) 
     532!$OMP PARALLEL DO schedule(static) private(jk, ji, jl) 
     533         DO jk = 1, jpk 
     534            DO jl = 1, jprecj 
     535               DO ji = 1, jpi 
     536                  zt3sn(ji,jl,jk,1) = ptab(ji,ijhom +jl,jk) 
     537                  zt3ns(ji,jl,jk,1) = ptab(ji,jprecj+jl,jk) 
     538               END DO 
     539            END DO 
    480540         END DO 
    481541      ENDIF 
     
    507567      SELECT CASE ( nbondj ) 
    508568      CASE ( -1 ) 
    509          DO jl = 1, jprecj 
    510             ptab(:,ijhom+jl,:) = zt3ns(:,jl,:,2) 
    511          END DO 
    512       CASE ( 0 ) 
    513          DO jl = 1, jprecj 
    514             ptab(:,jl      ,:) = zt3sn(:,jl,:,2) 
    515             ptab(:,ijhom+jl,:) = zt3ns(:,jl,:,2) 
    516          END DO 
    517       CASE ( 1 ) 
    518          DO jl = 1, jprecj 
    519             ptab(:,jl,:) = zt3sn(:,jl,:,2) 
     569!$OMP PARALLEL DO schedule(static) private(jk, ji, jl) 
     570         DO jk = 1, jpk 
     571            DO jl = 1, jprecj 
     572               DO ji = 1, jpi 
     573                  ptab(ji,ijhom+jl,jk) = zt3ns(ji,jl,jk,2) 
     574               END DO 
     575            END DO 
     576         END DO 
     577      CASE ( 0 ) 
     578!$OMP PARALLEL DO schedule(static) private(jk, ji, jl) 
     579         DO jk = 1, jpk 
     580            DO jl = 1, jprecj 
     581               DO ji = 1, jpi 
     582                  ptab(ji,jl      ,jk) = zt3sn(ji,jl,jk,2) 
     583                  ptab(ji,ijhom+jl,jk) = zt3ns(ji,jl,jk,2) 
     584               END DO 
     585            END DO 
     586         END DO 
     587      CASE ( 1 ) 
     588!$OMP PARALLEL DO schedule(static) private(jk, ji, jl) 
     589         DO jk = 1, jpk 
     590            DO jl = 1, jprecj 
     591               DO ji = 1, jpi 
     592                  ptab(ji,jl,jk) = zt3sn(ji,jl,jk,2) 
     593               END DO 
     594            END DO 
    520595         END DO 
    521596      END SELECT 
     
    917992      CASE ( -1, 0, 1 )                ! all exept 2 (i.e. close case) 
    918993         iihom = nlci-nreci 
    919          DO jl = 1, jpreci 
    920             zt2ew(:,jl,1) = pt2d(jpreci+jl,:) 
    921             zt2we(:,jl,1) = pt2d(iihom +jl,:) 
     994!$OMP PARALLEL DO schedule(static) private(jj,jl) 
     995         DO jj = 1, jpj 
     996            DO jl = 1, jpreci 
     997               zt2ew(jj,jl,1) = pt2d(jpreci+jl,jj) 
     998               zt2we(jj,jl,1) = pt2d(iihom +jl,jj) 
     999            END DO 
    9221000         END DO 
    9231001      END SELECT 
     
    9491027      SELECT CASE ( nbondi ) 
    9501028      CASE ( -1 ) 
     1029!$OMP PARALLEL DO schedule(static) private(jj,jl) 
    9511030         DO jl = 1, jpreci 
    952             pt2d(iihom+jl,:) = zt2ew(:,jl,2) 
    953          END DO 
    954       CASE ( 0 ) 
     1031            DO jj = 1, jpj 
     1032               pt2d(iihom+jl,jj) = zt2ew(jj,jl,2) 
     1033            END DO 
     1034         END DO 
     1035      CASE ( 0 ) 
     1036!$OMP PARALLEL DO schedule(static) private(jj,jl) 
    9551037         DO jl = 1, jpreci 
    956             pt2d(jl      ,:) = zt2we(:,jl,2) 
    957             pt2d(iihom+jl,:) = zt2ew(:,jl,2) 
    958          END DO 
    959       CASE ( 1 ) 
     1038            DO jj = 1, jpj 
     1039               pt2d(jl      ,jj) = zt2we(jj,jl,2) 
     1040               pt2d(iihom+jl,jj) = zt2ew(jj,jl,2) 
     1041            END DO 
     1042         END DO 
     1043      CASE ( 1 ) 
     1044!$OMP PARALLEL DO schedule(static) private(jj,jl) 
    9601045         DO jl = 1, jpreci 
    961             pt2d(jl      ,:) = zt2we(:,jl,2) 
     1046            DO jj = 1, jpj 
     1047               pt2d(jl      ,jj) = zt2we(jj,jl,2) 
     1048            END DO 
    9621049         END DO 
    9631050      END SELECT 
     
    9701057      IF( nbondj /= 2 ) THEN      ! Read Dirichlet lateral conditions 
    9711058         ijhom = nlcj-nrecj 
     1059!$OMP PARALLEL DO schedule(static) private(ji,jl) 
    9721060         DO jl = 1, jprecj 
    973             zt2sn(:,jl,1) = pt2d(:,ijhom +jl) 
    974             zt2ns(:,jl,1) = pt2d(:,jprecj+jl) 
     1061            DO ji = 1, jpi 
     1062               zt2sn(ji,jl,1) = pt2d(ji,ijhom +jl) 
     1063               zt2ns(ji,jl,1) = pt2d(ji,jprecj+jl) 
     1064            END DO 
    9751065         END DO 
    9761066      ENDIF 
     
    10021092      SELECT CASE ( nbondj ) 
    10031093      CASE ( -1 ) 
     1094!$OMP PARALLEL DO schedule(static) private(ji,jl) 
    10041095         DO jl = 1, jprecj 
    1005             pt2d(:,ijhom+jl) = zt2ns(:,jl,2) 
    1006          END DO 
    1007       CASE ( 0 ) 
     1096            DO ji = 1, jpi 
     1097               pt2d(ji,ijhom+jl) = zt2ns(ji,jl,2) 
     1098            END DO 
     1099         END DO 
     1100      CASE ( 0 ) 
     1101!$OMP PARALLEL DO schedule(static) private(ji,jl) 
    10081102         DO jl = 1, jprecj 
    1009             pt2d(:,jl      ) = zt2sn(:,jl,2) 
    1010             pt2d(:,ijhom+jl) = zt2ns(:,jl,2) 
    1011          END DO 
    1012       CASE ( 1 ) 
     1103            DO ji = 1, jpi 
     1104               pt2d(ji,jl      ) = zt2sn(ji,jl,2) 
     1105               pt2d(ji,ijhom+jl) = zt2ns(ji,jl,2) 
     1106            END DO 
     1107         END DO 
     1108      CASE ( 1 ) 
     1109!$OMP PARALLEL DO schedule(static) private(ji,jl) 
    10131110         DO jl = 1, jprecj 
    1014             pt2d(:,jl      ) = zt2sn(:,jl,2) 
     1111            DO ji = 1, jpi 
     1112               pt2d(ji,jl      ) = zt2sn(ji,jl,2) 
     1113            END DO 
    10151114         END DO 
    10161115      END SELECT 
Note: See TracChangeset for help on using the changeset viewer.