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

Contents of /MITgcm/pkg/mdsio/mdsio_write_field.F

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


Revision 1.10 - (show annotations) (download)
Mon Jun 1 14:20:31 2009 UTC (16 years, 1 month ago) by jmc
Branch: MAIN
Changes since 1.9: +129 -78 lines
read/write tiled (local) files: read/write 1-level tile chunk at a time
 (instead of segment of length sNx); expected to speed up tiled IO.

1 C $Header: /u/gcmpack/MITgcm/pkg/mdsio/mdsio_write_field.F,v 1.9 2009/05/16 13:37:38 jmc Exp $
2 C $Name: $
3
4 #include "MDSIO_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: MDS_WRITE_FIELD
8 C !INTERFACE:
9 SUBROUTINE MDS_WRITE_FIELD(
10 I fName,
11 I filePrec,
12 I globalFile,
13 I useCurrentDir,
14 I arrType,
15 I kSize,kLo,kHi,
16 I arr,
17 I jrecord,
18 I myIter,
19 I myThid )
20
21 C !DESCRIPTION:
22 C Arguments:
23 C
24 C fName (string) :: base name for file to write
25 C filePrec (integer) :: number of bits per word in file (32 or 64)
26 C globalFile (logical):: selects between writing a global or tiled file
27 C useCurrentDir(logic):: always write to the current directory (even if
28 C "mdsioLocalDir" is set)
29 C arrType (char(2)) :: declaration of "arr": either "RS" or "RL"
30 C kSize (integer) :: size of third dimension: normally either 1 or Nr
31 C kLo (integer) :: 1rst vertical level (of array "arr") to write
32 C kHi (integer) :: last vertical level (of array "arr") to write
33 C arr ( RS/RL ) :: array to write, arr(:,:,kSize,:,:)
34 C irecord (integer) :: record number to write
35 C myIter (integer) :: time step number
36 C myThid (integer) :: thread identifier
37 C
38 C MDS_WRITE_FIELD creates either a file of the form "fName.data" and
39 C "fName.meta" if the logical flag "globalFile" is set true. Otherwise
40 C it creates MDS tiled files of the form "fName.xxx.yyy.data" and
41 C "fName.xxx.yyy.meta". If jrecord > 0, a meta-file is created.
42 C Currently, the meta-files are not read because it is difficult
43 C to parse files in fortran. We should read meta information before
44 C adding records to an existing multi-record file.
45 C The precision of the file is decsribed by filePrec, set either
46 C to floatPrec32 or floatPrec64. The precision or declaration of
47 C the array argument must be consistently described by the char*(2)
48 C string arrType, either "RS" or "RL".
49 C (kSize,kLo,kHi) allows for both 2-D and 3-D arrays to be handled, with
50 C the option to only write a sub-set of consecutive vertical levels (from
51 C kLo to kHi); (kSize,kLo,kHi)=(1,1,1) implies a 2-D model field and
52 C (kSize,kLo,kHi)=(Nr,1,Nr) implies a 3-D model field.
53 C irecord=|jrecord| is the record number to be written and must be >= 1.
54 C NOTE: It is currently assumed that the highest record number in the file
55 C was the last record written. Nor is there a consistency check between the
56 C routine arguments and file, i.e., if you write record 2 after record 4
57 C the meta information will record the number of records to be 2. This,
58 C again, is because we have read the meta information. To be fixed.
59 C
60 C Created: 03/16/99 adcroft@mit.edu
61 C Changed: 01/06/02 menemenlis@jpl.nasa.gov
62 C added useSingleCpuIO hack
63 C changed: 1/23/04 afe@ocean.mit.edu
64 C added exch2 handling -- yes, the globalfile logic is nuts
65 CEOP
66
67 C !USES:
68 IMPLICIT NONE
69 C Global variables / common blocks
70 #include "SIZE.h"
71 #include "EEPARAMS.h"
72 #include "PARAMS.h"
73 #ifdef ALLOW_EXCH2
74 #include "W2_EXCH2_SIZE.h"
75 #include "W2_EXCH2_TOPOLOGY.h"
76 #include "W2_EXCH2_PARAMS.h"
77 #endif /* ALLOW_EXCH2 */
78 #include "EEBUFF_SCPU.h"
79
80 C !INPUT PARAMETERS:
81 CHARACTER*(*) fName
82 INTEGER filePrec
83 LOGICAL globalFile
84 LOGICAL useCurrentDir
85 CHARACTER*(2) arrType
86 INTEGER kSize, kLo, kHi
87 cph(
88 cph Real arr(*)
89 _RL arr(1-oLx:sNx+oLx,1-oLy:sNy+oLy,kSize,nSx,nSy)
90 cph)
91 INTEGER jrecord
92 INTEGER myIter
93 INTEGER myThid
94 C !OUTPUT PARAMETERS:
95
96 C !FUNCTIONS
97 INTEGER ILNBLNK
98 INTEGER MDS_RECLEN
99 LOGICAL MASTER_CPU_IO
100 EXTERNAL ILNBLNK
101 EXTERNAL MDS_RECLEN
102 EXTERNAL MASTER_CPU_IO
103
104 C !LOCAL VARIABLES:
105 CHARACTER*(MAX_LEN_FNAM) dataFName,metaFName,pfName
106 CHARACTER*(MAX_LEN_MBUF) msgBuf
107 LOGICAL fileIsOpen
108 LOGICAL iAmDoingIO
109 LOGICAL writeMetaF
110 LOGICAL useExch2ioLayOut
111 LOGICAL zeroBuff
112 INTEGER xSize, ySize
113 INTEGER irecord
114 INTEGER iG,jG,bi,bj,i,j,k,nNz
115 INTEGER irec,dUnit,IL,pIL
116 INTEGER dimList(3,3), nDims, map2gl(2)
117 INTEGER length_of_rec
118 Real*4 r4seg(sNx)
119 Real*8 r8seg(sNx)
120 Real*4 r4loc(sNx,sNy)
121 Real*8 r8loc(sNx,sNy)
122 INTEGER tNx, tNy, global_nTx
123 INTEGER tBx, tBy, iGjLoc, jGjLoc
124 #ifdef ALLOW_EXCH2
125 INTEGER tN
126 #endif /* ALLOW_EXCH2 */
127
128 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
129 C Set dimensions:
130 xSize = Nx
131 ySize = Ny
132 useExch2ioLayOut = .FALSE.
133 #ifdef ALLOW_EXCH2
134 IF ( W2_useE2ioLayOut ) THEN
135 xSize = exch2_global_Nx
136 ySize = exch2_global_Ny
137 useExch2ioLayOut = .TRUE.
138 ENDIF
139 #endif /* ALLOW_EXCH2 */
140
141 C- default:
142 iGjLoc = 0
143 jGjLoc = 1
144
145 C Assume nothing
146 fileIsOpen = .FALSE.
147 IL = ILNBLNK( fName )
148 pIL = ILNBLNK( mdsioLocalDir )
149 nNz = 1 + kHi - kLo
150 irecord = ABS(jrecord)
151 writeMetaF = jrecord.GT.0
152
153 C Only do I/O if I am the master thread (and mpi process 0 IF useSingleCpuIO):
154 iAmDoingIO = MASTER_CPU_IO(myThid)
155
156 C Only do I/O if I am the master thread
157 IF ( iAmDoingIO ) THEN
158
159 C Record number must be >= 1
160 IF (irecord .LT. 1) THEN
161 WRITE(msgBuf,'(A,I9.8)')
162 & ' MDS_WRITE_FIELD: argument irecord = ',irecord
163 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
164 & SQUEEZE_RIGHT , myThid)
165 WRITE(msgBuf,'(A)')
166 & ' MDS_WRITE_FIELD: invalid value for irecord'
167 CALL PRINT_ERROR( msgBuf, myThid )
168 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
169 ENDIF
170 C check for valid sub-set of levels:
171 IF ( kLo.LT.1 .OR. kHi.GT.kSize ) THEN
172 WRITE(msgBuf,'(3(A,I6))')
173 & ' MDS_WRITE_FIELD: arguments kSize=', kSize,
174 & ' , kLo=', kLo, ' , kHi=', kHi
175 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
176 & SQUEEZE_RIGHT , myThid)
177 WRITE(msgBuf,'(A)')
178 & ' MDS_WRITE_FIELD: invalid sub-set of levels'
179 CALL PRINT_ERROR( msgBuf, myThid )
180 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
181 ENDIF
182
183 C Assign special directory
184 IF ( useCurrentDir .OR. pIL.EQ.0 ) THEN
185 pfName = fName
186 ELSE
187 WRITE(pfName,'(2A)') mdsioLocalDir(1:pIL), fName(1:IL)
188 ENDIF
189 pIL=ILNBLNK( pfName )
190
191 C Assign a free unit number as the I/O channel for this routine
192 CALL MDSFINDUNIT( dUnit, myThid )
193
194 C- endif iAmDoingIO
195 ENDIF
196
197 C If option globalFile is desired but does not work or if
198 C globalFile is too slow, then try using single-CPU I/O.
199 IF (useSingleCpuIO) THEN
200
201 C Master thread of process 0, only, opens a global file
202 IF ( iAmDoingIO ) THEN
203 WRITE(dataFName,'(2a)') fName(1:IL),'.data'
204 length_of_rec = MDS_RECLEN( filePrec, xSize*ySize, myThid )
205 IF (irecord .EQ. 1) THEN
206 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
207 & access='direct', recl=length_of_rec )
208 ELSE
209 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
210 & access='direct', recl=length_of_rec )
211 ENDIF
212 ENDIF
213
214 C Gather array and WRITE it to file, one vertical level at a time
215 DO k=kLo,kHi
216 zeroBuff = k.EQ.kLo
217 C- copy from arr(level=k) to 2-D "local":
218 IF ( filePrec.EQ.precFloat32 ) THEN
219 IF ( arrType.EQ.'RS' ) THEN
220 CALL MDS_PASS_R4toRS( sharedLocBuf_r4, arr,
221 I k, kSize, 0,0, .FALSE., myThid )
222 ELSEIF ( arrType.EQ.'RL' ) THEN
223 CALL MDS_PASS_R4toRL( sharedLocBuf_r4, arr,
224 I k, kSize, 0,0, .FALSE., myThid )
225 ELSE
226 WRITE(msgBuf,'(A)')
227 & ' MDS_WRITE_FIELD: illegal value for arrType'
228 CALL PRINT_ERROR( msgBuf, myThid )
229 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
230 ENDIF
231 CALL GATHER_2D_R4(
232 O xy_buffer_r4,
233 I sharedLocBuf_r4,
234 I xSize, ySize,
235 I useExch2ioLayOut, zeroBuff, myThid )
236 ELSEIF ( filePrec.EQ.precFloat64 ) THEN
237 IF ( arrType.EQ.'RS' ) THEN
238 CALL MDS_PASS_R8toRS( sharedLocBuf_r8, arr,
239 I k, kSize, 0,0, .FALSE., myThid )
240 ELSEIF ( arrType.EQ.'RL' ) THEN
241 CALL MDS_PASS_R8toRL( sharedLocBuf_r8, arr,
242 I k, kSize, 0,0, .FALSE., myThid )
243 ELSE
244 WRITE(msgBuf,'(A)')
245 & ' MDS_WRITE_FIELD: illegal value for arrType'
246 CALL PRINT_ERROR( msgBuf, myThid )
247 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
248 ENDIF
249 CALL GATHER_2D_R8(
250 O xy_buffer_r8,
251 I sharedLocBuf_r8,
252 I xSize, ySize,
253 I useExch2ioLayOut, zeroBuff, myThid )
254 ELSE
255 WRITE(msgBuf,'(A)')
256 & ' MDS_WRITE_FIELD: illegal value for filePrec'
257 CALL PRINT_ERROR( msgBuf, myThid )
258 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
259 ENDIF
260
261 IF ( iAmDoingIO ) THEN
262 irec = 1 + k-kLo + (irecord-1)*nNz
263 IF (filePrec .EQ. precFloat32) THEN
264 #ifdef _BYTESWAPIO
265 CALL MDS_BYTESWAPR4( xSize*ySize, xy_buffer_r4 )
266 #endif
267 WRITE(dUnit,rec=irec) ( xy_buffer_r4(i),i=1,xSize*ySize )
268 ELSEIF (filePrec .EQ. precFloat64) THEN
269 #ifdef _BYTESWAPIO
270 CALL MDS_BYTESWAPR8( xSize*ySize, xy_buffer_r8 )
271 #endif
272 WRITE(dUnit,rec=irec) ( xy_buffer_r8(i),i=1,xSize*ySize )
273 ELSE
274 WRITE(msgBuf,'(A)')
275 & ' MDS_WRITE_FIELD: illegal value for filePrec'
276 CALL PRINT_ERROR( msgBuf, myThid )
277 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
278 ENDIF
279 C- end if iAmDoingIO
280 ENDIF
281 C- end of k loop
282 ENDDO
283
284 C Close data-file
285 IF ( iAmDoingIO ) THEN
286 CLOSE( dUnit )
287 ENDIF
288
289 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
290 C--- else .NOT.useSingleCpuIO
291 ELSE
292
293 C Only do I/O if I am the master thread
294 IF ( iAmDoingIO ) THEN
295
296 C If we are writing to a global file then we open it here
297 IF (globalFile) THEN
298 WRITE(dataFName,'(2a)') fName(1:IL),'.data'
299 length_of_rec = MDS_RECLEN( filePrec, sNx, myThid )
300 IF (irecord .EQ. 1) THEN
301 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
302 & access='direct', recl=length_of_rec )
303 ELSE
304 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
305 & access='direct', recl=length_of_rec )
306 ENDIF
307 fileIsOpen=.TRUE.
308 ENDIF
309
310 C Loop over all tiles
311 DO bj=1,nSy
312 DO bi=1,nSx
313
314 tNx = sNx
315 tNy = sNy
316 global_nTx = xSize/sNx
317 tBx = myXGlobalLo-1 + (bi-1)*sNx
318 tBy = myYGlobalLo-1 + (bj-1)*sNy
319 #ifdef ALLOW_EXCH2
320 IF ( useExch2ioLayOut ) THEN
321 tN = W2_myTileList(bi)
322 c tNx = exch2_tNx(tN)
323 c tNy = exch2_tNy(tN)
324 c global_nTx = exch2_global_Nx/tNx
325 tBx = exch2_txGlobalo(tN) - 1
326 tBy = exch2_tyGlobalo(tN) - 1
327 IF ( exch2_mydNx(tN) .GT. xSize ) THEN
328 C- face x-size larger than glob-size : fold it
329 iGjLoc = 0
330 jGjLoc = exch2_mydNx(tN) / xSize
331 ELSEIF ( exch2_tNy(tN) .GT. ySize ) THEN
332 C- tile y-size larger than glob-size : make a long line
333 iGjLoc = exch2_mydNx(tN)
334 jGjLoc = 0
335 ELSE
336 C- default (face fit into global-IO-array)
337 iGjLoc = 0
338 jGjLoc = 1
339 ENDIF
340 ENDIF
341 #endif /* ALLOW_EXCH2 */
342
343 IF (globalFile) THEN
344 C--- Case of 1 Global file:
345
346 DO k=kLo,kHi
347 DO j=1,tNy
348 irec = 1 + ( tBx + (j-1)*iGjLoc )/tNx
349 & + ( tBy + (j-1)*jGjLoc )*global_nTx
350 & +( k-kLo + (irecord-1)*nNz )*global_nTx*ySize
351 IF (filePrec .EQ. precFloat32) THEN
352 IF (arrType .EQ. 'RS') THEN
353 CALL MDS_SEG4toRS( j,bi,bj,k,kSize, r4seg,.FALSE.,arr )
354 ELSEIF (arrType .EQ. 'RL') THEN
355 CALL MDS_SEG4toRL( j,bi,bj,k,kSize, r4seg,.FALSE.,arr )
356 ELSE
357 WRITE(msgBuf,'(A)')
358 & ' MDS_WRITE_FIELD: illegal value for arrType'
359 CALL PRINT_ERROR( msgBuf, myThid )
360 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
361 ENDIF
362 #ifdef _BYTESWAPIO
363 CALL MDS_BYTESWAPR4( sNx, r4seg )
364 #endif
365 WRITE(dUnit,rec=irec) r4seg
366 ELSEIF (filePrec .EQ. precFloat64) THEN
367 IF (arrType .EQ. 'RS') THEN
368 CALL MDS_SEG8toRS( j,bi,bj,k,kSize, r8seg,.FALSE.,arr )
369 ELSEIF (arrType .EQ. 'RL') THEN
370 CALL MDS_SEG8toRL( j,bi,bj,k,kSize, r8seg,.FALSE.,arr )
371 ELSE
372 WRITE(msgBuf,'(A)')
373 & ' MDS_WRITE_FIELD: illegal value for arrType'
374 CALL PRINT_ERROR( msgBuf, myThid )
375 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
376 ENDIF
377 #ifdef _BYTESWAPIO
378 CALL MDS_BYTESWAPR8( sNx, r8seg )
379 #endif
380 WRITE(dUnit,rec=irec) r8seg
381 ELSE
382 WRITE(msgBuf,'(A)')
383 & ' MDS_WRITE_FIELD: illegal value for filePrec'
384 CALL PRINT_ERROR( msgBuf, myThid )
385 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
386 ENDIF
387 C End of j loop
388 ENDDO
389 C End of k loop
390 ENDDO
391
392 ELSE
393 C--- Case of 1 file per tile (globalFile=F):
394
395 C If we are writing to a tiled MDS file then we open each one here
396 iG=bi+(myXGlobalLo-1)/sNx
397 jG=bj+(myYGlobalLo-1)/sNy
398 WRITE(dataFName,'(2A,I3.3,A,I3.3,A)')
399 & pfName(1:pIL),'.',iG,'.',jG,'.data'
400 length_of_rec = MDS_RECLEN( filePrec, sNx*sNy, myThid )
401 IF (irecord .EQ. 1) THEN
402 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
403 & access='direct', recl=length_of_rec )
404 ELSE
405 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
406 & access='direct', recl=length_of_rec )
407 ENDIF
408 fileIsOpen=.TRUE.
409
410 DO k=kLo,kHi
411
412 irec = 1 + k-kLo + (irecord-1)*nNz
413 IF (filePrec .EQ. precFloat32) THEN
414 IF ( arrType.EQ.'RS' ) THEN
415 CALL MDS_PASS_R4toRS( r4loc, arr,
416 I k, kSize, bi,bj,.FALSE., myThid )
417 ELSEIF ( arrType.EQ.'RL' ) THEN
418 CALL MDS_PASS_R4toRL( r4loc, arr,
419 I k, kSize, bi,bj,.FALSE., myThid )
420 ELSE
421 WRITE(msgBuf,'(A)')
422 & ' MDS_WRITE_FIELD: illegal value for arrType'
423 CALL PRINT_ERROR( msgBuf, myThid )
424 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
425 ENDIF
426 #ifdef _BYTESWAPIO
427 CALL MDS_BYTESWAPR4( sNx*sNy, r4loc )
428 #endif
429 WRITE(dUnit,rec=irec) r4loc
430 ELSEIF (filePrec .EQ. precFloat64) THEN
431 IF ( arrType.EQ.'RS' ) THEN
432 CALL MDS_PASS_R8toRS( r8loc, arr,
433 I k, kSize, bi,bj,.FALSE., myThid )
434 ELSEIF ( arrType.EQ.'RL' ) THEN
435 CALL MDS_PASS_R8toRL( r8loc, arr,
436 I k, kSize, bi,bj,.FALSE., myThid )
437 ELSE
438 WRITE(msgBuf,'(A)')
439 & ' MDS_WRITE_FIELD: illegal value for arrType'
440 CALL PRINT_ERROR( msgBuf, myThid )
441 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
442 ENDIF
443 #ifdef _BYTESWAPIO
444 CALL MDS_BYTESWAPR8( sNx*sNy, r8loc )
445 #endif
446 WRITE(dUnit,rec=irec) r8loc
447 ELSE
448 WRITE(msgBuf,'(A)')
449 & ' MDS_WRITE_FIELD: illegal value for filePrec'
450 CALL PRINT_ERROR( msgBuf, myThid )
451 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
452 ENDIF
453
454 C End of k loop
455 ENDDO
456
457 C here We close the tiled MDS file
458 IF ( fileIsOpen ) THEN
459 CLOSE( dUnit )
460 fileIsOpen = .FALSE.
461 ENDIF
462
463 C--- End Global File / tile-file cases
464 ENDIF
465
466 C Create meta-file for each tile if we are tiling
467 IF ( .NOT.globalFile .AND. writeMetaF ) THEN
468 iG=bi+(myXGlobalLo-1)/sNx
469 jG=bj+(myYGlobalLo-1)/sNy
470 WRITE(metaFname,'(2A,I3.3,A,I3.3,A)')
471 & pfName(1:pIL),'.',iG,'.',jG,'.meta'
472 dimList(1,1) = xSize
473 dimList(2,1) = tBx + 1
474 dimList(3,1) = tBx + tNx
475 dimList(1,2) = ySize
476 dimList(2,2) = tBy + 1
477 dimList(3,2) = tBy + tNy
478 dimList(1,3) = nNz
479 dimList(2,3) = 1
480 dimList(3,3) = nNz
481 c dimList(1,3) = kSize
482 c dimList(2,3) = kLo
483 c dimList(3,3) = kHi
484 nDims = 3
485 IF ( nNz.EQ.1 ) nDims = 2
486 map2gl(1) = iGjLoc
487 map2gl(2) = jGjLoc
488 CALL MDS_WRITE_META(
489 I metaFName, dataFName, the_run_name, ' ',
490 I filePrec, nDims,dimList,map2gl, 0, ' ',
491 I 0, UNSET_RL, irecord, myIter, myThid )
492 ENDIF
493
494 C End of bi,bj loops
495 ENDDO
496 ENDDO
497
498 C If global file was opened then close it
499 IF (fileIsOpen .AND. globalFile) THEN
500 CLOSE( dUnit )
501 fileIsOpen = .FALSE.
502 ENDIF
503
504 C- endif iAmDoingIO
505 ENDIF
506
507 C if useSingleCpuIO / else / end
508 ENDIF
509
510 C Create meta-file for the global-file (also if useSingleCpuIO)
511 IF ( writeMetaF .AND. iAmDoingIO .AND.
512 & (globalFile .OR. useSingleCpuIO) ) THEN
513 WRITE(metaFName,'(2A)') fName(1:IL),'.meta'
514 dimList(1,1) = xSize
515 dimList(2,1) = 1
516 dimList(3,1) = xSize
517 dimList(1,2) = ySize
518 dimList(2,2) = 1
519 dimList(3,2) = ySize
520 dimList(1,3) = nNz
521 dimList(2,3) = 1
522 dimList(3,3) = nNz
523 c dimList(1,3) = kSize
524 c dimList(2,3) = kLo
525 c dimList(3,3) = kHi
526 nDims = 3
527 IF ( nNz.EQ.1 ) nDims = 2
528 map2gl(1) = 0
529 map2gl(2) = 1
530 CALL MDS_WRITE_META(
531 I metaFName, dataFName, the_run_name, ' ',
532 I filePrec, nDims,dimList,map2gl, 0, ' ',
533 I 0, UNSET_RL, irecord, myIter, myThid )
534 c I metaFName, dataFName, the_run_name, titleLine,
535 c I filePrec, nDims, dimList, map2gl, nFlds, fldList,
536 c I nTimRec, timList, irecord, myIter, myThid )
537 ENDIF
538
539 C To be safe, make other processes wait for I/O completion
540 _BARRIER
541
542 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
543 RETURN
544 END

  ViewVC Help
Powered by ViewVC 1.1.22