/[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.5 - (show annotations) (download)
Tue Dec 30 00:13:35 2008 UTC (16 years, 6 months ago) by jahn
Branch: MAIN
CVS Tags: checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i
Changes since 1.4: +2 -10 lines
move buffers to common block to save some memory

1 C $Header: /u/gcmpack/MITgcm/pkg/mdsio/mdsio_write_field.F,v 1.4 2007/11/13 19:37:44 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 "EESUPPORT.h"
73 #include "PARAMS.h"
74 #ifdef ALLOW_EXCH2
75 #include "W2_EXCH2_TOPOLOGY.h"
76 #include "W2_EXCH2_PARAMS.h"
77 #endif /* ALLOW_EXCH2 */
78 #include "MDSIO_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 INTEGER irecord
111 INTEGER iG,jG,bi,bj,i,j,k,nNz
112 INTEGER irec,dUnit,IL,pIL
113 INTEGER dimList(3,3), nDims, map2gl(2)
114 INTEGER iGjLoc, jGjLoc
115 INTEGER length_of_rec
116 #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)
117 INTEGER iG_IO,jG_IO,npe, loc_xGlobalLo, loc_yGlobalLo
118 #endif
119 Real*4 r4seg(sNx)
120 Real*8 r8seg(sNx)
121 #ifdef ALLOW_EXCH2
122 c INTEGER tGy,tGx,tNy,tNx,tN
123 INTEGER tGy,tGx, tNx,tN
124 #endif /* ALLOW_EXCH2 */
125 INTEGER tNy
126
127 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
128
129 C- default:
130 iGjLoc = 0
131 jGjLoc = 1
132
133 C Assume nothing
134 fileIsOpen = .FALSE.
135 IL = ILNBLNK( fName )
136 pIL = ILNBLNK( mdsioLocalDir )
137 nNz = 1 + kHi - kLo
138 irecord = ABS(jrecord)
139 writeMetaF = jrecord.GT.0
140
141 C Only do I/O if I am the master thread (and mpi process 0 IF useSingleCpuIO):
142 iAmDoingIO = MASTER_CPU_IO(myThid)
143
144 C Only do I/O if I am the master thread
145 IF ( iAmDoingIO ) THEN
146
147 C Record number must be >= 1
148 IF (irecord .LT. 1) THEN
149 WRITE(msgBuf,'(A,I9.8)')
150 & ' MDS_WRITE_FIELD: argument irecord = ',irecord
151 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
152 & SQUEEZE_RIGHT , myThid)
153 WRITE(msgBuf,'(A)')
154 & ' MDS_WRITE_FIELD: invalid value for irecord'
155 CALL PRINT_ERROR( msgBuf, myThid )
156 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
157 ENDIF
158 C check for valid sub-set of levels:
159 IF ( kLo.LT.1 .OR. kHi.GT.kSize ) THEN
160 WRITE(msgBuf,'(3(A,I6))')
161 & ' MDS_WRITE_FIELD: arguments kSize=', kSize,
162 & ' , kLo=', kLo, ' , kHi=', kHi
163 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
164 & SQUEEZE_RIGHT , myThid)
165 WRITE(msgBuf,'(A)')
166 & ' MDS_WRITE_FIELD: invalid sub-set of levels'
167 CALL PRINT_ERROR( msgBuf, myThid )
168 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
169 ENDIF
170
171 C Assign special directory
172 IF ( useCurrentDir .OR. pIL.EQ.0 ) THEN
173 pfName = fName
174 ELSE
175 WRITE(pfName,'(2A)') mdsioLocalDir(1:pIL), fName(1:IL)
176 ENDIF
177 pIL=ILNBLNK( pfName )
178
179 C Assign a free unit number as the I/O channel for this routine
180 CALL MDSFINDUNIT( dUnit, myThid )
181
182 C- endif iAmDoingIO
183 ENDIF
184
185 C If option globalFile is desired but does not work or if
186 C globalFile is too slow, then try using single-CPU I/O.
187 IF (useSingleCpuIO) THEN
188
189 C Master thread of process 0, only, opens a global file
190 IF ( iAmDoingIO ) THEN
191 WRITE(dataFName,'(2a)') fName(1:IL),'.data'
192 length_of_rec=MDS_RECLEN(filePrec,x_size*y_size,myThid)
193 IF (irecord .EQ. 1) THEN
194 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
195 & access='direct', recl=length_of_rec )
196 ELSE
197 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
198 & access='direct', recl=length_of_rec )
199 ENDIF
200 ENDIF
201
202 C Gather array and WRITE it to file, one vertical level at a time
203 DO k=kLo,kHi
204 C- copy from arr(level=k) to 2-D "local":
205 IF ( arrType.EQ.'RS' ) THEN
206 CALL MDS_PASStoRS(sharedLocalBuf,arr,k,kSize,.FALSE.,myThid)
207 ELSEIF ( arrType.EQ.'RL' ) THEN
208 CALL MDS_PASStoRL(sharedLocalBuf,arr,k,kSize,.FALSE.,myThid)
209 ELSE
210 WRITE(msgBuf,'(A)')
211 & ' MDS_WRITE_FIELD: illegal value for arrType'
212 CALL PRINT_ERROR( msgBuf, myThid )
213 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
214 ENDIF
215 CALL GATHER_2D( globalBuf, sharedLocalBuf, myThid )
216
217 IF ( iAmDoingIO ) THEN
218 #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)
219 IF (filePrec .EQ. precFloat32) THEN
220 DO J=1,y_size
221 DO I=1,x_size
222 xy_buffer_r4(I,J) = 0.0
223 ENDDO
224 ENDDO
225 ELSEIF (filePrec .EQ. precFloat64) THEN
226 DO J=1,y_size
227 DO I=1,x_size
228 xy_buffer_r8(I,J) = 0.0
229 ENDDO
230 ENDDO
231 ENDIF
232
233 bj=1
234 DO npe=1,nPx*nPy
235 DO bi=1,nSx
236 #ifdef ALLOW_USE_MPI
237 loc_xGlobalLo = mpi_myXGlobalLo(npe)
238 loc_yGlobalLo = mpi_myYGlobalLo(npe)
239 #else /* ALLOW_USE_MPI */
240 loc_xGlobalLo = myXGlobalLo
241 loc_yGlobalLo = myYGlobalLo
242 #endif /* ALLOW_USE_MPI */
243 tN = W2_mpi_myTileList(npe,bi)
244 IF ( exch2_mydNx(tN) .GT. x_size ) THEN
245 C- face x-size larger than glob-size : fold it
246 iGjLoc = 0
247 jGjLoc = exch2_mydNx(tN) / x_size
248 ELSEIF ( exch2_tNy(tN) .GT. y_size ) THEN
249 C- tile y-size larger than glob-size : make a long line
250 iGjLoc = exch2_mydNx(tN)
251 jGjLoc = 0
252 ELSE
253 C- default (face fit into global-IO-array)
254 iGjLoc = 0
255 jGjLoc = 1
256 ENDIF
257
258 IF (filePrec .EQ. precFloat32) THEN
259 DO J=1,sNy
260 DO I=1,sNx
261 iG = loc_xGlobalLo-1+(bi-1)*sNx+i
262 jG = loc_yGlobalLo-1+(bj-1)*sNy+j
263 iG_IO=exch2_txGlobalo(tN)+iGjLoc*(j-1)+i-1
264 jG_IO=exch2_tyGlobalo(tN)+jGjLoc*(j-1)
265 xy_buffer_r4(iG_IO,jG_IO) = globalBuf(iG,jG)
266 ENDDO
267 ENDDO
268 ELSEIF (filePrec .EQ. precFloat64) THEN
269 DO J=1,sNy
270 DO I=1,sNx
271 iG = loc_xGlobalLo-1+(bi-1)*sNx+i
272 jG = loc_yGlobalLo-1+(bj-1)*sNy+j
273 iG_IO=exch2_txGlobalo(tN)+iGjLoc*(j-1)+i-1
274 jG_IO=exch2_tyGlobalo(tN)+jGjLoc*(j-1)
275 xy_buffer_r8(iG_IO,jG_IO) = globalBuf(iG,jG)
276 ENDDO
277 ENDDO
278 ENDIF
279
280 C-- end of npe & bi loops
281 ENDDO
282 ENDDO
283 #else /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */
284 IF (filePrec .EQ. precFloat32) THEN
285 DO J=1,Ny
286 DO I=1,Nx
287 xy_buffer_r4(I,J) = globalBuf(I,J)
288 ENDDO
289 ENDDO
290 ELSEIF (filePrec .EQ. precFloat64) THEN
291 DO J=1,Ny
292 DO I=1,Nx
293 xy_buffer_r8(I,J) = globalBuf(I,J)
294 ENDDO
295 ENDDO
296 ENDIF
297 #endif /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */
298
299 irec=k+1-kLo+nNz*(irecord-1)
300 IF (filePrec .EQ. precFloat32) THEN
301 #ifdef _BYTESWAPIO
302 CALL MDS_BYTESWAPR4( x_size*y_size, xy_buffer_r4 )
303 #endif
304 WRITE(dUnit,rec=irec) xy_buffer_r4
305 ELSEIF (filePrec .EQ. precFloat64) THEN
306 #ifdef _BYTESWAPIO
307 CALL MDS_BYTESWAPR8( x_size*y_size, xy_buffer_r8 )
308 #endif
309 WRITE(dUnit,rec=irec) xy_buffer_r8
310 ELSE
311 WRITE(msgBuf,'(A)')
312 & ' MDS_WRITE_FIELD: illegal value for filePrec'
313 CALL PRINT_ERROR( msgBuf, myThid )
314 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
315 ENDIF
316 C- end if iAmDoingIO
317 ENDIF
318 C- end of k loop
319 ENDDO
320
321 C Close data-file
322 IF ( iAmDoingIO ) THEN
323 CLOSE( dUnit )
324 ENDIF
325
326 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
327 C--- else .NOT.useSingleCpuIO
328 ELSE
329
330 C Only do I/O if I am the master thread
331 IF ( iAmDoingIO ) THEN
332
333 C If we are writing to a global file then we open it here
334 IF (globalFile) THEN
335 WRITE(dataFName,'(2a)') fName(1:IL),'.data'
336 IF (irecord .EQ. 1) THEN
337 length_of_rec=MDS_RECLEN( filePrec, sNx, myThid )
338 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
339 & access='direct', recl=length_of_rec )
340 fileIsOpen=.TRUE.
341 ELSE
342 length_of_rec=MDS_RECLEN( filePrec, sNx, myThid )
343 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
344 & access='direct', recl=length_of_rec )
345 fileIsOpen=.TRUE.
346 ENDIF
347 ENDIF
348
349 C Loop over all tiles
350 DO bj=1,nSy
351 DO bi=1,nSx
352 C If we are writing to a tiled MDS file then we open each one here
353 IF (.NOT. globalFile) THEN
354 iG=bi+(myXGlobalLo-1)/sNx ! Kludge until unstructered tiles
355 jG=bj+(myYGlobalLo-1)/sNy ! Kludge until unstructered tiles
356 WRITE(dataFName,'(2A,I3.3,A,I3.3,A)')
357 & pfName(1:pIL),'.',iG,'.',jG,'.data'
358 IF (irecord .EQ. 1) THEN
359 length_of_rec=MDS_RECLEN( filePrec, sNx, myThid )
360 OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
361 & access='direct', recl=length_of_rec )
362 fileIsOpen=.TRUE.
363 ELSE
364 length_of_rec=MDS_RECLEN( filePrec, sNx, myThid )
365 OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
366 & access='direct', recl=length_of_rec )
367 fileIsOpen=.TRUE.
368 ENDIF
369 ENDIF
370
371 IF (fileIsOpen) THEN
372 tNy = sNy
373 #ifdef ALLOW_EXCH2
374 tN = W2_myTileList(bi)
375 tGy = exch2_tyGlobalo(tN)
376 tGx = exch2_txGlobalo(tN)
377 tNy = exch2_tNy(tN)
378 tNx = exch2_tNx(tN)
379 IF ( exch2_mydNx(tN) .GT. x_size ) THEN
380 C- face x-size larger than glob-size : fold it
381 iGjLoc = 0
382 jGjLoc = exch2_mydNx(tN) / x_size
383 ELSEIF ( exch2_tNy(tN) .GT. y_size ) THEN
384 C- tile y-size larger than glob-size : make a long line
385 iGjLoc = exch2_mydNx(tN)
386 jGjLoc = 0
387 ELSE
388 C- default (face fit into global-IO-array)
389 iGjLoc = 0
390 jGjLoc = 1
391 ENDIF
392 #endif /* ALLOW_EXCH2 */
393 DO k=1,nNz
394 DO j=1,tNy
395 IF (globalFile) THEN
396 #ifdef ALLOW_EXCH2
397 irec = 1 + ( tGx-1 + (j-1)*iGjLoc )/tNx
398 & + ( tGy-1 + (j-1)*jGjLoc )*exch2_domain_nxt
399 & + ( k-kLo + (irecord-1)*nNz
400 & )*y_size*exch2_domain_nxt
401 #else /* ALLOW_EXCH2 */
402 iG = myXGlobalLo-1 + (bi-1)*sNx
403 jG = myYGlobalLo-1 + (bj-1)*sNy
404 irec= 1 + INT(iG/sNx) + nSx*nPx*(jG+j-1)
405 & + nSx*nPx*Ny*(k-kLo)
406 & + nSx*nPx*Ny*nNz*(irecord-1)
407 #endif /* ALLOW_EXCH2 */
408 ELSE
409 irec=j + sNy*(k-kLo) + sNy*nNz*(irecord-1)
410 ENDIF
411 IF (filePrec .EQ. precFloat32) THEN
412 IF (arrType .EQ. 'RS') THEN
413 CALL MDS_SEG4toRS( j,bi,bj,k,kSize, r4seg,.FALSE.,arr )
414 ELSEIF (arrType .EQ. 'RL') THEN
415 CALL MDS_SEG4toRL( j,bi,bj,k,kSize, r4seg,.FALSE.,arr )
416 ELSE
417 WRITE(msgBuf,'(A)')
418 & ' MDS_WRITE_FIELD: illegal value for arrType'
419 CALL PRINT_ERROR( msgBuf, myThid )
420 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
421 ENDIF
422 #ifdef _BYTESWAPIO
423 CALL MDS_BYTESWAPR4( sNx, r4seg )
424 #endif
425 WRITE(dUnit,rec=irec) r4seg
426 ELSEIF (filePrec .EQ. precFloat64) THEN
427 IF (arrType .EQ. 'RS') THEN
428 CALL MDS_SEG8toRS( j,bi,bj,k,kSize, r8seg,.FALSE.,arr )
429 ELSEIF (arrType .EQ. 'RL') THEN
430 CALL MDS_SEG8toRL( j,bi,bj,k,kSize, r8seg,.FALSE.,arr )
431 ELSE
432 WRITE(msgBuf,'(A)')
433 & ' MDS_WRITE_FIELD: illegal value for arrType'
434 CALL PRINT_ERROR( msgBuf, myThid )
435 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
436 ENDIF
437 #ifdef _BYTESWAPIO
438 CALL MDS_BYTESWAPR8( sNx, r8seg )
439 #endif
440 WRITE(dUnit,rec=irec) r8seg
441 ELSE
442 WRITE(msgBuf,'(A)')
443 & ' MDS_WRITE_FIELD: illegal value for filePrec'
444 CALL PRINT_ERROR( msgBuf, myThid )
445 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
446 ENDIF
447 C End of j loop
448 ENDDO
449 C End of k loop
450 ENDDO
451 ELSE
452 C fileIsOpen=F
453 WRITE(msgBuf,'(A)')
454 & ' MDS_WRITE_FIELD: I should never get to this point'
455 CALL PRINT_ERROR( msgBuf, myThid )
456 STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
457 ENDIF
458 C If we were writing to a tiled MDS file then we close it here
459 IF (fileIsOpen .AND. (.NOT. globalFile)) THEN
460 CLOSE( dUnit )
461 fileIsOpen = .FALSE.
462 ENDIF
463 C Create meta-file for each tile if we are tiling
464 IF ( .NOT.globalFile .AND. writeMetaF ) THEN
465 iG=bi+(myXGlobalLo-1)/sNx
466 jG=bj+(myYGlobalLo-1)/sNy
467 WRITE(metaFname,'(2A,I3.3,A,I3.3,A)')
468 & pfName(1:pIL),'.',iG,'.',jG,'.meta'
469 #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)
470 tN = W2_myTileList(bi)
471 dimList(1,1)=x_size
472 dimList(2,1)=exch2_txGlobalo(tN)
473 dimList(3,1)=exch2_txGlobalo(tN)+sNx-1
474 dimList(1,2)=y_size
475 dimList(2,2)=exch2_tyGlobalo(tN)
476 dimList(3,2)=exch2_tyGlobalo(tN)+sNy-1
477 #else /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */
478 C- jmc: if MISSING_TILE_IO, keep meta files unchanged
479 C to stay consistent with global file structure
480 dimList(1,1)=Nx
481 dimList(2,1)=myXGlobalLo+(bi-1)*sNx
482 dimList(3,1)=myXGlobalLo+bi*sNx-1
483 dimList(1,2)=Ny
484 dimList(2,2)=myYGlobalLo+(bj-1)*sNy
485 dimList(3,2)=myYGlobalLo+bj*sNy-1
486 #endif /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */
487 dimList(1,3)=nNz
488 dimList(2,3)=1
489 dimList(3,3)=nNz
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 C End of bi,bj loops
500 ENDDO
501 ENDDO
502
503 C If global file was opened then close it
504 IF (fileIsOpen .AND. globalFile) THEN
505 CLOSE( dUnit )
506 fileIsOpen = .FALSE.
507 ENDIF
508
509 C- endif iAmDoingIO
510 ENDIF
511
512 C if useSingleCpuIO / else / end
513 ENDIF
514
515 C Create meta-file for the global-file (also if useSingleCpuIO)
516 IF ( writeMetaF .AND. iAmDoingIO .AND.
517 & (globalFile .OR. useSingleCpuIO) ) THEN
518 WRITE(metaFName,'(2A)') fName(1:IL),'.meta'
519 dimList(1,1)=x_size
520 dimList(2,1)=1
521 dimList(3,1)=x_size
522 dimList(1,2)=y_size
523 dimList(2,2)=1
524 dimList(3,2)=y_size
525 dimList(1,3)=nNz
526 dimList(2,3)=1
527 dimList(3,3)=nNz
528 nDims=3
529 IF ( nNz.EQ.1 ) nDims=2
530 map2gl(1) = 0
531 map2gl(2) = 1
532 CALL MDS_WRITE_META(
533 I metaFName, dataFName, the_run_name, ' ',
534 I filePrec, nDims,dimList,map2gl, 0, ' ',
535 I 0, UNSET_RL, irecord, myIter, myThid )
536 c I metaFName, dataFName, the_run_name, titleLine,
537 c I filePrec, nDims, dimList, map2gl, nFlds, fldList,
538 c I nTimRec, timList, irecord, myIter, myThid )
539 ENDIF
540
541 C To be safe, make other processes wait for I/O completion
542 _BARRIER
543
544 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
545 RETURN
546 END

  ViewVC Help
Powered by ViewVC 1.1.22