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

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

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


Revision 1.6 - (hide 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 edhill 1.6 C $Header: /u/u3/gcmpack/MITgcm/pkg/mnc/mnc_file.F,v 1.5 2004/01/08 07:24:47 edhill Exp $
2 edhill 1.1 C $Name: $
3    
4     #include "MNC_OPTIONS.h"
5    
6     C==================================================================
7    
8 edhill 1.3 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 edhill 1.1 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 edhill 1.3 C Functions
42     integer ILNBLNK
43    
44 edhill 1.1 C Local Variables
45 edhill 1.3 integer i,n, err, fid, ind
46 edhill 1.1 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 edhill 1.3 write(msgbuf,'(3a)') 'opening ''', fname, ''''
59 edhill 1.1 IF ( itype .EQ. 0 ) THEN
60     C Create new file
61     err = NF_CREATE( fname, NF_CLOBBER, fid )
62 edhill 1.3 CALL MNC_HANDLE_ERR(myThid, err, msgbuf)
63 edhill 1.1 ELSEIF ( itype .EQ. 1 ) THEN
64     C Append to existing file
65     err = NF_OPEN( fname, NF_WRITE, fid )
66 edhill 1.3 CALL MNC_HANDLE_ERR(myThid, err, msgbuf)
67 edhill 1.1 ELSE
68     C Error
69     write(msgbuf,'(a,i5,a)') 'MNC_FILE_OPEN ERROR: ''', itype,
70     & ''' is not defined--should be: [0|1]'
71 edhill 1.3 CALL print_error( msgbuf, mythid )
72     stop 'ABNORMAL END: S/R MNC_FILE_ADD_ATTR_STR'
73 edhill 1.1 ENDIF
74    
75     CALL MNC_GET_NEXT_EMPTY_IND(myThid, MNC_MAX_ID, mnc_f_names, ind)
76 edhill 1.3 n = ILNBLNK(fname)
77     mnc_f_names(ind)(1:n) = fname(1:n)
78 edhill 1.1 mnc_f_info(ind,1) = 1
79 edhill 1.3 mnc_f_info(ind,2) = fid
80     mnc_f_info(ind,3) = 0
81     mnc_fv_ids(ind,1) = 0
82 edhill 1.1
83 edhill 1.3 RETURN
84 edhill 1.1 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 edhill 1.5 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 edhill 1.1
104 edhill 1.5 C==================================================================
105 edhill 1.1
106 edhill 1.5 SUBROUTINE MNC_FILE_ADD_ATTR_DBL(
107     I myThid,
108     I fname,
109     I atname,
110     I len,
111     I dval )
112 edhill 1.1
113 edhill 1.5 implicit none
114     C Arguments
115     integer myThid, len
116     character*(*) fname, atname
117     _RL dval
118 edhill 1.1
119 edhill 1.5 CALL MNC_FILE_ADD_ATTR_ANY(myThid,fname,atname, 2,
120     & ' ', len, dval, 0.0, 0 )
121     RETURN
122     END
123 edhill 1.1
124 edhill 1.5 C==================================================================
125 edhill 1.1
126 edhill 1.5 SUBROUTINE MNC_FILE_ADD_ATTR_REAL(
127     I myThid,
128     I fname,
129     I atname,
130     I len,
131     I rval )
132 edhill 1.1
133 edhill 1.5 implicit none
134     C Arguments
135     integer myThid, len
136     character*(*) fname, atname
137     _RS rval
138 edhill 1.1
139 edhill 1.5 CALL MNC_FILE_ADD_ATTR_ANY(myThid,fname,atname, 3,
140     & ' ', len, 0.0D0, rval, 0 )
141 edhill 1.3 RETURN
142 edhill 1.1 END
143    
144     C==================================================================
145    
146     SUBROUTINE MNC_FILE_ADD_ATTR_INT(
147     I myThid,
148     I fname,
149     I atname,
150 edhill 1.5 I len,
151 edhill 1.1 I ival )
152    
153     implicit none
154     C Arguments
155 edhill 1.5 integer myThid, len, ival
156 edhill 1.1 character*(*) fname, atname
157    
158 edhill 1.5 CALL MNC_FILE_ADD_ATTR_ANY(myThid,fname,atname, 4,
159     & ' ', len, 0.0D0, 0.0, ival )
160 edhill 1.3 RETURN
161 edhill 1.1 END
162    
163     C==================================================================
164    
165 edhill 1.5 SUBROUTINE MNC_FILE_ADD_ATTR_ANY(
166 edhill 1.1 I myThid,
167     I fname,
168     I atname,
169 edhill 1.5 I atype, sv, len,dv,rv,iv )
170 edhill 1.1
171 edhill 1.5 implicit none
172 edhill 1.1 #include "netcdf.inc"
173     #include "mnc_common.h"
174     #include "EEPARAMS.h"
175    
176     C Arguments
177 edhill 1.5 integer myThid, atype, len, iv
178     character*(*) fname, atname, sv
179     _RL dv
180     _RS rv
181    
182 edhill 1.1 C Functions
183     integer ILNBLNK
184    
185     C Local Variables
186 edhill 1.5 integer i, n, err, fid, ind, n1,n2, lens
187 edhill 1.1 character*(MNC_MAX_CHAR) s1
188     character*(MAX_LEN_MBUF) msgbuf
189    
190 edhill 1.4 C Verify that the file is open
191 edhill 1.1 CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, ind)
192 edhill 1.4 IF (ind .LT. 0) THEN
193 edhill 1.1 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 edhill 1.2 fid = mnc_f_info(ind,2)
199 edhill 1.1
200     C Enter define mode
201 edhill 1.4 CALL MNC_FILE_REDEF(myThid, fname)
202 edhill 1.1
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 edhill 1.5 IF (atype .EQ. 1) THEN
208     lens = ILNBLNK(sv)
209     err = NF_PUT_ATT_TEXT(fid, NF_GLOBAL, s1, lens, sv)
210 edhill 1.6 CALL MNC_HANDLE_ERR(myThid, err,
211     & 'adding TEXT attribute in S/R MNC_FILE_ADD_ATTR_ANY')
212 edhill 1.5 ELSEIF (atype .EQ. 2) THEN
213     err = NF_PUT_ATT_DOUBLE(fid, NF_GLOBAL, s1, NF_DOUBLE, len, dv)
214 edhill 1.6 CALL MNC_HANDLE_ERR(myThid, err,
215     & 'adding DOUBLE attribute in S/R MNC_FILE_ADD_ATTR_ANY')
216 edhill 1.5 ELSEIF (atype .EQ. 3) THEN
217     err = NF_PUT_ATT_REAL(fid, NF_GLOBAL, s1, NF_FLOAT, len, rv)
218 edhill 1.6 CALL MNC_HANDLE_ERR(myThid, err,
219     & 'adding REAL attribute in S/R MNC_FILE_ADD_ATTR_ANY')
220 edhill 1.5 ELSEIF (atype .EQ. 4) THEN
221     err = NF_PUT_ATT_INT(fid, NF_GLOBAL, s1, NF_INT, len, iv)
222 edhill 1.6 CALL MNC_HANDLE_ERR(myThid, err,
223     & 'adding INT attribute in S/R MNC_FILE_ADD_ATTR_ANY')
224 edhill 1.5 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 edhill 1.3
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 edhill 1.4
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 edhill 1.1
369 edhill 1.3 RETURN
370 edhill 1.1 END
371    

  ViewVC Help
Powered by ViewVC 1.1.22