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

Diff of /MITgcm/pkg/mdsio/mdsio_write_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       I                    fldRL,       I                    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 86  c     == local variables == Line 87  c     == local variables ==
87        integer IL        integer IL
88        integer bx,by        integer bx,by
89    
90        integer length2d, length3d, length_of_rec        integer lengthBuff, length_of_rec
91        integer i2d, i3d        integer i2d, i3d
92        integer i,j,k,bi,bj,ii        integer i,j,k,bi,bj,ii
93        integer dUnit, irec2d        integer dUnit, irec2d
# Line 102  c     == functions == Line 103  c     == functions ==
103    
104  c     == end of interface ==  c     == end of interface ==
105    
106        length2d=sNxWh*procNyWh  #ifdef ALLOW_WHIO_3D
107        length3d=length2d*nr        writeWh=.TRUE.
108    #endif
109    
110          IF ( .NOT.locSingleCpuIO ) then
111            lengthBuff=sNxWh*procNyWh
112          ELSE
113            lengthBuff=sNxWh*gloNyWh
114          ENDIF
115          
116  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):
117        iAmDoingIO = .FALSE.        iAmDoingIO = .FALSE.
118        IF ( .NOT.locSingleCpuIO .OR. myProcId.EQ.0 ) THEN        IF ( .NOT.locSingleCpuIO .OR. myProcId.EQ.0 ) THEN
# Line 140  c get the unit and open file Line 148  c get the unit and open file
148       &             OLx, OLy, 1, i2d, n2d, 0, 0, .FALSE., myThid )       &             OLx, OLy, 1, i2d, n2d, 0, 0, .FALSE., myThid )
149            IF ( locSingleCpuIO ) then            IF ( locSingleCpuIO ) then
150              CALL BAR2( myThid )              CALL BAR2( myThid )
151    #  ifndef EXCLUDE_WHIO_GLOBUFF_2D
152              CALL GATHER_2D_WH_R4( fld2d_globuff_r4,              CALL GATHER_2D_WH_R4( fld2d_globuff_r4,
153       &                            fld2d_procbuff_r4,myThid)       &                            fld2d_procbuff_r4,myThid)
154    #  endif
155            ENDIF            ENDIF
156          ELSE          ELSE
157            CALL MDS_PASS_R8toRL( fld2d_procbuff_r8, fldRL,            CALL MDS_PASS_R8toRL( fld2d_procbuff_r8, fldRL,
158       &             OLx, OLy, 1, i2d, n2d, 0, 0, .FALSE., myThid )       &             OLx, OLy, 1, i2d, n2d, 0, 0, .FALSE., myThid )
159            IF ( locSingleCpuIO ) then            IF ( locSingleCpuIO ) then
160              CALL BAR2( myThid )              CALL BAR2( myThid )
161    #  ifndef EXCLUDE_WHIO_GLOBUFF_2D
162              CALL GATHER_2D_WH_R8( fld2d_globuff_r8,              CALL GATHER_2D_WH_R8( fld2d_globuff_r8,
163       &                            fld2d_procbuff_r8,myThid)       &                            fld2d_procbuff_r8,myThid)
164    #  endif
165            ENDIF            ENDIF
166          ENDIF          ENDIF
167    
168          _BARRIER          _BARRIER
169    #ifdef ALLOW_WHIO_3D
170            IF ( iAmDoingIO.AND.locBufferIO.AND.(fid.NE.0) ) THEN
171    c reset counter if needed
172              IF (jWh.EQ.nWh) jWh=0
173    c increment counter
174              jWh=jWh+1
175    c determine current file record
176              irec2d=i2d+n2d*(irec-1)
177              iWh=(irec2d-1)/nWh+1
178    c copy
179              DO i=1,lengthBuff
180                j=(jWh-1)*lengthBuff+i
181                IF ( .NOT.locSingleCpuIO ) then
182                  IF (filePrec .EQ. precFloat32) THEN
183                    fld3d_procbuff_r4(j)=fld2d_procbuff_r4(i)
184                  ELSE
185                    fld3d_procbuff_r8(j)=fld2d_procbuff_r8(i)
186                  ENDIF
187                ELSE
188    #  ifdef INCLUDE_WHIO_GLOBUFF_3D
189                  IF (filePrec .EQ. precFloat32) THEN
190                    fld3d_globuff_r4(j)=fld2d_globuff_r4(i)
191                  ELSE
192                    fld3d_globuff_r8(j)=fld2d_globuff_r8(i)
193                  ENDIF
194    #  endif
195                ENDIF
196              ENDDO
197    c write chunk if needed
198              IF (jWh.EQ.nWh) THEN
199                IF ( .NOT.locSingleCpuIO ) then
200                  IF (filePrec .EQ. precFloat32) THEN
201                    WRITE(dUnit,rec=iWh) fld3d_procbuff_r4
202                  ELSE
203                    WRITE(dUnit,rec=iWh) fld3d_procbuff_r8
204                  ENDIF
205                ELSE
206    #  ifdef INCLUDE_WHIO_GLOBUFF_3D
207                  IF (filePrec .EQ. precFloat32) THEN
208                    WRITE(dUnit,rec=iWh) fld3d_globuff_r4
209                  ELSE
210                    WRITE(dUnit,rec=iWh) fld3d_globuff_r8
211                  ENDIF
212    #  endif
213                ENDIF
214              ENDIF
215    
216            ELSEIF ( iAmDoingIO ) THEN
217    #else
218          IF ( iAmDoingIO ) THEN          IF ( iAmDoingIO ) THEN
219    #endif
220            irec2d=i2d+n2d*(irec-1)            irec2d=i2d+n2d*(irec-1)
221            IF ( .NOT.locSingleCpuIO ) then            IF ( .NOT.locSingleCpuIO ) then
222              IF (filePrec .EQ. precFloat32) THEN              IF (filePrec .EQ. precFloat32) THEN
# Line 163  c get the unit and open file Line 225  c get the unit and open file
225                WRITE(dUnit,rec=irec2d) fld2d_procbuff_r8                WRITE(dUnit,rec=irec2d) fld2d_procbuff_r8
226              ENDIF              ENDIF
227            ELSE            ELSE
228    #  ifndef EXCLUDE_WHIO_GLOBUFF_2D
229              IF (filePrec .EQ. precFloat32) THEN              IF (filePrec .EQ. precFloat32) THEN
230                WRITE(dUnit,rec=irec2d) fld2d_globuff_r4                WRITE(dUnit,rec=irec2d) fld2d_globuff_r4
231              ELSE              ELSE
232                WRITE(dUnit,rec=irec2d) fld2d_globuff_r8                WRITE(dUnit,rec=irec2d) fld2d_globuff_r8
233              ENDIF              ENDIF
234    #  endif
235            ENDIF            ENDIF
236          ENDIF          ENDIF
237          _BARRIER          _BARRIER

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

  ViewVC Help
Powered by ViewVC 1.1.22