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

  ViewVC Help
Powered by ViewVC 1.1.22