/[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.39 - (show annotations) (download)
Wed Jan 11 00:22:48 2017 UTC (7 years, 4 months ago) by gforget
Branch: MAIN
Changes since 1.38: +11 -2 lines
- add run-time variable diagMdsDir to specify a directory where diagnostics will be written when using mds
- note: cannot be used with either pkg/mnc or mdsioLocalDir that alredy use subirectories

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

  ViewVC Help
Powered by ViewVC 1.1.22