/[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.1 by jmc, Fri Dec 29 05:25:15 2006 UTC revision 1.2 by jmc, Mon Mar 19 02:30:49 2007 UTC
# Line 91  C !LOCAL VARIABLES: Line 91  C !LOCAL VARIABLES:
91        INTEGER iG,jG,irec,bi,bj,i,j,k,dUnit,IL,pIL        INTEGER iG,jG,irec,bi,bj,i,j,k,dUnit,IL,pIL
92        INTEGER x_size,y_size,length_of_rec        INTEGER x_size,y_size,length_of_rec
93  #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)  #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)
94        INTEGER iG_IO,jG_IO,npe        INTEGER iG_IO,jG_IO,npe, loc_xGlobalLo, loc_yGlobalLo
95        PARAMETER ( x_size = exch2_domain_nxt * sNx )        PARAMETER ( x_size = exch2_domain_nxt * sNx )
96        PARAMETER ( y_size = exch2_domain_nyt * sNy )        PARAMETER ( y_size = exch2_domain_nyt * sNy )
97  #else  #else
# Line 104  C !LOCAL VARIABLES: Line 104  C !LOCAL VARIABLES:
104        Real*8 xy_buffer_r8(x_size,y_size)        Real*8 xy_buffer_r8(x_size,y_size)
105        Real*8 globalBuf(Nx,Ny)        Real*8 globalBuf(Nx,Ny)
106  #ifdef ALLOW_EXCH2  #ifdef ALLOW_EXCH2
107  c     INTEGER tGy,tGx,tNy,tNx,tn        INTEGER iGjLoc, jGjLoc
108        INTEGER tGy,tGx,    tNx,tn  c     INTEGER tGy,tGx,tNy,tNx,tN
109          INTEGER tGy,tGx,    tNx,tN
110  #endif /* ALLOW_EXCH2 */  #endif /* ALLOW_EXCH2 */
111        INTEGER tNy        INTEGER tNy
112    
# Line 220  C master thread of process 0, only, read Line 221  C master thread of process 0, only, read
221  #ifdef _BYTESWAPIO  #ifdef _BYTESWAPIO
222             CALL MDS_BYTESWAPR4( x_size*y_size, xy_buffer_r4 )             CALL MDS_BYTESWAPR4( x_size*y_size, xy_buffer_r4 )
223  #endif  #endif
224              ELSEIF (filePrec .EQ. precFloat64) THEN
225               READ(dUnit,rec=irec) xy_buffer_r8
226    #ifdef _BYTESWAPIO
227               CALL MDS_BYTESWAPR8( x_size*y_size, xy_buffer_r8 )
228    #endif
229              ELSE
230               WRITE(msgBuf,'(A)')
231         &            ' MDS_READ_FIELD: illegal value for filePrec'
232               CALL PRINT_ERROR( msgBuf, myThid )
233               STOP 'ABNORMAL END: S/R MDS_READ_FIELD'
234              ENDIF
235    
236  #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)  #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)
237             bj=1            bj=1
238             DO npe=1,nPx*nPy            DO npe=1,nPx*nPy
239              DO bi=1,nSx             DO bi=1,nSx
              DO J=1,sNy  
               DO I=1,sNx  
240  #ifdef ALLOW_USE_MPI  #ifdef ALLOW_USE_MPI
241                 iG=mpi_myXGlobalLo(npe)-1+(bi-1)*sNx+i              loc_xGlobalLo = mpi_myXGlobalLo(npe)
242                 jG=mpi_myYGlobalLo(npe)-1+(bj-1)*sNy+j              loc_yGlobalLo = mpi_myYGlobalLo(npe)
243  #else  #else  /* ALLOW_USE_MPI */
244                 iG= myXGlobalLo-1+(bi-1)*sNx+i              loc_xGlobalLo = myXGlobalLo
245                 jG= myYGlobalLo-1+(bj-1)*sNy+j              loc_yGlobalLo = myYGlobalLo
246  #endif /* ALLOW_USE_MPI */  #endif /* ALLOW_USE_MPI */
247                 iG_IO=exch2_txGlobalo(W2_mpi_myTileList(npe,bi))+i-1              tN = W2_mpi_myTileList(npe,bi)
248                 jG_IO=exch2_tyGlobalo(W2_mpi_myTileList(npe,bi))+j-1              IF   ( exch2_mydNx(tN) .GT. x_size ) THEN
249    C-          face x-size larger than glob-size : fold it
250                  iGjLoc = 0
251                  jGjLoc = exch2_mydNx(tN) / x_size
252                ELSEIF ( exch2_tNy(tN) .GT. y_size ) THEN
253    C-          tile y-size larger than glob-size : make a long line
254                  iGjLoc = exch2_mydNx(tN)
255                  jGjLoc = 0
256                ELSE
257    C-          default (face fit into global-IO-array)
258                  iGjLoc = 0
259                  jGjLoc = 1
260                ENDIF
261    
262                IF (filePrec .EQ. precFloat32) THEN
263                 DO J=1,sNy
264                  DO I=1,sNx
265                   iG = loc_xGlobalLo-1+(bi-1)*sNx+i
266                   jG = loc_yGlobalLo-1+(bj-1)*sNy+j
267                   iG_IO=exch2_txGlobalo(tN)+iGjLoc*(j-1)+i-1
268                   jG_IO=exch2_tyGlobalo(tN)+jGjLoc*(j-1)
269                 globalBuf(iG,jG) = xy_buffer_r4(iG_IO,jG_IO)                 globalBuf(iG,jG) = xy_buffer_r4(iG_IO,jG_IO)
270                ENDDO                ENDDO
271               ENDDO               ENDDO
272              ENDDO              ELSEIF (filePrec .EQ. precFloat64) THEN
273                 DO J=1,sNy
274                  DO I=1,sNx
275                   iG = loc_xGlobalLo-1+(bi-1)*sNx+i
276                   jG = loc_yGlobalLo-1+(bj-1)*sNy+j
277                   iG_IO=exch2_txGlobalo(tN)+iGjLoc*(j-1)+i-1
278                   jG_IO=exch2_tyGlobalo(tN)+jGjLoc*(j-1)
279                   globalBuf(iG,jG) = xy_buffer_r8(iG_IO,jG_IO)
280                  ENDDO
281                 ENDDO
282                ENDIF
283    
284    C--    end of npe & bi loops
285             ENDDO             ENDDO
286              ENDDO
287  #else /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */  #else /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */
288              IF (filePrec .EQ. precFloat32) THEN
289             DO J=1,Ny             DO J=1,Ny
290              DO I=1,Nx              DO I=1,Nx
291               globalBuf(I,J) = xy_buffer_r4(I,J)               globalBuf(I,J) = xy_buffer_r4(I,J)
292              ENDDO              ENDDO
293             ENDDO             ENDDO
 #endif /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */  
294            ELSEIF (filePrec .EQ. precFloat64) THEN            ELSEIF (filePrec .EQ. precFloat64) THEN
            READ(dUnit,rec=irec) xy_buffer_r8  
 #ifdef _BYTESWAPIO  
            CALL MDS_BYTESWAPR8( x_size*y_size, xy_buffer_r8 )  
 #endif  
 #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)  
            bj=1  
            DO npe=1,nPx*nPy  
             DO bi=1,nSx  
              DO J=1,sNy  
               DO I=1,sNx  
 #ifdef ALLOW_USE_MPI  
                iG=mpi_myXGlobalLo(npe)-1+(bi-1)*sNx+i  
                jG=mpi_myYGlobalLo(npe)-1+(bj-1)*sNy+j  
 #else  
                iG= myXGlobalLo-1+(bi-1)*sNx+i  
                jG= myYGlobalLo-1+(bj-1)*sNy+j  
 #endif /* ALLOW_USE_MPI */  
                iG_IO=exch2_txGlobalo(W2_mpi_myTileList(npe,bi))+i-1  
                jG_IO=exch2_tyGlobalo(W2_mpi_myTileList(npe,bi))+j-1  
                globalBuf(iG,jG) = xy_buffer_r8(iG_IO,jG_IO)  
               ENDDO  
              ENDDO  
             ENDDO  
            ENDDO  
 #else /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */  
295             DO J=1,Ny             DO J=1,Ny
296              DO I=1,Nx              DO I=1,Nx
297               globalBuf(I,J) = xy_buffer_r8(I,J)               globalBuf(I,J) = xy_buffer_r8(I,J)
298              ENDDO              ENDDO
299             ENDDO             ENDDO
 #endif /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */  
           ELSE  
            WRITE(msgBuf,'(A)')  
      &            ' MDS_READ_FIELD: illegal value for filePrec'  
            CALL PRINT_ERROR( msgBuf, myThid )  
            STOP 'ABNORMAL END: S/R MDS_READ_FIELD'  
300            ENDIF            ENDIF
301    #endif /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */
302  C- endif iAmDoingIO  C- endif iAmDoingIO
303          ENDIF          ENDIF
304          CALL SCATTER_2D(globalBuf,sharedLocalBuf,myThid)          CALL SCATTER_2D(globalBuf,sharedLocalBuf,myThid)
# Line 363  C (This is a place-holder for the active Line 377  C (This is a place-holder for the active
377            IF (fileIsOpen) THEN            IF (fileIsOpen) THEN
378             tNy = sNy             tNy = sNy
379  #ifdef ALLOW_EXCH2  #ifdef ALLOW_EXCH2
380             tn = W2_myTileList(bi)             tN = W2_myTileList(bi)
381             tGy = exch2_tyGlobalo(tn)             tGy = exch2_tyGlobalo(tN)
382             tGx = exch2_txGlobalo(tn)             tGx = exch2_txGlobalo(tN)
383             tNy = exch2_tNy(tn)             tNy = exch2_tNy(tN)
384             tNx = exch2_tNx(tn)             tNx = exch2_tNx(tN)
385               IF   ( exch2_mydNx(tN) .GT. x_size ) THEN
386    C-         face x-size larger than glob-size : fold it
387                 iGjLoc = 0
388                 jGjLoc = exch2_mydNx(tN) / x_size
389               ELSEIF ( exch2_tNy(tN) .GT. y_size ) THEN
390    C-         tile y-size larger than glob-size : make a long line
391                 iGjLoc = exch2_mydNx(tN)
392                 jGjLoc = 0
393               ELSE
394    C-         default (face fit into global-IO-array)
395                 iGjLoc = 0
396                 jGjLoc = 1
397               ENDIF
398  #endif /* ALLOW_EXCH2 */  #endif /* ALLOW_EXCH2 */
399             DO k=1,nNz             DO k=1,nNz
400              DO j=1,tNy              DO j=1,tNy
401               IF (globalFile) THEN               IF (globalFile) THEN
402  #ifdef ALLOW_EXCH2  #ifdef ALLOW_EXCH2
403                irec = 1 + (tGx-1)/tNx                irec = 1 + ( tGx-1 + (j-1)*iGjLoc )/tNx
404       &                 + ( j-1 + tGy-1 )*exch2_domain_nxt       &                 + ( tGy-1 + (j-1)*jGjLoc )*exch2_domain_nxt
405       &                 + ( k-1 + (irecord-1)*nNz       &                 + ( k-1 + (irecord-1)*nNz
406       &                   )*tNy*exch2_domain_nyt*exch2_domain_nxt       &                   )*y_size*exch2_domain_nxt
407  #else /* ALLOW_EXCH2 */  #else /* ALLOW_EXCH2 */
408                iG = myXGlobalLo-1 + (bi-1)*sNx                iG = myXGlobalLo-1 + (bi-1)*sNx
409                jG = myYGlobalLo-1 + (bj-1)*sNy                jG = myYGlobalLo-1 + (bj-1)*sNy
# Line 385  C (This is a place-holder for the active Line 412  C (This is a place-holder for the active
412       &                + nSx*nPx*Ny*nNz*(irecord-1)       &                + nSx*nPx*Ny*nNz*(irecord-1)
413  #endif /* ALLOW_EXCH2 */  #endif /* ALLOW_EXCH2 */
414               ELSE               ELSE
               iG = 0  
               jG = 0  
415                irec=j + sNy*(k-1) + sNy*nNz*(irecord-1)                irec=j + sNy*(k-1) + sNy*nNz*(irecord-1)
416               ENDIF               ENDIF
417               IF (filePrec .EQ. precFloat32) THEN               IF (filePrec .EQ. precFloat32) THEN

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

  ViewVC Help
Powered by ViewVC 1.1.22