4 |
#include "CPP_EEOPTIONS.h" |
#include "CPP_EEOPTIONS.h" |
5 |
#include "W2_OPTIONS.h" |
#include "W2_OPTIONS.h" |
6 |
|
|
7 |
|
C-- File w2_set_map_tiles.F: |
8 |
|
C-- Contents |
9 |
|
C-- o W2_SET_MAP_TILES :: Set tiles and IO mapping |
10 |
|
C-- o FIND_GCD_N :: Returns the Greatest Common Divisor |
11 |
|
|
12 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
13 |
CBOP 0 |
CBOP 0 |
14 |
C !ROUTINE: W2_SET_MAP_TILES |
C !ROUTINE: W2_SET_MAP_TILES |
22 |
C !USES: |
C !USES: |
23 |
IMPLICIT NONE |
IMPLICIT NONE |
24 |
|
|
25 |
C Tile toplogy settings data structures |
C Tile topology settings data structures |
26 |
#include "SIZE.h" |
#include "SIZE.h" |
27 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
28 |
#include "W2_EXCH2_SIZE.h" |
#include "W2_EXCH2_SIZE.h" |
40 |
|
|
41 |
C !LOCAL VARIABLES: |
C !LOCAL VARIABLES: |
42 |
C === Local variables === |
C === Local variables === |
43 |
C msgBuf :: Informational/error meesage buffer |
C msgBuf :: Informational/error message buffer |
44 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
45 |
INTEGER tNx, tNy, fNx, fNy, nbPts, fBaseX |
INTEGER tNx, tNy, fNx, fNy, nbPts, fBaseX |
46 |
INTEGER nbTx, nbTy |
INTEGER nbTx, nbTy |
47 |
INTEGER j, ii, k, tId, tx, ty |
INTEGER j, ii, k, tId, tx, ty |
48 |
INTEGER divise, nnx(W2_maxNbFacets) |
INTEGER divide, nnx(W2_maxNbFacets) |
49 |
INTEGER errCnt, tCnt |
INTEGER errCnt, tCnt |
50 |
LOGICAL tileIsActive, prtFlag |
LOGICAL tileIsActive, prtFlag |
51 |
CEOP |
CEOP |
59 |
|
|
60 |
tNx = sNx |
tNx = sNx |
61 |
tNy = sNy |
tNy = sNy |
62 |
C-- Check that tile dims divise facet dims |
C-- Check that tile dims divide facet dims |
63 |
errCnt = 0 |
errCnt = 0 |
64 |
tCnt = 0 |
tCnt = 0 |
65 |
nbPts = 0 |
nbPts = 0 |
108 |
DO j=1,nFacets |
DO j=1,nFacets |
109 |
nnx(j) = facet_dims(2*j-1)/tNx |
nnx(j) = facet_dims(2*j-1)/tNx |
110 |
ENDDO |
ENDDO |
111 |
divise = FIND_GCD_N( nnx, nFacets) |
divide = FIND_GCD_N( nnx, nFacets) |
112 |
W2_mapIO = divise*tNx |
W2_mapIO = divide*tNx |
113 |
WRITE(msgBuf,'(A,2(I5,A))') ' W2_mapIO =', W2_mapIO, |
WRITE(msgBuf,'(A,2(I5,A))') ' W2_mapIO =', W2_mapIO, |
114 |
& ' (=', divise, '*sNx)' |
& ' (=', divide, '*sNx)' |
115 |
CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_RIGHT, myThid ) |
CALL PRINT_MESSAGE( msgBuf, W2_oUnit, SQUEEZE_RIGHT, myThid ) |
116 |
ENDIF |
ENDIF |
117 |
|
|
196 |
END |
END |
197 |
|
|
198 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
|
|
|
199 |
CBOP |
CBOP |
200 |
C !ROUTINE: FIND_GCD_N |
C !ROUTINE: FIND_GCD_N |
201 |
|
|
218 |
INTEGER fldList(nFld) |
INTEGER fldList(nFld) |
219 |
|
|
220 |
C !LOCAL VARIABLES: |
C !LOCAL VARIABLES: |
221 |
INTEGER mnFld, divise |
INTEGER mnFld, divide |
222 |
INTEGER j, ii |
INTEGER j, ii |
223 |
LOGICAL flag |
LOGICAL flag |
224 |
LOGICAL localDBg |
LOGICAL localDBg |
233 |
IF (localDBg) WRITE(0,'(A,I8)') 'FIND_GCD_N: mnFld=',mnFld |
IF (localDBg) WRITE(0,'(A,I8)') 'FIND_GCD_N: mnFld=',mnFld |
234 |
|
|
235 |
IF (mnFld.GT.1 ) THEN |
IF (mnFld.GT.1 ) THEN |
236 |
divise = 1 |
divide = 1 |
237 |
ii = 2 |
ii = 2 |
238 |
DO WHILE ( ii.LE.mnFld ) |
DO WHILE ( ii.LE.mnFld ) |
239 |
IF (localDBg) WRITE(0,'(A,I8)') ' GCD : try',ii |
IF (localDBg) WRITE(0,'(A,I8)') ' GCD : try',ii |
242 |
flag = flag.AND.(MOD(fldList(j),ii).EQ.0 ) |
flag = flag.AND.(MOD(fldList(j),ii).EQ.0 ) |
243 |
ENDDO |
ENDDO |
244 |
IF ( flag ) THEN |
IF ( flag ) THEN |
245 |
divise = divise*ii |
divide = divide*ii |
246 |
DO j=1,nFld |
DO j=1,nFld |
247 |
fldList(j) = fldList(j)/ii |
fldList(j) = fldList(j)/ii |
248 |
ENDDO |
ENDDO |
254 |
IF (ii.EQ.4) ii=3 |
IF (ii.EQ.4) ii=3 |
255 |
ENDIF |
ENDIF |
256 |
ENDDO |
ENDDO |
257 |
C- Put back the origninal Nb: |
C- Put back the original Nb: |
258 |
IF (localDBg) WRITE(0,'(10I8)') (fldList(j),j=1,nFld) |
IF (localDBg) WRITE(0,'(10I8)') (fldList(j),j=1,nFld) |
259 |
DO j=1,nFld |
DO j=1,nFld |
260 |
fldList(j) = fldList(j)*divise |
fldList(j) = fldList(j)*divide |
261 |
ENDDO |
ENDDO |
262 |
ELSE |
ELSE |
263 |
divise = MAX( 0, mnFld ) |
divide = MAX( 0, mnFld ) |
264 |
ENDIF |
ENDIF |
265 |
|
|
266 |
FIND_GCD_N = divise |
FIND_GCD_N = divide |
267 |
|
|
268 |
RETURN |
RETURN |
269 |
END |
END |