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

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

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


Revision 1.2 - (hide annotations) (download)
Thu Jan 29 05:30:37 2004 UTC (20 years, 3 months ago) by edhill
Branch: MAIN
Changes since 1.1: +215 -40 lines
 o adding attributes to the MNC "wrapper" level

1 edhill 1.2 C $Header: /u/u3/gcmpack/MITgcm/pkg/mnc/mnc_cwrapper.F,v 1.1 2004/01/27 05:47:32 edhill Exp $
2 edhill 1.1 C $Name: $
3    
4     #include "MNC_OPTIONS.h"
5    
6     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7    
8     C SUBROUTINE MNC_CW_W_RL(
9     C I myThid, myIter,
10     C I filebn,
11     C I bi,bj,
12     C I Gtype,
13     C I Rtype,
14     C I vname,
15     C I var )
16    
17     C implicit none
18     C #include "netcdf.inc"
19     C #include "mnc_common.h"
20     C #include "EEPARAMS.h"
21    
22     C C Arguments
23     C integer myThid, myIter, bi,bj
24     C character*(*) filebn, Gtype
25     C character*(2) Rtype
26     C _RL var*(*)
27    
28    
29    
30     C RETURN
31     C END
32    
33     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
34    
35 edhill 1.2 SUBROUTINE MNC_CW_ADD_GNAME(
36 edhill 1.1 I myThid,
37     I name,
38     I ndim,
39     I dlens,
40     I dnames,
41     I inds_beg, inds_end )
42    
43     implicit none
44     #include "mnc_common.h"
45     #include "EEPARAMS.h"
46    
47     C Arguments
48     integer myThid, ndim
49     character*(*) name
50     integer dlens(*), inds_beg(*), inds_end(*)
51     character*(*) dnames(*)
52    
53 edhill 1.2 C Functions
54     integer IFNBLNK, ILNBLNK
55    
56 edhill 1.1 C Local Variables
57     integer i, nnf,nnl, indg
58     character*(MAX_LEN_MBUF) msgbuf
59    
60     nnf = IFNBLNK(name)
61     nnl = ILNBLNK(name)
62    
63     C Check that this name is not already defined
64 edhill 1.2 CALL MNC_GET_IND(myThid, MNC_MAX_ID, name, mnc_cw_gname, indg)
65 edhill 1.1 IF (indg .GT. 0) THEN
66 edhill 1.2 write(msgbuf,'(3a)') 'MNC_CW_ADD_GNAME ERROR: ''', name,
67 edhill 1.1 & ''' is already defined'
68     CALL print_error(msgbuf, mythid)
69 edhill 1.2 stop 'ABNORMAL END: S/R MNC_CW_ADD_GNAME'
70 edhill 1.1 ENDIF
71 edhill 1.2 CALL MNC_GET_NEXT_EMPTY_IND(myThid, MNC_MAX_ID, mnc_cw_gname,
72 edhill 1.1 & indg)
73    
74 edhill 1.2 mnc_cw_gname(indg)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
75     mnc_cw_gname(indg)(1:(nnl-nnf+1)) = name(nnf:nnl)
76 edhill 1.1 mnc_cw_ndim(indg) = ndim
77    
78     DO i = 1,ndim
79     mnc_cw_dn(i,indg)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
80     nnf = IFNBLNK(dnames(i))
81     nnl = ILNBLNK(dnames(i))
82     mnc_cw_dn(i,indg)(1:(nnl-nnf+1)) = dnames(i)(nnf:nnl)
83     mnc_cw_dims(i,indg) = dlens(i)
84     mnc_cw_is(i,indg) = inds_beg(i)
85     mnc_cw_ie(i,indg) = inds_end(i)
86     ENDDO
87    
88     RETURN
89     END
90    
91 edhill 1.2 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
92    
93     SUBROUTINE MNC_CW_DUMP()
94    
95     implicit none
96     #include "mnc_common.h"
97    
98     C Local Variables
99     integer i,j, ntot
100    
101     ntot = 0
102     DO j = 1,MNC_MAX_ID
103     IF (mnc_cw_gname(j)(1:MNC_MAX_CHAR)
104     & .NE. mnc_blank_name(1:MNC_MAX_CHAR)) THEN
105    
106     ntot = ntot + 1
107     write(*,'(2i5,a3,a20,i3,a3,5i4,a4,5i4,a4,5i4,6a4)')
108     & j, ntot, ' : ', mnc_cw_gname(j)(1:20), mnc_cw_ndim(j),
109     & ' : ', (mnc_cw_dims(i,j), i=1,5),
110     & ' | ', (mnc_cw_is(i,j), i=1,5),
111     & ' | ', (mnc_cw_ie(i,j), i=1,5),
112     & ' | ', (mnc_cw_dn(i,j)(1:4), i=1,5)
113    
114    
115     ENDIF
116     ENDDO
117    
118     RETURN
119     END
120 edhill 1.1
121     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
122    
123     SUBROUTINE MNC_CW_INIT(
124     I myThid,
125     I sNx,sNy, OLx,OLy, nSx,nSy, nPx,nPy, Nr )
126    
127     implicit none
128     #include "mnc_common.h"
129     #include "EEPARAMS.h"
130    
131     C Arguments
132     integer myThid
133     integer sNx,sNy, OLx,OLy, nSx,nSy, nPx,nPy, Nr
134    
135     C Functions
136     integer IFNBLNK, ILNBLNK
137    
138     C Local Variables
139     integer CW_MAX_LOC
140     parameter ( CW_MAX_LOC = 5 )
141 edhill 1.2 integer i, ihorz,ihsub,ivert,itime,ihalo, is,ih, n,ntot
142     integer ndim, ncomb
143 edhill 1.1 character*(MAX_LEN_MBUF) msgbuf
144     character*(MNC_MAX_CHAR) name
145     character*(MNC_MAX_CHAR) dn(CW_MAX_LOC)
146     character*(5) horz_dat(CW_MAX_LOC), hsub_dat(CW_MAX_LOC),
147     & vert_dat(CW_MAX_LOC), time_dat(CW_MAX_LOC),
148     & halo_dat(CW_MAX_LOC)
149     integer dim(CW_MAX_LOC), ib(CW_MAX_LOC), ie(CW_MAX_LOC)
150    
151     C ......12345....12345....12345....12345....12345...
152     data horz_dat /
153     & '- ', 'U ', 'V ', 'Cen ', 'Cor ' /
154     data hsub_dat /
155     & 'xy ', 'x ', 'y ', '- ', ' ' /
156 edhill 1.2 data halo_dat /
157     & 'Hn ', 'Hy ', '-- ', ' ', ' ' /
158 edhill 1.1 data vert_dat /
159     & '- ', 'C ', 'I ', ' ', ' ' /
160     data time_dat /
161     & '- ', 't ', ' ', ' ', ' ' /
162    
163 edhill 1.2 ncomb = 0
164 edhill 1.1 DO ihorz = 1,5
165     DO is = 1,3
166 edhill 1.2 DO ih = 1,2
167    
168     C Loop just ONCE if the Horiz component is "-"
169     ihsub = is
170     ihalo = ih
171     IF (ihorz .EQ. 1) THEN
172     IF ((is .EQ. 1) .AND. (ih .EQ. 1)) THEN
173     ihsub = 4
174     ihalo = 3
175     ELSE
176     GOTO 10
177     ENDIF
178 edhill 1.1 ENDIF
179 edhill 1.2
180     DO ivert = 1,3
181     DO itime = 1,2
182    
183 edhill 1.1 C horiz and hsub
184     name(1:MNC_MAX_CHAR) = mnc_blank_name(1:MNC_MAX_CHAR)
185     n = ILNBLNK(horz_dat(ihorz))
186     name(1:n) = horz_dat(ihorz)(1:n)
187     ntot = n + 1
188     name(ntot:ntot) = '_'
189     n = ILNBLNK(hsub_dat(ihsub))
190     name((ntot+1):(ntot+n)) = hsub_dat(ihsub)(1:n)
191     ntot = ntot + n
192    
193     C vert, time, and halo
194 edhill 1.2 write(name((ntot+1):(ntot+9)), '(a1,2a2,a1,a2,a1)')
195     & '_', halo_dat(ihalo)(1:2), '__',
196     & vert_dat(ivert)(1:1), '__',
197     & time_dat(itime)(1:1)
198 edhill 1.1
199     ndim = 0
200     DO i = 1,CW_MAX_LOC
201     dn(i)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
202     dim(i) = 0
203 edhill 1.2 ib(i) = 0
204     ie(i) = 0
205 edhill 1.1 ENDDO
206    
207     C Horizontal dimensions
208     IF (halo_dat(ihalo)(1:5) .EQ. 'Hn ') THEN
209    
210     IF (hsub_dat(ihsub)(1:1) .EQ. 'x') THEN
211     ndim = ndim + 1
212     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cen')
213     & .OR. (horz_dat(ihorz)(1:1) .EQ. 'V') ) THEN
214     dn(ndim)(1:1) = 'X'
215     dim(ndim) = sNx + 2*OLx
216     ib(ndim) = OLx + 1
217     ie(ndim) = OLx + sNx
218     ENDIF
219     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cor')
220     & .OR. (horz_dat(ihorz)(1:1) .EQ. 'U') ) THEN
221     dn(ndim)(1:3) = 'Xp1'
222     dim(ndim) = sNx + 2*OLx
223     ib(ndim) = OLx + 1
224     ie(ndim) = OLx + sNx + 1
225     ENDIF
226     ENDIF
227     IF ((hsub_dat(ihsub)(1:1) .EQ. 'y')
228     & .OR. (hsub_dat(ihsub)(2:2) .EQ. 'y')) THEN
229     ndim = ndim + 1
230     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cen')
231     & .OR. (horz_dat(ihorz)(1:1) .EQ. 'U') ) THEN
232     dn(ndim)(1:1) = 'Y'
233     dim(ndim) = sNy + 2*OLy
234     ib(ndim) = OLy + 1
235     ie(ndim) = OLy + sNy
236     ENDIF
237     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cor')
238     & .OR. (horz_dat(ihorz)(1:1) .EQ. 'V') ) THEN
239     dn(ndim)(1:3) = 'Yp1'
240     dim(ndim) = sNy + 2*OLy
241     ib(ndim) = OLy + 1
242     ie(ndim) = OLy + sNy + 1
243     ENDIF
244     ENDIF
245    
246     ELSEIF (halo_dat(ihalo)(1:5) .EQ. 'Hy ') THEN
247    
248     IF (hsub_dat(ihsub)(1:1) .EQ. 'x') THEN
249     ndim = ndim + 1
250     dn(ndim)(1:3) = 'Xwh'
251     dim(ndim) = sNx + 2*OLx
252     ib(ndim) = 1
253     ie(ndim) = sNx + 2*OLx
254     ENDIF
255     IF ((hsub_dat(ihsub)(1:1) .EQ. 'y')
256     & .OR. (hsub_dat(ihsub)(2:2) .EQ. 'y')) THEN
257     ndim = ndim + 1
258     dn(ndim)(1:3) = 'Ywh'
259     dim(ndim) = sNy + 2*OLy
260     ib(ndim) = 1
261 edhill 1.2 ie(ndim) = sNy + 2*OLy
262 edhill 1.1 ENDIF
263    
264     ENDIF
265    
266     C Vertical dimension
267     IF (vert_dat(ivert)(1:1) .EQ. 'C') THEN
268     ndim = ndim + 1
269     dn(ndim)(1:1) = 'Z'
270     dim(ndim) = Nr
271     ib(ndim) = 1
272     ie(ndim) = Nr
273     ENDIF
274     IF (vert_dat(ivert)(1:1) .EQ. 'I') THEN
275     ndim = ndim + 1
276     dn(ndim)(1:3) = 'Zp1'
277     dim(ndim) = Nr + 1
278     ib(ndim) = 1
279     ie(ndim) = Nr + 1
280     ENDIF
281    
282     C Time dimension
283     IF (time_dat(itime)(1:1) .EQ. 't') THEN
284     ndim = ndim + 1
285     dn(ndim)(1:1) = 'T'
286     dim(ndim) = -1
287     ib(ndim) = 1
288     ie(ndim) = 1
289     ENDIF
290    
291 edhill 1.2 IF (ndim .GT. 0) THEN
292     #ifdef MNC_DEBUG
293     ncomb = ncomb + 1
294     write(*,'(i4,a3,a15,i3,a3,5i4,a4,5i4,a4,5i4,6a4)')
295     & ncomb, ' : ', name(1:15), ndim,
296     & ' : ', (dim(i), i=1,5),
297     & ' | ', (ib(i), i=1,5),
298     & ' | ', (ie(i), i=1,5),
299     & ' | ', (dn(i)(1:4), i=1,5)
300     #endif
301 edhill 1.1
302 edhill 1.2 CALL MNC_CW_ADD_GNAME(myThid, name, ndim,
303 edhill 1.1 & dim, dn, ib, ie)
304     ENDIF
305    
306     ENDDO
307     ENDDO
308 edhill 1.2
309     10 CONTINUE
310 edhill 1.1 ENDDO
311     ENDDO
312     ENDDO
313    
314 edhill 1.2 RETURN
315     END
316    
317     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
318    
319     SUBROUTINE MNC_CW_ADD_VNAME(
320     I myThid,
321     I vname,
322     I gname )
323    
324     implicit none
325     #include "mnc_common.h"
326     #include "EEPARAMS.h"
327    
328     C Arguments
329     integer myThid
330     character*(*) vname, gname
331    
332     C Functions
333     integer IFNBLNK, ILNBLNK
334    
335     C Local Variables
336     integer i, nvf,nvl, ngf,ngl, indv,indg
337     character*(MAX_LEN_MBUF) msgbuf
338    
339     nvf = IFNBLNK(vname)
340     nvl = ILNBLNK(vname)
341     ngf = IFNBLNK(gname)
342     ngl = ILNBLNK(gname)
343    
344     C Check that this vname is not already defined
345     CALL MNC_GET_IND(myThid, MNC_MAX_ID, vname, mnc_cw_vname, indv)
346     IF (indv .GT. 0) THEN
347     write(msgbuf,'(3a)') 'MNC_CW_ADD_VNAME ERROR: ''',
348     & vname(nvf:nvl), ''' is already defined'
349     CALL print_error(msgbuf, mythid)
350     stop 'ABNORMAL END: S/R MNC_CW_ADD_VNAME'
351     ENDIF
352     CALL MNC_GET_NEXT_EMPTY_IND(myThid, MNC_MAX_ID, mnc_cw_vname,
353     & indv)
354    
355     C Check that gname exists
356     CALL MNC_GET_IND(myThid, MNC_MAX_ID, gname, mnc_cw_gname, indg)
357     IF (indg .LT. 1) THEN
358     write(msgbuf,'(3a)') 'MNC_CW_ADD_VNAME ERROR: ''',
359     & gname(ngf:ngl), ''' is not defined'
360     CALL print_error(msgbuf, mythid)
361     stop 'ABNORMAL END: S/R MNC_CW_ADD_VNAME'
362     ENDIF
363     CALL MNC_GET_NEXT_EMPTY_IND(myThid, MNC_MAX_ID, mnc_cw_gname,
364     & indg)
365    
366     mnc_cw_vname(indv)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
367     mnc_cw_vname(indv)(1:(nvl-nvf+1)) = vname(nvf:nvl)
368     mnc_cw_vgind(indv) = indg
369     DO i = 1,3
370     mnc_cw_vnat(i,indv) = 0
371     ENDDO
372    
373     RETURN
374     END
375    
376     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
377    
378     SUBROUTINE MNC_CW_ADD_VATTR_ANY(
379     I myThid,
380     I vname,
381     I ntat, niat, ndat,
382     I tnames, inames, dnames,
383     I tvals, ivals, dvals )
384    
385     implicit none
386     #include "mnc_common.h"
387     #include "EEPARAMS.h"
388    
389     C Arguments
390     integer myThid, ntat, niat, ndat
391     character*(*) vname
392     character*(*) tnames(*), inames(*), dnames(*)
393     character*(*) tvals(*)
394     integer ivals(*)
395     REAL*8 dvals(*)
396    
397     C Functions
398     integer IFNBLNK, ILNBLNK
399    
400     C Local Variables
401     integer i, n, nvf,nvl, n1,n2, indv
402     character*(MAX_LEN_MBUF) msgbuf
403    
404     nvf = IFNBLNK(vname)
405     nvl = ILNBLNK(vname)
406    
407     C Check that vname is defined
408     CALL MNC_GET_IND(myThid, MNC_MAX_ID, vname, mnc_cw_vname, indv)
409     IF (indv .LT. 1) THEN
410     write(msgbuf,'(3a)') 'MNC_CW_ADD_VATTR_ANY ERROR: ''',
411     & vname(nvf:nvl), ''' is not defined'
412     CALL print_error(msgbuf, mythid)
413     stop 'ABNORMAL END: S/R MNC_CW_ADD_VATTR_ANY'
414     ENDIF
415    
416     C Text Attributes
417     n = mnc_cw_vnat(1,indv)
418     DO i = 1,ntat
419     n1 = IFNBLNK(tnames(i))
420     n2 = ILNBLNK(tnames(i))
421     mnc_cw_vtnm(n+i,indv)(1:(n2-n1+1)) = tnames(i)(n1:n2)
422     n1 = IFNBLNK(tvals(i))
423     n2 = ILNBLNK(tvals(i))
424     mnc_cw_vtat(n+i,indv)(1:(n2-n1+1)) = tvals(i)(n1:n2)
425     ENDDO
426     mnc_cw_vnat(1,indv) = n + ntat
427    
428     C Integer Attributes
429     n = mnc_cw_vnat(2,indv)
430     DO i = 1,niat
431     n1 = IFNBLNK(inames(i))
432     n2 = ILNBLNK(inames(i))
433     mnc_cw_vinm(n+i,indv)(1:(n2-n1+1)) = inames(i)(n1:n2)
434     mnc_cw_viat(n+i,indv) = ivals(i)
435     ENDDO
436     mnc_cw_vnat(2,indv) = n + niat
437    
438     C Double Attributes
439     n = mnc_cw_vnat(3,indv)
440     DO i = 1,ndat
441     n1 = IFNBLNK(dnames(i))
442     n2 = ILNBLNK(dnames(i))
443     mnc_cw_vdnm(n+i,indv)(1:(n2-n1+1)) = dnames(i)(n1:n2)
444     mnc_cw_vdat(n+i,indv) = dvals(i)
445     ENDDO
446     mnc_cw_vnat(3,indv) = n + ndat
447    
448 edhill 1.1 RETURN
449     END
450    
451     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
452    

  ViewVC Help
Powered by ViewVC 1.1.22