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

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

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


Revision 1.1 - (show annotations) (download)
Fri Dec 29 05:14:11 2006 UTC (17 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58u_post, checkpoint58w_post, checkpoint58t_post, checkpoint58v_post
a temporary hack to write directly meta files with more informations
 without the pain of adding arguments to all MSDIO S/R.

1 C $Header: /u/gcmpack/MITgcm/pkg/mdsio/mdsio_writefield_new.F,v 1.6 2005/11/08 15:53:41 cnh Exp $
2 C $Name: $
3
4 #include "MDSIO_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP
8 C !ROUTINE: MDS_WR_METAFILES
9 C !INTERFACE:
10 SUBROUTINE MDS_WR_METAFILES(
11 I fName,
12 I filePrec,
13 I globalFile,
14 I useCurrentDir,
15 I nNx, nNy, nNz,
16 I titleLine,
17 I nFlds, fldList,
18 I nTimRec, timList,
19 I irecord,
20 I myIter,
21 I myThid )
22
23 C !DESCRIPTION:
24 C
25 C MDS_WR_METAFILES creates either a file of the form "fName.meta" IF the
26 C LOGICAL flag "globalFile" or "useSingleCPUIO" are set true. Otherwise
27 C it creates MDS tiled files of the form "fName.xxx.yyy.meta".
28 C Currently, the meta-files are not read because it is difficult
29 C to parse files in fortran. We should read meta information before
30 C adding records to an existing multi-record file.
31 C The precision of the file is decsribed by filePrec, set either
32 C to floatPrec32 or floatPrec64.
33 C nNz=1 implies a 2-D model field and nNz=Nr implies a 3-D model field.
34 C irecord is the record number to be written and must be >= 1.
35 C NOTE: It is currently assumed that
36 C the highest record number in the file was the last record written.
37 C Nor is there a consistency check between the routine arguments and file.
38 C ie. IF your WRITE record 2 after record 4 the meta information
39 C will record the number of records to be 2. This, again, is because
40 C we have read the meta information. To be fixed.
41
42 C !USES:
43 IMPLICIT NONE
44 C Global variables / COMMON blocks
45 #include "SIZE.h"
46 #include "EEPARAMS.h"
47 #include "PARAMS.h"
48 #ifdef ALLOW_EXCH2
49 #include "W2_EXCH2_TOPOLOGY.h"
50 #include "W2_EXCH2_PARAMS.h"
51 #endif /* ALLOW_EXCH2 */
52 C Arguments:
53 C
54 C fName (string) :: base name for file to write
55 C filePrec (integer) :: number of bits per word in file (32 or 64)
56 C globalFile (logical):: selects between writing a global or tiled file
57 C useCurrentDir(logic):: always write to the current directory (even if
58 C "mdsioLocalDir" is set)
59 C nNx,nNy (integer) :: used for writing YZ or XZ slice
60 C nNz (integer) :: number of vertical levels to be written
61 C titleLine (string) :: title or any descriptive comments
62 C nFlds (integer) :: number of fields from "fldList" to write
63 C fldList (string) :: array of fields name to write
64 C nTimRec (integer) :: number of time-info from "fldList" to write
65 C timList (real) :: array of time-info to write
66 C irecord (integer) :: record number to write
67 C myIter (integer) :: time step number
68 C myThid (integer) :: thread identifier
69 C
70 C Routine arguments
71 CHARACTER*(*) fName
72 INTEGER filePrec
73 LOGICAL globalFile
74 LOGICAL useCurrentDir
75 INTEGER nNx, nNy, nNz
76 CHARACTER*(*) titleLine
77 INTEGER nFlds
78 CHARACTER*(8) fldList(*)
79 INTEGER nTimRec
80 _RL timList(*)
81 INTEGER irecord
82 INTEGER myIter
83 INTEGER myThid
84 CEOP
85
86 C Functions
87 INTEGER ILNBLNK
88 EXTERNAL ILNBLNK
89 LOGICAL MASTER_CPU_IO
90 EXTERNAL MASTER_CPU_IO
91 C Local variables
92 CHARACTER*(MAX_LEN_FNAM) dataFName, metaFName, pfName
93 INTEGER iG,jG, bi,bj, IL,pIL
94 INTEGER dimList(3,3), nDims
95 INTEGER xSize, ySize
96 #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)
97 INTEGER tn
98 #endif
99
100 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
101 C- Set dimensions:
102 xSize = Nx
103 ySize = Ny
104 #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)
105 xSize = exch2_domain_nxt * sNx
106 ySize = exch2_domain_nyt * sNy
107 #endif
108 IF (nNx.EQ.1) xSize = 1
109 IF (nNy.EQ.1) ySize = 1
110
111 C Only do I/O if I am the master thread (and mpi process 0 IF useSingleCpuIO):
112 IF ( MASTER_CPU_IO(myThid) ) THEN
113
114 IF ( useSingleCpuIO .OR. globalFile ) THEN
115
116 IL = ILNBLNK( fName )
117 WRITE(dataFName,'(2A)') fName(1:IL),'.data'
118 WRITE(metaFName,'(2A)') fName(1:IL),'.meta'
119 dimList(1,1) = xSize
120 dimList(2,1) = 1
121 dimList(3,1) = xSize
122 dimList(1,2) = ySize
123 dimList(2,2) = 1
124 dimList(3,2) = ySize
125 dimList(1,3) = nNz
126 dimList(2,3) = 1
127 dimList(3,3) = nNz
128 nDims=3
129 IF (nNz.EQ.1) nDims=2
130 c CALL MDSWRITEMETA( metaFName, dataFName, filePrec,
131 c & nDims, dimList, irecord, myIter, myThid )
132 CALL MDS_WRITE_META(
133 I metaFName, dataFName, the_run_name, titleLine,
134 I filePrec, nDims, dimList, nFlds, fldList,
135 I nTimRec, timList, irecord, myIter, myThid )
136
137 ELSE
138
139 C Assign special directory
140 pIL = ILNBLNK( mdsioLocalDir )
141 IF ( useCurrentDir .OR. pIL.EQ.0 ) THEN
142 pfName = fName
143 ELSE
144 IL = ILNBLNK( fName )
145 WRITE(pfName,'(2A)') mdsioLocalDir(1:pIL), fName(1:IL)
146 ENDIF
147 pIL=ILNBLNK( pfName )
148
149 C Loop over all tiles
150 DO bj=1,nSy
151 DO bi=1,nSx
152 C If we are writing to a tiled MDS file then we open each one here
153 iG=bi+(myXGlobalLo-1)/sNx
154 jG=bj+(myYGlobalLo-1)/sNy
155 WRITE(dataFName,'(2a,i3.3,a,i3.3,a)')
156 & pfName(1:pIL),'.',iG,'.',jG,'.data'
157 C Create meta-file for each tile IF we are tiling
158 WRITE(metaFname,'(2a,i3.3,a,i3.3,a)')
159 & pfName(1:pIL),'.',iG,'.',jG,'.meta'
160 #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)
161 tn = W2_myTileList(bi)
162 dimList(1,1) = xSize
163 dimList(2,1) = exch2_txGlobalo(tn)
164 dimList(3,1) = exch2_txGlobalo(tn)+sNx-1
165 dimList(1,2) = ySize
166 dimList(2,2) = exch2_tyGlobalo(tn)
167 dimList(3,2) = exch2_tyGlobalo(tn)+sNy-1
168 #else /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */
169 C- jmc: IF MISSING_TILE_IO, keep meta files unchanged
170 C to stay consistent with global file structure
171 dimList(1,1) = xSize
172 dimList(2,1) = myXGlobalLo+(bi-1)*sNx
173 dimList(3,1) = myXGlobalLo+bi*sNx-1
174 dimList(1,2) = ySize
175 dimList(2,2) = myYGlobalLo+(bj-1)*sNy
176 dimList(3,2) = myYGlobalLo+bj*sNy-1
177 #endif /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */
178 dimList(1,3) = nNz
179 dimList(2,3) = 1
180 dimList(3,3) = nNz
181 nDims=3
182 IF (nNz.EQ.1) nDims=2
183 IF (nNx.EQ.1) dimList(2,1) = 1
184 IF (nNx.EQ.1) dimList(3,1) = 1
185 IF (nNy.EQ.1) dimList(2,2) = 1
186 IF (nNy.EQ.1) dimList(3,2) = 1
187 c CALL MDSWRITEMETA( metaFName, dataFName,
188 c & filePrec, nDims, dimList, irecord, myIter, myThid )
189 CALL MDS_WRITE_META(
190 I metaFName, dataFName, the_run_name, titleLine,
191 I filePrec, nDims, dimList, nFlds, fldList,
192 I nTimRec, timList, irecord, myIter, myThid )
193 C End of bi,bj loops
194 ENDDO
195 ENDDO
196
197 C endif useSingleCpuIO or globalFile
198 ENDIF
199
200 C endif MASTER_CPU_IO
201 ENDIF
202
203 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
204
205 RETURN
206 END

  ViewVC Help
Powered by ViewVC 1.1.22