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

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

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


Revision 1.17 - (show annotations) (download)
Tue Jul 12 20:25:45 2005 UTC (18 years, 10 months ago) by molod
Branch: MAIN
Changes since 1.16: +158 -4 lines
Check in for code to activate pressure interpolation on the fly

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

  ViewVC Help
Powered by ViewVC 1.1.22