/[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.1 - (hide annotations) (download)
Tue Jan 27 05:47:32 2004 UTC (20 years, 4 months ago) by edhill
Branch: MAIN
 o first steps towards a "convenience wrapper" for pre-defined grid types
 o small clean-ups

1 edhill 1.1 C $Header: $
2     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     SUBROUTINE MNC_CW_ADD_NAME(
36     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 Functions
48     integer IFNBLNK, ILNBLNK
49    
50     C Arguments
51     integer myThid, ndim
52     character*(*) name
53     integer dlens(*), inds_beg(*), inds_end(*)
54     character*(*) dnames(*)
55    
56     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     CALL MNC_GET_IND(myThid, MNC_MAX_ID, name, mnc_cw_names, indg)
65     IF (indg .GT. 0) THEN
66     write(msgbuf,'(3a)') 'MNC_CW_ADD_NAME ERROR: ''', name,
67     & ''' is already defined'
68     CALL print_error(msgbuf, mythid)
69     stop 'ABNORMAL END: S/R MNC_CW_ADD_NAME'
70     ENDIF
71     CALL MNC_GET_NEXT_EMPTY_IND(myThid, MNC_MAX_ID, mnc_cw_names,
72     & indg)
73    
74     mnc_cw_names(indg)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
75     mnc_cw_names(indg)(1:(nnl-nnf+1)) = name(nnf:nnl)
76     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    
92     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
93    
94     SUBROUTINE MNC_CW_INIT(
95     I myThid,
96     I sNx,sNy, OLx,OLy, nSx,nSy, nPx,nPy, Nr )
97    
98     implicit none
99     #include "mnc_common.h"
100     #include "EEPARAMS.h"
101    
102     C Arguments
103     integer myThid
104     integer sNx,sNy, OLx,OLy, nSx,nSy, nPx,nPy, Nr
105    
106     C Functions
107     integer IFNBLNK, ILNBLNK
108    
109     C Local Variables
110     integer CW_MAX_LOC
111     parameter ( CW_MAX_LOC = 5 )
112     integer i, ihorz,ihsub,ivert,itime,ihalo, is, n,ntot
113     integer ndim
114     character*(MAX_LEN_MBUF) msgbuf
115     character*(MNC_MAX_CHAR) name
116     character*(MNC_MAX_CHAR) dn(CW_MAX_LOC)
117     character*(5) horz_dat(CW_MAX_LOC), hsub_dat(CW_MAX_LOC),
118     & vert_dat(CW_MAX_LOC), time_dat(CW_MAX_LOC),
119     & halo_dat(CW_MAX_LOC)
120     integer dim(CW_MAX_LOC), ib(CW_MAX_LOC), ie(CW_MAX_LOC)
121    
122     C ......12345....12345....12345....12345....12345...
123     data horz_dat /
124     & '- ', 'U ', 'V ', 'Cen ', 'Cor ' /
125     data hsub_dat /
126     & 'xy ', 'x ', 'y ', '- ', ' ' /
127     data vert_dat /
128     & '- ', 'C ', 'I ', ' ', ' ' /
129     data time_dat /
130     & '- ', 't ', ' ', ' ', ' ' /
131     data halo_dat /
132     & 'Hn ', 'Hy ', ' ', ' ', ' ' /
133    
134    
135     DO ihorz = 1,5
136     DO is = 1,3
137    
138     C Loop just ONCE if the Horiz component is "-"
139     ihsub = is
140     IF (ihorz .EQ. 1) THEN
141     IF (is .EQ. 1) THEN
142     ihsub = 4
143     ELSE
144     GOTO 10
145     ENDIF
146     ENDIF
147    
148     DO ivert = 1,3
149     DO itime = 1,2
150     DO ihalo = 1,2
151    
152     C horiz and hsub
153     name(1:MNC_MAX_CHAR) = mnc_blank_name(1:MNC_MAX_CHAR)
154     n = ILNBLNK(horz_dat(ihorz))
155     name(1:n) = horz_dat(ihorz)(1:n)
156     ntot = n + 1
157     name(ntot:ntot) = '_'
158     n = ILNBLNK(hsub_dat(ihsub))
159     name((ntot+1):(ntot+n)) = hsub_dat(ihsub)(1:n)
160     ntot = ntot + n
161    
162     C vert, time, and halo
163     write(name((ntot+1):(ntot+7)), '(5a1,a2)') '_',
164     & vert_dat(ivert)(1:1), '_',
165     & time_dat(itime)(1:1), '_',
166     & halo_dat(ihalo)(1:2)
167    
168     ndim = 0
169     DO i = 1,CW_MAX_LOC
170     dn(i)(1:MNC_MAX_CHAR)=mnc_blank_name(1:MNC_MAX_CHAR)
171     dim(i) = 0
172     ENDDO
173    
174     C Horizontal dimensions
175     IF (halo_dat(ihalo)(1:5) .EQ. 'Hn ') THEN
176    
177     IF (hsub_dat(ihsub)(1:1) .EQ. 'x') THEN
178     ndim = ndim + 1
179     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cen')
180     & .OR. (horz_dat(ihorz)(1:1) .EQ. 'V') ) THEN
181     dn(ndim)(1:1) = 'X'
182     dim(ndim) = sNx + 2*OLx
183     ib(ndim) = OLx + 1
184     ie(ndim) = OLx + sNx
185     ENDIF
186     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cor')
187     & .OR. (horz_dat(ihorz)(1:1) .EQ. 'U') ) THEN
188     dn(ndim)(1:3) = 'Xp1'
189     dim(ndim) = sNx + 2*OLx
190     ib(ndim) = OLx + 1
191     ie(ndim) = OLx + sNx + 1
192     ENDIF
193     ENDIF
194     IF ((hsub_dat(ihsub)(1:1) .EQ. 'y')
195     & .OR. (hsub_dat(ihsub)(2:2) .EQ. 'y')) THEN
196     ndim = ndim + 1
197     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cen')
198     & .OR. (horz_dat(ihorz)(1:1) .EQ. 'U') ) THEN
199     dn(ndim)(1:1) = 'Y'
200     dim(ndim) = sNy + 2*OLy
201     ib(ndim) = OLy + 1
202     ie(ndim) = OLy + sNy
203     ENDIF
204     IF ( (horz_dat(ihorz)(1:3) .EQ. 'Cor')
205     & .OR. (horz_dat(ihorz)(1:1) .EQ. 'V') ) THEN
206     dn(ndim)(1:3) = 'Yp1'
207     dim(ndim) = sNy + 2*OLy
208     ib(ndim) = OLy + 1
209     ie(ndim) = OLy + sNy + 1
210     ENDIF
211     ENDIF
212    
213     ELSEIF (halo_dat(ihalo)(1:5) .EQ. 'Hy ') THEN
214    
215     IF (hsub_dat(ihsub)(1:1) .EQ. 'x') THEN
216     ndim = ndim + 1
217     dn(ndim)(1:3) = 'Xwh'
218     dim(ndim) = sNx + 2*OLx
219     ib(ndim) = 1
220     ie(ndim) = sNx + 2*OLx
221     ENDIF
222     IF ((hsub_dat(ihsub)(1:1) .EQ. 'y')
223     & .OR. (hsub_dat(ihsub)(2:2) .EQ. 'y')) THEN
224     ndim = ndim + 1
225     dn(ndim)(1:3) = 'Ywh'
226     dim(ndim) = sNy + 2*OLy
227     ib(ndim) = 1
228     ie(ndim) = sNx + 2*OLx
229     ENDIF
230    
231     ENDIF
232    
233     C Vertical dimension
234     IF (vert_dat(ivert)(1:1) .EQ. 'C') THEN
235     ndim = ndim + 1
236     dn(ndim)(1:1) = 'Z'
237     dim(ndim) = Nr
238     ib(ndim) = 1
239     ie(ndim) = Nr
240     ENDIF
241     IF (vert_dat(ivert)(1:1) .EQ. 'I') THEN
242     ndim = ndim + 1
243     dn(ndim)(1:3) = 'Zp1'
244     dim(ndim) = Nr + 1
245     ib(ndim) = 1
246     ie(ndim) = Nr + 1
247     ENDIF
248    
249     C Time dimension
250     IF (time_dat(itime)(1:1) .EQ. 't') THEN
251     ndim = ndim + 1
252     dn(ndim)(1:1) = 'T'
253     dim(ndim) = -1
254     ib(ndim) = 1
255     ie(ndim) = 1
256     ENDIF
257    
258     write(*,*) name(1:15), ndim, ' : ', (dim(i), i=1,5)
259    
260     IF (ndim .GT. 0) THEN
261     CALL MNC_CW_ADD_NAME(myThid, name, ndim,
262     & dim, dn, ib, ie)
263     ENDIF
264    
265     ENDDO
266     ENDDO
267     ENDDO
268    
269     10 CONTINUE
270     ENDDO
271     ENDDO
272    
273     RETURN
274     END
275    
276     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
277    

  ViewVC Help
Powered by ViewVC 1.1.22