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 4921 for branches/2014/dev_r4650_UKMO13_CICE_changes_take2/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90 – NEMO

Ignore:
Timestamp:
2014-11-28T14:59:01+01:00 (9 years ago)
Author:
timgraham
Message:

merged with revision 4879 of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO13_CICE_changes_take2/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90

    r4645 r4921  
    20262026      ijpjm1 = 3 
    20272027      ! 
     2028      znorthloc(:,:,:) = 0 
    20282029      DO jk = 1, jpk 
    20292030         DO jj = nlcj - ijpj +1, nlcj          ! put in xnorthloc the last 4 jlines of pt3d 
     
    20362037      itaille = jpi * jpk * ijpj 
    20372038 
    2038  
    20392039      IF ( l_north_nogather ) THEN 
    20402040         ! 
    20412041        ztabr(:,:,:) = 0 
     2042        ztabl(:,:,:) = 0 
     2043 
    20422044        DO jk = 1, jpk 
    20432045           DO jj = nlcj-ijpj+1, nlcj          ! First put local values into the global array 
    20442046              ij = jj - nlcj + ijpj 
    2045               DO ji = 1, nlci 
     2047              DO ji = nfsloop, nfeloop 
    20462048                 ztabl(ji,ij,jk) = pt3d(ji,jj,jk) 
    20472049              END DO 
     
    20502052 
    20512053         DO jr = 1,nsndto 
    2052             IF (isendto(jr) .ne. narea) CALL mppsend( 5, znorthloc, itaille, isendto(jr)-1, ml_req_nf(jr) ) 
     2054            IF ((nfipproc(isendto(jr),jpnj) .ne. (narea-1)) .and. (nfipproc(isendto(jr),jpnj) .ne. -1)) THEN 
     2055              CALL mppsend( 5, znorthloc, itaille, nfipproc(isendto(jr),jpnj), ml_req_nf(jr) ) 
     2056            ENDIF 
    20532057         END DO 
    20542058         DO jr = 1,nsndto 
    2055             iproc = isendto(jr) 
    2056             ildi = nldit (iproc) 
    2057             ilei = nleit (iproc) 
    2058             iilb = nimppt(isendto(jr)) - nimppt(isendto(1)) 
    2059             IF(isendto(jr) .ne. narea) THEN 
    2060               CALL mpprecv(5, zfoldwk, itaille, isendto(jr)-1) 
     2059            iproc = nfipproc(isendto(jr),jpnj) 
     2060            IF(iproc .ne. -1) THEN 
     2061               ilei = nleit (iproc+1) 
     2062               ildi = nldit (iproc+1) 
     2063               iilb = nfiimpp(isendto(jr),jpnj) - nfiimpp(isendto(1),jpnj) 
     2064            ENDIF 
     2065            IF((iproc .ne. (narea-1)) .and. (iproc .ne. -1)) THEN 
     2066              CALL mpprecv(5, zfoldwk, itaille, iproc) 
    20612067              DO jk = 1, jpk 
    20622068                 DO jj = 1, ijpj 
    2063                     DO ji = 1, ilei 
     2069                    DO ji = ildi, ilei 
    20642070                       ztabr(iilb+ji,jj,jk) = zfoldwk(ji,jj,jk) 
    20652071                    END DO 
    20662072                 END DO 
    20672073              END DO 
    2068            ELSE 
     2074           ELSE IF (iproc .eq. (narea-1)) THEN 
    20692075              DO jk = 1, jpk 
    20702076                 DO jj = 1, ijpj 
    2071                     DO ji = 1, ilei 
     2077                    DO ji = ildi, ilei 
    20722078                       ztabr(iilb+ji,jj,jk) = pt3d(ji,nlcj-ijpj+jj,jk) 
    20732079                    END DO 
     
    20782084         IF (l_isend) THEN 
    20792085            DO jr = 1,nsndto 
    2080                IF (isendto(jr) .ne. narea) CALL mpi_wait(ml_req_nf(jr), ml_stat, ml_err) 
     2086               IF ((nfipproc(isendto(jr),jpnj) .ne. (narea-1)) .and. (nfipproc(isendto(jr),jpnj) .ne. -1)) THEN 
     2087                  CALL mpi_wait(ml_req_nf(jr), ml_stat, ml_err) 
     2088               ENDIF     
    20812089            END DO 
    20822090         ENDIF 
    20832091         CALL mpp_lbc_nfd( ztabl, ztabr, cd_type, psgn )   ! North fold boundary condition 
    2084          ! 
    20852092         DO jk = 1, jpk 
    20862093            DO jj = nlcj-ijpj+1, nlcj             ! Scatter back to pt3d 
     
    21902197         ! 
    21912198         ztabr(:,:) = 0 
     2199         ztabl(:,:) = 0 
     2200 
    21922201         DO jj = nlcj-ijpj+1, nlcj          ! First put local values into the global array 
    21932202            ij = jj - nlcj + ijpj 
    2194             DO ji = 1, nlci 
     2203              DO ji = nfsloop, nfeloop 
    21952204               ztabl(ji,ij) = pt2d(ji,jj) 
    21962205            END DO 
     
    21982207 
    21992208         DO jr = 1,nsndto 
    2200             IF (isendto(jr) .ne. narea) CALL mppsend(5, znorthloc, itaille, isendto(jr)-1, ml_req_nf(jr)) 
     2209            IF ((nfipproc(isendto(jr),jpnj) .ne. (narea-1)) .and. (nfipproc(isendto(jr),jpnj) .ne. -1)) THEN 
     2210               CALL mppsend(5, znorthloc, itaille, nfipproc(isendto(jr),jpnj), ml_req_nf(jr)) 
     2211            ENDIF 
    22012212         END DO 
    22022213         DO jr = 1,nsndto 
    2203             iproc = isendto(jr) 
    2204             ildi = nldit (iproc) 
    2205             ilei = nleit (iproc) 
    2206             iilb = nimppt(isendto(jr)) - nimppt(isendto(1)) 
    2207             IF(isendto(jr) .ne. narea) THEN 
    2208               CALL mpprecv(5, zfoldwk, itaille, isendto(jr)-1) 
     2214            iproc = nfipproc(isendto(jr),jpnj) 
     2215            IF(iproc .ne. -1) THEN 
     2216               ilei = nleit (iproc+1) 
     2217               ildi = nldit (iproc+1) 
     2218               iilb = nfiimpp(isendto(jr),jpnj) - nfiimpp(isendto(1),jpnj) 
     2219            ENDIF 
     2220            IF((iproc .ne. (narea-1)) .and. (iproc .ne. -1)) THEN 
     2221              CALL mpprecv(5, zfoldwk, itaille, iproc) 
    22092222              DO jj = 1, ijpj 
    2210                  DO ji = 1, ilei 
     2223                 DO ji = ildi, ilei 
    22112224                    ztabr(iilb+ji,jj) = zfoldwk(ji,jj) 
    22122225                 END DO 
    22132226              END DO 
    2214             ELSE 
     2227            ELSE IF (iproc .eq. (narea-1)) THEN 
    22152228              DO jj = 1, ijpj 
    2216                  DO ji = 1, ilei 
     2229                 DO ji = ildi, ilei 
    22172230                    ztabr(iilb+ji,jj) = pt2d(ji,nlcj-ijpj+jj) 
    22182231                 END DO 
     
    22222235         IF (l_isend) THEN 
    22232236            DO jr = 1,nsndto 
    2224                IF (isendto(jr) .ne. narea) CALL mpi_wait(ml_req_nf(jr), ml_stat, ml_err) 
     2237               IF ((nfipproc(isendto(jr),jpnj) .ne. (narea-1)) .and. (nfipproc(isendto(jr),jpnj) .ne. -1)) THEN 
     2238                  CALL mpi_wait(ml_req_nf(jr), ml_stat, ml_err) 
     2239               ENDIF 
    22252240            END DO 
    22262241         ENDIF 
Note: See TracChangeset for help on using the changeset viewer.