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

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

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

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

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.32

  ViewVC Help
Powered by ViewVC 1.1.22