/[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.39 by gforget, Wed Jan 11 00:22:48 2017 UTC
# Line 8  CBOP 0 Line 8  CBOP 0
8  C     !ROUTINE: DIAGNOSTICS_READPARMS  C     !ROUTINE: DIAGNOSTICS_READPARMS
9    
10  C     !INTERFACE:  C     !INTERFACE:
11        SUBROUTINE DIAGNOSTICS_READPARMS(myThid)        SUBROUTINE DIAGNOSTICS_READPARMS( myThid )
12    
13  C     !DESCRIPTION:  C     !DESCRIPTION:
14  C     Read Diagnostics Namelists to specify output sequence.  C     Read Diagnostics Namelists to specify output sequence.
# 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     !FUNCTIONS:
31          INTEGER  ILNBLNK
32          EXTERNAL ILNBLNK
33    #ifdef ALLOW_FIZHI
34          _RL      getcon
35          EXTERNAL getcon
36    #endif
37    
38  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
39  C     ldimLoc :: Max Number of Lists  C     ldimLoc :: Max Number of Lists  (in data.diagnostics)
40  C     kdimLoc :: Max Number of Levels  C     kdimLoc :: Max Number of Levels (in data.diagnostics)
41  C     fdimLoc :: Max Number of Fields  C     fdimLoc :: Max Number of Fields (in data.diagnostics)
42  C     frequency :: Frequency of Output (ouput every "frequency" iteration)  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  C     levels    :: List Output Levels
50  C     fields    :: List Output Fields  C     fields    :: List Output Fields
51  C     filename  :: List Output Filename  C     fileName  :: List Output Filename
52        INTEGER     ldimLoc, kdimLoc, fdimLoc  C--   for regional-statistics
53        PARAMETER ( ldimLoc = 2*numlists )  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 )        PARAMETER ( kdimLoc = 2*numLevels )
64        PARAMETER ( fdimLoc = 2*numperlist )        PARAMETER ( fdimLoc = 2*numperList )
65        INTEGER     frequency(ldimLoc)        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)        _RL         levels(kdimLoc,ldimLoc)
72          _RL         stat_freq(ldimLoc), stat_phase(ldimLoc)
73        CHARACTER*8 fields(fdimLoc,ldimLoc)        CHARACTER*8 fields(fdimLoc,ldimLoc)
74        CHARACTER*8 filename(ldimLoc)        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        CHARACTER*8 blk8c
79        CHARACTER*(MAX_LEN_MBUF) msgBuf        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        INTEGER ku, stdUnit
85        INTEGER k,l,n,m        INTEGER j,k,l,n,m,nf
86        _RL undef, getcon        INTEGER iLen, regionCount
87    
88        NAMELIST / diagnostics_list /  C--   full level output:
89       &     frequency, levels, fields, filename,        NAMELIST / DIAGNOSTICS_LIST /
90       &     diag_mnc,       &     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,       &     diag_pickup_read,     diag_pickup_write,
98       &     diag_pickup_read_mnc, diag_pickup_write_mnc       &     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  C-    Initialize and Read Diagnostics Namelist
121        _BEGIN_MASTER(myThid)        _BEGIN_MASTER(myThid)
122    
       undef = getcon('UNDEF')  
123        blk8c  = '        '        blk8c  = '        '
124          DO k=1,LEN(blkFilName)
125            blkFilName(k:k) = ' '
126          ENDDO
127    
128        DO l = 1,ldimLoc        DO l = 1,ldimLoc
129          frequency(l) = 0          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          DO k = 1,kdimLoc
143            levels (k,l) = undef            levels(k,l) = UNSET_RL
144          ENDDO          ENDDO
145          DO m = 1,fdimLoc          DO m = 1,fdimLoc
146            fields (m,l) = blk8c            fields(m,l) = blkName
147          ENDDO          ENDDO
148        ENDDO        ENDDO
149        diag_mnc = useMNC        diagLoc_ioUnit = 0
150          dumpAtLast   = .FALSE.
151          diag_mnc     = useMNC
152          useMissingValue = .FALSE.
153        diag_pickup_read      = .FALSE.        diag_pickup_read      = .FALSE.
154        diag_pickup_write     = .FALSE.        diag_pickup_write     = .FALSE.
155        diag_pickup_read_mnc  = .FALSE.        diag_pickup_read_mnc  = .FALSE.
156        diag_pickup_write_mnc = .FALSE.        diag_pickup_write_mnc = .FALSE.
157          diagMdsDir = ' '
158          diagMdsDirCreate = .TRUE.
159    
160        WRITE(msgBuf,'(A)')        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'       &     ' DIAGNOSTICS_READPARMS: opening data.diagnostics'
192        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,SQUEEZE_RIGHT,1)        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,SQUEEZE_RIGHT,1)
193    
194        CALL OPEN_COPY_DATA_FILE('data.diagnostics',        CALL OPEN_COPY_DATA_FILE('data.diagnostics',
195       &     'DIAGNOSTICS_READPARMS', ku, myThid )       &     '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)        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)        CLOSE (ku)
222    
223  C     Initialise diag_choices common block  C     Initialise DIAG_SELECT common block (except pointers)
224        nlists = 0        nlists = 0
225        DO n = 1,numlists        DO n = 1,numLists
226          freq(n) = 0          freq(n) = 0.
227            phase(n) = 0.
228            averageFreq(n)  = 0.
229            averagePhase(n) = 0.
230            averageCycle(n) = 1
231          nlevels(n) = 0          nlevels(n) = 0
232          nfields(n) = 0          nfields(n) = 0
233          fnames(n) = blk8c          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          DO k = 1,numLevels
241            levs(k,n) = 0            levs(k,n) = 0
242          ENDDO          ENDDO
243          DO m = 1,numperlist          DO m = 1,numperList
244            flds(m,n) = '        '            flds(m,n) = blkName
           jdiag(m,n) = 0  
245          ENDDO          ENDDO
246            fflags(n)   = blk8c
247        ENDDO        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  C     Fill Diagnostics Common Block with Namelist Info
258        diag_mnc = diag_mnc .AND. useMNC        diagSt_mnc = diagSt_mnc .AND. useMNC
259        diag_mdsio = (.NOT. diag_mnc) .OR. outputTypesInclusive        diag_mdsio = (.NOT. diag_mnc) .OR. outputTypesInclusive
260        diag_pickup_read_mnc  = diag_pickup_read_mnc .AND. diag_mnc        diag_pickup_read_mnc  = diag_pickup_read_mnc .AND. diag_mnc
261        diag_pickup_write_mnc = diag_pickup_write_mnc .AND. diag_mnc        diag_pickup_write_mnc = diag_pickup_write_mnc .AND. diag_mnc
262        diag_pickup_read_mdsio  =        diag_pickup_read_mdsio  =
263       &     diag_pickup_read .AND. (.NOT. diag_pickup_read_mnc)       &     diag_pickup_read .AND. (.NOT. diag_pickup_read_mnc)
264        diag_pickup_write_mdsio = diag_pickup_write .AND.        diag_pickup_write_mdsio = diag_pickup_write .AND.
265       &     ((.NOT. diag_pickup_write_mnc) .OR. outputTypesInclusive)       &     ((.NOT. diag_pickup_write_mnc) .OR. outputTypesInclusive)
266          diagSt_ascii = (.NOT. diagSt_mnc) .OR. outputTypesInclusive
267    
268        DO l = 1,ldimLoc        DO l = 1,ldimLoc
269         IF ( frequency(l).NE.0 .AND. nlists.LT.numlists ) THEN         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           n = nlists + 1
273           freq(n)    = frequency(l)           freq(n)    = frequency(l)
274           fnames(n)  = filename (l)           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           nlevels(n) = 0
308           IF ( levels(1,l).NE.undef ) THEN           IF ( levels(1,l).NE.UNSET_RL ) THEN
309             DO k=1,kdimLoc             DO k=1,kdimLoc
310               IF ( levels(k,l).NE.undef .AND.               IF ( levels(k,l).NE.UNSET_RL .AND.
311       &            nlevels(n).LT.numLevels ) THEN       &            nlevels(n).LT.numLevels ) THEN
312                 nlevels(n) = nlevels(n) + 1                 nlevels(n) = nlevels(n) + 1
313                 levs(nlevels(n),n) = levels(k,l)                 levs(nlevels(n),n) = levels(k,l)
314               ELSEIF ( levels(k,l).NE.undef ) THEN               ELSEIF ( levels(k,l).NE.UNSET_RL ) THEN
315                WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',                WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
316       &         'Exceed Max.Num. of Levels numLevels=', numLevels       &         'Exceed Max.Num. of Levels numLevels=', numLevels
317                CALL PRINT_ERROR( msgBuf , myThid )                CALL PRINT_ERROR( msgBuf , myThid )
318                WRITE(msgBuf,'(2A,I3,A,F3.0)') 'DIAGNOSTICS_READPARMS: ',                WRITE(msgBuf,'(2A,I4,A,F8.0)') 'DIAGNOSTICS_READPARMS: ',
319       &         'when trying to add level(k=', k, ' )=', levels(k,l)       &         'when trying to add level(k=', k, ' )=', levels(k,l)
320                CALL PRINT_ERROR( msgBuf , myThid )                CALL PRINT_ERROR( msgBuf , myThid )
321                WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',                WRITE(msgBuf,'(2A,I4,2A)') 'DIAGNOSTICS_READPARMS: ',
322       &         ' for list l=', l, ', filename: ', filename(l)       &         ' for list l=', l, ', fileName: ', fileName(l)
323                CALL PRINT_ERROR( msgBuf , myThid )                CALL PRINT_ERROR( msgBuf , myThid )
324                 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'                STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
325               ENDIF               ENDIF
326             ENDDO             ENDDO
327           ELSE           ELSE
# Line 140  C-       will set levels later, once the Line 330  C-       will set levels later, once the
330           ENDIF           ENDIF
331           nfields(n) = 0           nfields(n) = 0
332           DO m=1,fdimLoc           DO m=1,fdimLoc
333             IF ( fields(m,l).NE.blk8c .AND.             IF ( fields(m,l).NE.blkName .AND.
334       &          nfields(n).LT.numperlist ) THEN       &          nfields(n).LT.numperList ) THEN
335               nfields(n) = nfields(n) + 1               nfields(n) = nfields(n) + 1
336               flds(nfields(n),n) = fields(m,l)               flds(nfields(n),n) = fields(m,l)
337             ELSEIF ( fields(m,l).NE.blk8c ) THEN             ELSEIF ( fields(m,l).NE.blkName ) THEN
338               WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',               WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
339       &        'Exceed Max.Num. of Fields/list numperlist=', numperlist       &        'Exceed Max.Num. of Fields/list numperList=', numperList
340               CALL PRINT_ERROR( msgBuf , myThid )               CALL PRINT_ERROR( msgBuf , myThid )
341               WRITE(msgBuf,'(2A,I3,3A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',               WRITE(msgBuf,'(2A,I4,3A,I4,2A)') 'DIAGNOSTICS_READPARMS: ',
342       &        'when trying to add field (m=', m, ' ): ',fields(m,l)       &        'when trying to add field (m=', m, ' ): ',fields(m,l)
343               CALL PRINT_ERROR( msgBuf , myThid )               CALL PRINT_ERROR( msgBuf , myThid )
344               WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',               WRITE(msgBuf,'(2A,I4,2A)') 'DIAGNOSTICS_READPARMS: ',
345       &        ' in list l=', l, ', filename: ', filename(l)       &        ' in list l=', l, ', fileName: ', fileName(l)
346               CALL PRINT_ERROR( msgBuf , myThid )               CALL PRINT_ERROR( msgBuf , myThid )
347               STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'               STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
348             ENDIF             ENDIF
349           ENDDO           ENDDO
350           nlists = nlists + 1           nlists = nlists + 1
351  c        write(6,*) 'list summary:',n,nfields(n),nlevels(n)  c        write(6,*) 'list summary:',n,nfields(n),nlevels(n)
352         ELSEIF ( frequency(l).NE.0 ) THEN         ELSEIF ( iLen.GE.1 ) THEN
353           WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',           WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
354       &            'Exceed Max.Num. of list numlists=', numlists       &            'Exceed Max.Num. of list numLists=', numLists
355           CALL PRINT_ERROR( msgBuf , myThid )           CALL PRINT_ERROR( msgBuf , myThid )
356           WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',           WRITE(msgBuf,'(2A,I4)') 'DIAGNOSTICS_READPARMS: ',
357       &    'when trying to add list l=', l       &    'when trying to add list l=', l
358           CALL PRINT_ERROR( msgBuf , myThid )           CALL PRINT_ERROR( msgBuf , myThid )
359           WRITE(msgBuf,'(2A,I6,2A)') 'DIAGNOSTICS_READPARMS: ',           WRITE(msgBuf,'(2A,F18.6,2A)') 'DIAGNOSTICS_READPARMS: ',
360       &    ' Frq=', frequency(l), ', filename: ', filename(l)       &    ' 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 )           CALL PRINT_ERROR( msgBuf , myThid )
498           STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'           STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
499         ENDIF         ENDIF
# Line 177  C---+----1----+----2----+----3----+----4 Line 503  C---+----1----+----2----+----3----+----4
503  C     Echo History List Data Structure  C     Echo History List Data Structure
504        stdUnit = standardMessageUnit        stdUnit = standardMessageUnit
505        WRITE(msgBuf,'(A)')        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)        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
530        WRITE(msgBuf,'(A)')        WRITE(msgBuf,'(A)')
# Line 186  C     Echo History List Data Structure Line 534  C     Echo History List Data Structure
534       & '-----------------------------------------------------'       & '-----------------------------------------------------'
535        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
536        DO n = 1,nlists        DO n = 1,nlists
537          WRITE(msgBuf,'(2a)') 'Creating Output Stream: ',fnames(n)          WRITE(msgBuf,'(2A)') 'Creating Output Stream: ', fnames(n)
538          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
539          WRITE(msgBuf,*) 'Frequency: ',freq(n)          WRITE(msgBuf,'(2(A,F18.6))') 'Output Frequency:', freq(n),
540         &                               ' ; Phase: ', phase(n)
541          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
542          IF ( nlevels(n).EQ.-1 ) THEN          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'            WRITE(msgBuf,'(A,A)') ' Levels:    ','will be set later'
567            CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)            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          ELSE
575             suffix = ' Levels:    '
576             IF ( fflags(n)(2:2).EQ.'I' ) suffix = ' Sum Levels:'
577           DO l=1,nlevels(n),20           DO l=1,nlevels(n),20
578            m = MIN(nlevels(n),l+19)            m = MIN(nlevels(n),l+19)
579            WRITE(msgBuf,'(A,20F5.0)') ' Levels:    ', (levs(k,n),k=l,m)            WRITE(msgBuf,'(A,20F5.0)') suffix, (levs(k,n),k=l,m)
580            CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)            CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
581           ENDDO           ENDDO
582          ENDIF          ENDIF
583          WRITE(msgBuf,*) 'Fields:   ',(' ',flds(l,n),l=1,nfields(n))          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)          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        ENDDO
618        WRITE(msgBuf,'(A)')        WRITE(msgBuf,'(A)')
619       & '-----------------------------------------------------'       & '-----------------------------------------------------'
# Line 211  C     Echo History List Data Structure Line 623  C     Echo History List Data Structure
623    
624        _END_MASTER(myThid)        _END_MASTER(myThid)
625    
626    C--   Everyone else must wait for the parameters to be loaded
627          _BARRIER
628    
629        RETURN        RETURN
630        END        END

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

  ViewVC Help
Powered by ViewVC 1.1.22