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

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

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

revision 1.5 by gforget, Wed Jan 19 23:20:24 2011 UTC revision 1.6 by gforget, Fri Jan 21 22:02:33 2011 UTC
# Line 15  C     !INTERFACE: Line 15  C     !INTERFACE:
15       O                   fldRL,       O                   fldRL,
16       I                   irec,       I                   irec,
17       I                   locSingleCPUIO,       I                   locSingleCPUIO,
18         I                   locBufferIO,
19       I                   mythid       I                   mythid
20       &                 )       &                 )
21    
# Line 59  c     mythid    -  number of the thread Line 60  c     mythid    -  number of the thread
60        integer n2d        integer n2d
61        integer irec        integer irec
62        _RL     fldRL(1-Olx:sNx+Olx,1-Oly:sNy+Oly,n2d,nSx,nSy)        _RL     fldRL(1-Olx:sNx+Olx,1-Oly:sNy+Oly,n2d,nSx,nSy)
63        logical locSingleCPUIO        logical locSingleCPUIO, locBufferIO
64  CEOP  CEOP
65    
66  #ifdef ALLOW_WHIO  #ifdef ALLOW_WHIO
# Line 84  C     gloNyWh :: global sum of sNyWh Line 85  C     gloNyWh :: global sum of sNyWh
85        integer IL        integer IL
86        integer bx,by        integer bx,by
87    
88        integer length2d, length3d, length_of_rec        integer lengthBuff, length_of_rec
89        integer i2d, i3d        integer i2d, i3d
90        integer i,j,k,bi,bj,ii        integer i,j,k,bi,bj,ii
91        integer dUnit, irec2d        integer dUnit, irec2d
# Line 100  c     == functions == Line 101  c     == functions ==
101    
102  c     == end of interface ==  c     == end of interface ==
103    
104        length2d=sNxWh*procNyWh  #ifdef ALLOW_WHIO_3D
105        length3d=length2d*nr        writeWh=.FALSE.
106    #endif
107    
108          IF ( .NOT.locSingleCpuIO ) then
109            lengthBuff=sNxWh*procNyWh
110          ELSE
111            lengthBuff=sNxWh*gloNyWh
112          ENDIF
113          
114  C Only do I/O if I am the master thread (and mpi process 0 IF locSingleCpuIO):  C Only do I/O if I am the master thread (and mpi process 0 IF locSingleCpuIO):
115        iAmDoingIO = .FALSE.        iAmDoingIO = .FALSE.
116        IF ( .NOT.locSingleCpuIO .OR. myProcId.EQ.0 ) THEN        IF ( .NOT.locSingleCpuIO .OR. myProcId.EQ.0 ) THEN
# Line 134  c get the unit and open file Line 142  c get the unit and open file
142        do i2d=1,n2d        do i2d=1,n2d
143    
144          _BARRIER          _BARRIER
145    #ifdef ALLOW_WHIO_3D
146            IF ( iAmDoingIO.AND.locBufferIO.AND.(fid.NE.0) ) THEN
147    c reset counter if needed
148              IF (jWh.EQ.nWh) jWh=0
149    c increment counter
150              jWh=jWh+1
151    c determine current file record
152              irec2d=i2d+n2d*(irec-1)
153              iWh=(irec2d-1)/nWh+1
154    c read new chunk if needed
155              IF (jWh.EQ.1) THEN
156                IF ( .NOT.locSingleCpuIO ) then
157                  IF (filePrec .EQ. precFloat32) THEN
158                    READ(dUnit,rec=iWh) fld3d_procbuff_r4
159                  ELSE
160                    READ(dUnit,rec=iWh) fld3d_procbuff_r8
161                  ENDIF
162                ELSE
163    #  ifdef INCLUDE_WHIO_GLOBUFF_3D
164                  IF (filePrec .EQ. precFloat32) THEN
165                    READ(dUnit,rec=iWh) fld3d_globuff_r4
166                  ELSE
167                    READ(dUnit,rec=iWh) fld3d_globuff_r8
168                  ENDIF
169    #  endif
170                ENDIF
171              ENDIF
172    c copy
173              DO i=1,lengthBuff
174                j=(jWh-1)*lengthBuff+i
175                IF ( .NOT.locSingleCpuIO ) then
176                  IF (filePrec .EQ. precFloat32) THEN
177                    fld2d_procbuff_r4(i)=fld3d_procbuff_r4(j)
178                  ELSE
179                    fld2d_procbuff_r8(i)=fld3d_procbuff_r8(j)
180                  ENDIF
181                ELSE
182    #  ifdef INCLUDE_WHIO_GLOBUFF_3D
183                  IF (filePrec .EQ. precFloat32) THEN
184                    fld2d_globuff_r4(i)=fld3d_globuff_r4(j)
185                  ELSE
186                    fld2d_globuff_r8(i)=fld3d_globuff_r8(j)
187                  ENDIF
188    #  endif
189                ENDIF
190              ENDDO
191    
192            ELSEIF ( iAmDoingIO ) THEN
193    #else
194          IF ( iAmDoingIO ) THEN          IF ( iAmDoingIO ) THEN
195    #endif
196            irec2d=i2d+n2d*(irec-1)            irec2d=i2d+n2d*(irec-1)
197            IF ( .NOT.locSingleCpuIO ) then            IF ( .NOT.locSingleCpuIO ) then
198              IF (filePrec .EQ. precFloat32) THEN              IF (filePrec .EQ. precFloat32) THEN
# Line 143  c get the unit and open file Line 201  c get the unit and open file
201                READ(dUnit,rec=irec2d) fld2d_procbuff_r8                READ(dUnit,rec=irec2d) fld2d_procbuff_r8
202              ENDIF              ENDIF
203            ELSE            ELSE
204    #  ifndef EXCLUDE_WHIO_GLOBUFF_2D
205              IF (filePrec .EQ. precFloat32) THEN              IF (filePrec .EQ. precFloat32) THEN
206                READ(dUnit,rec=irec2d) fld2d_globuff_r4                READ(dUnit,rec=irec2d) fld2d_globuff_r4
207              ELSE              ELSE
208                READ(dUnit,rec=irec2d) fld2d_globuff_r8                READ(dUnit,rec=irec2d) fld2d_globuff_r8
209              ENDIF              ENDIF
210    #  endif
211            ENDIF            ENDIF
212          ENDIF          ENDIF
213          _BARRIER          _BARRIER
214    
215          IF (filePrec .EQ. precFloat32) THEN          IF (filePrec .EQ. precFloat32) THEN
216            IF ( locSingleCpuIO ) then            IF ( locSingleCpuIO ) then
217    #  ifndef EXCLUDE_WHIO_GLOBUFF_2D
218              CALL SCATTER_2D_WH_R4 ( fld2d_globuff_r4,              CALL SCATTER_2D_WH_R4 ( fld2d_globuff_r4,
219       &                              fld2d_procbuff_r4,myThid)       &                              fld2d_procbuff_r4,myThid)
220    #  endif
221              CALL BAR2( myThid )              CALL BAR2( myThid )
222            ENDIF            ENDIF
223            CALL MDS_PASS_R4toRL( fld2d_procbuff_r4, fldRL,            CALL MDS_PASS_R4toRL( fld2d_procbuff_r4, fldRL,
224       &             OLx, OLy, 1, i2d, n2d, 0, 0, .TRUE., myThid )       &             OLx, OLy, 1, i2d, n2d, 0, 0, .TRUE., myThid )
225          ELSE          ELSE
226            IF ( locSingleCpuIO ) then            IF ( locSingleCpuIO ) then
227    #  ifndef EXCLUDE_WHIO_GLOBUFF_2D
228              CALL SCATTER_2D_WH_R8 ( fld2d_globuff_r8,              CALL SCATTER_2D_WH_R8 ( fld2d_globuff_r8,
229       &                              fld2d_procbuff_r8,myThid)       &                              fld2d_procbuff_r8,myThid)
230    #  endif
231              CALL BAR2( myThid )              CALL BAR2( myThid )
232            ENDIF            ENDIF
233            CALL MDS_PASS_R8toRL( fld2d_procbuff_r8, fldRL,            CALL MDS_PASS_R8toRL( fld2d_procbuff_r8, fldRL,

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.22