61 |
#ifdef ALLOW_EXCH2 |
#ifdef ALLOW_EXCH2 |
62 |
#include "W2_EXCH2_SIZE.h" |
#include "W2_EXCH2_SIZE.h" |
63 |
#include "W2_EXCH2_TOPOLOGY.h" |
#include "W2_EXCH2_TOPOLOGY.h" |
64 |
|
#include "W2_EXCH2_PARAMS.h" |
65 |
#endif /* ALLOW_EXCH2 */ |
#endif /* ALLOW_EXCH2 */ |
66 |
#include "MDSIO_SCPU.h" |
#include "EEBUFF_SCPU.h" |
67 |
|
|
68 |
C !INPUT PARAMETERS: |
C !INPUT PARAMETERS: |
69 |
CHARACTER*(*) fName |
CHARACTER*(*) fName |
90 |
LOGICAL exst |
LOGICAL exst |
91 |
LOGICAL globalFile, fileIsOpen |
LOGICAL globalFile, fileIsOpen |
92 |
LOGICAL iAmDoingIO |
LOGICAL iAmDoingIO |
93 |
LOGICAL keepBlankTileIO |
LOGICAL useExch2ioLayOut |
94 |
INTEGER xSize, ySize |
INTEGER xSize, ySize |
95 |
INTEGER iG,jG,bi,bj,i,j,k,nNz |
INTEGER iG,jG,bi,bj,i,j,k,nNz |
96 |
INTEGER irec,dUnit,IL,pIL |
INTEGER irec,dUnit,IL,pIL |
97 |
INTEGER length_of_rec |
INTEGER length_of_rec |
98 |
Real*4 r4seg(sNx) |
Real*4 r4seg(sNx) |
99 |
Real*8 r8seg(sNx) |
Real*8 r8seg(sNx) |
100 |
|
INTEGER tNx, tNy, global_nTx |
101 |
|
INTEGER tBx, tBy, iGjLoc, jGjLoc |
102 |
#ifdef ALLOW_EXCH2 |
#ifdef ALLOW_EXCH2 |
103 |
INTEGER iGjLoc, jGjLoc |
INTEGER tN |
|
c INTEGER tGy,tGx,tNy,tNx,tN |
|
|
INTEGER tGy,tGx, tNx,tN |
|
|
INTEGER global_nTx |
|
104 |
#endif /* ALLOW_EXCH2 */ |
#endif /* ALLOW_EXCH2 */ |
|
INTEGER tNy |
|
105 |
|
|
106 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
107 |
C Set dimensions: |
C Set dimensions: |
108 |
xSize = Nx |
xSize = Nx |
109 |
ySize = Ny |
ySize = Ny |
110 |
keepBlankTileIO = .FALSE. |
useExch2ioLayOut = .FALSE. |
111 |
#if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) |
#ifdef ALLOW_EXCH2 |
112 |
xSize = exch2_global_Nx |
IF ( W2_useE2ioLayOut ) THEN |
113 |
ySize = exch2_global_Ny |
xSize = exch2_global_Nx |
114 |
keepBlankTileIO = .TRUE. |
ySize = exch2_global_Ny |
115 |
#endif |
useExch2ioLayOut = .TRUE. |
116 |
|
ENDIF |
117 |
|
#endif /* ALLOW_EXCH2 */ |
118 |
|
|
119 |
C Assume nothing |
C Assume nothing |
120 |
globalFile = .FALSE. |
globalFile = .FALSE. |
256 |
U xy_buffer_r4, |
U xy_buffer_r4, |
257 |
O sharedLocBuf_r4, |
O sharedLocBuf_r4, |
258 |
I xSize, ySize, |
I xSize, ySize, |
259 |
I keepBlankTileIO, .FALSE., myThid ) |
I useExch2ioLayOut, .FALSE., myThid ) |
260 |
IF ( arrType.EQ.'RS' ) THEN |
IF ( arrType.EQ.'RS' ) THEN |
261 |
CALL MDS_PASS_R4toRS( sharedLocBuf_r4, |
CALL MDS_PASS_R4toRS( sharedLocBuf_r4, |
262 |
& arr, k, kSize, .TRUE., myThid ) |
& arr, k, kSize, .TRUE., myThid ) |
274 |
U xy_buffer_r8, |
U xy_buffer_r8, |
275 |
O sharedLocBuf_r8, |
O sharedLocBuf_r8, |
276 |
I xSize, ySize, |
I xSize, ySize, |
277 |
I keepBlankTileIO, .FALSE., myThid ) |
I useExch2ioLayOut, .FALSE., myThid ) |
278 |
IF ( arrType.EQ.'RS' ) THEN |
IF ( arrType.EQ.'RS' ) THEN |
279 |
CALL MDS_PASS_R8toRS( sharedLocBuf_r8, |
CALL MDS_PASS_R8toRS( sharedLocBuf_r8, |
280 |
& arr, k, kSize, .TRUE., myThid ) |
& arr, k, kSize, .TRUE., myThid ) |
316 |
DO bi=1,nSx |
DO bi=1,nSx |
317 |
C If we are reading from a tiled MDS file then we open each one here |
C If we are reading from a tiled MDS file then we open each one here |
318 |
IF (.NOT. globalFile) THEN |
IF (.NOT. globalFile) THEN |
319 |
iG=bi+(myXGlobalLo-1)/sNx ! Kludge until unstructered tiles |
iG=bi+(myXGlobalLo-1)/sNx |
320 |
jG=bj+(myYGlobalLo-1)/sNy ! Kludge until unstructered tiles |
jG=bj+(myYGlobalLo-1)/sNy |
321 |
WRITE(dataFName,'(2A,I3.3,A,I3.3,A)') |
WRITE(dataFName,'(2A,I3.3,A,I3.3,A)') |
322 |
& pfName(1:pIL),'.',iG,'.',jG,'.data' |
& pfName(1:pIL),'.',iG,'.',jG,'.data' |
323 |
INQUIRE( file=dataFName, exist=exst ) |
INQUIRE( file=dataFName, exist=exst ) |
351 |
ENDIF |
ENDIF |
352 |
|
|
353 |
IF (fileIsOpen) THEN |
IF (fileIsOpen) THEN |
354 |
|
tNx = sNx |
355 |
tNy = sNy |
tNy = sNy |
356 |
|
global_nTx = xSize/sNx |
357 |
|
tBx = myXGlobalLo-1 + (bi-1)*sNx |
358 |
|
tBy = myYGlobalLo-1 + (bj-1)*sNy |
359 |
|
iGjLoc = 0 |
360 |
|
jGjLoc = 1 |
361 |
#ifdef ALLOW_EXCH2 |
#ifdef ALLOW_EXCH2 |
362 |
tN = W2_myTileList(bi) |
IF ( useExch2ioLayOut ) THEN |
363 |
tGy = exch2_tyGlobalo(tN) |
tN = W2_myTileList(bi) |
364 |
tGx = exch2_txGlobalo(tN) |
c tNx = exch2_tNx(tN) |
365 |
tNy = exch2_tNy(tN) |
c tNy = exch2_tNy(tN) |
366 |
tNx = exch2_tNx(tN) |
c global_nTx = exch2_global_Nx/tNx |
367 |
IF ( exch2_mydNx(tN) .GT. xSize ) THEN |
tBx = exch2_txGlobalo(tN) - 1 |
368 |
C- face x-size larger than glob-size : fold it |
tBy = exch2_tyGlobalo(tN) - 1 |
369 |
iGjLoc = 0 |
IF ( exch2_mydNx(tN) .GT. xSize ) THEN |
370 |
jGjLoc = exch2_mydNx(tN) / xSize |
C- face x-size larger than glob-size : fold it |
371 |
ELSEIF ( exch2_tNy(tN) .GT. ySize ) THEN |
iGjLoc = 0 |
372 |
C- tile y-size larger than glob-size : make a long line |
jGjLoc = exch2_mydNx(tN) / xSize |
373 |
iGjLoc = exch2_mydNx(tN) |
ELSEIF ( exch2_tNy(tN) .GT. ySize ) THEN |
374 |
jGjLoc = 0 |
C- tile y-size larger than glob-size : make a long line |
375 |
ELSE |
iGjLoc = exch2_mydNx(tN) |
376 |
C- default (face fit into global-IO-array) |
jGjLoc = 0 |
377 |
iGjLoc = 0 |
ELSE |
378 |
jGjLoc = 1 |
C- default (face fit into global-IO-array) |
379 |
|
iGjLoc = 0 |
380 |
|
jGjLoc = 1 |
381 |
|
ENDIF |
382 |
ENDIF |
ENDIF |
|
global_nTx = exch2_global_Nx/tNx |
|
383 |
#endif /* ALLOW_EXCH2 */ |
#endif /* ALLOW_EXCH2 */ |
384 |
DO k=kLo,kHi |
DO k=kLo,kHi |
385 |
DO j=1,tNy |
DO j=1,tNy |
386 |
IF (globalFile) THEN |
IF (globalFile) THEN |
387 |
#ifdef ALLOW_EXCH2 |
irec = 1 + ( tBx + (j-1)*iGjLoc )/sNx |
388 |
irec = 1 + ( tGx-1 + (j-1)*iGjLoc )/tNx |
& + ( tBy + (j-1)*jGjLoc )*global_nTx |
389 |
& + ( tGy-1 + (j-1)*jGjLoc )*global_nTx |
& +( k-kLo + (irecord-1)*nNz )*global_nTx*ySize |
|
& + ( k-kLo + (irecord-1)*nNz |
|
|
& )*ySize*global_nTx |
|
|
#else /* ALLOW_EXCH2 */ |
|
|
iG = myXGlobalLo-1 + (bi-1)*sNx |
|
|
jG = myYGlobalLo-1 + (bj-1)*sNy |
|
|
irec= 1 + INT(iG/sNx) + nSx*nPx*(jG+j-1) |
|
|
& + nSx*nPx*Ny*(k-kLo) |
|
|
& + nSx*nPx*Ny*nNz*(irecord-1) |
|
|
#endif /* ALLOW_EXCH2 */ |
|
390 |
ELSE |
ELSE |
391 |
irec=j + sNy*(k-kLo) + sNy*nNz*(irecord-1) |
irec = j + ( k-kLo + (irecord-1)*nNz )*sNy |
392 |
ENDIF |
ENDIF |
393 |
IF (filePrec .EQ. precFloat32) THEN |
IF (filePrec .EQ. precFloat32) THEN |
394 |
READ(dUnit,rec=irec) r4seg |
READ(dUnit,rec=irec) r4seg |