35 |
EXTERNAL ILNBLNK |
EXTERNAL ILNBLNK |
36 |
|
|
37 |
C == Local variables == |
C == Local variables == |
38 |
INTEGER nt_perProc, thisProc |
INTEGER thisProc |
39 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
40 |
CHARACTER*(MAX_LEN_FNAM) fName |
CHARACTER*(MAX_LEN_FNAM) fName |
41 |
c INTEGER W2_oUnit |
c INTEGER W2_oUnit |
42 |
INTEGER stdUnit, iLen |
INTEGER stdUnit, iLen |
43 |
CHARACTER commFlag |
CHARACTER commFlag |
44 |
INTEGER myTileId |
INTEGER myTileId |
45 |
INTEGER myThid, I, J, II |
INTEGER myThid, I, J |
46 |
INTEGER np, jp, bi, bj |
INTEGER np, ii, jj, bi, bj |
47 |
INTEGER iErr, tNx, tNy |
INTEGER iErr, tNx, tNy |
48 |
|
|
49 |
C Set dummy myThid value (we are not multi-threaded here) |
C Set dummy myThid value (we are not multi-threaded here) |
69 |
DO J = 1,W2_maxNeighbours |
DO J = 1,W2_maxNeighbours |
70 |
exch2_neighbourId(J,I) = 0 |
exch2_neighbourId(J,I) = 0 |
71 |
exch2_opposingSend(J,I) = 0 |
exch2_opposingSend(J,I) = 0 |
72 |
DO II = 1,4 |
DO ii = 1,4 |
73 |
exch2_pij(II,J,I) = 0 |
exch2_pij(ii,J,I) = 0 |
74 |
ENDDO |
ENDDO |
75 |
exch2_oi(J,I) = 0 |
exch2_oi(J,I) = 0 |
76 |
exch2_oj(J,I) = 0 |
exch2_oj(J,I) = 0 |
112 |
C Fill also W2_procTileList for Single-CPU-IO. |
C Fill also W2_procTileList for Single-CPU-IO. |
113 |
|
|
114 |
C Number of tiles I handle is nSx*nSy |
C Number of tiles I handle is nSx*nSy |
|
nt_perProc = nSx*nSy |
|
115 |
thisProc = 1 |
thisProc = 1 |
116 |
#ifdef ALLOW_USE_MPI |
#ifdef ALLOW_USE_MPI |
117 |
thisProc = 1+myPid |
thisProc = 1+myPid |
119 |
J = 0 |
J = 0 |
120 |
DO I=1,nTiles |
DO I=1,nTiles |
121 |
IF ( exch2_myFace(I) .NE. 0 ) THEN |
IF ( exch2_myFace(I) .NE. 0 ) THEN |
122 |
np = 1 + J/nt_perProc |
C-- old ordering (makes no difference if nSy*nPy=1 ) |
123 |
jp = MOD(J,nt_perProc) |
c np = 1 + J/(nSx*nSy) |
124 |
bj = 1 + jp/nSx |
c jj = MOD(J,nSx*nSy) |
125 |
bi = 1 + MOD(jp,nSx) |
c bj = 1 + jj/nSx |
126 |
|
c bi = 1 + MOD(jj,nSx) |
127 |
|
C-- new ordering: for single sub-domain (nFacets=1) case, match default setting |
128 |
|
jj = J/(nSx*nPx) |
129 |
|
ii = MOD(J,nSx*nPx) |
130 |
|
C-- natural way to order processors: |
131 |
|
c np = 1 + ii/nSx + (jj/nSy)*nPx |
132 |
|
C-- switch processor order to match MPI_CART set-up |
133 |
|
np = 1 + jj/nSy + (ii/nSx)*nPy |
134 |
|
bj = 1 + MOD(jj,nSy) |
135 |
|
bi = 1 + MOD(ii,nSx) |
136 |
|
C-- |
137 |
exch2_tProc(I) = np |
exch2_tProc(I) = np |
138 |
W2_procTileList(bi,bj,np) = I |
W2_procTileList(bi,bj,np) = I |
139 |
IF ( np.EQ.thisProc ) W2_myTileList(bi,bj) = I |
IF ( np.EQ.thisProc ) W2_myTileList(bi,bj) = I |
186 |
CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_RIGHT, myThid ) |
CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_RIGHT, myThid ) |
187 |
DO J=1,exch2_nNeighbours(myTileId) |
DO J=1,exch2_nNeighbours(myTileId) |
188 |
commFlag = 'M' |
commFlag = 'M' |
189 |
DO II=1,nSy |
DO jj=1,nSy |
190 |
DO I=1,nSx |
DO ii=1,nSx |
191 |
IF ( W2_myTileList(I,II).EQ.exch2_neighbourId(J,myTileId) ) |
IF ( W2_myTileList(ii,jj).EQ.exch2_neighbourId(J,myTileId) ) |
192 |
& commFlag = 'P' |
& commFlag = 'P' |
193 |
ENDDO |
ENDDO |
194 |
ENDDO |
ENDDO |