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

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

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

revision 1.12 by jmc, Sun Jun 26 16:51:49 2005 UTC revision 1.18 by jmc, Thu Jun 7 17:13:32 2012 UTC
# Line 41  CEOP Line 41  CEOP
41  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
42  C      newIter :: future iteration number  C      newIter :: future iteration number
43  C      j,m,n   :: loop index  C      j,m,n   :: loop index
44  c     CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
45  c     INTEGER newIter  c     INTEGER newIter
46        INTEGER m, n, nd        INTEGER m, n, nd
47        INTEGER bi, bj, ip, iSp        INTEGER bi, bj, ip, iSp
48        LOGICAL time4SnapShot        LOGICAL time4SnapShot
49        _RL     phiSec, freqSec        _RL     phiSec, freqSec
50          INTEGER nInterval
51          _RL     xInterval
52        LOGICAL dBugFlag        LOGICAL dBugFlag
53          INTEGER dBugUnit
54  #ifdef ALLOW_FIZHI  #ifdef ALLOW_FIZHI
55        logical alarm2,alarm2next        LOGICAL  ALARM2NEXT
56        character *9 tagname        EXTERNAL ALARM2NEXT
57          CHARACTER *9 tagname
58  #endif  #endif
59    
60        LOGICAL  DIFF_PHASE_MULTIPLE        LOGICAL  DIFF_PHASE_MULTIPLE
# Line 58  c     INTEGER newIter Line 62  c     INTEGER newIter
62    
63  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
64    
65          dBugFlag = debugLevel.GE.debLevE .AND. myThid.EQ.1
66          dBugUnit = errorMessageUnit
67    
68  c     newIter = 1 + myIter  c     newIter = 1 + myIter
69        DO n = 1,nlists        DO n = 1,nlists
70    
# Line 67  C--    Select diagnostics list that uses Line 74  C--    Select diagnostics list that uses
74          freqSec = freq(n)          freqSec = freq(n)
75          phiSec = phase(n)          phiSec = phase(n)
76          time4SnapShot = DIFF_PHASE_MULTIPLE( phiSec, freqSec,          time4SnapShot = DIFF_PHASE_MULTIPLE( phiSec, freqSec,
77       &                                       myTime, deltaTclock )       &                                       myTime, deltaTClock )
78  #ifdef ALLOW_FIZHI  #ifdef ALLOW_FIZHI
79          if( useFIZHI) then          IF ( useFIZHI ) THEN
80           write(tagname,'(A,I2.2)')'diagtag',n           WRITE(tagname,'(A,I2.2)')'diagtag',n
81           time4SnapShot = alarm2next(tagname,deltaT)           time4SnapShot = ALARM2NEXT(tagname,deltaT)
82          endif          ENDIF
83  #endif  #endif
84    #ifdef ALLOW_CAL
85            IF ( useCAL ) THEN
86              CALL CAL_TIME2DUMP( phiSec, freqSec, deltaTClock,
87         U                        time4SnapShot,
88         I                        myTime, myIter, myThid )
89            ENDIF
90    #endif /* ALLOW_CAL */
91    
92          DO bj=myByLo(myThid), myByHi(myThid)          DO bj=myByLo(myThid), myByHi(myThid)
93           DO bi=myBxLo(myThid), myBxHi(myThid)           DO bi=myBxLo(myThid), myBxHi(myThid)
# Line 97  c             IF (ndiag(nd).NE.-1) WRITE Line 111  c             IF (ndiag(nd).NE.-1) WRITE
111           ENDDO           ENDDO
112          ENDDO          ENDDO
113    
114    C--    list with instantaneous output: end
115         ENDIF         ENDIF
116    
117           IF ( averageCycle(n).GT.1 ) THEN
118    C--    Select diagnostics list that uses periodic averaging
119            xInterval = myTime + deltaTClock*0.5 _d 0 - averagePhase(n)
120            xInterval = xInterval / averageFreq(n)
121            IF ( xInterval.GE.0. ) THEN
122              nInterval = INT(xInterval)
123            ELSE
124              nInterval = 1 + INT( -xInterval/FLOAT(averageCycle(n)) )
125              nInterval = nInterval*averageCycle(n) + INT(xInterval) - 1
126            ENDIF
127            nInterval = MOD(nInterval,averageCycle(n))
128    
129    C-     check future value of pdiag:
130            IF (dBugFlag.AND.pdiag(n,1,1).NE.nInterval)
131         &    WRITE(dBugUnit,'(A,I8,3(A,I4),F17.6)')
132         &     'DIAG_SWITCH_ONOFF: at it=', myIter, ', list:', n,
133         &     ' switch', pdiag(n,1,1),' ->', nInterval, xInterval
134            IF ( nInterval.LT.0 .OR. nInterval.GE.averageCycle(n) ) THEN
135              WRITE(msgBuf,'(2A,I3,A,I4)') 'DIAGNOSTICS_SWITCH_ONOFF:',
136         &       ' error setting pdiag(n=',n,') to:', nInterval
137              CALL PRINT_ERROR( msgBuf , myThid )
138              WRITE(msgBuf,'(2A,I4,A,F17.6)') 'DIAGNOSTICS_SWITCH_ONOFF:',
139         &       ' cycle=', averageCycle(n), ', xInt=', xInterval
140              CALL PRINT_ERROR( msgBuf , myThid )
141              STOP 'ABNORMAL END: S/R DIAGNOSTICS_SWITCH_ONOFF'
142            ENDIF
143    
144            DO bj=myByLo(myThid), myByHi(myThid)
145             DO bi=myBxLo(myThid), myBxHi(myThid)
146               pdiag(n,bi,bj) = nInterval
147             ENDDO
148            ENDDO
149    C--    list with periodic averaging: end
150           ENDIF
151    
152        ENDDO        ENDDO
153    
154  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
# Line 107  C---+----1----+----2----+----3----+----4 Line 158  C---+----1----+----2----+----3----+----4
158         IF ( diagSt_freq(n).LT.0. ) THEN         IF ( diagSt_freq(n).LT.0. ) THEN
159  C--    Select diagnostics list that uses instantaneous output  C--    Select diagnostics list that uses instantaneous output
160    
161          dBugFlag = debugLevel.GT.debLevB          dBugFlag = debugLevel.GE.debLevE
162    
163          freqSec = diagSt_freq(n)          freqSec = diagSt_freq(n)
164          phiSec = diagSt_phase(n)          phiSec = diagSt_phase(n)
165          time4SnapShot = DIFF_PHASE_MULTIPLE( phiSec, freqSec,          time4SnapShot = DIFF_PHASE_MULTIPLE( phiSec, freqSec,
166       &                                       myTime, deltaTclock )       &                                       myTime, deltaTClock )
167    
168  #ifdef ALLOW_FIZHI  #ifdef ALLOW_FIZHI
169          if( useFIZHI) then          IF ( useFIZHI ) THEN
170           write(tagname,'(A,I2.2)')'diagStg',n           WRITE(tagname,'(A,I2.2)')'diagStg',n
171           time4SnapShot = alarm2(tagname)           time4SnapShot = ALARM2NEXT(tagname,deltaT)
172          endif          ENDIF
173  #endif  #endif
174    #ifdef ALLOW_CAL
175            IF ( useCAL ) THEN
176              CALL CAL_TIME2DUMP( phiSec, freqSec, deltaTClock,
177         U                        time4SnapShot,
178         I                        myTime, myIter, myThid )
179            ENDIF
180    #endif /* ALLOW_CAL */
181    
182          DO bj=myByLo(myThid), myByHi(myThid)          DO bj=myByLo(myThid), myByHi(myThid)
183           DO bi=myBxLo(myThid), myBxHi(myThid)           DO bi=myBxLo(myThid), myBxHi(myThid)
# Line 131  C--     switch ON diagnostics of output- Line 189  C--     switch ON diagnostics of output-
189               IF (iSp.GT.0) THEN               IF (iSp.GT.0) THEN
190                 nd = jSdiag(m,n)                 nd = jSdiag(m,n)
191                 IF (dBugFlag.AND.qSdiag(0,0,iSp,bi,bj).NE. 0.)                 IF (dBugFlag.AND.qSdiag(0,0,iSp,bi,bj).NE. 0.)
192       &          WRITE(0,'(I8,I4,3A,1PE10.3,A,I3)') myIter,       &          WRITE(dBugUnit,'(A,I8,A,I6,3A,1PE10.3,A,I3)')
193       &           nd,' ',cdiag(nd),' :',qSdiag(0,0,iSp,bi,bj),' ->', 0       &           'DIAG_SWITCH_ONOFF: at it=', myIter, ' diag:', nd,
194         &           ' ',cdiag(nd),' :',qSdiag(0,0,iSp,bi,bj),' ->', 0
195                 qSdiag(0,0,iSp,bi,bj) = 0.                 qSdiag(0,0,iSp,bi,bj) = 0.
196               ENDIF               ENDIF
197              ENDDO              ENDDO
# Line 143  C--     switch OFF diagnostics of output Line 202  C--     switch OFF diagnostics of output
202               IF (iSp.GT.0) THEN               IF (iSp.GT.0) THEN
203                 nd = jSdiag(m,n)                 nd = jSdiag(m,n)
204                 IF (dBugFlag.AND.qSdiag(0,0,iSp,bi,bj).NE.-1.)                 IF (dBugFlag.AND.qSdiag(0,0,iSp,bi,bj).NE.-1.)
205       &          WRITE(0,'(I8,I4,3A,1PE10.3,A,I3)') myIter,       &          WRITE(dBugUnit,'(A,I8,A,I6,3A,1PE10.3,A,I3)')
206       &           nd,' ',cdiag(nd),' :',qSdiag(0,0,iSp,bi,bj),' ->',-1       &           'DIAG_SWITCH_ONOFF: at it=', myIter, ' diag:', nd,
207         &           ' ',cdiag(nd),' :',qSdiag(0,0,iSp,bi,bj),' ->', -1
208                 qSdiag(0,0,iSp,bi,bj) = -1.                 qSdiag(0,0,iSp,bi,bj) = -1.
209               ENDIF               ENDIF
210              ENDDO              ENDDO

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

  ViewVC Help
Powered by ViewVC 1.1.22