/[MITgcm]/MITgcm/pkg/diagnostics/diagnostics_out.F
ViewVC logotype

Annotation of /MITgcm/pkg/diagnostics/diagnostics_out.F

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


Revision 1.19 - (hide annotations) (download)
Mon Jul 18 18:35:19 2005 UTC (18 years, 9 months ago) by molod
Branch: MAIN
CVS Tags: checkpoint57o_post, checkpoint57m_post, checkpoint57n_post, checkpoint57p_post, checkpoint57q_post
Changes since 1.18: +2 -2 lines
Send a real level value (not integer) to getdiag for the vertical interp on the fly sequence

1 molod 1.19 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_out.F,v 1.18 2005/07/13 17:47:21 molod Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "DIAG_OPTIONS.h"
5    
6     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7     CBOP 0
8     C !ROUTINE: DIAGNOSTICS_OUT
9    
10     C !INTERFACE:
11     SUBROUTINE DIAGNOSTICS_OUT(
12 jmc 1.15 I listId,
13 jmc 1.1 I myIter,
14 edhill 1.14 I myTime,
15 jmc 1.1 I myThid )
16    
17     C !DESCRIPTION:
18     C Write output for diagnostics fields.
19 jmc 1.15
20 jmc 1.1 C !USES:
21 jmc 1.3 IMPLICIT NONE
22 jmc 1.1 #include "SIZE.h"
23     #include "EEPARAMS.h"
24     #include "PARAMS.h"
25 edhill 1.7 #include "GRID.h"
26 jmc 1.3 #include "DIAGNOSTICS_SIZE.h"
27     #include "DIAGNOSTICS.h"
28 jmc 1.1
29     #ifdef ALLOW_FIZHI
30     #include "fizhi_SIZE.h"
31     #else
32 jmc 1.3 INTEGER Nrphys
33     PARAMETER (Nrphys=0)
34 jmc 1.1 #endif
35    
36    
37     C !INPUT PARAMETERS:
38 jmc 1.15 C listId :: Diagnostics list number being written
39 jmc 1.3 C myIter :: current iteration number
40 jmc 1.15 C myTime :: current time of simulation (s)
41 jmc 1.3 C myThid :: my Thread Id number
42 edhill 1.14 _RL myTime
43 jmc 1.15 INTEGER listId, myIter, myThid
44 jmc 1.1 CEOP
45    
46 jmc 1.3 C !LOCAL VARIABLES:
47 jmc 1.15 C i,j,k :: loop indices
48     C md :: field number in the list "listId".
49     C ndId :: diagnostics Id number (in available diagnostics list)
50     C mate :: counter mate Id number (in available diagnostics list)
51     C ip :: diagnostics pointer to storage array
52     C im :: counter-mate pointer to storage array
53     INTEGER i, j, k
54     INTEGER bi, bj
55     INTEGER md, ndId, ip, im
56     INTEGER mate, mVec
57 jmc 1.3 CHARACTER*8 parms1
58     CHARACTER*3 mate_index
59 jmc 1.1 _RL qtmp1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+Nrphys,nSx,nSy)
60 molod 1.17 _RL qtmpsrf(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
61     _RL qtmp2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+Nrphys,nSx,nSy)
62 jmc 1.1 _RL undef, getcon
63 jmc 1.3 EXTERNAL getcon
64     INTEGER ILNBLNK
65     EXTERNAL ILNBLNK
66     INTEGER ilen
67 molod 1.17 integer nlevsout,nplevs
68     parameter(nplevs = 16)
69     _RL plevs1(nplevs)
70     data plevs1/ 1000.0 _d 2, 925.0 _d 2, 850.0 _d 2, 700.0 _d 2,
71     . 600.0 _d 2, 500.0 _d 2, 400.0 _d 2, 300.0 _d 2,
72     . 250.0 _d 2, 200.0 _d 2, 150.0 _d 2, 100.0 _d 2,
73     . 70.0 _d 2, 50.0 _d 2, 30.0 _d 2, 20.0 _d 2/
74     _RL plevs2(nplevs)
75     data plevs2/ 1000.0 _d 2, 950.0 _d 2, 900.0 _d 2, 850.0 _d 2,
76     . 800.0 _d 2, 750.0 _d 2, 700.0 _d 2, 600.0 _d 2,
77     . 500.0 _d 2, 400.0 _d 2, 300.0 _d 2, 250.0 _d 2,
78     . 200.0 _d 2, 150.0 _d 2, 100.0 _d 2, 50.0 _d 2/
79     _RL qprs(sNx,sNy,nplevs)
80     _RL qinp(sNx,sNy,Nr+Nrphys)
81     _RL pkz(sNx,sNy,Nr+Nrphys)
82     _RL pksrf(sNx,sNy)
83     _RL p
84     INTEGER jpoint1,ipoint1
85     INTEGER jpoint2,ipoint2
86     _RL kappa
87     logical foundp
88     data foundp /.false./
89 jmc 1.1
90 jmc 1.6 INTEGER ioUnit
91 jmc 1.11 CHARACTER*(MAX_LEN_FNAM) fn
92 jmc 1.1 CHARACTER*(MAX_LEN_MBUF) suff
93 jmc 1.3 CHARACTER*(MAX_LEN_MBUF) msgBuf
94     LOGICAL glf
95 jmc 1.1 #ifdef ALLOW_MNC
96 jmc 1.3 INTEGER ii
97 jmc 1.1 CHARACTER*(MAX_LEN_FNAM) diag_mnc_bn
98 edhill 1.7 CHARACTER*(5) ctmp
99 jmc 1.3 INTEGER CW_DIMS, NLEN
100     PARAMETER ( CW_DIMS = 10 )
101     PARAMETER ( NLEN = 80 )
102     INTEGER dim(CW_DIMS), ib(CW_DIMS), ie(CW_DIMS)
103     CHARACTER*(NLEN) dn(CW_DIMS)
104 edhill 1.7 CHARACTER*(NLEN) d_cw_name
105 jmc 1.3 CHARACTER*(NLEN) dn_blnk
106 edhill 1.7 _RS ztmp(Nr+Nrphys)
107 jmc 1.1 #endif /* ALLOW_MNC */
108    
109 jmc 1.3 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
110    
111 jmc 1.6 ioUnit= standardMessageUnit
112 jmc 1.1 undef = getcon('UNDEF')
113 molod 1.17 kappa = getcon('KAPPA')
114 jmc 1.1 glf = globalFiles
115     WRITE(suff,'(I10.10)') myIter
116 jmc 1.15 ilen = ILNBLNK(fnames(listId))
117     WRITE( fn, '(A,A,A)' ) fnames(listId)(1:ilen),'.',suff(1:10)
118 jmc 1.1
119     #ifdef ALLOW_MNC
120     IF (useMNC .AND. diag_mnc) THEN
121     DO i = 1,MAX_LEN_FNAM
122     diag_mnc_bn(i:i) = ' '
123     ENDDO
124     DO i = 1,NLEN
125     dn_blnk(i:i) = ' '
126     ENDDO
127 jmc 1.15 WRITE( diag_mnc_bn, '(A)' ) fnames(listId)(1:ilen)
128 jmc 1.1
129     C Update the record dimension by writing the iteration number
130     CALL MNC_CW_SET_UDIM(diag_mnc_bn, -1, myThid)
131 edhill 1.14 CALL MNC_CW_RL_W_S('D',diag_mnc_bn,0,0,'T',myTime,myThid)
132 jmc 1.1 CALL MNC_CW_SET_UDIM(diag_mnc_bn, 0, myThid)
133    
134     dn(1)(1:NLEN) = dn_blnk(1:NLEN)
135 jmc 1.15 WRITE(dn(1),'(a,i6.6)') 'Zmd', nlevels(listId)
136     dim(1) = nlevels(listId)
137 jmc 1.1 ib(1) = 1
138 jmc 1.15 ie(1) = nlevels(listId)
139 jmc 1.1
140     CALL MNC_CW_ADD_GNAME('diag_levels', 1,
141     & dim, dn, ib, ie, myThid)
142 edhill 1.7 CALL MNC_CW_ADD_VNAME('diag_levels', 'diag_levels',
143 jmc 1.1 & 0,0, myThid)
144 edhill 1.7 CALL MNC_CW_ADD_VATTR_TEXT('diag_levels','description',
145     & 'Idicies of vertical levels within the source arrays',
146 jmc 1.1 & myThid)
147    
148 edhill 1.9 CALL MNC_CW_RL_W('D',diag_mnc_bn,0,0,
149 jmc 1.15 & 'diag_levels', levs(1,listId), myThid)
150 jmc 1.1
151 edhill 1.7 CALL MNC_CW_DEL_VNAME('diag_levels', myThid)
152 jmc 1.1 CALL MNC_CW_DEL_GNAME('diag_levels', myThid)
153 edhill 1.7
154 edhill 1.16 #ifdef DIAG_MNC_COORD_NEEDSWORK
155     C This part has been placed in an #ifdef because, as its currently
156     C written, it will only work with variables defined on a dynamics
157     C grid. As we start using diagnostics for physics grids, ice
158     C levels, land levels, etc. the different vertical coordinate
159     C dimensions will have to be taken into account.
160    
161 edhill 1.7 C Now define: Zmdxxxxxx, Zudxxxxxx, Zldxxxxxx
162     ctmp(1:5) = 'mul '
163     DO i = 1,3
164     dn(1)(1:NLEN) = dn_blnk(1:NLEN)
165 jmc 1.15 WRITE(dn(1),'(3a,i6.6)') 'Z',ctmp(i:i),'d',nlevels(listId)
166 edhill 1.7 CALL MNC_CW_ADD_GNAME(dn(1), 1, dim, dn, ib, ie, myThid)
167     CALL MNC_CW_ADD_VNAME(dn(1), dn(1), 0,0, myThid)
168 edhill 1.10
169     C The following three ztmp() loops should eventually be modified
170     C to reflect the fractional nature of levs(j,l) -- they should
171     C do something like:
172     C ztmp(j) = rC(INT(FLOOR(levs(j,l))))
173     C + ( rC(INT(FLOOR(levs(j,l))))
174     C + rC(INT(CEIL(levs(j,l)))) )
175     C / ( levs(j,l) - FLOOR(levs(j,l)) )
176     C for averaged levels.
177     IF (i .EQ. 1) THEN
178 jmc 1.15 DO j = 1,nlevels(listId)
179     ztmp(j) = rC(NINT(levs(j,listId)))
180 edhill 1.10 ENDDO
181     CALL MNC_CW_ADD_VATTR_TEXT(dn(1),'description',
182     & 'Dimensional coordinate value at the mid point',
183     & myThid)
184     ELSEIF (i .EQ. 2) THEN
185 jmc 1.15 DO j = 1,nlevels(listId)
186     ztmp(j) = rF(NINT(levs(j,listId)) + 1)
187 edhill 1.10 ENDDO
188     CALL MNC_CW_ADD_VATTR_TEXT(dn(1),'description',
189     & 'Dimensional coordinate value at the upper point',
190     & myThid)
191     ELSEIF (i .EQ. 3) THEN
192 jmc 1.15 DO j = 1,nlevels(listId)
193     ztmp(j) = rF(NINT(levs(j,listId)))
194 edhill 1.10 ENDDO
195     CALL MNC_CW_ADD_VATTR_TEXT(dn(1),'description',
196     & 'Dimensional coordinate value at the lower point',
197     & myThid)
198     ENDIF
199 edhill 1.7 CALL MNC_CW_RS_W('D',diag_mnc_bn,0,0, dn(1), ztmp, myThid)
200     CALL MNC_CW_DEL_VNAME(dn(1), myThid)
201     CALL MNC_CW_DEL_GNAME(dn(1), myThid)
202     ENDDO
203 edhill 1.16 #endif /* DIAG_MNC_COORD_NEEDSWORK */
204 edhill 1.7
205 jmc 1.1 ENDIF
206     #endif /* ALLOW_MNC */
207    
208 jmc 1.15 DO md = 1,nfields(listId)
209     ndId = jdiag(md,listId)
210     parms1 = gdiag(ndId)(1:8)
211     IF ( idiag(md,listId).NE.0 .AND. parms1(5:5).NE.'D' ) THEN
212 jmc 1.3 C-- Start processing 1 Fld :
213    
214 jmc 1.15 ip = ABS(idiag(md,listId))
215     im = mdiag(md,listId)
216     IF ( ndiag(ip,1,1).EQ.0 ) THEN
217 jmc 1.3 C- Empty diagnostics case :
218    
219     _BEGIN_MASTER( myThid )
220     WRITE(msgBuf,'(A,I10)')
221     & '- WARNING - from DIAGNOSTICS_OUT at iter=', myIter
222 jmc 1.15 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
223 jmc 1.3 & SQUEEZE_RIGHT, myThid)
224     WRITE(msgBuf,'(A,I4,3A,I3,2A)')
225 jmc 1.15 & '- WARNING - diag.#',ndId, ' : ',flds(md,listId),
226     & ' (#',md,' ) in outp.Stream: ',fnames(listId)
227     CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
228 jmc 1.3 & SQUEEZE_RIGHT, myThid)
229     WRITE(msgBuf,'(A,I2,A)')
230 jmc 1.15 & '- WARNING - has not been filled (ndiag=',
231     & ndiag(ip,1,1), ' )'
232     CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
233 jmc 1.3 & SQUEEZE_RIGHT, myThid)
234     WRITE(msgBuf,'(A)')
235     & 'WARNING DIAGNOSTICS_OUT => write ZEROS instead'
236 jmc 1.15 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
237 jmc 1.3 & SQUEEZE_RIGHT, myThid)
238     _END_MASTER( myThid )
239     DO bj = myByLo(myThid), myByHi(myThid)
240     DO bi = myBxLo(myThid), myBxHi(myThid)
241 jmc 1.15 DO k = 1,nlevels(listId)
242 jmc 1.3 DO j = 1-OLy,sNy+OLy
243     DO i = 1-OLx,sNx+OLx
244     qtmp1(i,j,k,bi,bj) = 0. _d 0
245     ENDDO
246     ENDDO
247     ENDDO
248     ENDDO
249     ENDDO
250    
251     ELSE
252     C- diagnostics is not empty :
253    
254 jmc 1.15 IF ( myThid.EQ.1 ) WRITE(ioUnit,'(A,I3,3A,I8,2A)')
255     & ' Computing Diagnostic # ', ndId, ' ', cdiag(ndId),
256     & ' Counter:',ndiag(ip,1,1),' Parms: ',gdiag(ndId)
257 jmc 1.3
258 jmc 1.6 IF ( parms1(5:5).EQ.'C' ) THEN
259     C Check for Mate of a Counter Diagnostic
260     C --------------------------------------
261     mate_index = parms1(6:8)
262     READ (mate_index,'(I3)') mate
263 jmc 1.15 IF ( myThid.EQ.1 ) WRITE(ioUnit,'(3A,I3,2A)')
264     & ' use Counter Mate for ', cdiag(ndId),
265     & ' Diagnostic # ',mate, ' ', cdiag(mate)
266    
267 jmc 1.6 ELSE
268     mate = 0
269 jmc 1.3
270     C Check for Mate of a Vector Diagnostic
271     C -------------------------------------
272     IF ( parms1(1:1).EQ.'U' .OR. parms1(1:1).EQ.'V' ) THEN
273     mate_index = parms1(6:8)
274 jmc 1.6 READ (mate_index,'(I3)') mVec
275 jmc 1.15 IF ( im.GT.0 .AND. ndiag(MAX(1,im),1,1).GT.0 ) THEN
276     IF ( myThid.EQ.1 ) WRITE(ioUnit,'(3A,I3,3A)')
277     & ' Vector Mate for ', cdiag(ndId),
278     & ' Diagnostic # ',mVec, ' ', cdiag(mVec),
279     & ' exists '
280 jmc 1.3 ELSE
281 jmc 1.15 IF ( myThid.EQ.1 ) WRITE(ioUnit,'(3A,I3,3A)')
282     & ' Vector Mate for ', cdiag(ndId),
283     & ' Diagnostic # ',mVec, ' ', cdiag(mVec),
284     & ' not enabled'
285 jmc 1.3 ENDIF
286     ENDIF
287 jmc 1.6 ENDIF
288 jmc 1.3
289 jmc 1.6 DO bj = myByLo(myThid), myByHi(myThid)
290     DO bi = myBxLo(myThid), myBxHi(myThid)
291 jmc 1.15 DO k = 1,nlevels(listId)
292 jmc 1.6 CALL GETDIAG(
293 jmc 1.15 I levs(k,listId),undef,
294 jmc 1.6 O qtmp1(1-OLx,1-OLy,k,bi,bj),
295 jmc 1.15 I ndId,mate,ip,im,bi,bj,myThid)
296 jmc 1.3 ENDDO
297 jmc 1.6 ENDDO
298     ENDDO
299 jmc 1.1
300 jmc 1.3 C- end of empty diag / not empty block
301     ENDIF
302 jmc 1.1
303 molod 1.17 nlevsout = nlevels(listId)
304    
305     C-----------------------------------------------------------------------
306     C Check to see if we need to interpolate before output
307     C-----------------------------------------------------------------------
308     C (we are still inside field exist if sequence and field do loop)
309     C
310    
311     if(fflags(listId)(2:2).eq.'P') then
312    
313     c If nonlinear free surf is active, need averaged pressures
314     #ifdef NONLIN_FRSURF
315     if(select_rStar.GT.0)then
316     call diagnostics_get_pointers('RSURF ',ipoint1,jpoint1,
317     . myThid)
318     call diagnostics_get_pointers('PRESSURE',ipoint2,jpoint2,
319     . myThid)
320     C if fizhi is being used, may need to get physics grid pressures
321     #ifdef ALLOW_FIZHI
322     if(gdiag(ndId)(10:10) .EQ. 'L')then
323     call diagnostics_get_pointers('FIZPRES ',ipoint2,jpoint2,
324     . myThid)
325     endif
326     #endif
327     if( jpoint1.ne.0 .and. jpoint2.ne.0) foundp = .true.
328    
329     if(.not. foundp) then
330     WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_OUT: ',
331     . ' Have asked for pressure interpolation but have not ',
332     . ' Activated surface and 3D pressure diagnostic, ',
333     . ' RSURF and PRESSURE'
334     CALL PRINT_ERROR( msgBuf , myThid )
335     STOP 'ABNORMAL END: S/R DIAGNOSTICS_OUT'
336     endif
337    
338     DO bj = myByLo(myThid), myByHi(myThid)
339     DO bi = myBxLo(myThid), myBxHi(myThid)
340 molod 1.19 call getdiag(1.,undef,qtmpsrf(1-OLx,1-OLy,bi,bj),
341 molod 1.17 . jpoint1,0,ipoint1,0,bi,bj,myThid)
342     ENDDO
343     ENDDO
344     DO bj = myByLo(myThid), myByHi(myThid)
345     DO bi = myBxLo(myThid), myBxHi(myThid)
346     DO k = 1,nlevels(listId)
347     call getdiag(levs(k,listId),undef,
348     . qtmp2(1-OLx,1-OLy,k,bi,bj),jpoint2,0,ipoint2,0,
349     . bi,bj,myThid)
350     ENDDO
351     ENDDO
352     ENDDO
353     endif
354     #else
355     C If nonlinear free surf is off, get pressures from rC and rF arrays
356     DO bj = myByLo(myThid), myByHi(myThid)
357     DO bi = myBxLo(myThid), myBxHi(myThid)
358     DO j = 1-OLy,sNy+OLy
359     DO i = 1-OLx,sNx+OLx
360     qtmpsrf(i,j,bi,bj) = rF(1)
361     ENDDO
362     ENDDO
363     DO j = 1-OLy,sNy+OLy
364     DO i = 1-OLx,sNx+OLx
365     DO k = 1,nlevels(listId)
366     qtmp2(i,j,k,bi,bj) = rC(k)
367     ENDDO
368     ENDDO
369     ENDDO
370     ENDDO
371     ENDDO
372     #endif
373     C Load p to the kappa into a temporary array
374     nlevsout = nplevs
375     DO bj = myByLo(myThid), myByHi(myThid)
376     DO bi = myBxLo(myThid), myBxHi(myThid)
377     DO j = 1,sNy
378     DO i = 1,sNx
379     pksrf(i,j) = qtmpsrf(i,j,bi,bj) ** kappa
380     DO k = 1,nlevels(listId)
381     if(gdiag(ndId)(10:10).eq.'R') then
382     if(hFacC(i,j,nlevels(listId)-k+1,bi,bj).ne.0.) then
383     qinp(i,j,k) = qtmp1(i,j,nlevels(listId)-k+1,bi,bj)
384     else
385     qinp(i,j,k) = undef
386     endif
387     pkz(i,j,k) = qtmp2(i,j,nlevels(listId)-k+1,bi,bj)**kappa
388     elseif(gdiag(ndId)(10:10).eq.'L') then
389     qinp(i,j,k) = qtmp1(i,j,k,bi,bj)
390     pkz(i,j,k) = qtmp2(i,j,k,bi,bj)**kappa
391     endif
392     ENDDO
393     ENDDO
394     ENDDO
395    
396     DO k = 1,nplevs
397     if(fflags(listId)(3:3).eq.'1') then
398     p = plevs1(k)
399     elseif(fflags(listId)(3:3).eq.'2')then
400     p = plevs2(k)
401     endif
402     call prestopres(qprs(1,1,k),qinp,pkz,pksrf,0.,p,sNx,sNy,
403     . nlevels(listId) )
404     ENDDO
405    
406     DO j = 1,sNy
407     DO i = 1,sNx
408     DO k = 1,nlevsout
409     qtmp1(i,j,k,bi,bj) = qprs(i,j,k)
410     if(qtmp1(i,j,k,bi,bj).eq.undef) qtmp1(i,j,k,bi,bj) = 0.
411     ENDDO
412     ENDDO
413     ENDDO
414     ENDDO
415     ENDDO
416    
417     endif
418    
419 jmc 1.1 #ifdef ALLOW_MDSIO
420 jmc 1.3 C Prepare for mdsio optionality
421     IF (diag_mdsio) THEN
422 jmc 1.15 IF (fflags(listId)(1:1) .EQ. ' ') THEN
423 edhill 1.13 C This is the old default behavior
424 jmc 1.15 CALL MDSWRITEFIELD_NEW(fn,writeBinaryPrec,glf,'RL',
425 molod 1.17 & Nr+Nrphys,nlevsout,qtmp1,md,myIter,myThid)
426 jmc 1.15 ELSEIF (fflags(listId)(1:1) .EQ. 'R') THEN
427 edhill 1.13 C Force it to be 32-bit precision
428 jmc 1.15 CALL MDSWRITEFIELD_NEW(fn,precFloat32,glf,'RL',
429 molod 1.17 & Nr+Nrphys,nlevsout,qtmp1,md,myIter,myThid)
430 jmc 1.15 ELSEIF (fflags(listId)(1:1) .EQ. 'D') THEN
431 edhill 1.13 C Force it to be 64-bit precision
432 jmc 1.15 CALL MDSWRITEFIELD_NEW(fn,precFloat64,glf,'RL',
433 molod 1.17 & Nr+Nrphys,nlevsout,qtmp1,md,myIter,myThid)
434 edhill 1.13 ENDIF
435 jmc 1.3 ENDIF
436 jmc 1.1 #endif /* ALLOW_MDSIO */
437    
438     #ifdef ALLOW_MNC
439 jmc 1.3 IF (useMNC .AND. diag_mnc) THEN
440 jmc 1.1
441 jmc 1.3 _BEGIN_MASTER( myThid )
442 jmc 1.1
443 jmc 1.3 DO ii = 1,CW_DIMS
444 edhill 1.7 d_cw_name(1:NLEN) = dn_blnk(1:NLEN)
445 jmc 1.3 dn(ii)(1:NLEN) = dn_blnk(1:NLEN)
446     ENDDO
447    
448 edhill 1.7 C Note that the "d_cw_name" variable is a hack that hides a
449     C subtlety within MNC. Basically, each MNC-wrapped file is
450     C caching its own concept of what each "grid name" (that is, a
451     C dimension group name) means. So one cannot re-use the same
452     C "grid" name for different collections of dimensions within a
453 jmc 1.15 C given file. By appending the "ndId" values to each name, we
454 edhill 1.7 C guarantee uniqueness within each MNC-produced file.
455 jmc 1.15 WRITE(d_cw_name,'(a,i6.6)') 'd_cw_',ndId
456 edhill 1.7
457 edhill 1.5 C XY dimensions
458     dim(1) = sNx + 2*OLx
459     dim(2) = sNy + 2*OLy
460     ib(1) = OLx + 1
461     ib(2) = OLy + 1
462 jmc 1.15 IF (gdiag(ndId)(2:2) .EQ. 'M') THEN
463 edhill 1.5 dn(1)(1:2) = 'X'
464     ie(1) = OLx + sNx
465     dn(2)(1:2) = 'Y'
466     ie(2) = OLy + sNy
467 jmc 1.15 ELSEIF (gdiag(ndId)(2:2) .EQ. 'U') THEN
468 edhill 1.5 dn(1)(1:3) = 'Xp1'
469     ie(1) = OLx + sNx + 1
470     dn(2)(1:2) = 'Y'
471     ie(2) = OLy + sNy
472 jmc 1.15 ELSEIF (gdiag(ndId)(2:2) .EQ. 'V') THEN
473 edhill 1.5 dn(1)(1:2) = 'X'
474     ie(1) = OLx + sNx
475     dn(2)(1:3) = 'Yp1'
476     ie(2) = OLy + sNy + 1
477 jmc 1.15 ELSEIF (gdiag(ndId)(2:2) .EQ. 'Z') THEN
478 edhill 1.5 dn(1)(1:3) = 'Xp1'
479     ie(1) = OLx + sNx + 1
480     dn(2)(1:3) = 'Yp1'
481     ie(2) = OLy + sNy + 1
482     ENDIF
483    
484 jmc 1.3 C Z is special since it varies
485 jmc 1.15 WRITE(dn(3),'(a,i6.6)') 'Zd', nlevels(listId)
486     IF ( (gdiag(ndId)(10:10) .EQ. 'R')
487     & .AND. (gdiag(ndId)(9:9) .EQ. 'M') ) THEN
488     WRITE(dn(3),'(a,i6.6)') 'Zmd', nlevels(listId)
489 edhill 1.7 ENDIF
490 jmc 1.15 IF ( (gdiag(ndId)(10:10) .EQ. 'R')
491     & .AND. (gdiag(ndId)(9:9) .EQ. 'L') ) THEN
492     WRITE(dn(3),'(a,i6.6)') 'Zld', nlevels(listId)
493 edhill 1.7 ENDIF
494 jmc 1.15 IF ( (gdiag(ndId)(10:10) .EQ. 'R')
495     & .AND. (gdiag(ndId)(9:9) .EQ. 'U') ) THEN
496     WRITE(dn(3),'(a,i6.6)') 'Zud', nlevels(listId)
497 edhill 1.7 ENDIF
498 jmc 1.3 dim(3) = Nr+Nrphys
499     ib(3) = 1
500 jmc 1.15 ie(3) = nlevels(listId)
501 jmc 1.1
502 edhill 1.5 C Time dimension
503     dn(4)(1:1) = 'T'
504     dim(4) = -1
505     ib(4) = 1
506     ie(4) = 1
507    
508 edhill 1.7 CALL MNC_CW_ADD_GNAME(d_cw_name, 4,
509 jmc 1.1 & dim, dn, ib, ie, myThid)
510 jmc 1.15 CALL MNC_CW_ADD_VNAME(cdiag(ndId), d_cw_name,
511 jmc 1.1 & 4,5, myThid)
512 jmc 1.15 CALL MNC_CW_ADD_VATTR_TEXT(cdiag(ndId),'description',
513     & tdiag(ndId),myThid)
514     CALL MNC_CW_ADD_VATTR_TEXT(cdiag(ndId),'units',
515     & udiag(ndId),myThid)
516 jmc 1.1
517 jmc 1.15 IF ((fflags(listId)(1:1) .EQ. ' ')
518     & .OR. (fflags(listId)(1:1) .EQ. 'R')) THEN
519 edhill 1.13 CALL MNC_CW_RL_W('R',diag_mnc_bn,0,0,
520 jmc 1.15 & cdiag(ndId), qtmp1, myThid)
521     ELSEIF (fflags(listId)(1:1) .EQ. 'D') THEN
522 edhill 1.13 CALL MNC_CW_RL_W('D',diag_mnc_bn,0,0,
523 jmc 1.15 & cdiag(ndId), qtmp1, myThid)
524 edhill 1.13 ENDIF
525    
526 jmc 1.15 CALL MNC_CW_DEL_VNAME(cdiag(ndId), myThid)
527 edhill 1.7 CALL MNC_CW_DEL_GNAME(d_cw_name, myThid)
528 jmc 1.1
529 jmc 1.3 _END_MASTER( myThid )
530 jmc 1.1
531 jmc 1.3 ENDIF
532 jmc 1.1 #endif /* ALLOW_MNC */
533    
534 jmc 1.15 C-- end of Processing Fld # md
535 jmc 1.3 ENDIF
536     ENDDO
537 jmc 1.1
538 jmc 1.15 RETURN
539 jmc 1.3 END
540 jmc 1.15
541 jmc 1.1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

  ViewVC Help
Powered by ViewVC 1.1.22