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

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

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


Revision 1.34 - (show annotations) (download)
Wed Aug 14 00:57:33 2013 UTC (10 years, 9 months ago) by jmc
Branch: MAIN
Changes since 1.33: +22 -11 lines
track the status of pkg/diagnostics activation (updating pkgStatus)

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_readparms.F,v 1.33 2013/02/06 21:25:26 jmc 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_READPARMS
9
10 C !INTERFACE:
11 SUBROUTINE DIAGNOSTICS_READPARMS(myThid)
12
13 C !DESCRIPTION:
14 C Read Diagnostics Namelists to specify output sequence.
15
16 C !USES:
17 IMPLICIT NONE
18 #include "SIZE.h"
19 #include "EEPARAMS.h"
20 #include "PARAMS.h"
21 #include "DIAGNOSTICS_SIZE.h"
22 #include "DIAGNOSTICS.h"
23 #include "DIAGNOSTICS_CALC.h"
24 #include "DIAGSTATS_REGIONS.h"
25
26 C !INPUT PARAMETERS:
27 INTEGER myThid
28 CEOP
29
30 C !FUNCTIONS:
31 INTEGER ILNBLNK
32 EXTERNAL ILNBLNK
33 #ifdef ALLOW_FIZHI
34 _RL getcon
35 EXTERNAL getcon
36 #endif
37
38 C !LOCAL VARIABLES:
39 C ldimLoc :: Max Number of Lists (in data.diagnostics)
40 C kdimLoc :: Max Number of Levels (in data.diagnostics)
41 C fdimLoc :: Max Number of Fields (in data.diagnostics)
42 C frequency :: Frequency (in s) of Output (ouput every "frequency" second)
43 C timePhase :: phase (in s) within the "frequency" period to write output
44 C averagingFreq :: frequency (in s) for periodic averaging interval
45 C averagingPhase :: phase (in s) for periodic averaging interval
46 C repeatCycle :: number of averaging intervals in 1 cycle
47 C missing_value :: missing value for real-type fields in output file
48 C missing_value_int :: missing value for integers in output (not used)
49 C levels :: List Output Levels
50 C fields :: List Output Fields
51 C fileName :: List Output Filename
52 C-- for regional-statistics
53 C set_regMask(n) :: region-mask set-index that define the region "n"
54 C val_regMask(n) :: corresponding mask value of region "n" in the region-mask
55 C-- per level statistics output:
56 C stat_freq :: Frequency (in s) of statistics output
57 C stat_phase :: phase (in s) to write statistics output
58 C stat_region :: List of statistics output Regions
59 C stat_fields :: List of statistics output Fields
60 C stat_fName :: List of statistics output Filename
61 INTEGER ldimLoc, kdimLoc, fdimLoc, rdimLoc
62 PARAMETER ( ldimLoc = 2*numLists )
63 PARAMETER ( kdimLoc = 2*numLevels )
64 PARAMETER ( fdimLoc = 2*numperList )
65 PARAMETER ( rdimLoc = nRegions+21 )
66 _RL frequency(ldimLoc), timePhase(ldimLoc)
67 _RL averagingFreq(ldimLoc), averagingPhase(ldimLoc)
68 INTEGER repeatCycle(ldimLoc)
69 _RL missing_value(ldimLoc)
70 INTEGER missing_value_int(ldimLoc)
71 _RL levels(kdimLoc,ldimLoc)
72 _RL stat_freq(ldimLoc), stat_phase(ldimLoc)
73 CHARACTER*8 fields(fdimLoc,ldimLoc)
74 CHARACTER*8 stat_fields(fdimLoc,ldimLoc)
75 CHARACTER*80 fileName(ldimLoc), blkFilName
76 CHARACTER*80 stat_fname(ldimLoc)
77 CHARACTER*8 fileFlags(ldimLoc)
78 CHARACTER*8 blk8c
79 CHARACTER*(MAX_LEN_MBUF) msgBuf
80 CHARACTER*12 suffix
81 INTEGER stat_region(rdimLoc,ldimLoc)
82 INTEGER set_regMask(rdimLoc)
83 _RS val_regMask(rdimLoc)
84 INTEGER ku, stdUnit
85 INTEGER j,k,l,n,m,nf
86 INTEGER iLen, regionCount
87
88 C-- full level output:
89 NAMELIST / DIAGNOSTICS_LIST /
90 & frequency, timePhase,
91 & averagingFreq, averagingPhase, repeatCycle,
92 & missing_value, missing_value_int,
93 & levels, fields, fileName, fileFlags,
94 & dumpAtLast, diag_mnc, useMissingValue,
95 & diagCG_maxIters, diagCG_resTarget,
96 & diagCG_prtResFrq, xPsi0, yPsi0,
97 & diag_pickup_read, diag_pickup_write,
98 & diag_pickup_read_mnc, diag_pickup_write_mnc
99
100 C-- per level statistics output:
101 NAMELIST / DIAG_STATIS_PARMS /
102 & stat_freq, stat_phase, stat_region, stat_fields,
103 & stat_fname, diagSt_mnc,
104 & set_regMask, val_regMask,
105 & diagSt_regMaskFile, nSetRegMskFile
106
107 C- PKG diagnostics is not used
108 IF ( .NOT.useDiagnostics ) THEN
109 _BEGIN_MASTER(myThid)
110 C- Track diagnostics pkg activation status:
111 diag_pkgStatus = -1
112 C print a (weak) warning if data.diagnostics is found
113 _END_MASTER(myThid)
114 RETURN
115 ENDIF
116
117 C- Initialize and Read Diagnostics Namelist
118 _BEGIN_MASTER(myThid)
119
120 blk8c = ' '
121 DO k=1,LEN(blkFilName)
122 blkFilName(k:k) = ' '
123 ENDDO
124
125 DO l = 1,ldimLoc
126 frequency(l) = 0.
127 timePhase(l) = UNSET_RL
128 averagingFreq(l) = 0.
129 averagingPhase(l)= 0.
130 repeatCycle(l) = 0
131 fileName(l) = blkFilName
132 C- Cannot use model standard Unset value since this was used previously
133 C as defaut missing value that one might want to recover;
134 C Use instead the unlikely missing value of One for the Undef-missing-Val
135 c missing_value(l) = UNSET_RL
136 missing_value(l) = oneRL
137 missing_value_int(l) = UNSET_I
138 fileFlags(l) = blk8c
139 DO k = 1,kdimLoc
140 levels(k,l) = UNSET_RL
141 ENDDO
142 DO m = 1,fdimLoc
143 fields(m,l) = blkName
144 ENDDO
145 ENDDO
146 diagLoc_ioUnit = 0
147 dumpAtLast = .FALSE.
148 diag_mnc = useMNC
149 useMissingValue = .FALSE.
150 diag_pickup_read = .FALSE.
151 diag_pickup_write = .FALSE.
152 diag_pickup_read_mnc = .FALSE.
153 diag_pickup_write_mnc = .FALSE.
154
155 prtFirstCall = .TRUE.
156 diagCG_maxIters = cg2dMaxIters
157 diagCG_resTarget = cg2dTargetResidual
158 diagCG_prtResFrq = printResidualFreq
159 xPsi0 = UNSET_RS
160 yPsi0 = UNSET_RS
161
162 diagSt_regMaskFile = ' '
163 nSetRegMskFile = 0
164 DO k = 1,rdimLoc
165 set_regMask(k) = 0
166 val_regMask(k) = 0.
167 ENDDO
168 DO l = 1,ldimLoc
169 stat_freq(l) = 0.
170 stat_phase(l) = UNSET_RL
171 stat_fname(l) = blkFilName
172 DO k = 1,rdimLoc
173 stat_region(k,l) = UNSET_I
174 ENDDO
175 DO m = 1,fdimLoc
176 stat_fields(m,l) = blkName
177 ENDDO
178 ENDDO
179 C- Track diagnostics pkg activation status:
180 diag_pkgStatus = 1
181
182 WRITE(msgBuf,'(2A)')
183 & ' DIAGNOSTICS_READPARMS: opening data.diagnostics'
184 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,SQUEEZE_RIGHT,1)
185
186 CALL OPEN_COPY_DATA_FILE('data.diagnostics',
187 & 'DIAGNOSTICS_READPARMS', ku, myThid )
188
189 WRITE(msgBuf,'(2A)') 'S/R DIAGNOSTICS_READPARMS,',
190 & ' read namelist "diagnostics_list": start'
191 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
192 & SQUEEZE_RIGHT , 1)
193 READ (ku,NML=diagnostics_list)
194 WRITE(msgBuf,'(2A)') 'S/R DIAGNOSTICS_READPARMS,',
195 & ' read namelist "diagnostics_list": OK'
196 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
197 & SQUEEZE_RIGHT , 1)
198
199 C- set default for statistics output according to the main flag
200 diag_mnc = diag_mnc .AND. useMNC
201 diagSt_mnc = diag_mnc
202
203 WRITE(msgBuf,'(2A)') 'S/R DIAGNOSTICS_READPARMS,',
204 & ' read namelist "DIAG_STATIS_PARMS": start'
205 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
206 & SQUEEZE_RIGHT , 1)
207 READ (ku,NML=DIAG_STATIS_PARMS)
208 WRITE(msgBuf,'(2A)') 'S/R DIAGNOSTICS_READPARMS,',
209 & ' read namelist "DIAG_STATIS_PARMS": OK'
210 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
211 & SQUEEZE_RIGHT , 1)
212
213 CLOSE (ku)
214
215 C Initialise DIAG_SELECT common block (except pointers)
216 nlists = 0
217 DO n = 1,numLists
218 freq(n) = 0.
219 phase(n) = 0.
220 averageFreq(n) = 0.
221 averagePhase(n) = 0.
222 averageCycle(n) = 1
223 nlevels(n) = 0
224 nfields(n) = 0
225 fnames(n) = blkFilName
226 c misValFlt(n) = UNSET_RL
227 c misValInt(n) = UNSET_I
228 misValFlt(n) = -999. _d 0
229 #ifdef ALLOW_FIZHI
230 IF ( useFIZHI ) misValFlt(n) = getcon('UNDEF')
231 #endif
232 DO k = 1,numLevels
233 levs(k,n) = 0
234 ENDDO
235 DO m = 1,numperList
236 flds(m,n) = blkName
237 ENDDO
238 fflags(n) = blk8c
239 ENDDO
240
241 C useMNC is confusing (can be T at this point & turned off later, whereas
242 C for all other pkgs, model stops if use${PKG}= T with #undef ALLOW_${PKG})
243 #ifndef ALLOW_MNC
244 C Fix to avoid running without getting any output:
245 diag_mnc = .FALSE.
246 diagSt_mnc = .FALSE.
247 #endif
248
249 C Fill Diagnostics Common Block with Namelist Info
250 diagSt_mnc = diagSt_mnc .AND. useMNC
251 diag_mdsio = (.NOT. diag_mnc) .OR. outputTypesInclusive
252 diag_pickup_read_mnc = diag_pickup_read_mnc .AND. diag_mnc
253 diag_pickup_write_mnc = diag_pickup_write_mnc .AND. diag_mnc
254 diag_pickup_read_mdsio =
255 & diag_pickup_read .AND. (.NOT. diag_pickup_read_mnc)
256 diag_pickup_write_mdsio = diag_pickup_write .AND.
257 & ((.NOT. diag_pickup_write_mnc) .OR. outputTypesInclusive)
258 diagSt_ascii = (.NOT. diagSt_mnc) .OR. outputTypesInclusive
259
260 DO l = 1,ldimLoc
261 iLen = ILNBLNK(fileName(l))
262 C- Only lists with non-empty file name (iLen>0) are considered
263 IF ( iLen.GE.1 .AND. nlists.LT.numLists ) THEN
264 n = nlists + 1
265 freq(n) = frequency(l)
266 IF ( timePhase(l).NE. UNSET_RL ) THEN
267 phase(n) = timePhase(l)
268 ELSEIF ( frequency(l) .LT. 0. ) THEN
269 phase(n) = -0.5 _d 0 * frequency(l)
270 ENDIF
271 IF ( averagingFreq(l).GT.0. .AND. repeatCycle(l).GT.1 ) THEN
272 averageFreq(n) = averagingFreq(l)
273 averagePhase(n) = averagingPhase(l)
274 averageCycle(n) = repeatCycle(l)
275 ELSEIF (averagingFreq(l).NE.0. .OR. repeatCycle(l).NE.0) THEN
276 WRITE(msgBuf,'(2A,F18.6,I4)') 'DIAGNOSTICS_READPARMS: ',
277 & 'unvalid Average-Freq & Cycle:',
278 & averagingFreq(l), repeatCycle(l)
279 CALL PRINT_ERROR( msgBuf , myThid )
280 WRITE(msgBuf,'(2A,I4,2A)') 'DIAGNOSTICS_READPARMS: ',
281 & ' for list l=', l, ', fileName: ', fileName(l)
282 CALL PRINT_ERROR( msgBuf , myThid )
283 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
284 ELSEIF ( frequency(l) .EQ. 0. ) THEN
285 averageFreq(n) = nTimeSteps*deltaTClock
286 averagePhase(n) = phase(n)
287 ELSEIF ( frequency(l) .GT. 0. ) THEN
288 averageFreq(n) = frequency(l)
289 averagePhase(n) = phase(n)
290 ENDIF
291 c IF ( missing_value(l) .NE. UNSET_RL )
292 c & misValFlt(n) = missing_value(l)
293 c IF ( missing_value_int(l) .NE. UNSET_I )
294 c & misValInt(n) = missing_value_int(l)
295 IF ( missing_value(l) .NE. oneRL )
296 & misValFlt(n) = missing_value(l)
297 fnames(n) = fileName (l)
298 fflags(n) = fileFlags(l)
299 nlevels(n) = 0
300 IF ( levels(1,l).NE.UNSET_RL ) THEN
301 DO k=1,kdimLoc
302 IF ( levels(k,l).NE.UNSET_RL .AND.
303 & nlevels(n).LT.numLevels ) THEN
304 nlevels(n) = nlevels(n) + 1
305 levs(nlevels(n),n) = levels(k,l)
306 ELSEIF ( levels(k,l).NE.UNSET_RL ) THEN
307 WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
308 & 'Exceed Max.Num. of Levels numLevels=', numLevels
309 CALL PRINT_ERROR( msgBuf , myThid )
310 WRITE(msgBuf,'(2A,I4,A,F8.0)') 'DIAGNOSTICS_READPARMS: ',
311 & 'when trying to add level(k=', k, ' )=', levels(k,l)
312 CALL PRINT_ERROR( msgBuf , myThid )
313 WRITE(msgBuf,'(2A,I4,2A)') 'DIAGNOSTICS_READPARMS: ',
314 & ' for list l=', l, ', fileName: ', fileName(l)
315 CALL PRINT_ERROR( msgBuf , myThid )
316 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
317 ENDIF
318 ENDDO
319 ELSE
320 C- will set levels later, once the Nb of levels of each diag is known
321 nlevels(n) = -1
322 ENDIF
323 nfields(n) = 0
324 DO m=1,fdimLoc
325 IF ( fields(m,l).NE.blkName .AND.
326 & nfields(n).LT.numperList ) THEN
327 nfields(n) = nfields(n) + 1
328 flds(nfields(n),n) = fields(m,l)
329 ELSEIF ( fields(m,l).NE.blkName ) THEN
330 WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
331 & 'Exceed Max.Num. of Fields/list numperList=', numperList
332 CALL PRINT_ERROR( msgBuf , myThid )
333 WRITE(msgBuf,'(2A,I4,3A,I4,2A)') 'DIAGNOSTICS_READPARMS: ',
334 & 'when trying to add field (m=', m, ' ): ',fields(m,l)
335 CALL PRINT_ERROR( msgBuf , myThid )
336 WRITE(msgBuf,'(2A,I4,2A)') 'DIAGNOSTICS_READPARMS: ',
337 & ' in list l=', l, ', fileName: ', fileName(l)
338 CALL PRINT_ERROR( msgBuf , myThid )
339 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
340 ENDIF
341 ENDDO
342 nlists = nlists + 1
343 c write(6,*) 'list summary:',n,nfields(n),nlevels(n)
344 ELSEIF ( iLen.GE.1 ) THEN
345 WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
346 & 'Exceed Max.Num. of list numLists=', numLists
347 CALL PRINT_ERROR( msgBuf , myThid )
348 WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
349 & 'when trying to add list l=', l
350 CALL PRINT_ERROR( msgBuf , myThid )
351 WRITE(msgBuf,'(2A,F18.6,2A)') 'DIAGNOSTICS_READPARMS: ',
352 & ' Frq=', frequency(l), ', fileName: ', fileName(l)
353 CALL PRINT_ERROR( msgBuf , myThid )
354 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
355 ENDIF
356 ENDDO
357
358 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
359
360 C- Initialise DIAG_STATS_REGMASK common block (except the mask)
361 nSetRegMask = 0
362 DO j = 0,nRegions
363 diagSt_kRegMsk(j) = 0
364 diagSt_vRegMsk(j) = 0.
365 ENDDO
366 C Global statistics (region # 0)
367 diagSt_kRegMsk(0) = 1
368
369 C- Initialise DIAG_STATIS common block (except pointers)
370 diagSt_nbLists = 0
371 DO n = 1,numLists
372 diagSt_freq(n) = 0.
373 diagSt_phase(n) = 0.
374 diagSt_nbFlds(n) = 0
375 diagSt_ioUnit(n) = 0
376 diagSt_Fname(n) = blkFilName
377 DO j = 0,nRegions
378 diagSt_region(j,n) = 0
379 ENDDO
380 DO m = 1,numperList
381 diagSt_Flds(m,n) = blkName
382 ENDDO
383 ENDDO
384
385 C Fill Diagnostics Common Block with Namelist Info
386 diagSt_ascii = (.NOT. diagSt_mnc) .OR. outputTypesInclusive
387
388 C- Region mask correspondence table:
389 C note: this table should be build when regions are defined ;
390 C for now, simpler just to read it from namelist in data.diagnostics
391 j = 0
392 DO k = 1,rdimLoc
393 IF ( set_regMask(k).NE.0 .OR. val_regMask(k).NE.0. ) THEN
394 j = j+1
395 IF ( j.LE.nRegions ) THEN
396 diagSt_kRegMsk(j) = set_regMask(k)
397 diagSt_vRegMsk(j) = val_regMask(k)
398 ENDIF
399 ENDIF
400 ENDDO
401 IF ( j.GT.nRegions ) THEN
402 WRITE(msgBuf,'(2A,I4,A)') 'DIAGNOSTICS_READPARMS: ',
403 & 'set_regMask & val_regMask lists assume at least',j,' regions'
404 CALL PRINT_ERROR( msgBuf , myThid )
405 WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_READPARMS: ',
406 & 'Need to increase "nRegions" in DIAGNOSTICS_SIZE.h'
407 CALL PRINT_ERROR( msgBuf , myThid )
408 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
409 ENDIF
410
411 DO l = 1,ldimLoc
412 iLen = ILNBLNK(stat_fname(l))
413 C- Only lists with non-empty file name (iLen>0) are considered
414 IF ( iLen.GE.1 .AND. diagSt_nbLists.LT.numLists)THEN
415 n = diagSt_nbLists + 1
416 diagSt_freq(n) = stat_freq(l)
417 IF ( stat_phase(l).NE. UNSET_RL ) THEN
418 diagSt_phase(n) = stat_phase(l)
419 ELSEIF ( stat_freq(l) .LT. 0. ) THEN
420 diagSt_phase(n) = -0.5 _d 0 * stat_freq(l)
421 ENDIF
422 diagSt_Fname(n) = stat_fname(l)
423 regionCount = 0
424 DO k=1,rdimLoc
425 j = stat_region(k,l)
426 IF ( j.NE.UNSET_I .AND. j.GE.0 .AND. j.LE.nRegions ) THEN
427 IF ( diagSt_region(j,n).EQ.0 ) THEN
428 diagSt_region(j,n) = 1
429 regionCount = regionCount + 1
430 ELSE
431 WRITE(msgBuf,'(2A,I4,2A)')
432 & 'DIAGNOSTICS_READPARMS:',
433 & ' in list l=', l, ', stat_fname: ', stat_fname(l)
434 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
435 & SQUEEZE_RIGHT , myThid )
436 WRITE(msgBuf,'(A,I4,A)')
437 & 'DIAGNOSTICS_READPARMS: region=',j,
438 & ' can only be selected once => ignore 2nd selection'
439 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
440 & SQUEEZE_RIGHT , myThid )
441 ENDIF
442 ELSEIF ( j.NE.UNSET_I ) THEN
443 WRITE(msgBuf,'(A,I4,A,I4,2A)')
444 & 'DIAGNOSTICS_READPARMS: region=',j,
445 & ' in list l=', l, ', stat_fname: ', stat_fname(l)
446 CALL PRINT_ERROR( msgBuf , myThid )
447 WRITE(msgBuf,'(2A,I4,A,I4,2A)')
448 & 'DIAGNOSTICS_READPARMS: ==> exceed Max.Nb of regions',
449 & '(=',nRegions,' )'
450 CALL PRINT_ERROR( msgBuf , myThid )
451 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
452 ENDIF
453 ENDDO
454 IF ( regionCount.EQ.0 ) THEN
455 C- no region selected => default is Global statistics (region Id: 0)
456 diagSt_region(0,n) = 1
457 ENDIF
458 diagSt_nbFlds(n) = 0
459 DO m=1,fdimLoc
460 IF ( stat_fields(m,l).NE.blkName .AND.
461 & diagSt_nbFlds(n).LT.numperList ) THEN
462 diagSt_nbFlds(n) = diagSt_nbFlds(n) + 1
463 diagSt_Flds(diagSt_nbFlds(n),n) = stat_fields(m,l)
464 ELSEIF ( stat_fields(m,l).NE.blkName ) THEN
465 WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
466 & 'Exceed Max.Num. of Fields/list numperList=', numperList
467 CALL PRINT_ERROR( msgBuf , myThid )
468 WRITE(msgBuf,'(2A,I4,3A,I4,2A)') 'DIAGNOSTICS_READPARMS: ',
469 & 'when trying to add stat_field (m=', m,
470 & ' ): ',stat_fields(m,l)
471 CALL PRINT_ERROR( msgBuf , myThid )
472 WRITE(msgBuf,'(2A,I4,2A)') 'DIAGNOSTICS_READPARMS: ',
473 & ' in list l=', l, ', stat_fname: ', stat_fname(l)
474 CALL PRINT_ERROR( msgBuf , myThid )
475 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
476 ENDIF
477 ENDDO
478 diagSt_nbLists = diagSt_nbLists + 1
479 c write(6,*) 'stat-list summary:',n,diagSt_nbFlds(n),regionCount
480 ELSEIF ( iLen.GE.1 ) THEN
481 WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
482 & 'Exceed Max.Num. of list numLists=', numLists
483 CALL PRINT_ERROR( msgBuf , myThid )
484 WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
485 & 'when trying to add stat_list l=', l
486 CALL PRINT_ERROR( msgBuf , myThid )
487 WRITE(msgBuf,'(2A,F18.6,2A)') 'DIAGNOSTICS_READPARMS: ',
488 & ' Frq=', stat_freq(l), ', stat_fname: ', stat_fname(l)
489 CALL PRINT_ERROR( msgBuf , myThid )
490 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
491 ENDIF
492 ENDDO
493
494 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
495 C Echo History List Data Structure
496 stdUnit = standardMessageUnit
497 WRITE(msgBuf,'(A)')
498 & ' DIAGNOSTICS_READPARMS: global parameter summary:'
499 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
500 CALL WRITE_0D_L( dumpAtLast, INDEX_NONE,
501 & ' dumpAtLast =',' /* always write time-ave diags at the end */')
502 CALL WRITE_0D_L( diag_mnc, INDEX_NONE,
503 & ' diag_mnc =', ' /* write NetCDF output files */')
504 CALL WRITE_0D_L( useMissingValue, INDEX_NONE,
505 & ' useMissingValue =', ' /* put MissingValue where mask = 0 */')
506 CALL WRITE_0D_I( diagCG_maxIters, INDEX_NONE,
507 & ' diagCG_maxIters =', ' /* max number of iters in diag_cg2d */')
508 CALL WRITE_0D_RL( diagCG_resTarget, INDEX_NONE,
509 & ' diagCG_resTarget =', ' /* residual target for diag_cg2d */')
510 WRITE(msgBuf,'(A)')
511 & '-----------------------------------------------------'
512 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
513 WRITE(msgBuf,'(A)')
514 & ' DIAGNOSTICS_READPARMS: active diagnostics summary:'
515 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
516 WRITE(msgBuf,'(A)')
517 & '-----------------------------------------------------'
518 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
519 DO n = 1,nlists
520 WRITE(msgBuf,'(2A)') 'Creating Output Stream: ', fnames(n)
521 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
522 WRITE(msgBuf,'(2(A,F18.6))') 'Output Frequency:', freq(n),
523 & ' ; Phase: ', phase(n)
524 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
525 WRITE(msgBuf,'(2(A,F18.6),A,I4)')
526 & ' Averaging Freq.:', averageFreq(n),
527 & ' , Phase: ', averagePhase(n), ' , Cycle:', averageCycle(n)
528 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
529 IF ( fflags(n).EQ.blk8c ) THEN
530 c WRITE(msgBuf,'(A,1PE20.12,A,I12,3A)')
531 c & ' missing value:', misValFlt(n),
532 c & ' ; for integers:', misValInt(n)
533 WRITE(msgBuf,'(A,1PE20.12,3A)')
534 & ' missing value:', misValFlt(n)
535 ELSE
536 c WRITE(msgBuf,'(A,1PE20.12,A,I12,3A)')
537 c & ' missing value:', misValFlt(n),
538 c & ' ; for integers:', misValInt(n),
539 c & ' ; F-Flags="', fflags(n),'"'
540 WRITE(msgBuf,'(A,1PE20.12,3A)')
541 & ' missing value:', misValFlt(n),
542 & ' ; F-Flags="', fflags(n),'"'
543 ENDIF
544 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
545 IF ( nlevels(n).EQ.-1 .AND. fflags(n)(2:2).EQ.'I' ) THEN
546 WRITE(msgBuf,'(A)') ' Cumulate all Levels (to be set later)'
547 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
548 ELSEIF ( nlevels(n).EQ.-1 ) THEN
549 WRITE(msgBuf,'(A,A)') ' Levels: ','will be set later'
550 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
551 ELSEIF ( fflags(n)(2:2).EQ.'P' ) THEN
552 DO l=1,nlevels(n),10
553 m = MIN(nlevels(n),l+9)
554 WRITE(msgBuf,'(A,1P10E10.3)')' interp: ', (levs(k,n),k=l,m)
555 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
556 ENDDO
557 ELSE
558 suffix = ' Levels: '
559 IF ( fflags(n)(2:2).EQ.'I' ) suffix = ' Sum Levels:'
560 DO l=1,nlevels(n),20
561 m = MIN(nlevels(n),l+19)
562 WRITE(msgBuf,'(A,20F5.0)') suffix, (levs(k,n),k=l,m)
563 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
564 ENDDO
565 ENDIF
566 DO nf = 1,nfields(n),10
567 m = MIN(nfields(n),nf+9)
568 WRITE(msgBuf,'(21A)') ' Fields: ',(' ',flds(l,n),l=nf,m)
569 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
570 ENDDO
571 ENDDO
572 WRITE(msgBuf,'(A)')
573 & '-----------------------------------------------------'
574 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
575 WRITE(msgBuf,'(A)')
576 & ' DIAGNOSTICS_READPARMS: statistics diags. summary:'
577 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
578 DO n = 1,diagSt_nbLists
579 WRITE(msgBuf,'(2A)') 'Creating Stats. Output Stream: ',
580 & diagSt_Fname(n)
581 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
582 WRITE(msgBuf,'(2(A,F18.6))') 'Output Frequency:',
583 & diagSt_freq(n), ' ; Phase: ', diagSt_phase(n)
584 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
585 WRITE(msgBuf,'(A)') ' Regions: '
586 l = 10
587 DO j=0,nRegions
588 IF ( diagSt_region(j,n).GE.1 ) THEN
589 l = l+3
590 IF (l.LE.MAX_LEN_MBUF) WRITE(msgBuf(l-2:l),'(I3)') j
591 ENDIF
592 ENDDO
593 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
594 DO nf = 1,diagSt_nbFlds(n),10
595 m = MIN(diagSt_nbFlds(n),nf+9)
596 WRITE(msgBuf,'(21A)') ' Fields: ',
597 & (' ',diagSt_Flds(l,n),l=nf,m)
598 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
599 ENDDO
600 ENDDO
601 WRITE(msgBuf,'(A)')
602 & '-----------------------------------------------------'
603 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
604 WRITE(msgBuf,'(A)')
605 CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
606
607 _END_MASTER(myThid)
608
609 C-- Everyone else must wait for the parameters to be loaded
610 _BARRIER
611
612 RETURN
613 END

  ViewVC Help
Powered by ViewVC 1.1.22