/[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.24 - (hide annotations) (download)
Fri Jun 20 20:36:58 2008 UTC (16 years ago) by utke
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint65, checkpoint61, checkpoint62, checkpoint63, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y, HEAD
Changes since 1.23: +10 -10 lines
move netcdf.inc includes
to avoid conflict when common block includes are turned into module uses

1 utke 1.24 C $Header: /u/gcmpack/MITgcm/pkg/mnc/mnc_file.F,v 1.23 2008/05/22 12:21:19 mlosch Exp $
2 edhill 1.1 C $Name: $
3    
4     #include "MNC_OPTIONS.h"
5    
6 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 edhill 1.16 CBOP 0
8 edhill 1.15 C !ROUTINE: MNC_FILE_CREATE
9 edhill 1.1
10 edhill 1.15 C !INTERFACE:
11 edhill 1.3 SUBROUTINE MNC_FILE_CREATE(
12 edhill 1.14 I fname,
13     I myThid )
14 edhill 1.3
15 edhill 1.15 C !DESCRIPTION:
16     C Create a NetCDF file.
17    
18     C !USES:
19 edhill 1.3 implicit none
20    
21 edhill 1.15 C !INPUT PARAMETERS:
22 edhill 1.3 integer myThid
23     character*(*) fname
24 edhill 1.16 CEOP
25 edhill 1.3
26 edhill 1.15 C !LOCAL VARIABLES:
27 edhill 1.12 integer indf
28    
29 edhill 1.14 CALL MNC_FILE_OPEN(fname, 0, indf, myThid)
30 edhill 1.3
31     RETURN
32     END
33    
34 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
35 edhill 1.16 CBOP 0
36 edhill 1.15 C !ROUTINE: MNC_FILE_OPEN
37 edhill 1.3
38 edhill 1.15 C !INTERFACE:
39 edhill 1.1 SUBROUTINE MNC_FILE_OPEN(
40     I fname,
41 edhill 1.12 I itype,
42 edhill 1.14 O indf,
43     I myThid )
44 edhill 1.1
45 edhill 1.15 C !DESCRIPTION:
46     C Open or create a NetCDF file.
47    
48     C !USES:
49 edhill 1.1 implicit none
50 mlosch 1.23 #include "MNC_COMMON.h"
51 edhill 1.1 #include "EEPARAMS.h"
52 utke 1.24 #include "netcdf.inc"
53 edhill 1.1
54 edhill 1.15 C !INPUT PARAMETERS:
55 edhill 1.12 integer myThid,indf
56 edhill 1.1 character*(*) fname
57     integer itype
58 edhill 1.13 C itype => [ 0=new | 1=append | 2=read-only ]
59 edhill 1.16 CEOP
60 edhill 1.1
61 edhill 1.15 C !LOCAL VARIABLES:
62     integer n, err, fid, nf
63     character*(MAX_LEN_MBUF) msgbuf
64 edhill 1.16
65 edhill 1.3 C Functions
66     integer ILNBLNK
67    
68 edhill 1.1 C Is the file already open?
69 edhill 1.13 nf = ILNBLNK(fname)
70 edhill 1.22 CALL MNC_GET_IND(MNC_MAX_FID, fname,mnc_f_names,indf,myThid)
71 edhill 1.12 IF (indf .GT. 0) THEN
72 edhill 1.13 write(msgbuf,'(3a)') 'MNC_FILE_OPEN ERROR: ''', fname(1:nf),
73 edhill 1.1 & ''' is already open -- cannot open twice'
74 edhill 1.12 CALL print_error(msgbuf, mythid)
75 edhill 1.1 stop 'ABNORMAL END: package MNC'
76     ENDIF
77    
78 edhill 1.21 write(msgbuf,'(3a)') 'opening ''', fname(1:nf), ''''
79 edhill 1.12 IF (itype .EQ. 0) THEN
80 edhill 1.9
81 edhill 1.1 C Create new file
82 edhill 1.9 err = NF_CREATE(fname, NF_CLOBBER, fid)
83 edhill 1.14 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
84 edhill 1.9
85 edhill 1.12 ELSEIF (itype .EQ. 1) THEN
86 edhill 1.9
87 edhill 1.1 C Append to existing file
88 edhill 1.14 CALL MNC_FILE_READALL(fname, myThid)
89 edhill 1.9
90 edhill 1.1 ELSE
91     C Error
92     write(msgbuf,'(a,i5,a)') 'MNC_FILE_OPEN ERROR: ''', itype,
93     & ''' is not defined--should be: [0|1]'
94 edhill 1.3 CALL print_error( msgbuf, mythid )
95     stop 'ABNORMAL END: S/R MNC_FILE_ADD_ATTR_STR'
96 edhill 1.1 ENDIF
97    
98 edhill 1.22 CALL MNC_GET_NEXT_EMPTY_IND(MNC_MAX_FID, mnc_f_names,
99 edhill 1.20 & 'mnc_f_names', indf, myThid)
100 edhill 1.3 n = ILNBLNK(fname)
101 edhill 1.12 mnc_f_names(indf)(1:n) = fname(1:n)
102     mnc_f_info(indf,1) = 1
103     mnc_f_info(indf,2) = fid
104     mnc_f_info(indf,3) = 0
105     mnc_fv_ids(indf,1) = 0
106     mnc_f_alld(indf,1) = 0
107 edhill 1.1
108 edhill 1.3 RETURN
109 edhill 1.1 END
110    
111 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
112 edhill 1.16 CBOP 0
113 edhill 1.15 C !ROUTINE: MNC_FILE_ADD_ATTR_STR
114 edhill 1.1
115 edhill 1.15 C !INTERFACE:
116 edhill 1.1 SUBROUTINE MNC_FILE_ADD_ATTR_STR(
117     I fname,
118     I atname,
119 edhill 1.14 I sval,
120     I myThid )
121 edhill 1.1
122 edhill 1.15 C !DESCRIPTION:
123     C Add a character string attribute to a NetCDF file.
124    
125     C !USES:
126 edhill 1.1 implicit none
127 edhill 1.15
128     C !INPUT PARAMETERS:
129 edhill 1.7 integer myThid
130 edhill 1.5 character*(*) fname, atname, sval
131 edhill 1.15 CEOP
132 jmc 1.17 real*4 sZero
133     sZero = 0.
134 edhill 1.5
135 edhill 1.14 CALL MNC_FILE_ADD_ATTR_ANY(fname,atname, 1,
136 jmc 1.17 & sval, 0, 0.0D0, sZero, 0, myThid )
137 edhill 1.5 RETURN
138     END
139 edhill 1.1
140 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
141 edhill 1.16 CBOP 0
142 edhill 1.15 C !ROUTINE: MNC_FILE_ADD_ATTR_DBL
143 edhill 1.1
144 edhill 1.15 C !INTERFACE:
145 edhill 1.5 SUBROUTINE MNC_FILE_ADD_ATTR_DBL(
146     I fname,
147     I atname,
148     I len,
149 edhill 1.14 I dval,
150     I myThid )
151 edhill 1.1
152 edhill 1.15 C !DESCRIPTION:
153     C Add a double-precision real attribute to a NetCDF file.
154    
155     C !USES:
156 edhill 1.5 implicit none
157 edhill 1.15
158     C !INPUT PARAMETERS:
159 edhill 1.5 integer myThid, len
160     character*(*) fname, atname
161 edhill 1.7 REAL*8 dval
162 edhill 1.15 CEOP
163 jmc 1.17 real*4 sZero
164     sZero = 0.
165 edhill 1.1
166 edhill 1.14 CALL MNC_FILE_ADD_ATTR_ANY(fname,atname, 2,
167 jmc 1.17 & ' ', len, dval, sZero, 0, myThid )
168 edhill 1.5 RETURN
169     END
170 edhill 1.1
171 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
172 edhill 1.16 CBOP 0
173 edhill 1.15 C !ROUTINE: MNC_FILE_ADD_ATTR_REAL
174 edhill 1.1
175 edhill 1.15 C !INTERFACE:
176 edhill 1.5 SUBROUTINE MNC_FILE_ADD_ATTR_REAL(
177     I fname,
178     I atname,
179     I len,
180 edhill 1.14 I rval,
181     I myThid )
182 edhill 1.1
183 edhill 1.15 C !DESCRIPTION:
184     C Add a single-precision real attribute to a NetCDF file.
185    
186     C !USES:
187 edhill 1.5 implicit none
188 edhill 1.15
189     C !INPUT PARAMETERS:
190 edhill 1.5 integer myThid, len
191     character*(*) fname, atname
192 edhill 1.7 REAL*4 rval
193 edhill 1.15 CEOP
194 edhill 1.1
195 edhill 1.14 CALL MNC_FILE_ADD_ATTR_ANY(fname,atname, 3,
196     & ' ', len, 0.0D0, rval, 0, myThid )
197 edhill 1.3 RETURN
198 edhill 1.1 END
199    
200 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
201 edhill 1.16 CBOP 0
202 edhill 1.15 C !ROUTINE: MNC_FILE_ADD_ATTR_INT
203 edhill 1.1
204 edhill 1.15 C !INTERFACE:
205 edhill 1.1 SUBROUTINE MNC_FILE_ADD_ATTR_INT(
206     I fname,
207     I atname,
208 edhill 1.5 I len,
209 edhill 1.14 I ival,
210     I myThid )
211 edhill 1.1
212 edhill 1.15 C !DESCRIPTION:
213     C Add an integer attribute to a NetCDF file.
214    
215     C !USES:
216 edhill 1.1 implicit none
217 edhill 1.15
218     C !INPUT PARAMETERS:
219 edhill 1.5 integer myThid, len, ival
220 edhill 1.1 character*(*) fname, atname
221 edhill 1.15 CEOP
222 jmc 1.17 real*4 sZero
223     sZero = 0.
224 edhill 1.1
225 edhill 1.14 CALL MNC_FILE_ADD_ATTR_ANY(fname,atname, 4,
226 jmc 1.17 & ' ', len, 0.0D0, sZero, ival, myThid )
227 edhill 1.3 RETURN
228 edhill 1.1 END
229    
230 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
231 edhill 1.16 CBOP 1
232 edhill 1.15 C !ROUTINE: MNC_FILE_ADD_ATTR_ANY
233 edhill 1.1
234 edhill 1.15 C !INTERFACE:
235 edhill 1.5 SUBROUTINE MNC_FILE_ADD_ATTR_ANY(
236 edhill 1.1 I fname,
237     I atname,
238 edhill 1.14 I atype, sv, len,dv,rv,iv,
239     I myThid )
240 edhill 1.1
241 edhill 1.15 C !DESCRIPTION:
242     C Add all attributes to a NetCDF file.
243    
244     C !USES:
245 edhill 1.5 implicit none
246 mlosch 1.23 #include "MNC_COMMON.h"
247 edhill 1.1 #include "EEPARAMS.h"
248 utke 1.24 #include "netcdf.inc"
249 edhill 1.1
250 edhill 1.15 C !INPUT PARAMETERS:
251 edhill 1.5 integer myThid, atype, len, iv
252     character*(*) fname, atname, sv
253 edhill 1.7 REAL*8 dv
254     REAL*4 rv
255 edhill 1.16 CEOP
256    
257 edhill 1.15 C !LOCAL VARIABLES:
258 edhill 1.21 integer n, nf, err, fid, ind, n1, lens
259 edhill 1.15 character*(MNC_MAX_CHAR) s1
260     character*(MAX_LEN_MBUF) msgbuf
261 edhill 1.16
262 edhill 1.1 C Functions
263     integer ILNBLNK
264    
265 edhill 1.4 C Verify that the file is open
266 edhill 1.22 CALL MNC_GET_IND(MNC_MAX_FID, fname, mnc_f_names, ind, myThid)
267 edhill 1.4 IF (ind .LT. 0) THEN
268 edhill 1.21 nf = ILNBLNK( fname )
269 edhill 1.1 write(msgbuf,'(3a)') 'MNC ERROR: file ''',
270 edhill 1.21 & fname(1:nf), ''' must be opened first'
271 edhill 1.1 CALL print_error( msgbuf, mythid )
272     stop 'ABNORMAL END: S/R MNC_FILE_ADD_ATTR_INT'
273     ENDIF
274 edhill 1.2 fid = mnc_f_info(ind,2)
275 edhill 1.1
276     C Enter define mode
277 edhill 1.14 CALL MNC_FILE_REDEF(fname, myThid)
278 edhill 1.1
279     s1(1:MNC_MAX_CHAR) = mnc_blank_name(1:MNC_MAX_CHAR)
280     n1 = ILNBLNK(atname)
281     s1(1:n1) = atname(1:n1)
282    
283 edhill 1.5 IF (atype .EQ. 1) THEN
284     lens = ILNBLNK(sv)
285     err = NF_PUT_ATT_TEXT(fid, NF_GLOBAL, s1, lens, sv)
286 edhill 1.14 CALL MNC_HANDLE_ERR(err,
287     & 'adding TEXT attribute in S/R MNC_FILE_ADD_ATTR_ANY',
288     & myThid)
289 edhill 1.5 ELSEIF (atype .EQ. 2) THEN
290     err = NF_PUT_ATT_DOUBLE(fid, NF_GLOBAL, s1, NF_DOUBLE, len, dv)
291 edhill 1.14 CALL MNC_HANDLE_ERR(err,
292     & 'adding DOUBLE attribute in S/R MNC_FILE_ADD_ATTR_ANY',
293     & myThid)
294 edhill 1.5 ELSEIF (atype .EQ. 3) THEN
295     err = NF_PUT_ATT_REAL(fid, NF_GLOBAL, s1, NF_FLOAT, len, rv)
296 edhill 1.14 CALL MNC_HANDLE_ERR(err,
297     & 'adding REAL attribute in S/R MNC_FILE_ADD_ATTR_ANY',
298     & myThid)
299 edhill 1.5 ELSEIF (atype .EQ. 4) THEN
300     err = NF_PUT_ATT_INT(fid, NF_GLOBAL, s1, NF_INT, len, iv)
301 edhill 1.14 CALL MNC_HANDLE_ERR(err,
302     & 'adding INT attribute in S/R MNC_FILE_ADD_ATTR_ANY',
303     & myThid)
304 edhill 1.5 ELSE
305     write(msgbuf,'(a,i10,a)') 'MNC ERROR: atype = ''', atype,
306     & ''' is invalid--must be: [1-4]'
307     n = ILNBLNK(msgbuf)
308     CALL print_error(msgbuf(1:n), mythid)
309     stop 'ABNORMAL END: S/R MNC_VAR_ADD_ATTR_ANY'
310     ENDIF
311 edhill 1.3
312     RETURN
313     END
314    
315 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
316 edhill 1.16 CBOP 1
317 edhill 1.15 C !ROUTINE: MNC_FILE_CLOSE
318 edhill 1.3
319 edhill 1.15 C !INTERFACE:
320 edhill 1.3 SUBROUTINE MNC_FILE_CLOSE(
321 edhill 1.14 I fname,
322     I myThid )
323 edhill 1.3
324 edhill 1.15 C !DESCRIPTION:
325     C Close a NetCDF file.
326    
327     C !USES:
328 edhill 1.3 implicit none
329 mlosch 1.23 #include "MNC_COMMON.h"
330 edhill 1.3 #include "EEPARAMS.h"
331 utke 1.24 #include "netcdf.inc"
332 edhill 1.3
333 edhill 1.15 C !INPUT PARAMETERS:
334 edhill 1.3 integer myThid
335     character*(*) fname
336 edhill 1.16 CEOP
337 edhill 1.3
338 edhill 1.15 C !LOCAL VARIABLES:
339     integer i,j,k,n, err, fid, indf, nf
340     character*(MAX_LEN_MBUF) msgbuf
341 edhill 1.16
342 edhill 1.13 C Functions
343     integer ILNBLNK
344    
345     nf = ILNBLNK(fname)
346    
347 edhill 1.3 C Check that the file is open
348 edhill 1.22 CALL MNC_GET_IND(MNC_MAX_FID, fname, mnc_f_names, indf, myThid)
349 edhill 1.13 IF (indf .LT. 1) THEN
350     write(msgbuf,'(3a)') 'MNC Warning: file ''', fname(1:nf),
351 edhill 1.3 & ''' is already closed'
352     CALL print_error( msgbuf, mythid )
353     RETURN
354     ENDIF
355 edhill 1.13 fid = mnc_f_info(indf,2)
356 edhill 1.3 err = NF_CLOSE(fid)
357 edhill 1.13 write(msgbuf,'(3a)') ' cannot close file ''', fname(1:nf), ''''
358 edhill 1.14 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
359 edhill 1.3
360 edhill 1.9 C Clear all the info associated with this file
361     C variables
362 edhill 1.13 n = mnc_fv_ids(indf,1)
363 edhill 1.3 IF (n .GE. 1) THEN
364     DO i = 1,n
365 edhill 1.9 j = 2 + 3*(i - 1)
366 edhill 1.13 k = mnc_fv_ids(indf,j)
367 edhill 1.3 mnc_v_names(k)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
368     ENDDO
369 edhill 1.13 DO i = 1,MNC_MAX_INFO
370     mnc_fv_ids(indf,i) = 0
371 edhill 1.9 ENDDO
372 edhill 1.3 ENDIF
373 edhill 1.9 C dims
374 edhill 1.13 n = mnc_f_alld(indf,1)
375     mnc_f_alld(indf,1) = 0
376 edhill 1.7 DO i = 1,n
377 edhill 1.13 j = mnc_f_alld(indf,i+1)
378 edhill 1.9 mnc_d_ids(j) = 0
379     mnc_d_size(j) = 0
380 edhill 1.7 mnc_d_names(j)(1:MNC_MAX_CHAR) = mnc_blank_name(1:MNC_MAX_CHAR)
381 edhill 1.13 mnc_f_alld(indf,i+1) = 0
382 edhill 1.7 ENDDO
383 edhill 1.9 C grids
384 edhill 1.13 n = mnc_f_info(indf,3)
385 edhill 1.9 IF (n .GT. 0) THEN
386     DO i = 1,n
387     j = 4 + 3*(i - 1)
388 edhill 1.13 k = mnc_f_info(indf,j)
389 edhill 1.9 mnc_g_names(k)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
390     ENDDO
391     DO i = 1,MNC_MAX_INFO
392 edhill 1.13 mnc_fd_ind(indf,i) = 0
393     mnc_f_info(indf,i) = 0
394 edhill 1.9 ENDDO
395     ENDIF
396     C file name
397 edhill 1.22 DO i = 1,MNC_MAX_PATH
398     mnc_f_names(indf)(i:i) = ' '
399     ENDDO
400 edhill 1.8
401     RETURN
402     END
403    
404 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
405 edhill 1.16 CBOP 0
406 edhill 1.15 C !ROUTINE: MNC_FILE_CLOSE_ALL_MATCHING
407 edhill 1.8
408 edhill 1.15 C !INTERFACE:
409 edhill 1.8 SUBROUTINE MNC_FILE_CLOSE_ALL_MATCHING(
410 edhill 1.14 I fname,
411     I myThid )
412 edhill 1.8
413 edhill 1.15 C !DESCRIPTION:
414     C Close all files matching a character string.
415    
416     C !USES:
417 edhill 1.8 implicit none
418 mlosch 1.23 #include "MNC_COMMON.h"
419 edhill 1.8 #include "EEPARAMS.h"
420 utke 1.24 #include "netcdf.inc"
421 edhill 1.8
422 edhill 1.15 C !INPUT PARAMETERS:
423 edhill 1.8 integer myThid
424     character*(*) fname
425 edhill 1.16 CEOP
426 edhill 1.8
427 edhill 1.15 C !LOCAL VARIABLES:
428     integer i,n
429 edhill 1.16
430 edhill 1.8 C Functions
431     integer ILNBLNK
432    
433     n = ILNBLNK(fname)
434 edhill 1.22 DO i = 1,MNC_MAX_FID
435 edhill 1.8
436     C Check that the file is open
437     IF (fname(1:n) .EQ. mnc_f_names(i)(1:n)) THEN
438 edhill 1.14 CALL MNC_FILE_CLOSE(mnc_f_names(i), myThid)
439 edhill 1.8 ENDIF
440    
441     ENDDO
442    
443     RETURN
444     END
445    
446 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
447 edhill 1.16 CBOP 0
448 edhill 1.15 C !ROUTINE: MNC_FILE_CLOSE_ALL
449 edhill 1.8
450 edhill 1.15 C !INTERFACE:
451 edhill 1.8 SUBROUTINE MNC_FILE_CLOSE_ALL(
452     I myThid )
453    
454 edhill 1.15 C !DESCRIPTION:
455 edhill 1.19 C Close all NetCDF files.
456 edhill 1.15
457     C !USES:
458 edhill 1.8 implicit none
459 mlosch 1.23 #include "MNC_COMMON.h"
460 edhill 1.8 #include "EEPARAMS.h"
461 utke 1.24 #include "netcdf.inc"
462 edhill 1.8
463 edhill 1.15 C !INPUT PARAMETERS:
464 edhill 1.8 integer myThid
465 edhill 1.16 CEOP
466 edhill 1.8
467 edhill 1.15 C !LOCAL VARIABLES:
468 edhill 1.8 integer i
469 edhill 1.22 character*(MNC_MAX_PATH) bpath
470    
471     DO i = 1,MNC_MAX_PATH
472     bpath(i:i) = ' '
473     ENDDO
474 edhill 1.8
475 edhill 1.22 DO i = 1,MNC_MAX_FID
476 edhill 1.8
477     C Check that the file is open
478 edhill 1.22 IF (mnc_f_names(i)(1:MNC_MAX_PATH)
479     & .NE. bpath(1:MNC_MAX_PATH)) THEN
480 edhill 1.14 CALL MNC_FILE_CLOSE(mnc_f_names(i), myThid)
481 edhill 1.8 ENDIF
482    
483     ENDDO
484 edhill 1.4
485     RETURN
486     END
487    
488 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
489 edhill 1.16 CBOP 0
490 edhill 1.15 C !ROUTINE: MNC_FILE_REDEF
491 edhill 1.4
492 edhill 1.15 C !INTERFACE:
493 edhill 1.4 SUBROUTINE MNC_FILE_REDEF(
494 edhill 1.14 I fname,
495     I myThid )
496 edhill 1.4
497 edhill 1.15 C !DESCRIPTION:
498     C Set the NetCDF file to DEFINE mode.
499    
500     C !USES:
501 edhill 1.4 implicit none
502 mlosch 1.23 #include "MNC_COMMON.h"
503 edhill 1.4 #include "EEPARAMS.h"
504 utke 1.24 #include "netcdf.inc"
505 edhill 1.4
506 edhill 1.15 C !INPUT PARAMETERS:
507 edhill 1.4 integer myThid
508     character*(*) fname
509 edhill 1.16 CEOP
510 edhill 1.4
511 edhill 1.15 C !LOCAL VARIABLES:
512     integer ind, fid, def, err, n
513     character*(MAX_LEN_MBUF) msgbuf
514 edhill 1.16
515 edhill 1.4 C Functions
516     integer ILNBLNK
517    
518     C Verify that the file is open
519 edhill 1.22 CALL MNC_GET_IND(MNC_MAX_FID, fname, mnc_f_names, ind, myThid)
520 edhill 1.4 IF (ind .LT. 0) THEN
521 edhill 1.7 n = ILNBLNK(fname)
522 edhill 1.4 write(msgbuf,'(3a)') 'MNC ERROR: file ''',
523 edhill 1.7 & fname(1:n), ''' must be opened first'
524 edhill 1.4 CALL print_error( msgbuf, mythid )
525     stop 'ABNORMAL END: S/R MNC_FILE_REDEF'
526     ENDIF
527     def = mnc_f_info(ind,1)
528     fid = mnc_f_info(ind,2)
529    
530     IF (def .NE. 1) THEN
531     C Enter define mode
532     err = NF_REDEF(fid)
533 edhill 1.14 CALL MNC_HANDLE_ERR(err,
534     & 'entering define mode in S/R MNC_FILE_REDEF', myThid)
535 edhill 1.4 mnc_f_info(ind,1) = 1
536     ENDIF
537    
538     RETURN
539     END
540    
541 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
542 edhill 1.16 CBOP 0
543 edhill 1.15 C !ROUTINE: MNC_FILE_ENDDEF
544 edhill 1.4
545 edhill 1.15 C !INTERFACE:
546 edhill 1.4 SUBROUTINE MNC_FILE_ENDDEF(
547 edhill 1.14 I fname,
548     I myThid )
549 edhill 1.4
550 edhill 1.15 C !DESCRIPTION:
551     C End DEFINE mode for a NetCDF file.
552    
553     C !USES:
554 edhill 1.4 implicit none
555 mlosch 1.23 #include "MNC_COMMON.h"
556 edhill 1.4 #include "EEPARAMS.h"
557 utke 1.24 #include "netcdf.inc"
558 edhill 1.4
559 edhill 1.15 C !INPUT PARAMETERS:
560 edhill 1.4 integer myThid
561     character*(*) fname
562 edhill 1.16 CEOP
563 edhill 1.4
564 edhill 1.15 C !LOCAL VARIABLES:
565     integer ind, fid, def, err, n
566     character*(MAX_LEN_MBUF) msgbuf
567 edhill 1.16
568 edhill 1.4 C Functions
569     integer ILNBLNK
570    
571     C Verify that the file is open
572 edhill 1.22 CALL MNC_GET_IND(MNC_MAX_FID, fname, mnc_f_names, ind, myThid)
573 edhill 1.4 IF (ind .LT. 0) THEN
574 edhill 1.7 n = ILNBLNK(fname)
575 edhill 1.4 write(msgbuf,'(3a)') 'MNC ERROR: file ''',
576 edhill 1.7 & fname(1:n), ''' must be opened first'
577 edhill 1.4 CALL print_error( msgbuf, mythid )
578     stop 'ABNORMAL END: S/R MNC_FILE_REDEF'
579     ENDIF
580     def = mnc_f_info(ind,1)
581     fid = mnc_f_info(ind,2)
582    
583     IF (def .NE. 2) THEN
584     C Enter define mode
585     err = NF_ENDDEF(fid)
586 edhill 1.14 CALL MNC_HANDLE_ERR(err,
587     & 'ending define mode in S/R MNC_FILE_ENDDEF', myThid)
588 edhill 1.4 mnc_f_info(ind,1) = 2
589     ENDIF
590 edhill 1.9
591     RETURN
592     END
593    
594 edhill 1.10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
595 edhill 1.16 CBOP 1
596 edhill 1.18 C !ROUTINE: MNC_FILE_READALL
597 edhill 1.9
598 edhill 1.16 C !INTERFACE:
599 edhill 1.9 SUBROUTINE MNC_FILE_READALL(
600 edhill 1.14 I fname,
601     I myThid )
602 edhill 1.9
603 edhill 1.16 C !DESCRIPTION:
604     C Try to open and read a NetCDF file.
605    
606     C !USES:
607 edhill 1.9 implicit none
608 utke 1.24 #include "EEPARAMS.h"
609 edhill 1.9 #include "netcdf.inc"
610 edhill 1.11
611 edhill 1.15 C !INPUT PARAMETERS:
612 edhill 1.11 integer myThid
613     character*(*) fname
614 edhill 1.16 CEOP
615 edhill 1.11
616     C Functions
617     integer IFNBLNK, ILNBLNK
618    
619     C Local Variables
620 edhill 1.12 integer ierr, nff,nlf, indf
621 edhill 1.11 character*(MAX_LEN_MBUF) msgbuf
622    
623     nff = IFNBLNK(fname)
624     nlf = ILNBLNK(fname)
625 edhill 1.14 CALL MNC_FILE_TRY_READ(fname, ierr, indf, myThid)
626 edhill 1.11 write(msgbuf,'(3a)') 'MNC ERROR: cannot open file ''',
627     & fname(nff:nlf), ''' for read/write access'
628 edhill 1.14 CALL MNC_HANDLE_ERR(ierr, msgbuf, myThid)
629 edhill 1.11
630     RETURN
631     END
632    
633     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
634 edhill 1.16 CBOP 1
635 edhill 1.15 C !ROUTINE: MNC_FILE_TRY_READ
636 edhill 1.11
637 edhill 1.15 C !INTERFACE:
638 edhill 1.11 SUBROUTINE MNC_FILE_TRY_READ(
639     I fname,
640 edhill 1.12 O ierr,
641 edhill 1.14 O indf,
642     I myThid )
643 edhill 1.11
644 edhill 1.15 C !DESCRIPTION:
645     C Try to open and read a NetCDF file.
646    
647     C !USES:
648 edhill 1.11 implicit none
649 mlosch 1.23 #include "MNC_COMMON.h"
650 edhill 1.9 #include "EEPARAMS.h"
651 utke 1.24 #include "netcdf.inc"
652 edhill 1.9
653 edhill 1.15 C !INPUT PARAMETERS:
654 edhill 1.12 integer myThid, ierr, indf
655 edhill 1.9 character*(*) fname
656    
657 edhill 1.15 C !LOCAL VARIABLES:
658 edhill 1.9 integer i,j,k, fid, err, ndim,nvar,ngat,unlimid
659 edhill 1.12 integer dlen, id, xtype, nat, nff,nlf, iv
660 edhill 1.9 integer ndv, did, ns,ne, n1,n2, indg, indv
661     character*(MAX_LEN_MBUF) msgbuf
662     character*(NF_MAX_NAME) name
663     integer idlist(NF_MAX_VAR_DIMS)
664     character*(MNC_MAX_CHAR) dnames(20)
665 edhill 1.15 CEOP
666     C Functions
667     integer IFNBLNK, ILNBLNK
668 edhill 1.9
669     C Open and save the filename and fID
670     nff = IFNBLNK(fname)
671     nlf = ILNBLNK(fname)
672     err = NF_OPEN(fname, NF_WRITE, fid)
673 edhill 1.11 ierr = NF_NOERR
674     IF (err .NE. NF_NOERR) THEN
675     ierr = err
676     RETURN
677     ENDIF
678 edhill 1.22 CALL MNC_GET_NEXT_EMPTY_IND(MNC_MAX_FID, mnc_f_names,
679 edhill 1.20 & 'mnc_f_names', indf, myThid)
680 edhill 1.9 mnc_f_names(indf)(1:(nlf-nff+1)) = fname(nff:nlf)
681     mnc_f_info(indf,2) = fid
682    
683     C Get the overall number of entities
684     err = NF_INQ(fid, ndim, nvar, ngat, unlimid)
685     write(msgbuf,'(4a)') 'MNC ERROR: cannot read number of dims',
686     & ' in file ''', fname(nff:nlf), ''''
687 edhill 1.14 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
688 edhill 1.9
689     C Read each dimension and save the information
690     DO id = 1,ndim
691     err = NF_INQ_DIM(fid, id, name, dlen)
692     write(msgbuf,'(2a,i5,3a)') 'MNC ERROR: cannot read dimension',
693     & ' info for dim ''', id, ''' in file ''',
694     & fname(nff:nlf), ''''
695 edhill 1.14 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
696 edhill 1.9 IF (id .EQ. unlimid) THEN
697     dlen = -1
698     ENDIF
699     ns = IFNBLNK(name)
700     ne = ILNBLNK(name)
701 edhill 1.18
702 edhill 1.14 CALL MNC_DIM_INIT_ALL(fname,name(ns:ne),dlen,'N', myThid)
703 edhill 1.9 DO i = 1,mnc_f_alld(indf,1)
704     j = mnc_f_alld(indf,i+1)
705     n1 = IFNBLNK(mnc_d_names(j))
706     n2 = ILNBLNK(mnc_d_names(j))
707     IF (((ne-ns) .EQ. (n2-n1))
708     & .AND. (mnc_d_names(j)(ns:ne) .EQ. name(ns:ne))) THEN
709     mnc_d_ids(j) = id
710     goto 10
711     ENDIF
712     ENDDO
713     10 CONTINUE
714     ENDDO
715    
716     C Read and save each variable
717     DO id = 1,nvar
718     err = NF_INQ_VAR(fid, id, name, xtype, ndv, idlist, nat)
719     write(msgbuf,'(2a,i5,3a)') 'MNC ERROR: cannot read variable',
720     & ' info for variable ''', id, ''' in file ''',
721     & fname(nff:nlf), ''''
722 edhill 1.14 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
723 edhill 1.9 n1 = IFNBLNK(name)
724     n2 = ILNBLNK(name)
725 edhill 1.18
726 edhill 1.9 C Create a grid for this variable
727     DO i = 1,ndv
728     did = idlist(i)
729     dnames(i)(1:MNC_MAX_CHAR) = mnc_d_names(did)(1:MNC_MAX_CHAR)
730     ENDDO
731 edhill 1.18
732 edhill 1.14 CALL MNC_GRID_INIT_ALL(fname, name, ndv, dnames, indg, myThid)
733 edhill 1.9
734     C Update the tables
735 edhill 1.20 CALL MNC_GET_NEXT_EMPTY_IND(MNC_MAX_ID,mnc_v_names,
736     & 'mnc_v_names', indv,myThid)
737 edhill 1.9 mnc_v_names(indv)(1:(n2-n1+1)) = name(n1:n2)
738     iv = 2 + 3*mnc_fv_ids(indf,1)
739     mnc_fv_ids(indf,iv) = indv
740     mnc_fv_ids(indf,iv+1) = id
741     DO i = 1,mnc_f_info(indf,3)
742     j = 4 + 3*(i-1)
743     k = mnc_f_info(indf,j)
744     IF (k .EQ. indg) THEN
745     mnc_fv_ids(indf,iv+2) = j
746     GOTO 20
747     ENDIF
748     ENDDO
749     20 CONTINUE
750     mnc_fv_ids(indf,1) = mnc_fv_ids(indf,1) + 1
751    
752     ENDDO
753 edhill 1.1
754 edhill 1.3 RETURN
755 edhill 1.1 END
756    
757 edhill 1.16 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

  ViewVC Help
Powered by ViewVC 1.1.22