/[MITgcm]/MITgcm/pkg/mdsio/mdsio_read_field.F
ViewVC logotype

Diff of /MITgcm/pkg/mdsio/mdsio_read_field.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.7 by jmc, Tue May 12 19:56:35 2009 UTC revision 1.8 by jmc, Sat May 16 13:37:38 2009 UTC
# Line 61  C Global variables / common blocks Line 61  C Global variables / common blocks
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
# Line 89  C !LOCAL VARIABLES: Line 90  C !LOCAL VARIABLES:
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.
# Line 255  C- endif iAmDoingIO Line 256  C- endif iAmDoingIO
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 )
# Line 273  C- endif iAmDoingIO Line 274  C- endif iAmDoingIO
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 )
# Line 315  C Loop over all tiles Line 316  C Loop over all tiles
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 )
# Line 350  C (This is a place-holder for the active Line 351  C (This is a place-holder for the active
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

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

  ViewVC Help
Powered by ViewVC 1.1.22