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

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

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


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

1 edhill 1.5 C $Header: /u/u3/gcmpack/MITgcm/pkg/mnc/mnc_var.F,v 1.4 2004/01/07 19:50:52 edhill Exp $
2 edhill 1.1 C $Name: $
3    
4     #include "MNC_OPTIONS.h"
5    
6     C==================================================================
7    
8     SUBROUTINE MNC_VAR_INIT_DBL(
9     I myThid,
10     I fname,
11     I gname,
12 edhill 1.5 I vname,
13     I units )
14    
15     implicit none
16     #include "netcdf.inc"
17    
18     C Arguments
19     integer myThid
20     character*(*) fname,gname,vname,units
21    
22     CALL MNC_VAR_INIT_ANY(myThid,fname,gname,vname,units, NF_DOUBLE)
23     RETURN
24     END
25    
26     C==================================================================
27    
28     SUBROUTINE MNC_VAR_INIT_REAL(
29     I myThid,
30     I fname,
31     I gname,
32     I vname,
33     I units )
34    
35     implicit none
36     #include "netcdf.inc"
37    
38     C Arguments
39     integer myThid
40     character*(*) fname,gname,vname,units
41    
42     CALL MNC_VAR_INIT_ANY(myThid,fname,gname,vname,units, NF_FLOAT)
43     RETURN
44     END
45    
46     C==================================================================
47    
48     SUBROUTINE MNC_VAR_INIT_INT(
49     I myThid,
50     I fname,
51     I gname,
52     I vname,
53     I units )
54    
55     implicit none
56     #include "netcdf.inc"
57    
58     C Arguments
59     integer myThid
60     character*(*) fname,gname,vname,units
61    
62     CALL MNC_VAR_INIT_ANY(myThid,fname,gname,vname,units, NF_INT)
63     RETURN
64     END
65    
66     C==================================================================
67    
68     SUBROUTINE MNC_VAR_INIT_ANY(
69     I myThid,
70     I fname,
71     I gname,
72 edhill 1.1 I vname,
73 edhill 1.5 I units,
74     I vtype )
75 edhill 1.1
76     implicit none
77 edhill 1.3 #include "netcdf.inc"
78 edhill 1.1 #include "mnc_common.h"
79     #include "EEPARAMS.h"
80    
81     C Arguments
82     integer myThid
83 edhill 1.5 character*(*) fname,gname,vname,units
84     integer vtype
85 edhill 1.1
86     C Functions
87     integer ILNBLNK
88    
89     C Local Variables
90 edhill 1.3 integer i,j,k, n, indf,indv, fid, nd, ngrid, is,ie, err
91 edhill 1.4 integer vid, nv, ind_g_finfo
92 edhill 1.1 character*(MAX_LEN_MBUF) msgbuf
93 edhill 1.3 integer rids(10), ids(10)
94 edhill 1.5 integer lenf,leng,lenv,lenu
95 edhill 1.1
96 edhill 1.3 C Strip trailing spaces
97     lenf = ILNBLNK(fname)
98     leng = ILNBLNK(gname)
99     lenv = ILNBLNK(vname)
100 edhill 1.5 lenu = ILNBLNK(units)
101 edhill 1.3
102     C Check that the file is open
103     CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, indf)
104     IF (indf .LT. 1) THEN
105     write(msgbuf,'(3a)') 'MNC ERROR: file ''', fname,
106     & ''' must be opened first'
107     CALL print_error(msgbuf, mythid)
108     stop 'ABNORMAL END: S/R MNC_VAR_INIT_DBL'
109 edhill 1.1 ENDIF
110 edhill 1.3 fid = mnc_f_info(indf,2)
111    
112     C Get the grid information
113     ngrid = mnc_f_info(indf,3)
114     IF (ngrid .LT. 1) THEN
115     write(msgbuf,'(3a)') 'MNC ERROR: file ''', fname(1:lenf),
116     & ''' contains NO grids'
117     CALL print_error(msgbuf, mythid)
118     stop 'ABNORMAL END: S/R MNC_VAR_INIT_DBL'
119     ENDIF
120     DO i = 1,ngrid
121     j = 4 + (i-1)*3
122     k = mnc_f_info(indf,j)
123     n = ILNBLNK(mnc_g_names(k))
124     IF ((leng .EQ. n)
125     & .AND. (mnc_g_names(k)(1:n) .EQ. gname(1:n))) THEN
126 edhill 1.4 ind_g_finfo = j
127 edhill 1.3 is = mnc_f_info(indf,(j+1))
128     ie = mnc_f_info(indf,(j+2))
129     nd = 0
130     DO k = is,ie
131     nd = nd + 1
132     ids(nd) = mnc_fg_ids(indf,k)
133     ENDDO
134     GOTO 10
135     ENDIF
136     ENDDO
137     write(msgbuf,'(5a)') 'MNC ERROR: file ''', fname(1:lenf),
138     & ''' does not contain grid ''', gname(1:leng), ''''
139     CALL print_error(msgbuf, mythid)
140     stop 'ABNORMAL END: S/R MNC_VAR_INIT_DBL'
141     10 CONTINUE
142    
143     C Add the variable definition
144     CALL MNC_FILE_REDEF(myThid, fname)
145 edhill 1.5 err = NF_DEF_VAR(fid, vname, vtype, nd, ids, vid)
146 edhill 1.3 write(msgbuf,'(5a)') 'defining variable ''', vname(1:lenv),
147     & ''' in file ''', fname(1:lenf), ''''
148     CALL MNC_HANDLE_ERR(myThid, err, msgbuf)
149    
150     C Success, so save the variable info
151     CALL MNC_GET_NEXT_EMPTY_IND(myThid, MNC_MAX_ID, mnc_v_names, indv)
152     mnc_v_names(indv)(1:lenv) = vname(1:lenv)
153     nv = mnc_fv_ids(indf,1)
154 edhill 1.5 i = 2 + nv*3
155 edhill 1.3 j = i + 1
156 edhill 1.4 k = i + 2
157 edhill 1.3 mnc_fv_ids(indf,i) = indv
158     mnc_fv_ids(indf,j) = vid
159 edhill 1.4 mnc_fv_ids(indf,k) = ind_g_finfo
160 edhill 1.3 mnc_fv_ids(indf,1) = nv + 1
161    
162 edhill 1.5 C Add the units
163     CALL MNC_VAR_ADD_ATTR_STR(myThid, fname, vname, 'units', units)
164    
165 edhill 1.3 RETURN
166     END
167    
168     C==================================================================
169    
170     SUBROUTINE MNC_VAR_ADD_ATTR_STR(
171     I myThid,
172     I fname,
173     I vname,
174     I atname,
175     I sval )
176    
177     implicit none
178 edhill 1.5 C Arguments
179     integer myThid
180     character*(*) fname,vname,atname,sval
181    
182     CALL MNC_VAR_ADD_ATTR_ANY(myThid,fname,vname,atname,
183     & 1, sval, 0, 0.0D0, 0.0, 0)
184     RETURN
185     END
186     C==================================================================
187    
188     SUBROUTINE MNC_VAR_ADD_ATTR_DBL(
189     I myThid,
190     I fname,
191     I vname,
192     I atname,
193     I nv,
194     I dval )
195    
196     implicit none
197     C Arguments
198     integer myThid,nv
199     character*(*) fname,vname,atname
200     _RL dval(*)
201    
202     CALL MNC_VAR_ADD_ATTR_ANY(myThid,fname,vname,atname,
203     & 2, ' ', nv, dval, 0.0, 0)
204     RETURN
205     END
206    
207     C==================================================================
208    
209     SUBROUTINE MNC_VAR_ADD_ATTR_REAL(
210     I myThid,
211     I fname,
212     I vname,
213     I atname,
214     I nv,
215     I rval )
216    
217     implicit none
218     C Arguments
219     integer myThid,nv
220     character*(*) fname,vname,atname
221     _RS rval(*)
222    
223     CALL MNC_VAR_ADD_ATTR_ANY(myThid,fname,vname,atname,
224     & 3, ' ', nv, 0.0D0, rval, 0)
225     RETURN
226     END
227    
228     C==================================================================
229    
230     SUBROUTINE MNC_VAR_ADD_ATTR_INT(
231     I myThid,
232     I fname,
233     I vname,
234     I atname,
235     I nv,
236     I ival )
237    
238     implicit none
239     C Arguments
240     integer myThid,nv
241     character*(*) fname,vname,atname
242     integer ival(*)
243    
244     CALL MNC_VAR_ADD_ATTR_ANY(myThid,fname,vname,atname,
245     & 4, ' ', nv, 0.0D0, 0.0, ival)
246     RETURN
247     END
248    
249     C==================================================================
250    
251     SUBROUTINE MNC_VAR_ADD_ATTR_ANY(
252     I myThid,
253     I fname,
254     I vname,
255     I atname,
256     I atype, cs,len,dv,rv,iv )
257    
258     implicit none
259 edhill 1.3 #include "netcdf.inc"
260     #include "mnc_common.h"
261     #include "EEPARAMS.h"
262    
263     C Arguments
264 edhill 1.5 integer myThid,atype,len
265     character*(*) fname,vname,atname
266     character*(*) cs
267     _RL dv(*)
268     _RS rv(*)
269     integer iv(*)
270 edhill 1.3
271     C Functions
272     integer ILNBLNK
273    
274     C Local Variables
275 edhill 1.4 integer i,j,k, n, nv, indf,ind_fv_ids, fid,vid, err
276 edhill 1.3 character*(MAX_LEN_MBUF) msgbuf
277     integer lenf,lenv,lenat,lens
278    
279     C Strip trailing spaces
280     lenf = ILNBLNK(fname)
281     lenv = ILNBLNK(vname)
282     lenat = ILNBLNK(atname)
283 edhill 1.5 lens = ILNBLNK(cs)
284 edhill 1.3
285 edhill 1.4 CALL MNC_GET_FVINDS(myThid, fname, vname, indf, ind_fv_ids)
286     IF ((indf .LT. 1).OR.(ind_fv_ids .LT. 1)) THEN
287     write(msgbuf,'(5a)') 'MNC ERROR: file ''', fname(1:lenf),
288     & ''' is not open or does not contain variable ''',
289     & vname(1:lenv), ''''
290 edhill 1.3 CALL print_error(msgbuf, mythid)
291     stop 'ABNORMAL END: S/R MNC_VAR_ADD_ATTR_STR'
292     ENDIF
293     fid = mnc_f_info(indf,2)
294 edhill 1.4 vid = mnc_fv_ids(indf,(ind_fv_ids+1))
295 edhill 1.3
296     C Set the attribute
297     CALL MNC_FILE_REDEF(myThid, fname)
298 edhill 1.5 print *, 'atype = ', atype
299     IF (atype .EQ. 1) THEN
300     err = NF_PUT_ATT_TEXT(fid, vid, atname, lens, cs)
301     ELSEIF (atype .EQ. 2) THEN
302     err = NF_PUT_ATT_DOUBLE(fid, vid, atname, NF_DOUBLE, len, dv)
303     ELSEIF (atype .EQ. 3) THEN
304     err = NF_PUT_ATT_REAL(fid, vid, atname, NF_FLOAT, len, rv)
305     ELSEIF (atype .EQ. 4) THEN
306     err = NF_PUT_ATT_INT(fid, vid, atname, NF_INT, len, iv)
307     ELSE
308     write(msgbuf,'(a,i10,a)') 'MNC ERROR: atype = ''', atype,
309     & ''' is invalid--must be: [1-4]'
310     n = ILNBLNK(msgbuf)
311     CALL print_error(msgbuf(1:n), mythid)
312     stop 'ABNORMAL END: S/R MNC_VAR_ADD_ATTR_ANY'
313     ENDIF
314 edhill 1.3 write(msgbuf,'(5a)') 'adding attribute ''', atname(1:lenat),
315 edhill 1.4 & ''' to file ''', fname(1:lenf), ''''
316     CALL MNC_HANDLE_ERR(myThid, err, msgbuf)
317    
318     RETURN
319     END
320    
321     C==================================================================
322    
323     SUBROUTINE MNC_VAR_WRITE_DBL(
324     I myThid,
325     I fname,
326     I vname,
327     I var )
328    
329     implicit none
330 edhill 1.5 C Arguments
331     integer myThid
332     character*(*) fname,vname
333     _RL var(*)
334    
335     CALL MNC_VAR_WRITE_ANY(myThid,fname,vname, 1, var, 0.0, 0 )
336     RETURN
337     END
338    
339     C==================================================================
340    
341     SUBROUTINE MNC_VAR_WRITE_REAL(
342     I myThid,
343     I fname,
344     I vname,
345     I var )
346    
347     implicit none
348     C Arguments
349     integer myThid
350     character*(*) fname,vname
351     _RS var(*)
352    
353     CALL MNC_VAR_WRITE_ANY(myThid,fname,vname, 2, 0.0D0, var, 0 )
354     RETURN
355     END
356    
357     C==================================================================
358    
359     SUBROUTINE MNC_VAR_WRITE_INT(
360     I myThid,
361     I fname,
362     I vname,
363     I var )
364    
365     implicit none
366     C Arguments
367     integer myThid
368     character*(*) fname,vname
369     integer var(*)
370    
371     CALL MNC_VAR_WRITE_ANY(myThid,fname,vname, 3, 0.0D0, 0.0, var )
372     RETURN
373     END
374    
375     C==================================================================
376    
377     SUBROUTINE MNC_VAR_WRITE_ANY(
378     I myThid,
379     I fname,
380     I vname,
381     I vtype,
382     I dv,
383     I rv,
384     I iv )
385    
386     implicit none
387 edhill 1.4 #include "netcdf.inc"
388     #include "mnc_common.h"
389     #include "EEPARAMS.h"
390    
391     C Arguments
392 edhill 1.5 integer myThid, vtype
393     character*(*) fname,vname
394     _RL dv(*)
395     _RS rv(*)
396     integer iv(*)
397 edhill 1.4
398     C Functions
399     integer ILNBLNK
400    
401     C Local Variables
402     integer i,j,k, n, indf,ind_fv_ids, fid,vid,did, ig, err, ds,de
403     character*(MAX_LEN_MBUF) msgbuf
404     integer lenf,lenv, lend
405     integer vstart(100), vcount(100)
406     integer rvstart(100), rvcount(100)
407    
408     C Strip trailing spaces
409     lenf = ILNBLNK(fname)
410     lenv = ILNBLNK(vname)
411    
412     CALL MNC_GET_FVINDS(myThid, fname, vname, indf, ind_fv_ids)
413     IF ((indf .LT. 1).OR.(ind_fv_ids .LT. 1)) THEN
414     write(msgbuf,'(5a)') 'MNC ERROR: file ''', fname(1:lenf),
415     & ''' is not open or does not contain variable ''',
416     & vname(1:lenv), ''''
417     CALL print_error(msgbuf, mythid)
418     stop 'ABNORMAL END: S/R MNC_VAR_ADD_ATTR_STR'
419     ENDIF
420     fid = mnc_f_info(indf,2)
421     vid = mnc_fv_ids(indf,(ind_fv_ids+1))
422    
423     C Get the lengths from the dim IDs
424     ig = mnc_fv_ids(indf,(ind_fv_ids+2))
425     ds = mnc_f_info(indf,ig+1)
426     de = mnc_f_info(indf,ig+2)
427     k = 0
428     DO i = ds,de
429     k = k + 1
430     vstart(k) = 1
431     vcount(k) = mnc_d_size( mnc_fd_ind(indf,i) )
432     ENDDO
433    
434     C Check for the unlimited dimension
435     j = mnc_d_size( mnc_fd_ind(indf,de) )
436     IF (j .LT. 1) THEN
437     did = mnc_fg_ids(indf,de)
438     err = NF_INQ_DIMLEN(fid, did, lend)
439     write(msgbuf,'(a)') 'reading current length of unlimited dim'
440     CALL MNC_HANDLE_ERR(myThid, err, msgbuf)
441     IF (lend .LT. 1) lend = lend + 1
442     vstart(k) = lend
443     vcount(k) = 1
444     ENDIF
445    
446     CALL MNC_FILE_ENDDEF(myThid, fname)
447 edhill 1.5 IF (vtype .EQ. 1) THEN
448     err = NF_PUT_VARA_DOUBLE(fid, vid, vstart, vcount, dv)
449     ELSEIF (vtype .EQ. 2) THEN
450     err = NF_PUT_VARA_REAL(fid, vid, vstart, vcount, rv)
451     ELSEIF (vtype .EQ. 3) THEN
452     err = NF_PUT_VARA_INT(fid, vid, vstart, vcount, iv)
453     ELSE
454     write(msgbuf,'(a,i10,a)') 'MNC ERROR: vtype = ''', vtype,
455     & ''' is invalid--must be: [1|2|3]'
456     n = ILNBLNK(msgbuf)
457     CALL print_error(msgbuf(1:n), mythid)
458     stop 'ABNORMAL END: S/R MNC_VAR_WRITE_ALL'
459     ENDIF
460 edhill 1.4 write(msgbuf,'(5a)') 'writing variable ''', vname(1:lenv),
461 edhill 1.3 & ''' to file ''', fname(1:lenf), ''''
462     CALL MNC_HANDLE_ERR(myThid, err, msgbuf)
463 edhill 1.1
464 edhill 1.2 RETURN
465 edhill 1.1 END
466    

  ViewVC Help
Powered by ViewVC 1.1.22