/[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.30 - (hide annotations) (download)
Sun Dec 24 20:15:42 2006 UTC (17 years, 4 months ago) by jmc
Branch: MAIN
Changes since 1.29: +50 -47 lines
vertical interpolation:
- prestopres.F moved to diagnostics_interp_p2p.F
- more flexible: p-levels are set in data.diagnostics (no longer limited
  to 3 hard coded scales)
- safer (few diagnostics options were not giving the right output).

1 jmc 1.30 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_out.F,v 1.29 2006/06/05 18:17:23 jmc 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 jmc 1.30 INTEGER NrMax
30 jmc 1.1 #ifdef ALLOW_FIZHI
31     #include "fizhi_SIZE.h"
32 jmc 1.30 PARAMETER( NrMax = Nr+Nrphys )
33 jmc 1.1 #else
34 jmc 1.30 PARAMETER( NrMax = Nr )
35 jmc 1.1 #endif
36    
37    
38     C !INPUT PARAMETERS:
39 jmc 1.15 C listId :: Diagnostics list number being written
40 jmc 1.3 C myIter :: current iteration number
41 jmc 1.15 C myTime :: current time of simulation (s)
42 jmc 1.3 C myThid :: my Thread Id number
43 edhill 1.14 _RL myTime
44 jmc 1.15 INTEGER listId, myIter, myThid
45 jmc 1.1 CEOP
46    
47 jmc 1.3 C !LOCAL VARIABLES:
48 jmc 1.15 C i,j,k :: loop indices
49 jmc 1.29 C lm :: loop index (averageCycle)
50 jmc 1.15 C md :: field number in the list "listId".
51     C ndId :: diagnostics Id number (in available diagnostics list)
52     C mate :: counter mate Id number (in available diagnostics list)
53     C ip :: diagnostics pointer to storage array
54     C im :: counter-mate pointer to storage array
55 jmc 1.29 INTEGER i, j, k, lm
56 jmc 1.15 INTEGER bi, bj
57     INTEGER md, ndId, ip, im
58     INTEGER mate, mVec
59 jmc 1.3 CHARACTER*8 parms1
60 jmc 1.30 _RL qtmp1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy)
61 jmc 1.1 _RL undef, getcon
62 jmc 1.30 _RL tmpLev
63 jmc 1.3 EXTERNAL getcon
64     INTEGER ILNBLNK
65     EXTERNAL ILNBLNK
66     INTEGER ilen
67 jmc 1.1
68 jmc 1.6 INTEGER ioUnit
69 jmc 1.11 CHARACTER*(MAX_LEN_FNAM) fn
70 jmc 1.1 CHARACTER*(MAX_LEN_MBUF) suff
71 jmc 1.3 CHARACTER*(MAX_LEN_MBUF) msgBuf
72 jmc 1.29 #ifdef ALLOW_MDSIO
73 jmc 1.3 LOGICAL glf
74 jmc 1.29 INTEGER nRec
75 jmc 1.30 INTEGER prec
76 jmc 1.29 #endif
77 jmc 1.1 #ifdef ALLOW_MNC
78 jmc 1.3 INTEGER ii
79 jmc 1.1 CHARACTER*(MAX_LEN_FNAM) diag_mnc_bn
80 jmc 1.3 INTEGER CW_DIMS, NLEN
81     PARAMETER ( CW_DIMS = 10 )
82     PARAMETER ( NLEN = 80 )
83     INTEGER dim(CW_DIMS), ib(CW_DIMS), ie(CW_DIMS)
84     CHARACTER*(NLEN) dn(CW_DIMS)
85 edhill 1.7 CHARACTER*(NLEN) d_cw_name
86 jmc 1.3 CHARACTER*(NLEN) dn_blnk
87 jmc 1.20 #ifdef DIAG_MNC_COORD_NEEDSWORK
88     CHARACTER*(5) ctmp
89 jmc 1.30 _RS ztmp(NrMax)
90 jmc 1.20 #endif
91 jmc 1.1 #endif /* ALLOW_MNC */
92    
93 jmc 1.3 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
94    
95 jmc 1.6 ioUnit= standardMessageUnit
96 jmc 1.1 undef = getcon('UNDEF')
97     WRITE(suff,'(I10.10)') myIter
98 jmc 1.15 ilen = ILNBLNK(fnames(listId))
99     WRITE( fn, '(A,A,A)' ) fnames(listId)(1:ilen),'.',suff(1:10)
100 jmc 1.1
101     #ifdef ALLOW_MNC
102     IF (useMNC .AND. diag_mnc) THEN
103     DO i = 1,MAX_LEN_FNAM
104     diag_mnc_bn(i:i) = ' '
105     ENDDO
106     DO i = 1,NLEN
107     dn_blnk(i:i) = ' '
108     ENDDO
109 jmc 1.15 WRITE( diag_mnc_bn, '(A)' ) fnames(listId)(1:ilen)
110 jmc 1.1
111     C Update the record dimension by writing the iteration number
112     CALL MNC_CW_SET_UDIM(diag_mnc_bn, -1, myThid)
113 edhill 1.14 CALL MNC_CW_RL_W_S('D',diag_mnc_bn,0,0,'T',myTime,myThid)
114 jmc 1.1 CALL MNC_CW_SET_UDIM(diag_mnc_bn, 0, myThid)
115 edhill 1.26 CALL MNC_CW_I_W_S('I',diag_mnc_bn,0,0,'iter',myIter,myThid)
116 edhill 1.21
117     C NOTE: at some point it would be a good idea to add a time_bounds
118     C variable that has dimension (2,T) and clearly denotes the
119     C beginning and ending times for each diagnostics period
120 jmc 1.1
121     dn(1)(1:NLEN) = dn_blnk(1:NLEN)
122 jmc 1.15 WRITE(dn(1),'(a,i6.6)') 'Zmd', nlevels(listId)
123     dim(1) = nlevels(listId)
124 jmc 1.1 ib(1) = 1
125 jmc 1.15 ie(1) = nlevels(listId)
126 jmc 1.1
127 jmc 1.29 CALL MNC_CW_ADD_GNAME('diag_levels', 1,
128 jmc 1.1 & dim, dn, ib, ie, myThid)
129 jmc 1.29 CALL MNC_CW_ADD_VNAME('diag_levels', 'diag_levels',
130 jmc 1.1 & 0,0, myThid)
131 edhill 1.7 CALL MNC_CW_ADD_VATTR_TEXT('diag_levels','description',
132     & 'Idicies of vertical levels within the source arrays',
133 jmc 1.1 & myThid)
134 jmc 1.29
135 edhill 1.9 CALL MNC_CW_RL_W('D',diag_mnc_bn,0,0,
136 jmc 1.15 & 'diag_levels', levs(1,listId), myThid)
137 jmc 1.1
138 edhill 1.7 CALL MNC_CW_DEL_VNAME('diag_levels', myThid)
139 jmc 1.1 CALL MNC_CW_DEL_GNAME('diag_levels', myThid)
140 edhill 1.7
141 edhill 1.16 #ifdef DIAG_MNC_COORD_NEEDSWORK
142     C This part has been placed in an #ifdef because, as its currently
143     C written, it will only work with variables defined on a dynamics
144     C grid. As we start using diagnostics for physics grids, ice
145     C levels, land levels, etc. the different vertical coordinate
146     C dimensions will have to be taken into account.
147    
148 edhill 1.25 C 20051021 JMC & EH3 : We need to extend this so that a few
149     C variables each defined on different grids do not have the same
150     C vertical dimension names so we should be using a pattern such
151     C as: Z[uml]td000000 where the 't' is the type as specified by
152     C gdiag(10)
153    
154 edhill 1.7 C Now define: Zmdxxxxxx, Zudxxxxxx, Zldxxxxxx
155     ctmp(1:5) = 'mul '
156     DO i = 1,3
157     dn(1)(1:NLEN) = dn_blnk(1:NLEN)
158 jmc 1.15 WRITE(dn(1),'(3a,i6.6)') 'Z',ctmp(i:i),'d',nlevels(listId)
159 edhill 1.7 CALL MNC_CW_ADD_GNAME(dn(1), 1, dim, dn, ib, ie, myThid)
160     CALL MNC_CW_ADD_VNAME(dn(1), dn(1), 0,0, myThid)
161 edhill 1.10
162     C The following three ztmp() loops should eventually be modified
163     C to reflect the fractional nature of levs(j,l) -- they should
164     C do something like:
165 jmc 1.29 C ztmp(j) = rC(INT(FLOOR(levs(j,l))))
166     C + ( rC(INT(FLOOR(levs(j,l))))
167 edhill 1.10 C + rC(INT(CEIL(levs(j,l)))) )
168     C / ( levs(j,l) - FLOOR(levs(j,l)) )
169     C for averaged levels.
170     IF (i .EQ. 1) THEN
171 jmc 1.15 DO j = 1,nlevels(listId)
172     ztmp(j) = rC(NINT(levs(j,listId)))
173 edhill 1.10 ENDDO
174     CALL MNC_CW_ADD_VATTR_TEXT(dn(1),'description',
175     & 'Dimensional coordinate value at the mid point',
176     & myThid)
177     ELSEIF (i .EQ. 2) THEN
178 jmc 1.15 DO j = 1,nlevels(listId)
179     ztmp(j) = rF(NINT(levs(j,listId)) + 1)
180 edhill 1.10 ENDDO
181     CALL MNC_CW_ADD_VATTR_TEXT(dn(1),'description',
182     & 'Dimensional coordinate value at the upper point',
183     & myThid)
184     ELSEIF (i .EQ. 3) THEN
185 jmc 1.15 DO j = 1,nlevels(listId)
186     ztmp(j) = rF(NINT(levs(j,listId)))
187 edhill 1.10 ENDDO
188     CALL MNC_CW_ADD_VATTR_TEXT(dn(1),'description',
189     & 'Dimensional coordinate value at the lower point',
190     & myThid)
191     ENDIF
192 edhill 1.7 CALL MNC_CW_RS_W('D',diag_mnc_bn,0,0, dn(1), ztmp, myThid)
193     CALL MNC_CW_DEL_VNAME(dn(1), myThid)
194     CALL MNC_CW_DEL_GNAME(dn(1), myThid)
195     ENDDO
196 edhill 1.16 #endif /* DIAG_MNC_COORD_NEEDSWORK */
197 edhill 1.7
198 jmc 1.1 ENDIF
199     #endif /* ALLOW_MNC */
200    
201 jmc 1.29 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
202    
203 jmc 1.15 DO md = 1,nfields(listId)
204     ndId = jdiag(md,listId)
205     parms1 = gdiag(ndId)(1:8)
206 jmc 1.29 mate = 0
207     mVec = 0
208     IF ( parms1(5:5).EQ.'C' ) THEN
209     C- Check for Mate of a Counter Diagnostic
210     READ(parms1,'(5X,I3)') mate
211     ELSEIF ( parms1(1:1).EQ.'U' .OR. parms1(1:1).EQ.'V' ) THEN
212     C- Check for Mate of a Vector Diagnostic
213     READ(parms1,'(5X,I3)') mVec
214     ENDIF
215 jmc 1.15 IF ( idiag(md,listId).NE.0 .AND. parms1(5:5).NE.'D' ) THEN
216 jmc 1.3 C-- Start processing 1 Fld :
217 jmc 1.29 DO lm=1,averageCycle(listId)
218 jmc 1.3
219 jmc 1.29 ip = ABS(idiag(md,listId)) + kdiag(ndId)*(lm-1)
220 jmc 1.15 im = mdiag(md,listId)
221 jmc 1.29 IF (mate.GT.0) im = im + kdiag(mate)*(lm-1)
222     IF (mVec.GT.0) im = im + kdiag(mVec)*(lm-1)
223    
224 jmc 1.15 IF ( ndiag(ip,1,1).EQ.0 ) THEN
225 jmc 1.3 C- Empty diagnostics case :
226    
227     _BEGIN_MASTER( myThid )
228     WRITE(msgBuf,'(A,I10)')
229     & '- WARNING - from DIAGNOSTICS_OUT at iter=', myIter
230 jmc 1.15 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
231 jmc 1.3 & SQUEEZE_RIGHT, myThid)
232     WRITE(msgBuf,'(A,I4,3A,I3,2A)')
233 jmc 1.15 & '- WARNING - diag.#',ndId, ' : ',flds(md,listId),
234     & ' (#',md,' ) in outp.Stream: ',fnames(listId)
235     CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
236 jmc 1.3 & SQUEEZE_RIGHT, myThid)
237 jmc 1.29 IF ( averageCycle(listId).GT.1 ) THEN
238     WRITE(msgBuf,'(A,2(I2,A))')
239     & '- WARNING - has not been filled (ndiag(lm=',lm,')=',
240     & ndiag(ip,1,1), ' )'
241     ELSE
242     WRITE(msgBuf,'(A,2(I2,A))')
243     & '- WARNING - has not been filled (ndiag=',
244     & ndiag(ip,1,1), ' )'
245     ENDIF
246 jmc 1.15 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
247 jmc 1.3 & SQUEEZE_RIGHT, myThid)
248     WRITE(msgBuf,'(A)')
249     & 'WARNING DIAGNOSTICS_OUT => write ZEROS instead'
250 jmc 1.15 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
251 jmc 1.3 & SQUEEZE_RIGHT, myThid)
252     _END_MASTER( myThid )
253     DO bj = myByLo(myThid), myByHi(myThid)
254     DO bi = myBxLo(myThid), myBxHi(myThid)
255 jmc 1.15 DO k = 1,nlevels(listId)
256 jmc 1.3 DO j = 1-OLy,sNy+OLy
257     DO i = 1-OLx,sNx+OLx
258     qtmp1(i,j,k,bi,bj) = 0. _d 0
259     ENDDO
260     ENDDO
261     ENDDO
262     ENDDO
263     ENDDO
264    
265     ELSE
266     C- diagnostics is not empty :
267    
268 jmc 1.29 IF ( debugLevel.GE.debLevA .AND. myThid.EQ.1 ) THEN
269     WRITE(ioUnit,'(A,I3,3A,I8,2A)')
270 jmc 1.15 & ' Computing Diagnostic # ', ndId, ' ', cdiag(ndId),
271     & ' Counter:',ndiag(ip,1,1),' Parms: ',gdiag(ndId)
272 jmc 1.29 IF ( mate.GT.0 ) THEN
273     WRITE(ioUnit,'(3A,I3,2A)')
274 jmc 1.15 & ' use Counter Mate for ', cdiag(ndId),
275     & ' Diagnostic # ',mate, ' ', cdiag(mate)
276 jmc 1.29 ELSEIF ( mVec.GT.0 ) THEN
277 jmc 1.15 IF ( im.GT.0 .AND. ndiag(MAX(1,im),1,1).GT.0 ) THEN
278 jmc 1.29 WRITE(ioUnit,'(3A,I3,3A)')
279 jmc 1.15 & ' Vector Mate for ', cdiag(ndId),
280     & ' Diagnostic # ',mVec, ' ', cdiag(mVec),
281     & ' exists '
282 jmc 1.3 ELSE
283 jmc 1.29 WRITE(ioUnit,'(3A,I3,3A)')
284 jmc 1.15 & ' Vector Mate for ', cdiag(ndId),
285     & ' Diagnostic # ',mVec, ' ', cdiag(mVec),
286     & ' not enabled'
287 jmc 1.3 ENDIF
288     ENDIF
289 jmc 1.6 ENDIF
290 jmc 1.3
291 jmc 1.30 IF ( fflags(listId)(2:2).EQ.'P' ) THEN
292     C- get all the levels (for vertical interpolation)
293     DO bj = myByLo(myThid), myByHi(myThid)
294     DO bi = myBxLo(myThid), myBxHi(myThid)
295     DO k = 1,kdiag(ndId)
296     tmpLev = k
297     CALL GETDIAG(
298     I tmpLev,undef,
299     O qtmp1(1-OLx,1-OLy,k,bi,bj),
300     I ndId,mate,ip,im,bi,bj,myThid)
301     ENDDO
302     ENDDO
303     ENDDO
304     ELSE
305     C- get only selected levels:
306     DO bj = myByLo(myThid), myByHi(myThid)
307     DO bi = myBxLo(myThid), myBxHi(myThid)
308     DO k = 1,nlevels(listId)
309     CALL GETDIAG(
310     I levs(k,listId),undef,
311     O qtmp1(1-OLx,1-OLy,k,bi,bj),
312     I ndId,mate,ip,im,bi,bj,myThid)
313     ENDDO
314     ENDDO
315 jmc 1.3 ENDDO
316 jmc 1.30 ENDIF
317 jmc 1.1
318 jmc 1.3 C- end of empty diag / not empty block
319     ENDIF
320 jmc 1.1
321 molod 1.17 C-----------------------------------------------------------------------
322 jmc 1.20 C Check to see if we need to interpolate before output
323 molod 1.17 C-----------------------------------------------------------------------
324 jmc 1.29 IF ( fflags(listId)(2:2).EQ.'P' ) THEN
325 jmc 1.20 C- Do vertical interpolation:
326 jmc 1.30 IF ( fluidIsAir ) THEN
327 jmc 1.29 C jmc: for now, this can only work in an atmospheric set-up (fluidIsAir);
328     CALL DIAGNOSTICS_INTERP_VERT(
329 jmc 1.30 I listId, md, ndId, ip, im, lm,
330 jmc 1.20 U qtmp1,
331 jmc 1.30 I undef, myTime, myIter, myThid )
332 jmc 1.29 ELSE
333     WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_OUT: ',
334 jmc 1.30 & 'INTERP_VERT not allowed in this config'
335 jmc 1.29 CALL PRINT_ERROR( msgBuf , myThid )
336     STOP 'ABNORMAL END: S/R DIAGNOSTICS_OUT'
337     ENDIF
338     ENDIF
339 molod 1.17
340 jmc 1.1 #ifdef ALLOW_MDSIO
341 jmc 1.3 C Prepare for mdsio optionality
342     IF (diag_mdsio) THEN
343 jmc 1.29 glf = globalFiles
344     nRec = lm + (md-1)*averageCycle(listId)
345 jmc 1.30 C default precision for output files
346     prec = writeBinaryPrec
347     C fFlag(1)=R(or D): force it to be 32-bit(or 64) precision
348     IF ( fflags(listId)(1:1).EQ.'R' ) prec = precFloat32
349     IF ( fflags(listId)(1:1).EQ.'D' ) prec = precFloat64
350     CALL MDSWRITEFIELD_NEW(fn,prec,glf,.FALSE.,'RL',
351     & NrMax,nlevels(listId),qtmp1,nRec,myIter,myThid)
352 jmc 1.3 ENDIF
353 jmc 1.1 #endif /* ALLOW_MDSIO */
354    
355     #ifdef ALLOW_MNC
356 jmc 1.3 IF (useMNC .AND. diag_mnc) THEN
357 jmc 1.1
358 jmc 1.3 _BEGIN_MASTER( myThid )
359 jmc 1.1
360 jmc 1.3 DO ii = 1,CW_DIMS
361 edhill 1.7 d_cw_name(1:NLEN) = dn_blnk(1:NLEN)
362 jmc 1.3 dn(ii)(1:NLEN) = dn_blnk(1:NLEN)
363     ENDDO
364    
365 edhill 1.7 C Note that the "d_cw_name" variable is a hack that hides a
366     C subtlety within MNC. Basically, each MNC-wrapped file is
367     C caching its own concept of what each "grid name" (that is, a
368     C dimension group name) means. So one cannot re-use the same
369     C "grid" name for different collections of dimensions within a
370 jmc 1.15 C given file. By appending the "ndId" values to each name, we
371 edhill 1.7 C guarantee uniqueness within each MNC-produced file.
372 jmc 1.15 WRITE(d_cw_name,'(a,i6.6)') 'd_cw_',ndId
373 edhill 1.7
374 edhill 1.5 C XY dimensions
375     dim(1) = sNx + 2*OLx
376     dim(2) = sNy + 2*OLy
377     ib(1) = OLx + 1
378     ib(2) = OLy + 1
379 jmc 1.29 IF (gdiag(ndId)(2:2) .EQ. 'M') THEN
380 edhill 1.5 dn(1)(1:2) = 'X'
381     ie(1) = OLx + sNx
382     dn(2)(1:2) = 'Y'
383     ie(2) = OLy + sNy
384 jmc 1.15 ELSEIF (gdiag(ndId)(2:2) .EQ. 'U') THEN
385 edhill 1.5 dn(1)(1:3) = 'Xp1'
386     ie(1) = OLx + sNx + 1
387     dn(2)(1:2) = 'Y'
388     ie(2) = OLy + sNy
389 jmc 1.15 ELSEIF (gdiag(ndId)(2:2) .EQ. 'V') THEN
390 edhill 1.5 dn(1)(1:2) = 'X'
391     ie(1) = OLx + sNx
392     dn(2)(1:3) = 'Yp1'
393     ie(2) = OLy + sNy + 1
394 jmc 1.15 ELSEIF (gdiag(ndId)(2:2) .EQ. 'Z') THEN
395 edhill 1.5 dn(1)(1:3) = 'Xp1'
396     ie(1) = OLx + sNx + 1
397     dn(2)(1:3) = 'Yp1'
398     ie(2) = OLy + sNy + 1
399     ENDIF
400 jmc 1.29
401 jmc 1.3 C Z is special since it varies
402 jmc 1.30 WRITE(dn(3),'(a,i6.6)') 'Zd', nlevels(listId)
403 jmc 1.15 IF ( (gdiag(ndId)(10:10) .EQ. 'R')
404     & .AND. (gdiag(ndId)(9:9) .EQ. 'M') ) THEN
405 jmc 1.30 WRITE(dn(3),'(a,i6.6)') 'Zmd', nlevels(listId)
406 edhill 1.7 ENDIF
407 jmc 1.15 IF ( (gdiag(ndId)(10:10) .EQ. 'R')
408     & .AND. (gdiag(ndId)(9:9) .EQ. 'L') ) THEN
409 jmc 1.30 WRITE(dn(3),'(a,i6.6)') 'Zld', nlevels(listId)
410 edhill 1.7 ENDIF
411 jmc 1.15 IF ( (gdiag(ndId)(10:10) .EQ. 'R')
412     & .AND. (gdiag(ndId)(9:9) .EQ. 'U') ) THEN
413 jmc 1.30 WRITE(dn(3),'(a,i6.6)') 'Zud', nlevels(listId)
414 edhill 1.7 ENDIF
415 jmc 1.30 dim(3) = NrMax
416 jmc 1.3 ib(3) = 1
417 jmc 1.30 ie(3) = nlevels(listId)
418 jmc 1.1
419 edhill 1.5 C Time dimension
420     dn(4)(1:1) = 'T'
421     dim(4) = -1
422     ib(4) = 1
423     ie(4) = 1
424    
425 jmc 1.29 CALL MNC_CW_ADD_GNAME(d_cw_name, 4,
426 jmc 1.1 & dim, dn, ib, ie, myThid)
427 jmc 1.29 CALL MNC_CW_ADD_VNAME(cdiag(ndId), d_cw_name,
428 jmc 1.1 & 4,5, myThid)
429 jmc 1.15 CALL MNC_CW_ADD_VATTR_TEXT(cdiag(ndId),'description',
430     & tdiag(ndId),myThid)
431     CALL MNC_CW_ADD_VATTR_TEXT(cdiag(ndId),'units',
432     & udiag(ndId),myThid)
433 edhill 1.28
434     C Per the observations of Baylor, this has been commented out
435     C until we have code that can write missing_value attributes
436     C in a way thats compatible with most of the more popular
437     C netCDF tools including ferret. Using all-zeros completely
438     C breaks ferret.
439    
440     C CALL MNC_CW_ADD_VATTR_DBL(cdiag(ndId),'missing_value',
441     C & 0.0 _d 0,myThid)
442 jmc 1.1
443 edhill 1.22 IF ( ( (writeBinaryPrec .EQ. precFloat32)
444     & .AND. (fflags(listId)(1:1) .NE. 'D')
445     & .AND. (fflags(listId)(1:1) .NE. 'R') )
446 jmc 1.15 & .OR. (fflags(listId)(1:1) .EQ. 'R')) THEN
447 edhill 1.13 CALL MNC_CW_RL_W('R',diag_mnc_bn,0,0,
448 jmc 1.15 & cdiag(ndId), qtmp1, myThid)
449 jmc 1.29 ELSEIF ( (writeBinaryPrec .EQ. precFloat64)
450 edhill 1.22 & .OR. (fflags(listId)(1:1) .EQ. 'D') ) THEN
451 edhill 1.13 CALL MNC_CW_RL_W('D',diag_mnc_bn,0,0,
452 jmc 1.15 & cdiag(ndId), qtmp1, myThid)
453 edhill 1.13 ENDIF
454 jmc 1.29
455 jmc 1.15 CALL MNC_CW_DEL_VNAME(cdiag(ndId), myThid)
456 edhill 1.7 CALL MNC_CW_DEL_GNAME(d_cw_name, myThid)
457 jmc 1.1
458 jmc 1.3 _END_MASTER( myThid )
459 jmc 1.1
460 jmc 1.3 ENDIF
461 jmc 1.1 #endif /* ALLOW_MNC */
462    
463 jmc 1.29 ENDDO
464 jmc 1.15 C-- end of Processing Fld # md
465 jmc 1.3 ENDIF
466     ENDDO
467 jmc 1.1
468 jmc 1.15 RETURN
469 jmc 1.3 END
470 jmc 1.15
471 jmc 1.1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

  ViewVC Help
Powered by ViewVC 1.1.22