/[MITgcm]/MITgcm/pkg/mnc/mnc_file.F
ViewVC logotype

Contents of /MITgcm/pkg/mnc/mnc_file.F

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


Revision 1.5 - (show annotations) (download)
Thu Jan 8 07:24:47 2004 UTC (20 years, 4 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint52f_post, checkpoint52f_pre
Changes since 1.4: +68 -79 lines
 o numerous bug fixes
 o the tests now exercise most of the "MNC_*" API

1 C $Header: /u/u3/gcmpack/MITgcm/pkg/mnc/mnc_file.F,v 1.4 2004/01/07 07:29:12 edhill Exp $
2 C $Name: $
3
4 #include "MNC_OPTIONS.h"
5
6 C==================================================================
7
8 SUBROUTINE MNC_FILE_CREATE(
9 I myThid,
10 I fname )
11
12 implicit none
13
14 C Arguments
15 integer myThid
16 character*(*) fname
17
18 CALL MNC_FILE_OPEN(myThid, fname, 0)
19
20 RETURN
21 END
22
23 C==================================================================
24
25 SUBROUTINE MNC_FILE_OPEN(
26 I myThid,
27 I fname,
28 I itype )
29
30 implicit none
31 #include "netcdf.inc"
32 #include "mnc_common.h"
33 #include "EEPARAMS.h"
34
35 C Arguments
36 integer myThid
37 character*(*) fname
38 integer itype
39 C itype => [ 0=new | 1=append ]
40
41 C Functions
42 integer ILNBLNK
43
44 C Local Variables
45 integer i,n, err, fid, ind
46 character*(MNC_MAX_CHAR) aname
47 character*(MAX_LEN_MBUF) msgbuf
48
49 C Is the file already open?
50 CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, ind)
51 IF ( ind .GT. 0 ) THEN
52 write(msgbuf,'(3a)') 'MNC_FILE_OPEN ERROR: ''', fname,
53 & ''' is already open -- cannot open twice'
54 CALL print_error( msgbuf, mythid )
55 stop 'ABNORMAL END: package MNC'
56 ENDIF
57
58 write(msgbuf,'(3a)') 'opening ''', fname, ''''
59 IF ( itype .EQ. 0 ) THEN
60 C Create new file
61 err = NF_CREATE( fname, NF_CLOBBER, fid )
62 CALL MNC_HANDLE_ERR(myThid, err, msgbuf)
63 ELSEIF ( itype .EQ. 1 ) THEN
64 C Append to existing file
65 err = NF_OPEN( fname, NF_WRITE, fid )
66 CALL MNC_HANDLE_ERR(myThid, err, msgbuf)
67 ELSE
68 C Error
69 write(msgbuf,'(a,i5,a)') 'MNC_FILE_OPEN ERROR: ''', itype,
70 & ''' is not defined--should be: [0|1]'
71 CALL print_error( msgbuf, mythid )
72 stop 'ABNORMAL END: S/R MNC_FILE_ADD_ATTR_STR'
73 ENDIF
74
75 CALL MNC_GET_NEXT_EMPTY_IND(myThid, MNC_MAX_ID, mnc_f_names, ind)
76 n = ILNBLNK(fname)
77 mnc_f_names(ind)(1:n) = fname(1:n)
78 mnc_f_info(ind,1) = 1
79 mnc_f_info(ind,2) = fid
80 mnc_f_info(ind,3) = 0
81 mnc_fv_ids(ind,1) = 0
82
83 RETURN
84 END
85
86 C==================================================================
87
88 SUBROUTINE MNC_FILE_ADD_ATTR_STR(
89 I myThid,
90 I fname,
91 I atname,
92 I sval )
93
94 implicit none
95 C Arguments
96 integer myThid, len
97 character*(*) fname, atname, sval
98
99 CALL MNC_FILE_ADD_ATTR_ANY(myThid,fname,atname, 1,
100 & sval, 0, 0.0D0, 0.0, 0 )
101 RETURN
102 END
103
104 C==================================================================
105
106 SUBROUTINE MNC_FILE_ADD_ATTR_DBL(
107 I myThid,
108 I fname,
109 I atname,
110 I len,
111 I dval )
112
113 implicit none
114 C Arguments
115 integer myThid, len
116 character*(*) fname, atname
117 _RL dval
118
119 CALL MNC_FILE_ADD_ATTR_ANY(myThid,fname,atname, 2,
120 & ' ', len, dval, 0.0, 0 )
121 RETURN
122 END
123
124 C==================================================================
125
126 SUBROUTINE MNC_FILE_ADD_ATTR_REAL(
127 I myThid,
128 I fname,
129 I atname,
130 I len,
131 I rval )
132
133 implicit none
134 C Arguments
135 integer myThid, len
136 character*(*) fname, atname
137 _RS rval
138
139 CALL MNC_FILE_ADD_ATTR_ANY(myThid,fname,atname, 3,
140 & ' ', len, 0.0D0, rval, 0 )
141 RETURN
142 END
143
144 C==================================================================
145
146 SUBROUTINE MNC_FILE_ADD_ATTR_INT(
147 I myThid,
148 I fname,
149 I atname,
150 I len,
151 I ival )
152
153 implicit none
154 C Arguments
155 integer myThid, len, ival
156 character*(*) fname, atname
157
158 CALL MNC_FILE_ADD_ATTR_ANY(myThid,fname,atname, 4,
159 & ' ', len, 0.0D0, 0.0, ival )
160 RETURN
161 END
162
163 C==================================================================
164
165 SUBROUTINE MNC_FILE_ADD_ATTR_ANY(
166 I myThid,
167 I fname,
168 I atname,
169 I atype, sv, len,dv,rv,iv )
170
171 implicit none
172 #include "netcdf.inc"
173 #include "mnc_common.h"
174 #include "EEPARAMS.h"
175
176 C Arguments
177 integer myThid, atype, len, iv
178 character*(*) fname, atname, sv
179 _RL dv
180 _RS rv
181
182 C Functions
183 integer ILNBLNK
184
185 C Local Variables
186 integer i, n, err, fid, ind, n1,n2, lens
187 character*(MNC_MAX_CHAR) s1
188 character*(MAX_LEN_MBUF) msgbuf
189
190 C Verify that the file is open
191 CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, ind)
192 IF (ind .LT. 0) THEN
193 write(msgbuf,'(3a)') 'MNC ERROR: file ''',
194 & fname, ''' must be opened first'
195 CALL print_error( msgbuf, mythid )
196 stop 'ABNORMAL END: S/R MNC_FILE_ADD_ATTR_INT'
197 ENDIF
198 fid = mnc_f_info(ind,2)
199
200 C Enter define mode
201 CALL MNC_FILE_REDEF(myThid, fname)
202
203 s1(1:MNC_MAX_CHAR) = mnc_blank_name(1:MNC_MAX_CHAR)
204 n1 = ILNBLNK(atname)
205 s1(1:n1) = atname(1:n1)
206
207 IF (atype .EQ. 1) THEN
208 lens = ILNBLNK(sv)
209 err = NF_PUT_ATT_TEXT(fid, NF_GLOBAL, s1, lens, sv)
210 ELSEIF (atype .EQ. 2) THEN
211 err = NF_PUT_ATT_DOUBLE(fid, NF_GLOBAL, s1, NF_DOUBLE, len, dv)
212 ELSEIF (atype .EQ. 3) THEN
213 err = NF_PUT_ATT_REAL(fid, NF_GLOBAL, s1, NF_FLOAT, len, rv)
214 ELSEIF (atype .EQ. 4) THEN
215 err = NF_PUT_ATT_INT(fid, NF_GLOBAL, s1, NF_INT, len, iv)
216 ELSE
217 write(msgbuf,'(a,i10,a)') 'MNC ERROR: atype = ''', atype,
218 & ''' is invalid--must be: [1-4]'
219 n = ILNBLNK(msgbuf)
220 CALL print_error(msgbuf(1:n), mythid)
221 stop 'ABNORMAL END: S/R MNC_VAR_ADD_ATTR_ANY'
222 ENDIF
223 CALL MNC_HANDLE_ERR(myThid, err,
224 & 'adding attribute in S/R MNC_FILE_ADD_ATTR_DBL')
225
226 RETURN
227 END
228
229 C==================================================================
230
231 SUBROUTINE MNC_FILE_CLOSE(
232 I myThid,
233 I fname )
234
235 implicit none
236 #include "netcdf.inc"
237 #include "mnc_common.h"
238 #include "EEPARAMS.h"
239
240 C Arguments
241 integer myThid
242 character*(*) fname
243
244 C Local Variables
245 integer i,j,k,n, err, fid, ind
246 character*(MAX_LEN_MBUF) msgbuf
247
248 C Check that the file is open
249 CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, ind)
250 IF (ind .LT. 1) THEN
251 write(msgbuf,'(3a)') 'MNC Warning: file ''', fname,
252 & ''' is already closed'
253 CALL print_error( msgbuf, mythid )
254 RETURN
255 ENDIF
256 fid = mnc_f_info(ind,2)
257 err = NF_CLOSE(fid)
258 write(msgbuf,'(3a)') ' cannot close file ''', fname, ''''
259 CALL MNC_HANDLE_ERR(myThid, err, msgbuf)
260
261 C Clear all the file, grid, and variable names and refs
262 n = mnc_fv_ids(ind,1)
263 IF (n .GE. 1) THEN
264 DO i = 1,n
265 j = 2*i
266 k = mnc_fv_ids(ind,j)
267 mnc_v_names(k)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
268 ENDDO
269 ENDIF
270 DO i = 1,3
271 mnc_f_info(ind,i) = 0
272 ENDDO
273 mnc_f_names(ind)(1:MNC_MAX_CHAR) = mnc_blank_name(1:MNC_MAX_CHAR)
274
275 RETURN
276 END
277
278 C==================================================================
279
280 SUBROUTINE MNC_FILE_REDEF(
281 I myThid,
282 I fname )
283
284 implicit none
285 #include "netcdf.inc"
286 #include "mnc_common.h"
287 #include "EEPARAMS.h"
288
289 C Arguments
290 integer myThid
291 character*(*) fname
292
293 C Functions
294 integer ILNBLNK
295
296 C Local Variables
297 integer ind, fid, def, err
298 character*(MAX_LEN_MBUF) msgbuf
299
300 C Verify that the file is open
301 CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, ind)
302 IF (ind .LT. 0) THEN
303 write(msgbuf,'(3a)') 'MNC ERROR: file ''',
304 & fname, ''' must be opened first'
305 CALL print_error( msgbuf, mythid )
306 stop 'ABNORMAL END: S/R MNC_FILE_REDEF'
307 ENDIF
308 def = mnc_f_info(ind,1)
309 fid = mnc_f_info(ind,2)
310
311 IF (def .NE. 1) THEN
312 C Enter define mode
313 err = NF_REDEF(fid)
314 CALL MNC_HANDLE_ERR(myThid, err,
315 & 'entering define mode in S/R MNC_FILE_REDEF')
316 mnc_f_info(ind,1) = 1
317 ENDIF
318
319 RETURN
320 END
321
322 C==================================================================
323
324 SUBROUTINE MNC_FILE_ENDDEF(
325 I myThid,
326 I fname )
327
328 implicit none
329 #include "netcdf.inc"
330 #include "mnc_common.h"
331 #include "EEPARAMS.h"
332
333 C Arguments
334 integer myThid
335 character*(*) fname
336
337 C Functions
338 integer ILNBLNK
339
340 C Local Variables
341 integer ind, fid, def, err
342 character*(MAX_LEN_MBUF) msgbuf
343
344 C Verify that the file is open
345 CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, ind)
346 IF (ind .LT. 0) THEN
347 write(msgbuf,'(3a)') 'MNC ERROR: file ''',
348 & fname, ''' must be opened first'
349 CALL print_error( msgbuf, mythid )
350 stop 'ABNORMAL END: S/R MNC_FILE_REDEF'
351 ENDIF
352 def = mnc_f_info(ind,1)
353 fid = mnc_f_info(ind,2)
354
355 IF (def .NE. 2) THEN
356 C Enter define mode
357 err = NF_ENDDEF(fid)
358 CALL MNC_HANDLE_ERR(myThid, err,
359 & 'ending define mode in S/R MNC_FILE_ENDDEF')
360 mnc_f_info(ind,1) = 2
361 ENDIF
362
363 RETURN
364 END
365

  ViewVC Help
Powered by ViewVC 1.1.22