/[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.6 - (show annotations) (download)
Wed Jan 14 23:02:52 2004 UTC (20 years, 4 months ago) by edhill
Branch: MAIN
Changes since 1.5: +9 -3 lines
 o on-going development of mnc

1 C $Header: /u/u3/gcmpack/MITgcm/pkg/mnc/mnc_file.F,v 1.5 2004/01/08 07:24:47 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 CALL MNC_HANDLE_ERR(myThid, err,
211 & 'adding TEXT attribute in S/R MNC_FILE_ADD_ATTR_ANY')
212 ELSEIF (atype .EQ. 2) THEN
213 err = NF_PUT_ATT_DOUBLE(fid, NF_GLOBAL, s1, NF_DOUBLE, len, dv)
214 CALL MNC_HANDLE_ERR(myThid, err,
215 & 'adding DOUBLE attribute in S/R MNC_FILE_ADD_ATTR_ANY')
216 ELSEIF (atype .EQ. 3) THEN
217 err = NF_PUT_ATT_REAL(fid, NF_GLOBAL, s1, NF_FLOAT, len, rv)
218 CALL MNC_HANDLE_ERR(myThid, err,
219 & 'adding REAL attribute in S/R MNC_FILE_ADD_ATTR_ANY')
220 ELSEIF (atype .EQ. 4) THEN
221 err = NF_PUT_ATT_INT(fid, NF_GLOBAL, s1, NF_INT, len, iv)
222 CALL MNC_HANDLE_ERR(myThid, err,
223 & 'adding INT attribute in S/R MNC_FILE_ADD_ATTR_ANY')
224 ELSE
225 write(msgbuf,'(a,i10,a)') 'MNC ERROR: atype = ''', atype,
226 & ''' is invalid--must be: [1-4]'
227 n = ILNBLNK(msgbuf)
228 CALL print_error(msgbuf(1:n), mythid)
229 stop 'ABNORMAL END: S/R MNC_VAR_ADD_ATTR_ANY'
230 ENDIF
231
232 RETURN
233 END
234
235 C==================================================================
236
237 SUBROUTINE MNC_FILE_CLOSE(
238 I myThid,
239 I fname )
240
241 implicit none
242 #include "netcdf.inc"
243 #include "mnc_common.h"
244 #include "EEPARAMS.h"
245
246 C Arguments
247 integer myThid
248 character*(*) fname
249
250 C Local Variables
251 integer i,j,k,n, err, fid, ind
252 character*(MAX_LEN_MBUF) msgbuf
253
254 C Check that the file is open
255 CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, ind)
256 IF (ind .LT. 1) THEN
257 write(msgbuf,'(3a)') 'MNC Warning: file ''', fname,
258 & ''' is already closed'
259 CALL print_error( msgbuf, mythid )
260 RETURN
261 ENDIF
262 fid = mnc_f_info(ind,2)
263 err = NF_CLOSE(fid)
264 write(msgbuf,'(3a)') ' cannot close file ''', fname, ''''
265 CALL MNC_HANDLE_ERR(myThid, err, msgbuf)
266
267 C Clear all the file, grid, and variable names and refs
268 n = mnc_fv_ids(ind,1)
269 IF (n .GE. 1) THEN
270 DO i = 1,n
271 j = 2*i
272 k = mnc_fv_ids(ind,j)
273 mnc_v_names(k)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
274 ENDDO
275 ENDIF
276 DO i = 1,3
277 mnc_f_info(ind,i) = 0
278 ENDDO
279 mnc_f_names(ind)(1:MNC_MAX_CHAR) = mnc_blank_name(1:MNC_MAX_CHAR)
280
281 RETURN
282 END
283
284 C==================================================================
285
286 SUBROUTINE MNC_FILE_REDEF(
287 I myThid,
288 I fname )
289
290 implicit none
291 #include "netcdf.inc"
292 #include "mnc_common.h"
293 #include "EEPARAMS.h"
294
295 C Arguments
296 integer myThid
297 character*(*) fname
298
299 C Functions
300 integer ILNBLNK
301
302 C Local Variables
303 integer ind, fid, def, err
304 character*(MAX_LEN_MBUF) msgbuf
305
306 C Verify that the file is open
307 CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, ind)
308 IF (ind .LT. 0) THEN
309 write(msgbuf,'(3a)') 'MNC ERROR: file ''',
310 & fname, ''' must be opened first'
311 CALL print_error( msgbuf, mythid )
312 stop 'ABNORMAL END: S/R MNC_FILE_REDEF'
313 ENDIF
314 def = mnc_f_info(ind,1)
315 fid = mnc_f_info(ind,2)
316
317 IF (def .NE. 1) THEN
318 C Enter define mode
319 err = NF_REDEF(fid)
320 CALL MNC_HANDLE_ERR(myThid, err,
321 & 'entering define mode in S/R MNC_FILE_REDEF')
322 mnc_f_info(ind,1) = 1
323 ENDIF
324
325 RETURN
326 END
327
328 C==================================================================
329
330 SUBROUTINE MNC_FILE_ENDDEF(
331 I myThid,
332 I fname )
333
334 implicit none
335 #include "netcdf.inc"
336 #include "mnc_common.h"
337 #include "EEPARAMS.h"
338
339 C Arguments
340 integer myThid
341 character*(*) fname
342
343 C Functions
344 integer ILNBLNK
345
346 C Local Variables
347 integer ind, fid, def, err
348 character*(MAX_LEN_MBUF) msgbuf
349
350 C Verify that the file is open
351 CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, ind)
352 IF (ind .LT. 0) THEN
353 write(msgbuf,'(3a)') 'MNC ERROR: file ''',
354 & fname, ''' must be opened first'
355 CALL print_error( msgbuf, mythid )
356 stop 'ABNORMAL END: S/R MNC_FILE_REDEF'
357 ENDIF
358 def = mnc_f_info(ind,1)
359 fid = mnc_f_info(ind,2)
360
361 IF (def .NE. 2) THEN
362 C Enter define mode
363 err = NF_ENDDEF(fid)
364 CALL MNC_HANDLE_ERR(myThid, err,
365 & 'ending define mode in S/R MNC_FILE_ENDDEF')
366 mnc_f_info(ind,1) = 2
367 ENDIF
368
369 RETURN
370 END
371

  ViewVC Help
Powered by ViewVC 1.1.22