/[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.15 by jmc, Mon Jan 23 22:24:28 2006 UTC revision 1.19 by jmc, Sun Dec 24 20:20:59 2006 UTC
# Line 32  C     kdimLoc :: Max Number of Levels (i Line 32  C     kdimLoc :: Max Number of Levels (i
32  C     fdimLoc :: Max Number of Fields (in data.diagnostics)  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  C--   for regional-statistics
42  C     lev_regMask(n) :: region-mask levels that define the region "n"  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  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
# Line 50  C     stat_fname  :: List of statistics Line 53  C     stat_fname  :: List of statistics
53        PARAMETER ( fdimLoc = 2*numperlist )        PARAMETER ( fdimLoc = 2*numperlist )
54        PARAMETER ( rdimLoc = nRegions+21 )        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 60  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 lev_regMask(rdimLoc)        INTEGER set_regMask(rdimLoc)
69        _RS     val_regMask(rdimLoc)        _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    
# Line 80  C--   per level statistics output: Line 86  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, diagSt_mnc,       &     stat_fname, diagSt_mnc,
89       &     lev_regMask, val_regMask,       &     set_regMask, val_regMask,
90       &     diagSt_regMaskFile, nLevRegMskFile       &     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.
# Line 113  C       eight spaces:        12345678 Line 122  C       eight spaces:        12345678
122        diag_pickup_write_mnc = .FALSE.        diag_pickup_write_mnc = .FALSE.
123    
124        diagSt_regMaskFile = ' '        diagSt_regMaskFile = ' '
125        nLevRegMskFile = 0        nSetRegMskFile = 0
126        DO k = 1,rdimLoc        DO k = 1,rdimLoc
127          lev_regMask(k) = 0          set_regMask(k) = 0
128          val_regMask(k) = 0.          val_regMask(k) = 0.
129        ENDDO        ENDDO
130        DO l = 1,ldimLoc        DO l = 1,ldimLoc
# Line 163  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 177  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 209  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 )
258                WRITE(msgBuf,'(2A,I3,A,F3.0)') 'DIAGNOSTICS_READPARMS: ',                WRITE(msgBuf,'(2A,I3,A,F8.0)') 'DIAGNOSTICS_READPARMS: ',
259       &         'when trying to add level(k=', k, ' )=', levels(k,l)       &         'when trying to add level(k=', k, ' )=', levels(k,l)
260                CALL PRINT_ERROR( msgBuf , myThid )                CALL PRINT_ERROR( msgBuf , myThid )
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 273  c        write(6,*) 'list summary:',n,nf Line 306  c        write(6,*) 'list summary:',n,nf
306  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
307    
308  C-    Initialise DIAG_STATS_REGMASK common block (except the mask)  C-    Initialise DIAG_STATS_REGMASK common block (except the mask)
309        nLevRegMask = 0        nSetRegMask = 0
310        DO j = 0,nRegions        DO j = 0,nRegions
311          diagSt_kRegMsk(j) = 0          diagSt_kRegMsk(j) = 0
312          diagSt_vRegMsk(j) = 0.          diagSt_vRegMsk(j) = 0.
# Line 305  C     note: this table should be build w Line 338  C     note: this table should be build w
338  C     for now, simpler just to read it from namelist in data.diagnostics  C     for now, simpler just to read it from namelist in data.diagnostics
339        j = 0        j = 0
340        DO k = 1,rdimLoc        DO k = 1,rdimLoc
341         IF ( lev_regMask(k).NE.0 .OR. val_regMask(k).NE.0. ) THEN         IF ( set_regMask(k).NE.0 .OR. val_regMask(k).NE.0. ) THEN
342           j = j+1           j = j+1
343           IF ( j.LE.nRegions ) THEN           IF ( j.LE.nRegions ) THEN
344             diagSt_kRegMsk(j) = lev_regMask(k)             diagSt_kRegMsk(j) = set_regMask(k)
345             diagSt_vRegMsk(j) = val_regMask(k)             diagSt_vRegMsk(j) = val_regMask(k)
346           ENDIF           ENDIF
347         ENDIF         ENDIF
348        ENDDO        ENDDO
349        IF ( j.GT.nRegions ) THEN        IF ( j.GT.nRegions ) THEN
350           WRITE(msgBuf,'(2A,I3,A)') 'DIAGNOSTICS_READPARMS: ',           WRITE(msgBuf,'(2A,I3,A)') 'DIAGNOSTICS_READPARMS: ',
351       &   'lev_regMask & val_regMask lists assume at least',j,' regions'       &   'set_regMask & val_regMask lists assume at least',j,' regions'
352           CALL PRINT_ERROR( msgBuf , myThid )           CALL PRINT_ERROR( msgBuf , myThid )
353           WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_READPARMS: ',           WRITE(msgBuf,'(2A)') 'DIAGNOSTICS_READPARMS: ',
354       &   'Need to increase "nRegions" in DIAGNOSTICS_SIZE.h'       &   'Need to increase "nRegions" in DIAGNOSTICS_SIZE.h'
# Line 419  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)
467            ELSEIF ( fflags(n)(2:2).EQ.'P' ) THEN
468             DO l=1,nlevels(n),10
469              m = MIN(nlevels(n),l+9)
470              WRITE(msgBuf,'(A,1P10E10.3)')' interp:  ', (levs(k,n),k=l,m)
471              CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
472             ENDDO
473          ELSE          ELSE
474           DO l=1,nlevels(n),20           DO l=1,nlevels(n),20
475            m = MIN(nlevels(n),l+19)            m = MIN(nlevels(n),l+19)
# Line 434  C     Echo History List Data Structure Line 477  C     Echo History List Data Structure
477            CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)            CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
478           ENDDO           ENDDO
479          ENDIF          ENDIF
480          WRITE(msgBuf,*) 'Fields:   ',(' ',flds(l,n),l=1,nfields(n))          DO nf = 1,nfields(n),10
481          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)            m = MIN(nfields(n),nf+9)
482              WRITE(msgBuf,'(21A)') 'Fields:   ',(' ',flds(l,n),l=nf,m)
483              CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
484            ENDDO
485        ENDDO        ENDDO
486        WRITE(msgBuf,'(A)')        WRITE(msgBuf,'(A)')
487       & '-----------------------------------------------------'       & '-----------------------------------------------------'
# Line 447  C     Echo History List Data Structure Line 493  C     Echo History List Data Structure
493          WRITE(msgBuf,'(2a)') 'Creating Stats. Output Stream: ',          WRITE(msgBuf,'(2a)') 'Creating Stats. Output Stream: ',
494       &                       diagSt_Fname(n)       &                       diagSt_Fname(n)
495          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
496          WRITE(msgBuf,'(2(A,F17.6))') 'Frequency : ',diagSt_freq(n),          WRITE(msgBuf,'(2(A,F17.6))') 'Output Frequency:',
497       &                               ' ; Phase: ', diagSt_phase(n)       &               diagSt_freq(n), ' ; Phase: ', diagSt_phase(n)
498          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)          CALL PRINT_MESSAGE( msgBuf, stdUnit,SQUEEZE_RIGHT, myThid)
499          WRITE(msgBuf,'(A)') ' Regions : '          WRITE(msgBuf,'(A)') ' Regions : '
500          l = 12          l = 12

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.19

  ViewVC Help
Powered by ViewVC 1.1.22