Changeset 4792 for branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
- Timestamp:
- 2014-09-26T13:04:47+02:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
r4328 r4792 170 170 INTEGER , INTENT(in ) :: kumnam_ref ! logical unit for reference namelist 171 171 INTEGER , INTENT(in ) :: kumnam_cfg ! logical unit for configuration namelist 172 INTEGER , INTENT(in 172 INTEGER , INTENT(inout) :: kumond ! logical unit for namelist output 173 173 INTEGER , INTENT(inout) :: kstop ! stop indicator 174 174 INTEGER, OPTIONAL , INTENT(in ) :: localComm … … 193 193 READ ( kumnam_cfg, nammpp, IOSTAT = ios, ERR = 902 ) 194 194 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nammpp in configuration namelist', lwp ) 195 WRITE(kumond, nammpp)196 195 197 196 ! ! control print … … 293 292 CALL mpi_comm_size( mpi_comm_opa, mppsize, ierr ) 294 293 mynode = mpprank 294 295 IF( mynode == 0 ) THEN 296 CALL ctl_opn( kumond, 'output.namelist.dyn', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE. , 1 ) 297 WRITE(kumond, nammpp) 298 ENDIF 295 299 ! 296 300 CALL MPI_OP_CREATE(DDPDD_MPI, .TRUE., MPI_SUMDD, ierr) … … 2022 2026 ijpjm1 = 3 2023 2027 ! 2028 znorthloc(:,:,:) = 0 2024 2029 DO jk = 1, jpk 2025 2030 DO jj = nlcj - ijpj +1, nlcj ! put in xnorthloc the last 4 jlines of pt3d … … 2032 2037 itaille = jpi * jpk * ijpj 2033 2038 2034 2035 2039 IF ( l_north_nogather ) THEN 2036 2040 ! 2037 2041 ztabr(:,:,:) = 0 2042 ztabl(:,:,:) = 0 2043 2038 2044 DO jk = 1, jpk 2039 2045 DO jj = nlcj-ijpj+1, nlcj ! First put local values into the global array 2040 2046 ij = jj - nlcj + ijpj 2041 DO ji = 1, nlci2047 DO ji = nfsloop, nfeloop 2042 2048 ztabl(ji,ij,jk) = pt3d(ji,jj,jk) 2043 2049 END DO … … 2046 2052 2047 2053 DO jr = 1,nsndto 2048 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 2049 2057 END DO 2050 2058 DO jr = 1,nsndto 2051 iproc = isendto(jr) 2052 ildi = nldit (iproc) 2053 ilei = nleit (iproc) 2054 iilb = nimppt(isendto(jr)) - nimppt(isendto(1)) 2055 IF(isendto(jr) .ne. narea) THEN 2056 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) 2057 2067 DO jk = 1, jpk 2058 2068 DO jj = 1, ijpj 2059 DO ji = 1, ilei2069 DO ji = ildi, ilei 2060 2070 ztabr(iilb+ji,jj,jk) = zfoldwk(ji,jj,jk) 2061 2071 END DO 2062 2072 END DO 2063 2073 END DO 2064 ELSE 2074 ELSE IF (iproc .eq. (narea-1)) THEN 2065 2075 DO jk = 1, jpk 2066 2076 DO jj = 1, ijpj 2067 DO ji = 1, ilei2077 DO ji = ildi, ilei 2068 2078 ztabr(iilb+ji,jj,jk) = pt3d(ji,nlcj-ijpj+jj,jk) 2069 2079 END DO … … 2074 2084 IF (l_isend) THEN 2075 2085 DO jr = 1,nsndto 2076 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 2077 2089 END DO 2078 2090 ENDIF 2079 2091 CALL mpp_lbc_nfd( ztabl, ztabr, cd_type, psgn ) ! North fold boundary condition 2080 !2081 2092 DO jk = 1, jpk 2082 2093 DO jj = nlcj-ijpj+1, nlcj ! Scatter back to pt3d … … 2126 2137 ! Either way the array may be folded by lbc_nfd and the result for the span of 2127 2138 ! this domain will be identical. 2128 !2129 CALL lbc_nfd( ztab, cd_type, psgn ) ! North fold boundary condition2130 !2131 DO jk = 1, jpk2132 DO jj = nlcj-ijpj+1, nlcj ! Scatter back to pt3d2133 ij = jj - nlcj + ijpj2134 DO ji= 1, nlci2135 pt3d(ji,jj,jk) = ztab(ji+nimpp-1,ij,jk)2136 END DO2137 END DO2138 END DO2139 2139 ! 2140 2140 DEALLOCATE( ztab, znorthloc, zfoldwk, znorthgloio ) … … 2197 2197 ! 2198 2198 ztabr(:,:) = 0 2199 ztabl(:,:) = 0 2200 2199 2201 DO jj = nlcj-ijpj+1, nlcj ! First put local values into the global array 2200 2202 ij = jj - nlcj + ijpj 2201 DO ji = 1, nlci2203 DO ji = nfsloop, nfeloop 2202 2204 ztabl(ji,ij) = pt2d(ji,jj) 2203 2205 END DO … … 2205 2207 2206 2208 DO jr = 1,nsndto 2207 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 2208 2212 END DO 2209 2213 DO jr = 1,nsndto 2210 iproc = isendto(jr) 2211 ildi = nldit (iproc) 2212 ilei = nleit (iproc) 2213 iilb = nimppt(isendto(jr)) - nimppt(isendto(1)) 2214 IF(isendto(jr) .ne. narea) THEN 2215 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) 2216 2222 DO jj = 1, ijpj 2217 DO ji = 1, ilei2223 DO ji = ildi, ilei 2218 2224 ztabr(iilb+ji,jj) = zfoldwk(ji,jj) 2219 2225 END DO 2220 2226 END DO 2221 ELSE 2227 ELSE IF (iproc .eq. (narea-1)) THEN 2222 2228 DO jj = 1, ijpj 2223 DO ji = 1, ilei2229 DO ji = ildi, ilei 2224 2230 ztabr(iilb+ji,jj) = pt2d(ji,nlcj-ijpj+jj) 2225 2231 END DO … … 2229 2235 IF (l_isend) THEN 2230 2236 DO jr = 1,nsndto 2231 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 2232 2240 END DO 2233 2241 ENDIF … … 2924 2932 IF( PRESENT( localComm ) .OR. .NOT.PRESENT( localComm ) ) function_value = 0 2925 2933 IF( .FALSE. ) ldtxt(:) = 'never done' 2934 CALL ctl_opn( kumond, 'output.namelist.dyn', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE. , 1 ) 2926 2935 END FUNCTION mynode 2927 2936
Note: See TracChangeset
for help on using the changeset viewer.