File indexing completed on 2018-03-02 18:36:10 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
0deb8b4619 Jean*0001 #include "PACKAGES_CONFIG.h"
048ce7bdb7 Chri*0002 #include "CPP_EEOPTIONS.h"
0003
4c563c2ee9 Chri*0004
0005
0006
0007
048ce7bdb7 Chri*0008 SUBROUTINE INI_COMMUNICATION_PATTERNS( myThid )
4c563c2ee9 Chri*0009
0010
0deb8b4619 Jean*0011
0012
4c563c2ee9 Chri*0013
0deb8b4619 Jean*0014
0015
0016
4c563c2ee9 Chri*0017
048ce7bdb7 Chri*0018
4c563c2ee9 Chri*0019
af17b772b4 Jean*0020 IMPLICIT NONE
048ce7bdb7 Chri*0021
0022 #include "SIZE.h"
0023 #include "EEPARAMS.h"
0024 #include "EESUPPORT.h"
0025 #include "EXCH.h"
0026
4c563c2ee9 Chri*0027
048ce7bdb7 Chri*0028
4c563c2ee9 Chri*0029
048ce7bdb7 Chri*0030 INTEGER myThid
0031
4c563c2ee9 Chri*0032
048ce7bdb7 Chri*0033
4c563c2ee9 Chri*0034
0035
0036
0037
0038
0039
0040
0041
0042
0deb8b4619 Jean*0043
4c563c2ee9 Chri*0044
0045
0046
0047
9333d0f1ff Patr*0048
4c563c2ee9 Chri*0049
0050
048ce7bdb7 Chri*0051 INTEGER bi0(nPx)
0052 INTEGER bj0(nPy)
e5bdfc29a0 Patr*0053 INTEGER bi, bj, picnt, pjcnt
048ce7bdb7 Chri*0054 INTEGER pxW, pxE, pyN, pyS
0055 INTEGER procW, procE, procN, procS
0056 INTEGER totalTileCount
0057 INTEGER tagW0, tagE0, tagS0, tagN0, theTag
0058 INTEGER biE, biW, bjN, bjS
0059 INTEGER thePx, thePy, theBj, theBi
4c563c2ee9 Chri*0060
048ce7bdb7 Chri*0061
0062
0063
0064
0065
0deb8b4619 Jean*0066
048ce7bdb7 Chri*0067
0068
0069
0070
0071
0072
0073
0074
0075
0deb8b4619 Jean*0076
048ce7bdb7 Chri*0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0deb8b4619 Jean*0087
048ce7bdb7 Chri*0088
0089
0090
0091
0092
9333d0f1ff Patr*0093 DO picnt = 1, nPx
0094 bi0(picnt) = picnt
048ce7bdb7 Chri*0095 ENDDO
9333d0f1ff Patr*0096 DO pjcnt = 1, nPy
0097 bj0(pjcnt) = pjcnt
048ce7bdb7 Chri*0098 ENDDO
0099 DO bj=myByLo(myThid),myByHi(myThid)
0100 DO bi=myBxLo(myThid),myBxHi(myThid)
0101
d171732194 Alis*0102
048ce7bdb7 Chri*0103 thePx = myPx
0104 thePy = myPy
0105 theBj = bj
0106 theBi = bi
0107 tileNo(bi,bj) =
0deb8b4619 Jean*0108 & ((thePy-1)*nSy+theBj-1)*nSx*nPx
048ce7bdb7 Chri*0109 & + (thePx-1)*nSx
0110 & + theBi
0111
0112 biW = bi-1
0113 pxW = myPx
0114 procW = myPid
0115 IF ( biW .LT. 1 ) THEN
0116 biW = nSx
0117 pxW = myPx-1
0118 procW = pidW
0119 IF ( pxW .LT. 1 ) pxW = nPx
0120 ENDIF
d171732194 Alis*0121
048ce7bdb7 Chri*0122 thePx = pxW
0123 thePy = myPy
0124 theBj = bj
0125 theBi = biW
0deb8b4619 Jean*0126 tileNoW (bi,bj) =
048ce7bdb7 Chri*0127 & ((thePy-1)*nSy+theBj-1)*nSx*nPx
0128 & + (thePx-1)*nSx
0129 & + theBi
0deb8b4619 Jean*0130 #ifdef ALLOW_NEST_CHILD
0131 #ifndef ALLOW_USE_MPI
0132 tileNoW (bi,bj) = NULL_TILE
0133 #endif
0134 #endif
048ce7bdb7 Chri*0135 tilePidW(bi,bj) = procW
0136 tileBiW (bi,bj) = biW
0deb8b4619 Jean*0137 tileBjW (bi,bj) = bj
048ce7bdb7 Chri*0138
0139 biE = bi+1
0140 pxE = myPx
0141 procE = myPid
0142 IF ( biE .GT. nSx ) THEN
0143 biE = 1
0144 pxE = myPx+1
0145 procE = pidE
0146 IF ( pxE .GT. nPx ) pxE = 1
0147 ENDIF
d171732194 Alis*0148
048ce7bdb7 Chri*0149 thePx = pxE
0150 thePy = myPy
0151 theBi = biE
0152 theBj = bj
0deb8b4619 Jean*0153 tileNoE(bi,bj) =
048ce7bdb7 Chri*0154 & ((thePy-1)*nSy+theBj-1)*nSx*nPx
0155 & + (thePx-1)*nSx
0156 & + theBi
0deb8b4619 Jean*0157 #ifdef ALLOW_NEST_CHILD
0158 #ifndef ALLOW_USE_MPI
0159 tileNoE (bi,bj) = NULL_TILE
0160 #endif
0161 #endif
048ce7bdb7 Chri*0162 tilePidE(bi,bj) = procE
0163 tileBiE (bi,bj) = biE
0deb8b4619 Jean*0164 tileBjE (bi,bj) = bj
048ce7bdb7 Chri*0165
0166 bjN = bj+1
0167 pyN = myPy
0168 procN = myPid
0169 IF ( bjN .GT. nSy ) THEN
0170 bjN = 1
0171 pyN = myPy+1
0172 procN = pidN
0173 IF ( pyN .GT. nPy ) pyN = 1
0174 ENDIF
d171732194 Alis*0175
048ce7bdb7 Chri*0176 thePx = myPx
0deb8b4619 Jean*0177 thePy = pyN
048ce7bdb7 Chri*0178 theBi = bi
0179 theBj = bjN
0180 tileNoN(bi,bj) =
0181 & ((thePy-1)*nSy+theBj-1)*nSx*nPx
0182 & + (thePx-1)*nSx
0183 & + theBi
0184 tilePidN(bi,bj) = procN
0185 tileBiN(bi,bj) = bi
0186 tileBjN(bi,bj) = bjN
0187
0188 bjS = bj-1
0189 pyS = myPy
0190 procS = myPid
0191 IF ( bjS .LT. 1 ) THEN
0192 bjS = nSy
0193 pyS = pyS-1
0194 procS = pidS
0195 IF ( pyS .LT. 1 ) pyS = nPy
0196 ENDIF
d171732194 Alis*0197
048ce7bdb7 Chri*0198 thePx = myPx
0199 thePy = pyS
0200 theBi = bi
0201 theBj = bjS
0deb8b4619 Jean*0202 tileNoS(bi,bj) =
048ce7bdb7 Chri*0203 & ((thePy-1)*nSy+theBj-1)*nSx*nPx
0204 & + (thePx-1)*nSx
0205 & + theBi
0206 tilePidS(bi,bj) = procS
0207 tileBiS(bi,bj) = bi
0208 tileBjS(bi,bj) = bjS
0209 ENDDO
0210 ENDDO
0211
0212
0213 totalTileCount = nSx*nSy*nPx*nPy
0214
0215
0deb8b4619 Jean*0216
048ce7bdb7 Chri*0217
0218
0219
0220
0221
0222
0223 TagW0=1
0224 TagE0=2
0225 TagN0=3
0226 TagS0=4
0227 DO bj=myByLo(myThid),myByHi(myThid)
0228 DO bi=myBxLo(myThid),myBxHi(myThid)
0229
0230
0231 theTag = TagW0*totalTileCount+tileNo(bi,bj)-1
0232 tileTagSendW(bi,bj) = theTag
0233
0234 theTag = TagE0*totalTileCount+tileNo(bi,bj)-1
0235 tileTagSendE(bi,bj) = theTag
0236
0237 theTag = TagN0*totalTileCount+tileNo(bi,bj)-1
0238 tileTagSendN(bi,bj) = theTag
0239
0240 theTag = TagS0*totalTileCount+tileNo(bi,bj)-1
0241 tileTagSendS(bi,bj) = theTag
0242
0243
0244 theTag = TagW0*totalTileCount+tileNoE(bi,bj)-1
0245 tileTagRecvE(bi,bj) = theTag
0246
0247 theTag = TagE0*totalTileCount+tileNoW(bi,bj)-1
0248 tileTagRecvW(bi,bj) = theTag
0249
0250 theTag = TagS0*totalTileCount+tileNoN(bi,bj)-1
0251 tileTagRecvN(bi,bj) = theTag
0252
0253 theTag = TagN0*totalTileCount+tileNoS(bi,bj)-1
0254 tileTagRecvS(bi,bj) = theTag
0255 ENDDO
0256 ENDDO
0257
af17b772b4 Jean*0258
0deb8b4619 Jean*0259
af17b772b4 Jean*0260
0deb8b4619 Jean*0261
0262
0263
048ce7bdb7 Chri*0264
0265 DO bj=myByLo(myThid),myByHi(myThid)
0266 DO bi=myBxLo(myThid),myBxHi(myThid)
0267
0268 IF ( tileNoW(bi,bj) .EQ. NULL_TILE ) THEN
0269 tileCommModeW(bi,bj) = COMM_NONE
0270 ELSE
0271 IF ( myPid .EQ. tilePidW(bi,bj) ) THEN
0272 tileCommModeW(bi,bj) = COMM_PUT
0273 ELSE
0274 tileCommModeW(bi,bj) = COMM_MSG
0275 ENDIF
0276 ENDIF
0277
0278 IF ( tileNoE(bi,bj) .EQ. NULL_TILE ) THEN
0279 tileCommModeE(bi,bj) = COMM_NONE
0280 ELSE
0281 IF ( myPid .EQ. tilePidE(bi,bj) ) THEN
0282 tileCommModeE(bi,bj) = COMM_PUT
0283 ELSE
0284 tileCommModeE(bi,bj) = COMM_MSG
0285 ENDIF
0286 ENDIF
0287
0288 IF ( tileNoS(bi,bj) .EQ. NULL_TILE ) THEN
0289 tileCommModeS(bi,bj) = COMM_NONE
0290 ELSE
0291 IF ( myPid .EQ. tilePidS(bi,bj) ) THEN
0292 tileCommModeS(bi,bj) = COMM_PUT
0293 ELSE
0294 tileCommModeS(bi,bj) = COMM_MSG
0295 ENDIF
0296 ENDIF
0297
0298 IF ( tileNoN(bi,bj) .EQ. NULL_TILE ) THEN
0299 tileCommModeN(bi,bj) = COMM_NONE
0300 ELSE
0301 IF ( myPid .EQ. tilePidN(bi,bj) ) THEN
0302 tileCommModeN(bi,bj) = COMM_PUT
0303 ELSE
0304 tileCommModeN(bi,bj) = COMM_MSG
0305 ENDIF
0306 ENDIF
0deb8b4619 Jean*0307
048ce7bdb7 Chri*0308 ENDDO
0309 ENDDO
0310
0311
0312 DO bj=myByLo(myThid),myByHi(myThid)
0313 DO bi=myBxLo(myThid),myBxHi(myThid)
0314 exchNReqsX(1,bi,bj) = 0
0315 exchNReqsY(1,bi,bj) = 0
0316 ENDDO
0317 ENDDO
0318
0319 RETURN
0320 END