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

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

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


Revision 1.1 - (show annotations) (download)
Tue Jan 27 05:47:32 2004 UTC (20 years, 3 months ago) by edhill
Branch: MAIN
 o first steps towards a "convenience wrapper" for pre-defined grid types
 o small clean-ups

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