/[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.61 - (hide annotations) (download)
Wed Feb 6 21:25:26 2013 UTC (11 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint65, checkpoint66b, checkpoint66a, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e
Changes since 1.60: +2 -10 lines
change default missing_value from UNSET_RL to -999.

1 jmc 1.61 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_out.F,v 1.60 2013/01/13 22:46:38 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 jmc 1.47 SUBROUTINE DIAGNOSTICS_OUT(
12 jmc 1.15 I listId,
13 jmc 1.50 I myTime,
14 jmc 1.1 I myIter,
15     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.33 PARAMETER( NrMax = numLevels )
31 jmc 1.1
32     C !INPUT PARAMETERS:
33 jmc 1.15 C listId :: Diagnostics list number being written
34 jmc 1.3 C myIter :: current iteration number
35 jmc 1.15 C myTime :: current time of simulation (s)
36 jmc 1.3 C myThid :: my Thread Id number
37 edhill 1.14 _RL myTime
38 jmc 1.15 INTEGER listId, myIter, myThid
39 jmc 1.1 CEOP
40    
41 jmc 1.40 C !FUNCTIONS:
42     INTEGER ILNBLNK
43     EXTERNAL ILNBLNK
44    
45 jmc 1.3 C !LOCAL VARIABLES:
46 jmc 1.15 C i,j,k :: loop indices
47 jmc 1.47 C bi,bj :: tile indices
48 jmc 1.29 C lm :: loop index (averageCycle)
49 jmc 1.15 C md :: field number in the list "listId".
50     C ndId :: diagnostics Id number (in available diagnostics list)
51     C ip :: diagnostics pointer to storage array
52     C im :: counter-mate pointer to storage array
53 jmc 1.58 C mate :: counter mate Id number (in available diagnostics list)
54     C mDbl :: processing mate Id number (in case processing requires 2 diags)
55     C mVec :: vector mate Id number
56     C ppFld :: post-processed diag or not (=0): =1 stored in qtmp1 ; =2 in qtmp2
57     C isComputed :: previous post-processed diag (still available in qtmp)
58 jmc 1.47 C nLevOutp :: number of levels to write in output file
59 jmc 1.32 C
60     C-- COMMON /LOCAL_DIAGNOSTICS_OUT/ local common block (for multi-threaded)
61 jmc 1.52 C qtmp1 :: temporary array; used to store a copy of diag. output field.
62     C qtmp2 :: temporary array; used to store a copy of a 2nd diag. field.
63     C- Note: local common block no longer needed.
64     c COMMON /LOCAL_DIAGNOSTICS_OUT/ qtmp1
65 jmc 1.32 _RL qtmp1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy)
66 jmc 1.52 _RL qtmp2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy)
67 jmc 1.32
68 jmc 1.43 INTEGER i, j, k, lm
69 jmc 1.15 INTEGER bi, bj
70 jmc 1.54 INTEGER md, ndId, nn, ip, im
71     INTEGER mate, mDbl, mVec
72 jmc 1.58 INTEGER ppFld, isComputed
73 jmc 1.35 CHARACTER*10 gcode
74 jmc 1.52 _RL undefRL
75     INTEGER nLevOutp, kLev
76    
77 jmc 1.50 INTEGER iLen
78 jmc 1.6 INTEGER ioUnit
79 jmc 1.11 CHARACTER*(MAX_LEN_FNAM) fn
80 jmc 1.1 CHARACTER*(MAX_LEN_MBUF) suff
81 jmc 1.3 CHARACTER*(MAX_LEN_MBUF) msgBuf
82 jmc 1.44 INTEGER prec, nRec, nTimRec
83     _RL timeRec(2)
84 jmc 1.52 _RL tmpLoc
85 jmc 1.29 #ifdef ALLOW_MDSIO
86 jmc 1.3 LOGICAL glf
87 jmc 1.29 #endif
88 jmc 1.1 #ifdef ALLOW_MNC
89     CHARACTER*(MAX_LEN_FNAM) diag_mnc_bn
90     #endif /* ALLOW_MNC */
91    
92 jmc 1.3 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
93    
94 jmc 1.44 C--- set file properties
95 jmc 1.6 ioUnit= standardMessageUnit
96 jmc 1.61 undefRL = misValFlt(listId)
97 jmc 1.56
98 jmc 1.1 WRITE(suff,'(I10.10)') myIter
99 jmc 1.50 iLen = ILNBLNK(fnames(listId))
100     WRITE( fn, '(A,A,A)' ) fnames(listId)(1:iLen),'.',suff(1:10)
101 jmc 1.47 C- for now, if integrate vertically, output field has just 1 level:
102     nLevOutp = nlevels(listId)
103     IF ( fflags(listId)(2:2).EQ.'I' ) nLevOutp = 1
104 jmc 1.1
105 jmc 1.44 C-- Set time information:
106     IF ( freq(listId).LT.0. ) THEN
107     C- Snap-shot: store a unique time (which is consistent with State-Var timing)
108     nTimRec = 1
109     timeRec(1) = myTime
110     ELSE
111     C- Time-average: store the 2 edges of the time-averaging interval.
112     C this time is consitent with intermediate Var (i.e., non-state, e.g, flux,
113     C tendencies) timing. For State-Var, this is shifted by + halt time-step.
114     nTimRec = 2
115    
116     C- end of time-averaging interval:
117     timeRec(2) = myTime
118    
119     C- begining of time-averaging interval:
120     c timeRec(1) = myTime - freq(listId)
121     C a) find the time of the previous multiple of output freq:
122     timeRec(1) = myTime-deltaTClock*0.5 _d 0
123     timeRec(1) = (timeRec(1)-phase(listId))/freq(listId)
124     i = INT( timeRec(1) )
125 jmc 1.46 IF ( timeRec(1).LT.0. ) THEN
126 jmc 1.52 tmpLoc = FLOAT(i)
127     IF ( timeRec(1).NE.tmpLoc ) i = i - 1
128 jmc 1.46 ENDIF
129 jmc 1.44 timeRec(1) = phase(listId) + freq(listId)*FLOAT(i)
130     c if ( listId.eq.2 ) write(0,*) 'f',i,timeRec(1)/deltaTClock
131     timeRec(1) = MAX( timeRec(1), startTime )
132    
133     C b) round off to nearest multiple of time-step:
134     timeRec(1) = (timeRec(1)-baseTime)/deltaTClock
135     i = NINT( timeRec(1) )
136     C if just half way, NINT will return the next time-step: correct this
137 jmc 1.52 tmpLoc = FLOAT(i) - 0.5 _d 0
138     IF ( timeRec(1).EQ.tmpLoc ) i = i - 1
139 jmc 1.44 timeRec(1) = baseTime + deltaTClock*FLOAT(i)
140     c if ( listId.eq.2 ) write(0,*) i,timeRec(1)/deltaTClock
141     ENDIF
142 jmc 1.46 C-- Convert time to iteration number (debug)
143     c DO i=1,nTimRec
144     c timeRec(i) = timeRec(i)/deltaTClock
145     c ENDDO
146 jmc 1.44
147 jmc 1.55 C-- Place the loop on lm (= averagePeriod) outside the loop on md (= field):
148     DO lm=1,averageCycle(listId)
149    
150 jmc 1.1 #ifdef ALLOW_MNC
151 jmc 1.41 IF (useMNC .AND. diag_mnc) THEN
152 jmc 1.50 CALL DIAGNOSTICS_MNC_SET(
153 jmc 1.55 I nLevOutp, listId, lm,
154 jmc 1.57 O diag_mnc_bn,
155 jmc 1.56 I undefRL, myTime, myIter, myThid )
156 jmc 1.41 ENDIF
157 jmc 1.1 #endif /* ALLOW_MNC */
158    
159 jmc 1.29 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
160    
161 jmc 1.58 isComputed = 0
162 jmc 1.41 DO md = 1,nfields(listId)
163 jmc 1.15 ndId = jdiag(md,listId)
164 jmc 1.35 gcode = gdiag(ndId)(1:10)
165 jmc 1.29 mate = 0
166     mVec = 0
167 jmc 1.54 mDbl = 0
168 jmc 1.58 ppFld = 0
169 jmc 1.35 IF ( gcode(5:5).EQ.'C' ) THEN
170 jmc 1.29 C- Check for Mate of a Counter Diagnostic
171 jmc 1.35 mate = hdiag(ndId)
172 jmc 1.54 ELSEIF ( gcode(5:5).EQ.'P' ) THEN
173 jmc 1.58 ppFld = 1
174     IF ( gdiag(hdiag(ndId))(5:5).EQ.'P' ) ppFld = 2
175 jmc 1.54 C- Also load the mate (if stored) for Post-Processing
176     nn = ndId
177     DO WHILE ( gdiag(nn)(5:5).EQ.'P' )
178     nn = hdiag(nn)
179     ENDDO
180     IF ( mdiag(md,listId).NE.0 ) mDbl = hdiag(nn)
181 jmc 1.58 c write(0,*) ppFld,' ndId=', ndId, nn, mDbl, isComputed
182 jmc 1.35 ELSEIF ( gcode(1:1).EQ.'U' .OR. gcode(1:1).EQ.'V' ) THEN
183 jmc 1.29 C- Check for Mate of a Vector Diagnostic
184 jmc 1.36 mVec = hdiag(ndId)
185 jmc 1.29 ENDIF
186 jmc 1.35 IF ( idiag(md,listId).NE.0 .AND. gcode(5:5).NE.'D' ) THEN
187 jmc 1.3 C-- Start processing 1 Fld :
188    
189 jmc 1.29 ip = ABS(idiag(md,listId)) + kdiag(ndId)*(lm-1)
190 jmc 1.15 im = mdiag(md,listId)
191 jmc 1.29 IF (mate.GT.0) im = im + kdiag(mate)*(lm-1)
192 jmc 1.54 IF (mDbl.GT.0) im = im + kdiag(mDbl)*(lm-1)
193 jmc 1.29 IF (mVec.GT.0) im = im + kdiag(mVec)*(lm-1)
194    
195 jmc 1.58 IF ( ppFld.EQ.2 .AND. isComputed.EQ.hdiag(ndId) ) THEN
196     C- Post-Processed diag from an other Post-Processed diag -and-
197     C both of them have just been calculated and are still stored in qtmp:
198     C => skip computation and just write qtmp2
199     IF ( debugLevel.GE.debLevB .AND. myThid.EQ.1 ) THEN
200     WRITE(ioUnit,'(A,I6,3A,I6)')
201     & ' get Post-Proc. Diag # ', ndId, ' ', cdiag(ndId),
202     & ' from previous computation of Diag # ', isComputed
203     ENDIF
204     isComputed = 0
205     ELSEIF ( ndiag(ip,1,1).EQ.0 ) THEN
206 jmc 1.3 C- Empty diagnostics case :
207 jmc 1.58 isComputed = 0
208 jmc 1.3
209     _BEGIN_MASTER( myThid )
210     WRITE(msgBuf,'(A,I10)')
211     & '- WARNING - from DIAGNOSTICS_OUT at iter=', myIter
212 jmc 1.15 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
213 jmc 1.3 & SQUEEZE_RIGHT, myThid)
214 jmc 1.35 WRITE(msgBuf,'(A,I6,3A,I4,2A)')
215 jmc 1.15 & '- WARNING - diag.#',ndId, ' : ',flds(md,listId),
216     & ' (#',md,' ) in outp.Stream: ',fnames(listId)
217     CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
218 jmc 1.3 & SQUEEZE_RIGHT, myThid)
219 jmc 1.29 IF ( averageCycle(listId).GT.1 ) THEN
220 jmc 1.35 WRITE(msgBuf,'(A,2(I3,A))')
221 jmc 1.29 & '- WARNING - has not been filled (ndiag(lm=',lm,')=',
222     & ndiag(ip,1,1), ' )'
223     ELSE
224 jmc 1.35 WRITE(msgBuf,'(A,2(I3,A))')
225 jmc 1.29 & '- WARNING - has not been filled (ndiag=',
226     & ndiag(ip,1,1), ' )'
227     ENDIF
228 jmc 1.15 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
229 jmc 1.3 & SQUEEZE_RIGHT, myThid)
230     WRITE(msgBuf,'(A)')
231     & 'WARNING DIAGNOSTICS_OUT => write ZEROS instead'
232 jmc 1.15 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
233 jmc 1.3 & SQUEEZE_RIGHT, myThid)
234     _END_MASTER( myThid )
235     DO bj = myByLo(myThid), myByHi(myThid)
236     DO bi = myBxLo(myThid), myBxHi(myThid)
237 jmc 1.47 DO k = 1,nLevOutp
238 jmc 1.3 DO j = 1-OLy,sNy+OLy
239     DO i = 1-OLx,sNx+OLx
240     qtmp1(i,j,k,bi,bj) = 0. _d 0
241     ENDDO
242     ENDDO
243     ENDDO
244     ENDDO
245     ENDDO
246    
247 jmc 1.54 ELSE
248 jmc 1.3 C- diagnostics is not empty :
249 jmc 1.58 isComputed = 0
250 jmc 1.3
251 jmc 1.49 IF ( debugLevel.GE.debLevB .AND. myThid.EQ.1 ) THEN
252 jmc 1.58 IF ( ppFld.GE.1 ) THEN
253 jmc 1.54 WRITE(ioUnit,'(A,I6,7A,I8,2A)')
254     & ' Post-Processing Diag # ', ndId, ' ', cdiag(ndId),
255     & ' Parms: ',gdiag(ndId)
256     IF ( mDbl.EQ.0 ) THEN
257     WRITE(ioUnit,'(2(3A,I6,A,I8))') ' from diag: ',
258     & cdiag(nn), ' (#', nn, ') Cnt=', ndiag(ip,1,1)
259     ELSE
260     WRITE(ioUnit,'(2(3A,I6,A,I8))') ' from diag: ',
261     & cdiag(nn), ' (#', nn, ') Cnt=', ndiag(ip,1,1),
262     & ' and diag: ',
263     & cdiag(mDbl),' (#',mDbl,') Cnt=',ndiag(im,1,1)
264     ENDIF
265     ELSE
266     WRITE(ioUnit,'(A,I6,3A,I8,2A)')
267 jmc 1.15 & ' Computing Diagnostic # ', ndId, ' ', cdiag(ndId),
268     & ' Counter:',ndiag(ip,1,1),' Parms: ',gdiag(ndId)
269 jmc 1.54 ENDIF
270 jmc 1.29 IF ( mate.GT.0 ) THEN
271 jmc 1.35 WRITE(ioUnit,'(3A,I6,2A)')
272 jmc 1.15 & ' use Counter Mate for ', cdiag(ndId),
273     & ' Diagnostic # ',mate, ' ', cdiag(mate)
274 jmc 1.29 ELSEIF ( mVec.GT.0 ) THEN
275 jmc 1.15 IF ( im.GT.0 .AND. ndiag(MAX(1,im),1,1).GT.0 ) THEN
276 jmc 1.35 WRITE(ioUnit,'(3A,I6,3A)')
277 jmc 1.15 & ' Vector Mate for ', cdiag(ndId),
278     & ' Diagnostic # ',mVec, ' ', cdiag(mVec),
279     & ' exists '
280 jmc 1.3 ELSE
281 jmc 1.35 WRITE(ioUnit,'(3A,I6,3A)')
282 jmc 1.15 & ' 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.52 IF ( fflags(listId)(2:2).EQ.' ' ) THEN
290     C- get only selected levels:
291 jmc 1.30 DO bj = myByLo(myThid), myByHi(myThid)
292     DO bi = myBxLo(myThid), myBxHi(myThid)
293 jmc 1.52 DO k = 1,nlevels(listId)
294     kLev = NINT(levs(k,listId))
295     CALL DIAGNOSTICS_GET_DIAG(
296     I kLev, undefRL,
297 jmc 1.30 O qtmp1(1-OLx,1-OLy,k,bi,bj),
298 jmc 1.54 I ndId, mate, ip, im, bi, bj, myThid )
299 jmc 1.30 ENDDO
300     ENDDO
301     ENDDO
302 jmc 1.54 IF ( mDbl.GT.0 ) THEN
303     DO bj = myByLo(myThid), myByHi(myThid)
304     DO bi = myBxLo(myThid), myBxHi(myThid)
305     DO k = 1,nlevels(listId)
306     kLev = NINT(levs(k,listId))
307     CALL DIAGNOSTICS_GET_DIAG(
308     I kLev, undefRL,
309     O qtmp2(1-OLx,1-OLy,k,bi,bj),
310     I mDbl, 0, im, 0, bi, bj, myThid )
311     ENDDO
312     ENDDO
313     ENDDO
314     ENDIF
315 jmc 1.30 ELSE
316 jmc 1.52 C- get all the levels (for vertical post-processing)
317 jmc 1.30 DO bj = myByLo(myThid), myByHi(myThid)
318     DO bi = myBxLo(myThid), myBxHi(myThid)
319 jmc 1.52 CALL DIAGNOSTICS_GET_DIAG(
320     I 0, undefRL,
321     O qtmp1(1-OLx,1-OLy,1,bi,bj),
322 jmc 1.54 I ndId, mate, ip, im, bi, bj, myThid )
323 jmc 1.30 ENDDO
324 jmc 1.3 ENDDO
325 jmc 1.54 IF ( mDbl.GT.0 ) THEN
326     DO bj = myByLo(myThid), myByHi(myThid)
327     DO bi = myBxLo(myThid), myBxHi(myThid)
328     CALL DIAGNOSTICS_GET_DIAG(
329     I 0, undefRL,
330 jmc 1.59 O qtmp2(1-OLx,1-OLy,1,bi,bj),
331 jmc 1.54 I mDbl, 0, im, 0, bi, bj, myThid )
332     ENDDO
333     ENDDO
334     ENDIF
335 jmc 1.30 ENDIF
336 jmc 1.1
337 molod 1.17 C-----------------------------------------------------------------------
338 jmc 1.47 C-- Apply specific post-processing (e.g., interpolate) before output
339 molod 1.17 C-----------------------------------------------------------------------
340 jmc 1.47 IF ( fflags(listId)(2:2).EQ.'P' ) THEN
341     C- Do vertical interpolation:
342     IF ( fluidIsAir ) THEN
343 jmc 1.29 C jmc: for now, this can only work in an atmospheric set-up (fluidIsAir);
344 jmc 1.47 CALL DIAGNOSTICS_INTERP_VERT(
345     I listId, md, ndId, ip, im, lm,
346 jmc 1.52 U qtmp1, qtmp2,
347     I undefRL, myTime, myIter, myThid )
348 jmc 1.47 ELSE
349     WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_OUT: ',
350     & 'INTERP_VERT not allowed in this config'
351     CALL PRINT_ERROR( msgBuf , myThid )
352     STOP 'ABNORMAL END: S/R DIAGNOSTICS_OUT'
353     ENDIF
354     ENDIF
355     IF ( fflags(listId)(2:2).EQ.'I' ) THEN
356     C- Integrate vertically: for now, output field has just 1 level:
357     CALL DIAGNOSTICS_SUM_LEVELS(
358     I listId, md, ndId, ip, im, lm,
359     U qtmp1,
360 jmc 1.52 I undefRL, myTime, myIter, myThid )
361 jmc 1.47 ENDIF
362 jmc 1.58 IF ( ppFld.GE.1 ) THEN
363 jmc 1.54 C- Do Post-Processing:
364     IF ( flds(md,listId).EQ.'PhiVEL '
365 jmc 1.58 & .OR. flds(md,listId).EQ.'PsiVEL '
366 jmc 1.54 & ) THEN
367     CALL DIAGNOSTICS_CALC_PHIVEL(
368     I listId, md, ndId, ip, im, lm,
369 jmc 1.58 I NrMax,
370 jmc 1.54 U qtmp1, qtmp2,
371     I myTime, myIter, myThid )
372 jmc 1.58 isComputed = ndId
373 jmc 1.54 ELSE
374     WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_OUT: ',
375     & 'unknown Processing method for diag="',cdiag(ndId),'"'
376     CALL PRINT_ERROR( msgBuf , myThid )
377     STOP 'ABNORMAL END: S/R DIAGNOSTICS_OUT'
378     ENDIF
379     ENDIF
380 jmc 1.47
381     C-- End of empty diag / not-empty diag block
382 jmc 1.29 ENDIF
383 molod 1.17
384 jmc 1.47 C-- Ready to write field "md", element "lm" in averageCycle(listId)
385 jmc 1.31
386     C- write to binary file, using MDSIO pkg:
387 jmc 1.34 IF ( diag_mdsio ) THEN
388 jmc 1.58 c nRec = lm + (md-1)*averageCycle(listId)
389     nRec = md + (lm-1)*nfields(listId)
390     C default precision for output files
391     prec = writeBinaryPrec
392     C fFlag(1)=R(or D): force it to be 32-bit(or 64) precision
393     IF ( fflags(listId)(1:1).EQ.'R' ) prec = precFloat32
394     IF ( fflags(listId)(1:1).EQ.'D' ) prec = precFloat64
395 jmc 1.34 C a hack not to write meta files now: pass -nRec < 0 to MDS_WRITE S/R
396 jmc 1.58 IF ( ppFld.LE.1 ) THEN
397 jmc 1.34 CALL WRITE_REC_LEV_RL(
398     I fn, prec,
399 jmc 1.47 I NrMax, 1, nLevOutp,
400 jmc 1.34 I qtmp1, -nRec, myIter, myThid )
401 jmc 1.58 ELSE
402     CALL WRITE_REC_LEV_RL(
403     I fn, prec,
404     I NrMax, 1, nLevOutp,
405     I qtmp2, -nRec, myIter, myThid )
406     ENDIF
407 jmc 1.3 ENDIF
408 jmc 1.1
409     #ifdef ALLOW_MNC
410 jmc 1.3 IF (useMNC .AND. diag_mnc) THEN
411 jmc 1.58 IF ( ppFld.LE.1 ) THEN
412 jmc 1.50 CALL DIAGNOSTICS_MNC_OUT(
413 jmc 1.56 I NrMax, nLevOutp, listId, ndId, mate,
414 jmc 1.57 I diag_mnc_bn, qtmp1,
415     I undefRL, myTime, myIter, myThid )
416 jmc 1.58 ELSE
417     CALL DIAGNOSTICS_MNC_OUT(
418     I NrMax, nLevOutp, listId, ndId, mate,
419     I diag_mnc_bn, qtmp2,
420     I undefRL, myTime, myIter, myThid )
421     ENDIF
422 jmc 1.3 ENDIF
423 jmc 1.1 #endif /* ALLOW_MNC */
424    
425 jmc 1.15 C-- end of Processing Fld # md
426 jmc 1.3 ENDIF
427 jmc 1.41 ENDDO
428    
429 jmc 1.55 C-- end loop on lm counter (= averagePeriod)
430 jmc 1.3 ENDDO
431 jmc 1.1
432 jmc 1.31 #ifdef ALLOW_MDSIO
433     IF (diag_mdsio) THEN
434 jmc 1.48 C- Note: temporary: since it is a pain to add more arguments to
435 jmc 1.31 C all MDSIO S/R, uses instead this specific S/R to write only
436     C meta files but with more informations in it.
437 jmc 1.34 glf = globalFiles
438 jmc 1.55 nRec = averageCycle(listId)*nfields(listId)
439 jmc 1.31 CALL MDS_WR_METAFILES(fn, prec, glf, .FALSE.,
440 jmc 1.47 & 0, 0, nLevOutp, ' ',
441 jmc 1.60 & nfields(listId), flds(1,listId),
442     & nTimRec, timeRec, undefRL,
443 jmc 1.31 & nRec, myIter, myThid)
444     ENDIF
445     #endif /* ALLOW_MDSIO */
446    
447 jmc 1.15 RETURN
448 jmc 1.3 END
449 jmc 1.15
450 jmc 1.1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

  ViewVC Help
Powered by ViewVC 1.1.22