/[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.2 - (show annotations) (download)
Thu Jan 29 05:30:37 2004 UTC (20 years, 4 months ago) by edhill
Branch: MAIN
Changes since 1.1: +215 -40 lines
 o adding attributes to the MNC "wrapper" level

1 C $Header: /u/u3/gcmpack/MITgcm/pkg/mnc/mnc_cwrapper.F,v 1.1 2004/01/27 05:47:32 edhill Exp $
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_GNAME(
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 Arguments
48 integer myThid, ndim
49 character*(*) name
50 integer dlens(*), inds_beg(*), inds_end(*)
51 character*(*) dnames(*)
52
53 C Functions
54 integer IFNBLNK, ILNBLNK
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_gname, indg)
65 IF (indg .GT. 0) THEN
66 write(msgbuf,'(3a)') 'MNC_CW_ADD_GNAME ERROR: ''', name,
67 & ''' is already defined'
68 CALL print_error(msgbuf, mythid)
69 stop 'ABNORMAL END: S/R MNC_CW_ADD_GNAME'
70 ENDIF
71 CALL MNC_GET_NEXT_EMPTY_IND(myThid, MNC_MAX_ID, mnc_cw_gname,
72 & indg)
73
74 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 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 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
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 integer i, ihorz,ihsub,ivert,itime,ihalo, is,ih, n,ntot
142 integer ndim, ncomb
143 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 data halo_dat /
157 & 'Hn ', 'Hy ', '-- ', ' ', ' ' /
158 data vert_dat /
159 & '- ', 'C ', 'I ', ' ', ' ' /
160 data time_dat /
161 & '- ', 't ', ' ', ' ', ' ' /
162
163 ncomb = 0
164 DO ihorz = 1,5
165 DO is = 1,3
166 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 ENDIF
179
180 DO ivert = 1,3
181 DO itime = 1,2
182
183 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 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
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 ib(i) = 0
204 ie(i) = 0
205 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 ie(ndim) = sNy + 2*OLy
262 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 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
302 CALL MNC_CW_ADD_GNAME(myThid, name, ndim,
303 & dim, dn, ib, ie)
304 ENDIF
305
306 ENDDO
307 ENDDO
308
309 10 CONTINUE
310 ENDDO
311 ENDDO
312 ENDDO
313
314 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 RETURN
449 END
450
451 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
452

  ViewVC Help
Powered by ViewVC 1.1.22