/[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.14 by edhill, Wed Jul 6 02:13:52 2005 UTC revision 1.18 by jmc, Mon Jun 5 18:15:53 2006 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 "DIAGSTATS_REGIONS.h"
24    
25  C     !INPUT PARAMETERS:  C     !INPUT PARAMETERS:
26        INTEGER myThid        INTEGER myThid
27  CEOP  CEOP
28    
29  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
30  C     ldimLoc :: Max Number of Lists  C     ldimLoc :: Max Number of Lists  (in data.diagnostics)
31  C     kdimLoc :: Max Number of Levels  C     kdimLoc :: Max Number of Levels (in data.diagnostics)
32  C     fdimLoc :: Max Number of Fields  C     fdimLoc :: Max Number of Fields (in data.diagnostics)
33  C     frequency :: Frequency (in s) of Output (ouput every "frequency" second)  C     frequency :: Frequency (in s) of Output (ouput every "frequency" second)
34  C     timePhase :: phase (in s) within the "frequency" period to write output  C     timePhase :: phase (in s) within the "frequency" period to write output
35    C     averagingFreq  :: frequency (in s) for periodic averaging interval
36    C     averagingPhase :: phase     (in s) for periodic averaging interval
37    C     repeatCycle    :: number of averaging intervals in 1 cycle
38  C     levels    :: List Output Levels  C     levels    :: List Output Levels
39  C     fields    :: List Output Fields  C     fields    :: List Output Fields
40  C     filename  :: List Output Filename  C     filename  :: List Output Filename
41    C--   for regional-statistics
42    C     set_regMask(n) :: region-mask set-index that define the region "n"
43    C     val_regMask(n) :: corresponding mask value of region "n" in the region-mask
44  C--   per level statistics output:  C--   per level statistics output:
45  C     stat_freq   :: Frequency (in s) of statistics output  C     stat_freq   :: Frequency (in s) of statistics output
46  C     stat_phase  :: phase (in s) to write statistics output  C     stat_phase  :: phase (in s) to write statistics output
# Line 44  C     stat_fname  :: List of statistics Line 51  C     stat_fname  :: List of statistics
51        PARAMETER ( ldimLoc = 2*numlists )        PARAMETER ( ldimLoc = 2*numlists )
52        PARAMETER ( kdimLoc = 2*numLevels )        PARAMETER ( kdimLoc = 2*numLevels )
53        PARAMETER ( fdimLoc = 2*numperlist )        PARAMETER ( fdimLoc = 2*numperlist )
54        PARAMETER ( rdimLoc = 2*nRegions+1 )        PARAMETER ( rdimLoc = nRegions+21 )
55        _RL         frequency(ldimLoc), timePhase(ldimLoc)        _RL         frequency(ldimLoc), timePhase(ldimLoc)
56          _RL         averagingFreq(ldimLoc), averagingPhase(ldimLoc)
57          INTEGER     repeatCycle(ldimLoc)
58        _RL         levels(kdimLoc,ldimLoc)        _RL         levels(kdimLoc,ldimLoc)
59        _RL         stat_freq(ldimLoc), stat_phase(ldimLoc)        _RL         stat_freq(ldimLoc), stat_phase(ldimLoc)
60        CHARACTER*8 fields(fdimLoc,ldimLoc)        CHARACTER*8 fields(fdimLoc,ldimLoc)
# Line 56  C     stat_fname  :: List of statistics Line 65  C     stat_fname  :: List of statistics
65        CHARACTER*8 blk8c        CHARACTER*8 blk8c
66        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
67        INTEGER stat_region(rdimLoc,ldimLoc)        INTEGER stat_region(rdimLoc,ldimLoc)
68          INTEGER set_regMask(rdimLoc)
69          _RS     val_regMask(rdimLoc)
70        INTEGER ku, stdUnit        INTEGER ku, stdUnit
71        INTEGER j,k,l,n,m        INTEGER j,k,l,n,m,nf
72        INTEGER iLen, regionCount        INTEGER iLen, regionCount
       _RL undef, getcon  
73        INTEGER  ILNBLNK        INTEGER  ILNBLNK
74        EXTERNAL ILNBLNK        EXTERNAL ILNBLNK
75    
76  C--   full level output:  C--   full level output:
77        NAMELIST / diagnostics_list /        NAMELIST / DIAGNOSTICS_LIST /
78       &     frequency, timePhase, levels, fields, filename, fileflags,       &     frequency, timePhase,
79       &     dumpatlast, diag_mnc,       &     averagingFreq, averagingPhase, repeatCycle,
80         &     levels, fields, filename, fileflags,
81         &     dumpAtLast, diag_mnc,
82       &     diag_pickup_read,     diag_pickup_write,       &     diag_pickup_read,     diag_pickup_write,
83       &     diag_pickup_read_mnc, diag_pickup_write_mnc       &     diag_pickup_read_mnc, diag_pickup_write_mnc
84    
85  C--   per level statistics output:  C--   per level statistics output:
86        NAMELIST / DIAG_STATIS_PARMS /        NAMELIST / DIAG_STATIS_PARMS /
87       &     stat_freq, stat_phase, stat_region, stat_fields,       &     stat_freq, stat_phase, stat_region, stat_fields,
88       &     stat_fname,       &     stat_fname, diagSt_mnc,
89       &     diagSt_mnc       &     set_regMask, val_regMask,
90         &     diagSt_regMaskFile, nSetRegMskFile
91    
92  C     Initialize and Read Diagnostics Namelist  C     Initialize and Read Diagnostics Namelist
93        _BEGIN_MASTER(myThid)        _BEGIN_MASTER(myThid)
94    
       undef = getcon('UNDEF')  
95        blk8c  = '        '        blk8c  = '        '
96        DO k=1,LEN(blkFilName)        DO k=1,LEN(blkFilName)
97          blkFilName(k:k) = ' '          blkFilName(k:k) = ' '
98        ENDDO        ENDDO
99    
100        DO l = 1,ldimLoc        DO l = 1,ldimLoc
101          frequency(l) = 0.          frequency(l)  = 0.
102          timePhase(l) = UNSET_RL          timePhase(l)  = UNSET_RL
103          filename (l) = blkFilName          averagingFreq(l) = 0.
104            averagingPhase(l)= 0.
105            repeatCycle(l)   = 0
106            filename(l)   = blkFilName
107  C       eight spaces:        12345678  C       eight spaces:        12345678
108          fileflags(l)(1:8) = '        '  c       fileflags(l)(1:8) = '        '
109            fileflags(l)  = blk8c
110          DO k = 1,kdimLoc          DO k = 1,kdimLoc
111            levels (k,l) = undef            levels(k,l) = UNSET_RL
112          ENDDO          ENDDO
113          DO m = 1,fdimLoc          DO m = 1,fdimLoc
114            fields (m,l) = blk8c            fields(m,l) = blk8c
115          ENDDO          ENDDO
116        ENDDO        ENDDO
117        dumpatlast            = .FALSE.        dumpAtLast            = .FALSE.
118        diag_mnc              = useMNC        diag_mnc              = useMNC
119        diag_pickup_read      = .FALSE.        diag_pickup_read      = .FALSE.
120        diag_pickup_write     = .FALSE.        diag_pickup_write     = .FALSE.
121        diag_pickup_read_mnc  = .FALSE.        diag_pickup_read_mnc  = .FALSE.
122        diag_pickup_write_mnc = .FALSE.        diag_pickup_write_mnc = .FALSE.
123    
124          diagSt_regMaskFile = ' '
125          nSetRegMskFile = 0
126          DO k = 1,rdimLoc
127            set_regMask(k) = 0
128            val_regMask(k) = 0.
129          ENDDO
130        DO l = 1,ldimLoc        DO l = 1,ldimLoc
131          stat_freq(l)  = 0.          stat_freq(l)  = 0.
132          stat_phase(l) = UNSET_RL          stat_phase(l) = UNSET_RL
# Line 150  C-    set default for statistics output Line 172  C-    set default for statistics output
172    
173        CLOSE (ku)        CLOSE (ku)
174    
175  C     Initialise diag_choices common block (except pointers)  C     Initialise DIAG_SELECT common block (except pointers)
176        nlists = 0        nlists = 0
177        DO n = 1,numlists        DO n = 1,numlists
178          freq(n) = 0.          freq(n) = 0.
179          phase(n) = 0.          phase(n) = 0.
180            averageFreq(n)  = 0.
181            averagePhase(n) = 0.
182            averageCycle(n) = 1
183          nlevels(n) = 0          nlevels(n) = 0
184          nfields(n) = 0          nfields(n) = 0
185          fnames(n) = blkFilName          fnames(n) = blkFilName
# Line 164  C     Initialise diag_choices common blo Line 189  C     Initialise diag_choices common blo
189          DO m = 1,numperlist          DO m = 1,numperlist
190            flds(m,n) = blk8c            flds(m,n) = blk8c
191          ENDDO          ENDDO
192            fflags(n)   = blk8c
193        ENDDO        ENDDO
194    
195  C     useMNC is confusing (can be T at this point & turned off later, whereas  C     useMNC is confusing (can be T at this point & turned off later, whereas
# Line 196  C-     Only lists with non-empty file na Line 222  C-     Only lists with non-empty file na
222           ELSEIF ( frequency(l) .LT. 0. ) THEN           ELSEIF ( frequency(l) .LT. 0. ) THEN
223             phase(n) = -0.5 _d 0 * frequency(l)             phase(n) = -0.5 _d 0 * frequency(l)
224           ENDIF           ENDIF
225             IF ( averagingFreq(l).GT.0. .AND. repeatCycle(l).GT.1 ) THEN
226               averageFreq(n)  = averagingFreq(l)
227               averagePhase(n) = averagingPhase(l)
228               averageCycle(n) = repeatCycle(l)
229             ELSEIF (averagingFreq(l).NE.0. .OR. repeatCycle(l).NE.0) THEN
230               WRITE(msgBuf,'(2A,F17.6,I3)') 'DIAGNOSTICS_READPARMS: ',
231         &       'unvalid Average-Freq & Cycle:',
232         &       averagingFreq(l), repeatCycle(l)
233               CALL PRINT_ERROR( msgBuf , myThid )
234               WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',
235         &         ' for list l=', l, ', filename: ', filename(l)
236               CALL PRINT_ERROR( msgBuf , myThid )
237               STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
238             ELSEIF ( frequency(l) .EQ. 0. ) THEN
239               averageFreq(n)  = nTimeSteps*deltaTClock
240               averagePhase(n) = phase(n)
241             ELSEIF ( frequency(l) .GT. 0. ) THEN
242               averageFreq(n)  = frequency(l)
243               averagePhase(n) = phase(n)
244             ENDIF
245           fnames(n)  = filename (l)           fnames(n)  = filename (l)
246           fflags(n)  = fileflags(l)           fflags(n)  = fileflags(l)
247           nlevels(n) = 0           nlevels(n) = 0
248           IF ( levels(1,l).NE.undef ) THEN           IF ( levels(1,l).NE.UNSET_RL ) THEN
249             DO k=1,kdimLoc             DO k=1,kdimLoc
250               IF ( levels(k,l).NE.undef .AND.               IF ( levels(k,l).NE.UNSET_RL .AND.
251       &            nlevels(n).LT.numLevels ) THEN       &            nlevels(n).LT.numLevels ) THEN
252                 nlevels(n) = nlevels(n) + 1                 nlevels(n) = nlevels(n) + 1
253                 levs(nlevels(n),n) = levels(k,l)                 levs(nlevels(n),n) = levels(k,l)
254               ELSEIF ( levels(k,l).NE.undef ) THEN               ELSEIF ( levels(k,l).NE.UNSET_RL ) THEN
255                WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',                WRITE(msgBuf,'(2A,I3)') 'DIAGNOSTICS_READPARMS: ',
256       &         'Exceed Max.Num. of Levels numLevels=', numLevels       &         'Exceed Max.Num. of Levels numLevels=', numLevels
257                CALL PRINT_ERROR( msgBuf , myThid )                CALL PRINT_ERROR( msgBuf , myThid )
# Line 215  C-     Only lists with non-empty file na Line 261  C-     Only lists with non-empty file na
261                WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',                WRITE(msgBuf,'(2A,I3,2A)') 'DIAGNOSTICS_READPARMS: ',
262       &         ' for list l=', l, ', filename: ', filename(l)       &         ' for list l=', l, ', filename: ', filename(l)
263                CALL PRINT_ERROR( msgBuf , myThid )                CALL PRINT_ERROR( msgBuf , myThid )
264                 STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'                STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
265               ENDIF               ENDIF
266             ENDDO             ENDDO
267           ELSE           ELSE
# Line 259  c        write(6,*) 'list summary:',n,nf Line 305  c        write(6,*) 'list summary:',n,nf
305    
306  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
307    
308  C     Initialise DIAG_STATIS common block (except pointers)  C-    Initialise DIAG_STATS_REGMASK common block (except the mask)
309          nSetRegMask = 0
310          DO j = 0,nRegions
311            diagSt_kRegMsk(j) = 0
312            diagSt_vRegMsk(j) = 0.
313          ENDDO
314    C     Global statistics (region # 0)
315          diagSt_kRegMsk(0) = 1
316    
317    C-    Initialise DIAG_STATIS common block (except pointers)
318        diagSt_nbLists = 0        diagSt_nbLists = 0
319        DO n = 1,numlists        DO n = 1,numlists
320          diagSt_freq(n) = 0.          diagSt_freq(n) = 0.
# Line 278  C     Initialise DIAG_STATIS common bloc Line 333  C     Initialise DIAG_STATIS common bloc
333  C     Fill Diagnostics Common Block with Namelist Info  C     Fill Diagnostics Common Block with Namelist Info
334        diagSt_ascii = (.NOT. diagSt_mnc) .OR. outputTypesInclusive        diagSt_ascii = (.NOT. diagSt_mnc) .OR. outputTypesInclusive
335    
336    C-    Region mask correspondence table:
337    C     note: this table should be build when regions are defined ;
338    C     for now, simpler just to read it from namelist in data.diagnostics
339          j = 0
340          DO k = 1,rdimLoc
341           IF ( set_regMask(k).NE.0 .OR. val_regMask(k).NE.0. ) THEN
342             j = j+1
343             IF ( j.LE.nRegions ) THEN
344               diagSt_kRegMsk(j) = set_regMask(k)
345               diagSt_vRegMsk(j) = val_regMask(k)
346             ENDIF
347           ENDIF
348          ENDDO
349          IF ( j.GT.nRegions ) THEN
350             WRITE(msgBuf,'(2A,I3,A)') 'DIAGNOSTICS_READPARMS: ',
351         &   'set_regMask & val_regMask lists assume at least',j,' regions'
352             CALL PRINT_ERROR( msgBuf , myThid )
353             WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_READPARMS: ',
354         &   'Need to increase "nRegions" in DIAGNOSTICS_SIZE.h'
355             CALL PRINT_ERROR( msgBuf , myThid )
356             STOP 'ABNORMAL END: S/R DIAGNOSTICS_READPARMS'
357          ENDIF
358    
359        DO l = 1,ldimLoc        DO l = 1,ldimLoc
360         iLen = ILNBLNK(stat_fname(l))         iLen = ILNBLNK(stat_fname(l))
361  C-     Only lists with non-empty file name (iLen>0) are considered  C-     Only lists with non-empty file name (iLen>0) are considered
# Line 294  C-     Only lists with non-empty file na Line 372  C-     Only lists with non-empty file na
372           DO k=1,rdimLoc           DO k=1,rdimLoc
373             j = stat_region(k,l)             j = stat_region(k,l)
374             IF ( j.NE.UNSET_I .AND. j.GE.0 .AND. j.LE.nRegions ) THEN             IF ( j.NE.UNSET_I .AND. j.GE.0 .AND. j.LE.nRegions ) THEN
375                IF ( diagSt_region(j,n).EQ.0 ) THEN
376               diagSt_region(j,n) = 1               diagSt_region(j,n) = 1
377               regionCount = regionCount + 1               regionCount = regionCount + 1
378                ELSE
379                 WRITE(msgBuf,'(2A,I3,2A)')
380         &        'DIAGNOSTICS_READPARMS:',
381         &        ' in list l=', l, ', stat_fname: ', stat_fname(l)
382                 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
383         &                           SQUEEZE_RIGHT , myThid )
384                 WRITE(msgBuf,'(A,I3,A)')
385         &        'DIAGNOSTICS_READPARMS: region=',j,
386         &        ' can only be selected once => ignore 2nd selection'
387                 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
388         &                           SQUEEZE_RIGHT , myThid )
389                ENDIF
390             ELSEIF ( j.NE.UNSET_I ) THEN             ELSEIF ( j.NE.UNSET_I ) THEN
391               WRITE(msgBuf,'(A,I3,A,I3,2A)')               WRITE(msgBuf,'(A,I3,A,I3,2A)')
392       &       'DIAGNOSTICS_READPARMS: region=',j,       &       'DIAGNOSTICS_READPARMS: region=',j,
# Line 361  C     Echo History List Data Structure Line 452  C     Echo History List Data Structure
452       & '-----------------------------------------------------'       & '-----------------------------------------------------'
453        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)        CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
454        DO n = 1,nlists        DO n = 1,nlists
455          WRITE(msgBuf,'(2a)') 'Creating Output Stream: ',fnames(n)          WRITE(msgBuf,'(2a)') 'Creating Output Stream: ', fnames(n)
456          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
457          WRITE(msgBuf,'(2(A,F17.6))') 'Frequency : ',freq(n),          WRITE(msgBuf,'(2(A,F17.6))') 'Output Frequency:', freq(n),
458       &                               ' ; Phase: ', phase(n)       &                               ' ; Phase: ', phase(n)
459          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
460            WRITE(msgBuf,'(2(A,F17.6),A,I3)')
461         &    ' Averaging Freq.:', averageFreq(n),
462         &    ' , Phase: ', averagePhase(n), ' , Cycle:', averageCycle(n)
463            CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
464          IF ( nlevels(n).EQ.-1 ) THEN          IF ( nlevels(n).EQ.-1 ) THEN
465            WRITE(msgBuf,'(A,A)') ' Levels:    ','will be set later'            WRITE(msgBuf,'(A,A)') ' Levels:    ','will be set later'
466            CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)            CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
# Line 376  C     Echo History List Data Structure Line 471  C     Echo History List Data Structure
471            CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)            CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
472           ENDDO           ENDDO
473          ENDIF          ENDIF
474          WRITE(msgBuf,*) 'Fields:   ',(' ',flds(l,n),l=1,nfields(n))          DO nf = 1,nfields(n),10
475            m = MIN(nfields(n),nf+9)
476            WRITE(msgBuf,*) 'Fields:   ',(' ',flds(l,n),l=nf,m)
477          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
478            ENDDO
479        ENDDO        ENDDO
480        WRITE(msgBuf,'(A)')        WRITE(msgBuf,'(A)')
481       & '-----------------------------------------------------'       & '-----------------------------------------------------'
# Line 389  C     Echo History List Data Structure Line 487  C     Echo History List Data Structure
487          WRITE(msgBuf,'(2a)') 'Creating Stats. Output Stream: ',          WRITE(msgBuf,'(2a)') 'Creating Stats. Output Stream: ',
488       &                       diagSt_Fname(n)       &                       diagSt_Fname(n)
489          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
490          WRITE(msgBuf,'(2(A,F17.6))') 'Frequency : ',diagSt_freq(n),          WRITE(msgBuf,'(2(A,F17.6))') 'Output Frequency:',
491       &                               ' ; Phase: ', diagSt_phase(n)       &               diagSt_freq(n), ' ; Phase: ', diagSt_phase(n)
492          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
493          WRITE(msgBuf,'(A)') ' Regions : '          WRITE(msgBuf,'(A)') ' Regions : '
494          l = 12          l = 12

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.18

  ViewVC Help
Powered by ViewVC 1.1.22