/[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.11 - (show annotations) (download)
Mon Jun 8 03:32:33 2009 UTC (16 years ago) by jmc
Branch: MAIN
Changes since 1.10: +149 -142 lines
 - do tiled IO in 1 piece (all levels at a time)
 - multi-threaded: allow to read/write local (non-shared) array
   (was already working with singleCpuIO ; now works also without);
 - move barrier calls outside gather/scatter_2d to mds_read/write field

1 C $Header: /u/gcmpack/MITgcm/pkg/mdsio/mdsio_write_field.F,v 1.10 2009/06/01 14:20:31 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 #include "MDSIO_BUFF_3D.h"
80
81 C !INPUT PARAMETERS:
82 CHARACTER*(*) fName
83 INTEGER filePrec
84 LOGICAL globalFile
85 LOGICAL useCurrentDir
86 CHARACTER*(2) arrType
87 INTEGER kSize, kLo, kHi
88 cph(
89 cph Real arr(*)
90 _RL arr(1-oLx:sNx+oLx,1-oLy:sNy+oLy,kSize,nSx,nSy)
91 cph)
92 INTEGER jrecord
93 INTEGER myIter
94 INTEGER myThid
95 C !OUTPUT PARAMETERS:
96
97 C !FUNCTIONS
98 INTEGER ILNBLNK
99 INTEGER MDS_RECLEN
100 LOGICAL MASTER_CPU_IO
101 EXTERNAL ILNBLNK
102 EXTERNAL MDS_RECLEN
103 EXTERNAL MASTER_CPU_IO
104
105 C !LOCAL VARIABLES:
106 C bBij :: base shift in Buffer index for tile bi,bj
107 CHARACTER*(MAX_LEN_FNAM) dataFName,metaFName,pfName
108 CHARACTER*(MAX_LEN_MBUF) msgBuf
109 LOGICAL fileIsOpen
110 LOGICAL iAmDoingIO
111 LOGICAL writeMetaF
112 LOGICAL useExch2ioLayOut
113 LOGICAL zeroBuff
114 INTEGER xSize, ySize
115 INTEGER irecord
116 INTEGER iG,jG,bi,bj
117 INTEGER i1,i2,i,j,k,nNz
118 INTEGER irec,dUnit,IL,pIL
119 INTEGER dimList(3,3), nDims, map2gl(2)
120 INTEGER length_of_rec
121 INTEGER bBij
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 Record number must be >= 1
157 IF (irecord .LT. 1) THEN
158 WRITE(msgBuf,'(A,I9.8)')
159 & ' MDS_WRITE_FIELD: argument irecord = ',irecord
160 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
161 & SQUEEZE_RIGHT , myThid)
162 WRITE(msgBuf,'(A)')
163 & ' MDS_WRITE_FIELD: invalid value for irecord'
164 CALL PRINT_ERROR( msgBuf, myThid )
165 CALL ALL_PROC_DIE( myThid )
166 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
167 ENDIF
168 C check for valid sub-set of levels:
169 IF ( kLo.LT.1 .OR. kHi.GT.kSize ) THEN
170 WRITE(msgBuf,'(3(A,I6))')
171 & ' MDS_WRITE_FIELD: arguments kSize=', kSize,
172 & ' , kLo=', kLo, ' , kHi=', kHi
173 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
174 & SQUEEZE_RIGHT , myThid)
175 WRITE(msgBuf,'(A)')
176 & ' MDS_WRITE_FIELD: invalid sub-set of levels'
177 CALL PRINT_ERROR( msgBuf, myThid )
178 CALL ALL_PROC_DIE( myThid )
179 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
180 ENDIF
181 C check for 3-D Buffer size:
182 IF ( .NOT.useSingleCpuIO .AND. nNz.GT.size3dBuf ) THEN
183 WRITE(msgBuf,'(3(A,I6))')
184 & ' MDS_WRITE_FIELD: Nb Lev to write =', nNz,
185 & ' >', size3dBuf, ' = buffer 3rd Dim'
186 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
187 & SQUEEZE_RIGHT , myThid)
188 WRITE(msgBuf,'(A)')
189 & ' MDS_WRITE_FIELD: buffer 3rd Dim. too small'
190 CALL PRINT_ERROR( msgBuf, myThid )
191 WRITE(msgBuf,'(A)')
192 & ' increase "size3dBuf" in "MDSIO_BUFF_3D.h" and recompile'
193 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
194 & SQUEEZE_RIGHT , myThid)
195 CALL ALL_PROC_DIE( myThid )
196 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
197 ENDIF
198
199 C Only do I/O if I am the master thread
200 IF ( iAmDoingIO ) THEN
201
202 C Assign special directory
203 IF ( useCurrentDir .OR. pIL.EQ.0 ) THEN
204 pfName = fName
205 ELSE
206 WRITE(pfName,'(2A)') mdsioLocalDir(1:pIL), fName(1:IL)
207 ENDIF
208 pIL=ILNBLNK( pfName )
209
210 C Assign a free unit number as the I/O channel for this routine
211 CALL MDSFINDUNIT( dUnit, myThid )
212
213 C- endif iAmDoingIO
214 ENDIF
215
216 C If option globalFile is desired but does not work or if
217 C globalFile is too slow, then try using single-CPU I/O.
218 IF (useSingleCpuIO) THEN
219
220 C Master thread of process 0, only, opens a global file
221 IF ( iAmDoingIO ) THEN
222 WRITE(dataFName,'(2a)') fName(1:IL),'.data'
223 length_of_rec = MDS_RECLEN( filePrec, xSize*ySize, myThid )
224 IF (irecord .EQ. 1) THEN
225 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
226 & access='direct', recl=length_of_rec )
227 ELSE
228 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
229 & access='direct', recl=length_of_rec )
230 ENDIF
231 ENDIF
232
233 C Gather array and write it to file, one vertical level at a time
234 DO k=kLo,kHi
235 zeroBuff = k.EQ.kLo
236 C- copy from arr(level=k) to 2-D "local":
237 IF ( filePrec.EQ.precFloat32 ) THEN
238 IF ( arrType.EQ.'RS' ) THEN
239 CALL MDS_PASS_R4toRS( sharedLocBuf_r4, arr,
240 I 1, k, kSize, 0, 0, .FALSE., myThid )
241 ELSEIF ( arrType.EQ.'RL' ) THEN
242 CALL MDS_PASS_R4toRL( sharedLocBuf_r4, arr,
243 I 1, k, kSize, 0, 0, .FALSE., myThid )
244 ELSE
245 WRITE(msgBuf,'(A)')
246 & ' MDS_WRITE_FIELD: illegal value for arrType'
247 CALL PRINT_ERROR( msgBuf, myThid )
248 CALL ALL_PROC_DIE( myThid )
249 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
250 ENDIF
251 C Wait for all threads to finish filling shared buffer
252 CALL BAR2( myThid )
253 CALL GATHER_2D_R4(
254 O xy_buffer_r4,
255 I sharedLocBuf_r4,
256 I xSize, ySize,
257 I useExch2ioLayOut, zeroBuff, myThid )
258 ELSEIF ( filePrec.EQ.precFloat64 ) THEN
259 IF ( arrType.EQ.'RS' ) THEN
260 CALL MDS_PASS_R8toRS( sharedLocBuf_r8, arr,
261 I 1, k, kSize, 0, 0, .FALSE., myThid )
262
263 ELSEIF ( arrType.EQ.'RL' ) THEN
264 CALL MDS_PASS_R8toRL( sharedLocBuf_r8, arr,
265 I 1, k, kSize, 0, 0, .FALSE., myThid )
266 ELSE
267 WRITE(msgBuf,'(A)')
268 & ' MDS_WRITE_FIELD: illegal value for arrType'
269 CALL PRINT_ERROR( msgBuf, myThid )
270 CALL ALL_PROC_DIE( myThid )
271 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
272 ENDIF
273 C Wait for all threads to finish filling shared buffer
274 CALL BAR2( myThid )
275 CALL GATHER_2D_R8(
276 O xy_buffer_r8,
277 I sharedLocBuf_r8,
278 I xSize, ySize,
279 I useExch2ioLayOut, zeroBuff, myThid )
280 ELSE
281 WRITE(msgBuf,'(A)')
282 & ' MDS_WRITE_FIELD: illegal value for filePrec'
283 CALL PRINT_ERROR( msgBuf, myThid )
284 CALL ALL_PROC_DIE( myThid )
285 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
286 ENDIF
287 C Make other threads wait for "gather" completion so that after this,
288 C shared buffer can again be modified by any thread
289 CALL BAR2( myThid )
290
291 IF ( iAmDoingIO ) THEN
292 irec = 1 + k-kLo + (irecord-1)*nNz
293 IF ( filePrec.EQ.precFloat32 ) THEN
294 #ifdef _BYTESWAPIO
295 CALL MDS_BYTESWAPR4( xSize*ySize, xy_buffer_r4 )
296 #endif
297 WRITE(dUnit,rec=irec) ( xy_buffer_r4(i),i=1,xSize*ySize )
298 ELSE
299 #ifdef _BYTESWAPIO
300 CALL MDS_BYTESWAPR8( xSize*ySize, xy_buffer_r8 )
301 #endif
302 WRITE(dUnit,rec=irec) ( xy_buffer_r8(i),i=1,xSize*ySize )
303 ENDIF
304 C- end if iAmDoingIO
305 ENDIF
306 C- end of k loop
307 ENDDO
308
309 C Close data-file
310 IF ( iAmDoingIO ) THEN
311 CLOSE( dUnit )
312 ENDIF
313
314 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
315 C--- else .NOT.useSingleCpuIO
316 ELSE
317
318 C--- Copy from arr to 3-D buffer (multi-threads):
319 IF ( filePrec.EQ.precFloat32 ) THEN
320 IF ( arrType.EQ.'RS' ) THEN
321 CALL MDS_PASS_R4toRS( shared3dBuf_r4, arr,
322 I nNz, kLo, kSize, 0,0, .FALSE., myThid )
323 ELSEIF ( arrType.EQ.'RL' ) THEN
324 CALL MDS_PASS_R4toRL( shared3dBuf_r4, arr,
325 I nNz, kLo, kSize, 0,0, .FALSE., myThid )
326 ELSE
327 WRITE(msgBuf,'(A)')
328 & ' MDS_WRITE_FIELD: illegal value for arrType'
329 CALL PRINT_ERROR( msgBuf, myThid )
330 CALL ALL_PROC_DIE( myThid )
331 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
332 ENDIF
333 ELSEIF ( filePrec.EQ.precFloat64 ) THEN
334 IF ( arrType.EQ.'RS' ) THEN
335 CALL MDS_PASS_R8toRS( shared3dBuf_r8, arr,
336 I nNz, kLo, kSize, 0,0, .FALSE., myThid )
337 ELSEIF ( arrType.EQ.'RL' ) THEN
338 CALL MDS_PASS_R8toRL( shared3dBuf_r8, arr,
339 I nNz, kLo, kSize, 0,0, .FALSE., myThid )
340 ELSE
341 WRITE(msgBuf,'(A)')
342 & ' MDS_WRITE_FIELD: illegal value for arrType'
343 CALL PRINT_ERROR( msgBuf, myThid )
344 CALL ALL_PROC_DIE( myThid )
345 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
346 ENDIF
347 ELSE
348 WRITE(msgBuf,'(A)')
349 & ' MDS_WRITE_FIELD: illegal value for filePrec'
350 CALL PRINT_ERROR( msgBuf, myThid )
351 CALL ALL_PROC_DIE( myThid )
352 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
353 ENDIF
354
355 C Wait for all threads to finish filling shared buffer
356 CALL BAR2( myThid )
357
358 C Only do I/O if I am the master thread
359 IF ( iAmDoingIO ) THEN
360
361 #ifdef _BYTESWAPIO
362 IF ( filePrec.EQ.precFloat32 ) THEN
363 CALL MDS_BYTESWAPR4( sNx*sNy*nNz*nSx*nSy, shared3dBuf_r4 )
364 ELSE
365 CALL MDS_BYTESWAPR8( sNx*sNy*nNz*nSx*nSy, shared3dBuf_r8 )
366 ENDIF
367 #endif
368
369 C If we are writing to a global file then we open it here
370 IF (globalFile) THEN
371 WRITE(dataFName,'(2a)') fName(1:IL),'.data'
372 length_of_rec = MDS_RECLEN( filePrec, sNx, myThid )
373 IF (irecord .EQ. 1) THEN
374 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
375 & access='direct', recl=length_of_rec )
376 ELSE
377 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
378 & access='direct', recl=length_of_rec )
379 ENDIF
380 fileIsOpen=.TRUE.
381 ENDIF
382
383 C Loop over all tiles
384 DO bj=1,nSy
385 DO bi=1,nSx
386 bBij = sNx*sNy*nNz*( bi-1 + (bj-1)*nSx )
387
388 tNx = sNx
389 tNy = sNy
390 global_nTx = xSize/sNx
391 tBx = myXGlobalLo-1 + (bi-1)*sNx
392 tBy = myYGlobalLo-1 + (bj-1)*sNy
393 #ifdef ALLOW_EXCH2
394 IF ( useExch2ioLayOut ) THEN
395 tN = W2_myTileList(bi)
396 c tNx = exch2_tNx(tN)
397 c tNy = exch2_tNy(tN)
398 c global_nTx = exch2_global_Nx/tNx
399 tBx = exch2_txGlobalo(tN) - 1
400 tBy = exch2_tyGlobalo(tN) - 1
401 IF ( exch2_mydNx(tN) .GT. xSize ) THEN
402 C- face x-size larger than glob-size : fold it
403 iGjLoc = 0
404 jGjLoc = exch2_mydNx(tN) / xSize
405 ELSEIF ( exch2_tNy(tN) .GT. ySize ) THEN
406 C- tile y-size larger than glob-size : make a long line
407 iGjLoc = exch2_mydNx(tN)
408 jGjLoc = 0
409 ELSE
410 C- default (face fit into global-IO-array)
411 iGjLoc = 0
412 jGjLoc = 1
413 ENDIF
414 ENDIF
415 #endif /* ALLOW_EXCH2 */
416
417 IF (globalFile) THEN
418 C--- Case of 1 Global file:
419
420 DO k=kLo,kHi
421 DO j=1,tNy
422 irec = 1 + ( tBx + (j-1)*iGjLoc )/tNx
423 & + ( tBy + (j-1)*jGjLoc )*global_nTx
424 & +( k-kLo + (irecord-1)*nNz )*global_nTx*ySize
425 i1 = bBij + 1 + (j-1)*sNx + (k-kLo)*sNx*sNy
426 i2 = bBij + j*sNx + (k-kLo)*sNx*sNy
427 IF ( filePrec.EQ.precFloat32 ) THEN
428 WRITE(dUnit,rec=irec) (shared3dBuf_r4(i),i=i1,i2)
429 ELSE
430 WRITE(dUnit,rec=irec) (shared3dBuf_r8(i),i=i1,i2)
431 ENDIF
432 C End of j,k loops
433 ENDDO
434 ENDDO
435
436 ELSE
437 C--- Case of 1 file per tile (globalFile=F):
438
439 C If we are writing to a tiled MDS file then we open each one here
440 iG=bi+(myXGlobalLo-1)/sNx
441 jG=bj+(myYGlobalLo-1)/sNy
442 WRITE(dataFName,'(2A,I3.3,A,I3.3,A)')
443 & pfName(1:pIL),'.',iG,'.',jG,'.data'
444 length_of_rec = MDS_RECLEN( filePrec, sNx*sNy*nNz, myThid )
445 IF (irecord .EQ. 1) THEN
446 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
447 & access='direct', recl=length_of_rec )
448 ELSE
449 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
450 & access='direct', recl=length_of_rec )
451 ENDIF
452 fileIsOpen=.TRUE.
453
454 irec = irecord
455 i1 = bBij + 1
456 i2 = bBij + sNx*sNy*nNz
457 IF ( filePrec.EQ.precFloat32 ) THEN
458 WRITE(dUnit,rec=irec) (shared3dBuf_r4(i),i=i1,i2)
459 ELSE
460 WRITE(dUnit,rec=irec) (shared3dBuf_r8(i),i=i1,i2)
461 ENDIF
462
463 C here We close the tiled MDS file
464 IF ( fileIsOpen ) THEN
465 CLOSE( dUnit )
466 fileIsOpen = .FALSE.
467 ENDIF
468
469 C--- End Global File / tile-file cases
470 ENDIF
471
472 C Create meta-file for each tile if we are tiling
473 IF ( .NOT.globalFile .AND. writeMetaF ) THEN
474 iG=bi+(myXGlobalLo-1)/sNx
475 jG=bj+(myYGlobalLo-1)/sNy
476 WRITE(metaFname,'(2A,I3.3,A,I3.3,A)')
477 & pfName(1:pIL),'.',iG,'.',jG,'.meta'
478 dimList(1,1) = xSize
479 dimList(2,1) = tBx + 1
480 dimList(3,1) = tBx + tNx
481 dimList(1,2) = ySize
482 dimList(2,2) = tBy + 1
483 dimList(3,2) = tBy + tNy
484 dimList(1,3) = nNz
485 dimList(2,3) = 1
486 dimList(3,3) = nNz
487 c dimList(1,3) = kSize
488 c dimList(2,3) = kLo
489 c dimList(3,3) = kHi
490 nDims = 3
491 IF ( nNz.EQ.1 ) nDims = 2
492 map2gl(1) = iGjLoc
493 map2gl(2) = jGjLoc
494 CALL MDS_WRITE_META(
495 I metaFName, dataFName, the_run_name, ' ',
496 I filePrec, nDims,dimList,map2gl, 0, ' ',
497 I 0, UNSET_RL, irecord, myIter, myThid )
498 ENDIF
499
500 C End of bi,bj loops
501 ENDDO
502 ENDDO
503
504 C If global file was opened then close it
505 IF (fileIsOpen .AND. globalFile) THEN
506 CLOSE( dUnit )
507 fileIsOpen = .FALSE.
508 ENDIF
509
510 C- endif iAmDoingIO
511 ENDIF
512
513 C Make other threads wait for I/O completion so that after this,
514 C 3-D buffer can again be modified by any thread
515 CALL BAR2( myThid )
516
517 C if useSingleCpuIO / else / end
518 ENDIF
519
520 C Create meta-file for the global-file (also if useSingleCpuIO)
521 IF ( writeMetaF .AND. iAmDoingIO .AND.
522 & (globalFile .OR. useSingleCpuIO) ) THEN
523 WRITE(metaFName,'(2A)') fName(1:IL),'.meta'
524 dimList(1,1) = xSize
525 dimList(2,1) = 1
526 dimList(3,1) = xSize
527 dimList(1,2) = ySize
528 dimList(2,2) = 1
529 dimList(3,2) = ySize
530 dimList(1,3) = nNz
531 dimList(2,3) = 1
532 dimList(3,3) = nNz
533 c dimList(1,3) = kSize
534 c dimList(2,3) = kLo
535 c dimList(3,3) = kHi
536 nDims = 3
537 IF ( nNz.EQ.1 ) nDims = 2
538 map2gl(1) = 0
539 map2gl(2) = 1
540 CALL MDS_WRITE_META(
541 I metaFName, dataFName, the_run_name, ' ',
542 I filePrec, nDims,dimList,map2gl, 0, ' ',
543 I 0, UNSET_RL, irecord, myIter, myThid )
544 c I metaFName, dataFName, the_run_name, titleLine,
545 c I filePrec, nDims, dimList, map2gl, nFlds, fldList,
546 c I nTimRec, timList, irecord, myIter, myThid )
547 ENDIF
548
549 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
550 RETURN
551 END

  ViewVC Help
Powered by ViewVC 1.1.22