File indexing completed on 2024-05-11 05:10:24 UTC
view on githubraw file Latest commit 41c4545f on 2024-05-10 15:00:41 UTC
dd6d146759 Jean*0001 #include "DIAG_OPTIONS.h"
0002
0003
0004
0005
0006
0007
41c4545f8f Jean*0008 SUBROUTINE DIAGNOSTICS_SWITCH_ONOFF(
0009 I seqFlag, myTime, myIter, myThid )
dd6d146759 Jean*0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 IMPLICIT NONE
0024 #include "SIZE.h"
0025 #include "EEPARAMS.h"
0026 #include "PARAMS.h"
0027 #include "DIAGNOSTICS_SIZE.h"
0028 #include "DIAGNOSTICS.h"
0029
0030
41c4545f8f Jean*0031
0032
0033
0034
0035
0036
0037 INTEGER seqFlag
02545dbccf Jean*0038 _RL myTime
dd6d146759 Jean*0039 INTEGER myIter
0040 INTEGER myThid
0041
0042
0043
0044
0045
666b944083 Jean*0046 CHARACTER*(MAX_LEN_MBUF) msgBuf
509dcf5e56 Jean*0047
3ae5f90260 Jean*0048 INTEGER m, n, nd
0049 INTEGER bi, bj, ip, iSp
509dcf5e56 Jean*0050 LOGICAL time4SnapShot
0051 _RL phiSec, freqSec
666b944083 Jean*0052 INTEGER nInterval
0053 _RL xInterval
3e5de6a370 Jean*0054 LOGICAL dBugFlag
80df109dfc Jean*0055 INTEGER dBugUnit
509dcf5e56 Jean*0056 #ifdef ALLOW_FIZHI
9a18ea0ab4 Jean*0057 LOGICAL ALARM2NEXT
0058 EXTERNAL ALARM2NEXT
666b944083 Jean*0059 CHARACTER *9 tagname
509dcf5e56 Jean*0060 #endif
0061
0062 LOGICAL DIFF_PHASE_MULTIPLE
0063 EXTERNAL DIFF_PHASE_MULTIPLE
dd6d146759 Jean*0064
0065
0066
41c4545f8f Jean*0067 dBugFlag = diag_dBugLevel.GE.debLevE .AND. myThid.EQ.1
80df109dfc Jean*0068 dBugUnit = errorMessageUnit
666b944083 Jean*0069
ab43bc12c4 Jean*0070
0071 IF ( myIter.EQ.nIter0 ) THEN
0072
e01144d3ad Jean*0073 _BARRIER
0074 _BEGIN_MASTER(myThid)
ab43bc12c4 Jean*0075 diag_pkgStatus = ready2fillDiags
0076 _END_MASTER(myThid)
e01144d3ad Jean*0077 _BARRIER
ab43bc12c4 Jean*0078
0079
0080 ENDIF
0081
509dcf5e56 Jean*0082
dd6d146759 Jean*0083 DO n = 1,nlists
509dcf5e56 Jean*0084
0085 IF ( freq(n).LT.0. ) THEN
0086
0087
0088 freqSec = freq(n)
0089 phiSec = phase(n)
333e96bf9c Andr*0090 time4SnapShot = DIFF_PHASE_MULTIPLE( phiSec, freqSec,
9a18ea0ab4 Jean*0091 & myTime, deltaTClock )
463845a645 Andr*0092 #ifdef ALLOW_FIZHI
666b944083 Jean*0093 IF ( useFIZHI ) THEN
0094 WRITE(tagname,'(A,I2.2)')'diagtag',n
9a18ea0ab4 Jean*0095 time4SnapShot = ALARM2NEXT(tagname,deltaT)
666b944083 Jean*0096 ENDIF
463845a645 Andr*0097 #endif
9a18ea0ab4 Jean*0098 #ifdef ALLOW_CAL
0099 IF ( useCAL ) THEN
0100 CALL CAL_TIME2DUMP( phiSec, freqSec, deltaTClock,
0101 U time4SnapShot,
0102 I myTime, myIter, myThid )
0103 ENDIF
0104 #endif /* ALLOW_CAL */
463845a645 Andr*0105
3ae5f90260 Jean*0106 DO bj=myByLo(myThid), myByHi(myThid)
0107 DO bi=myBxLo(myThid), myBxHi(myThid)
0108 IF ( time4SnapShot ) THEN
0109
0110 DO m=1,nActive(n)
b38beaf3c1 Jean*0111
3ae5f90260 Jean*0112
0113 ip = idiag(m,n)
0114 IF (ip.GT.0) ndiag(ip,bi,bj) = 0
0115 ENDDO
0116 ELSE
0117
0118 DO m=1,nActive(n)
b38beaf3c1 Jean*0119
3ae5f90260 Jean*0120
0121 ip = idiag(m,n)
0122 IF (ip.GT.0) ndiag(ip,bi,bj) = -1
0123 ENDDO
0124 ENDIF
0125 ENDDO
0126 ENDDO
dd6d146759 Jean*0127
666b944083 Jean*0128
dd6d146759 Jean*0129 ENDIF
666b944083 Jean*0130
0131 IF ( averageCycle(n).GT.1 ) THEN
0132
9a18ea0ab4 Jean*0133 xInterval = myTime + deltaTClock*0.5 _d 0 - averagePhase(n)
666b944083 Jean*0134 xInterval = xInterval / averageFreq(n)
0135 IF ( xInterval.GE.0. ) THEN
0136 nInterval = INT(xInterval)
0137 ELSE
0138 nInterval = 1 + INT( -xInterval/FLOAT(averageCycle(n)) )
0139 nInterval = nInterval*averageCycle(n) + INT(xInterval) - 1
0140 ENDIF
0141 nInterval = MOD(nInterval,averageCycle(n))
0142
0143
0144 IF (dBugFlag.AND.pdiag(n,1,1).NE.nInterval)
e129400813 Jean*0145 & WRITE(dBugUnit,'(A,I8,3(A,I4),F17.6)')
80df109dfc Jean*0146 & 'DIAG_SWITCH_ONOFF: at it=', myIter, ', list:', n,
0147 & ' switch', pdiag(n,1,1),' ->', nInterval, xInterval
666b944083 Jean*0148 IF ( nInterval.LT.0 .OR. nInterval.GE.averageCycle(n) ) THEN
e129400813 Jean*0149 WRITE(msgBuf,'(2A,I3,A,I4)') 'DIAGNOSTICS_SWITCH_ONOFF:',
666b944083 Jean*0150 & ' error setting pdiag(n=',n,') to:', nInterval
0151 CALL PRINT_ERROR( msgBuf , myThid )
e129400813 Jean*0152 WRITE(msgBuf,'(2A,I4,A,F17.6)') 'DIAGNOSTICS_SWITCH_ONOFF:',
666b944083 Jean*0153 & ' cycle=', averageCycle(n), ', xInt=', xInterval
0154 CALL PRINT_ERROR( msgBuf , myThid )
0155 STOP 'ABNORMAL END: S/R DIAGNOSTICS_SWITCH_ONOFF'
0156 ENDIF
0157
0158 DO bj=myByLo(myThid), myByHi(myThid)
0159 DO bi=myBxLo(myThid), myBxHi(myThid)
0160 pdiag(n,bi,bj) = nInterval
0161 ENDDO
0162 ENDDO
0163
0164 ENDIF
0165
dd6d146759 Jean*0166 ENDDO
0167
3e5de6a370 Jean*0168
0169
0170 DO n = 1,diagSt_nbLists
0171
0172 IF ( diagSt_freq(n).LT.0. ) THEN
0173
0174
41c4545f8f Jean*0175 dBugFlag = diag_dBugLevel.GE.debLevE
3e5de6a370 Jean*0176
0177 freqSec = diagSt_freq(n)
0178 phiSec = diagSt_phase(n)
0179 time4SnapShot = DIFF_PHASE_MULTIPLE( phiSec, freqSec,
9a18ea0ab4 Jean*0180 & myTime, deltaTClock )
3e5de6a370 Jean*0181
0ca8304c4f Jean*0182 #ifdef ALLOW_FIZHI
666b944083 Jean*0183 IF ( useFIZHI ) THEN
0184 WRITE(tagname,'(A,I2.2)')'diagStg',n
9a18ea0ab4 Jean*0185 time4SnapShot = ALARM2NEXT(tagname,deltaT)
666b944083 Jean*0186 ENDIF
0ca8304c4f Jean*0187 #endif
9a18ea0ab4 Jean*0188 #ifdef ALLOW_CAL
0189 IF ( useCAL ) THEN
0190 CALL CAL_TIME2DUMP( phiSec, freqSec, deltaTClock,
0191 U time4SnapShot,
0192 I myTime, myIter, myThid )
0193 ENDIF
0194 #endif /* ALLOW_CAL */
0ca8304c4f Jean*0195
3e5de6a370 Jean*0196 DO bj=myByLo(myThid), myByHi(myThid)
0197 DO bi=myBxLo(myThid), myBxHi(myThid)
0198 dBugFlag = dBugFlag.AND.(bi.EQ.1.AND.bj.EQ.1.AND.myThid.EQ.1)
0199 IF ( time4SnapShot ) THEN
0200
0201 DO m=1,diagSt_nbActv(n)
3ae5f90260 Jean*0202 iSp = iSdiag(m,n)
0203 IF (iSp.GT.0) THEN
0204 nd = jSdiag(m,n)
0205 IF (dBugFlag.AND.qSdiag(0,0,iSp,bi,bj).NE. 0.)
e129400813 Jean*0206 & WRITE(dBugUnit,'(A,I8,A,I6,3A,1PE10.3,A,I3)')
80df109dfc Jean*0207 & 'DIAG_SWITCH_ONOFF: at it=', myIter, ' diag:', nd,
0208 & ' ',cdiag(nd),' :',qSdiag(0,0,iSp,bi,bj),' ->', 0
3ae5f90260 Jean*0209 qSdiag(0,0,iSp,bi,bj) = 0.
0210 ENDIF
3e5de6a370 Jean*0211 ENDDO
0212 ELSE
0213
0214 DO m=1,diagSt_nbActv(n)
3ae5f90260 Jean*0215 iSp = iSdiag(m,n)
0216 IF (iSp.GT.0) THEN
0217 nd = jSdiag(m,n)
0218 IF (dBugFlag.AND.qSdiag(0,0,iSp,bi,bj).NE.-1.)
e129400813 Jean*0219 & WRITE(dBugUnit,'(A,I8,A,I6,3A,1PE10.3,A,I3)')
80df109dfc Jean*0220 & 'DIAG_SWITCH_ONOFF: at it=', myIter, ' diag:', nd,
0221 & ' ',cdiag(nd),' :',qSdiag(0,0,iSp,bi,bj),' ->', -1
3ae5f90260 Jean*0222 qSdiag(0,0,iSp,bi,bj) = -1.
0223 ENDIF
3e5de6a370 Jean*0224 ENDDO
0225 ENDIF
0226 ENDDO
0227 ENDDO
0228
0229 ENDIF
0230 ENDDO
0231
dd6d146759 Jean*0232 RETURN
0233 END