28 |
#include "W2_EXCH2_PARAMS.h" |
#include "W2_EXCH2_PARAMS.h" |
29 |
CEOP |
CEOP |
30 |
|
|
31 |
|
C !FUNCTIONS: |
32 |
|
INTEGER ILNBLNK |
33 |
|
EXTERNAL ILNBLNK |
34 |
|
|
35 |
C == Local variables == |
C == Local variables == |
36 |
INTEGER nt_perProc, thisProc |
INTEGER nt_perProc, thisProc |
37 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
38 |
|
CHARACTER*(MAX_LEN_FNAM) fName |
39 |
|
INTEGER stdUnit, W2_oUnit, iLen |
40 |
CHARACTER commFlag |
CHARACTER commFlag |
41 |
INTEGER myTileId |
INTEGER myTileId |
42 |
INTEGER myThid, I, J, II, np, jp |
INTEGER myThid, I, J, II, np, jp |
43 |
INTEGER iErr, tNx, tNy |
INTEGER iErr, tNx, tNy |
|
INTEGER pRank |
|
44 |
|
|
45 |
C Set dummy myThid value (we are not multi-threaded here) |
C Set dummy myThid value (we are not multi-threaded here) |
46 |
myThid = 1 |
myThid = 1 |
76 |
exch2_jHi(J,I) = 0 |
exch2_jHi(J,I) = 0 |
77 |
ENDDO |
ENDDO |
78 |
ENDDO |
ENDDO |
79 |
|
C Initialise parameters from EXCH2_PARAMS common blocks |
80 |
|
W2_oUnit = standardMessageUnit |
81 |
|
|
82 |
|
C Set W2-EXCH2 parameters |
83 |
|
c CALL W2_EXCH2_READPARMS |
84 |
|
c W2_oUnit = -1 |
85 |
|
|
86 |
|
stdUnit = standardMessageUnit |
87 |
|
WRITE(msgBuf,'(A)') '===== Start setting W2 TOPOLOGY:' |
88 |
|
CALL PRINT_MESSAGE( msgBuf, stdUnit, SQUEEZE_RIGHT, myThid ) |
89 |
|
|
90 |
|
C Open message output-file (if needed) |
91 |
|
IF ( W2_oUnit.LT.0 ) THEN |
92 |
|
WRITE(fName,'(A,I4.4,A)') |
93 |
|
& 'w2_tile_topology.',myProcId,'.log' |
94 |
|
iLen = ILNBLNK(fName) |
95 |
|
CALL MDSFINDUNIT( W2_oUnit, myThid ) |
96 |
|
OPEN( W2_oUnit, file=fName(1:iLen), |
97 |
|
& status='unknown', form='formatted') |
98 |
|
c WRITE(msgBuf,'(2AA)') ' repport on file: ', fName(1:iLen) |
99 |
|
WRITE(msgBuf,'(2AA)') ' write to log-file: ', fName(1:iLen) |
100 |
|
CALL PRINT_MESSAGE( msgBuf, stdUnit, SQUEEZE_RIGHT, myThid ) |
101 |
|
ENDIF |
102 |
|
|
103 |
C Define topology for every tile |
C Define topology for every tile |
104 |
CALL W2_E2SETUP |
CALL W2_E2SETUP |
160 |
ENDIF |
ENDIF |
161 |
|
|
162 |
C-- Print tiles connection for this process and set myCommonFlag : |
C-- Print tiles connection for this process and set myCommonFlag : |
163 |
WRITE(msgBuf,'(A)') '===== W2 TILE TOPLOGY =====' |
WRITE(msgBuf,'(A)') '===== W2 TILE TOPOLOGY =====' |
164 |
CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_BOTH, myThid ) |
|
& SQUEEZE_BOTH,myThid) |
|
165 |
DO I=1,nSx |
DO I=1,nSx |
166 |
myTileId = W2_myTileList(I) |
myTileId = W2_myTileList(I) |
167 |
WRITE(msgBuf,'(A,I4)') ' TILE: ', myTileId |
WRITE(msgBuf,'(A,I4)') ' TILE: ', myTileId |
168 |
CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_RIGHT, myThid ) |
|
& SQUEEZE_RIGHT,myThid) |
|
169 |
DO J=1,exch2_nNeighbours(myTileId) |
DO J=1,exch2_nNeighbours(myTileId) |
170 |
commFlag = 'M' |
commFlag = 'M' |
171 |
DO II=1,nSx |
DO II=1,nSx |
177 |
& ' NEIGHBOUR ',J,' = TILE ', |
& ' NEIGHBOUR ',J,' = TILE ', |
178 |
& exch2_neighbourId(J,myTileId), ' Comm = MSG', |
& exch2_neighbourId(J,myTileId), ' Comm = MSG', |
179 |
& ' ( PROC = ',exch2_tProc(exch2_neighbourId(J,myTileId)),')' |
& ' ( PROC = ',exch2_tProc(exch2_neighbourId(J,myTileId)),')' |
180 |
CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_RIGHT, myThid ) |
|
& SQUEEZE_RIGHT,myThid) |
|
181 |
ENDIF |
ENDIF |
182 |
IF ( commFlag .EQ. 'P' ) THEN |
IF ( commFlag .EQ. 'P' ) THEN |
183 |
WRITE(msgBuf,'(A,I4,A,I4,A,A,I4,A)') |
WRITE(msgBuf,'(A,I4,A,I4,A,A,I4,A)') |
184 |
& ' NEIGHBOUR ',J,' = TILE ', |
& ' NEIGHBOUR ',J,' = TILE ', |
185 |
& exch2_neighbourId(J,myTileId), ' Comm = PUT', |
& exch2_neighbourId(J,myTileId), ' Comm = PUT', |
186 |
& ' ( PROC = ',exch2_tProc(exch2_neighbourId(J,myTileId)),')' |
& ' ( PROC = ',exch2_tProc(exch2_neighbourId(J,myTileId)),')' |
187 |
CALL PRINT_MESSAGE(msgBuf,standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_RIGHT, myThid ) |
|
& SQUEEZE_RIGHT,myThid) |
|
188 |
ENDIF |
ENDIF |
189 |
W2_myCommFlag(J,I) = commFlag |
W2_myCommFlag(J,I) = commFlag |
190 |
ENDDO |
ENDDO |
202 |
c e2FillValue_R8 = 1.d+20 |
c e2FillValue_R8 = 1.d+20 |
203 |
|
|
204 |
C Print out the topology communication schedule |
C Print out the topology communication schedule |
205 |
CALL W2_PRINT_COMM_SEQUENCE |
CALL W2_PRINT_COMM_SEQUENCE( W2_oUnit ) |
206 |
|
|
207 |
|
C Close message output-file (if needed) |
208 |
|
IF ( W2_oUnit.NE.standardMessageUnit ) THEN |
209 |
|
WRITE(msgBuf,'(A)') '=== End TOPOLOGY report ===' |
210 |
|
CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_BOTH, myThid ) |
211 |
|
CLOSE( W2_oUnit ) |
212 |
|
ENDIF |
213 |
|
WRITE(msgBuf,'(A)') '===== setting W2 TOPOLOGY: Done' |
214 |
|
CALL PRINT_MESSAGE( msgBuf, stdUnit, SQUEEZE_RIGHT, myThid ) |
215 |
|
WRITE(msgBuf,'(A)') ' ' |
216 |
|
CALL PRINT_MESSAGE( msgBuf, stdUnit, SQUEEZE_RIGHT, myThid ) |
217 |
|
|
218 |
RETURN |
RETURN |
219 |
END |
END |