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

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

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

revision 1.3 by jmc, Sun Jun 26 18:23:03 2005 UTC revision 1.4 by jmc, Mon Jun 5 18:15:53 2006 UTC
# Line 50  C     == Local variables == Line 50  C     == Local variables ==
50        LOGICAL flag        LOGICAL flag
51    
52        CHARACTER*8 parms1        CHARACTER*8 parms1
       CHARACTER*3 mate_index  
53        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
54    
55    
# Line 66  C--   Seach for the same diag (with same Line 65  C--   Seach for the same diag (with same
65        flag = .TRUE.        flag = .TRUE.
66        DO l=1,listId        DO l=1,listId
67         IF (flag .AND. freq(l) .EQ. freq(listId)         IF (flag .AND. freq(l) .EQ. freq(listId)
68       &          .AND. phase(l).EQ.phase(listId) ) THEN       &          .AND. phase(l).EQ.phase(listId)
69         &          .AND. averageFreq(l) .EQ.averageFreq(listId)
70         &          .AND. averagePhase(l).EQ.averagePhase(listId)
71         &          .AND. averageCycle(l).EQ.averageCycle(listId) ) THEN
72          DO k=1,MIN(nActive(l),numperlist)          DO k=1,MIN(nActive(l),numperlist)
73           IF (flag .AND. jdiag(k,l).GT.0) THEN           IF (flag .AND. jdiag(k,l).GT.0) THEN
74            IF ( cdiag(ndId).EQ.cdiag(jdiag(k,l)) ) THEN            IF ( cdiag(ndId).EQ.cdiag(jdiag(k,l)) ) THEN
# Line 83  C-    diagnostics already set ; use the Line 85  C-    diagnostics already set ; use the
85  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
86    
87        IF ( flag ) THEN        IF ( flag ) THEN
88          IF (ndiagmx+kdiag(ndId).GT.numdiags) THEN          idiag(mId,listId) = ndiagmx + 1
89            ndiagmx = ndiagmx + kdiag(ndId)*averageCycle(listId)
90            IF ( ndiagmx.GT.numdiags ) THEN
91           WRITE(msgBuf,'(A,I4,1X,A)')           WRITE(msgBuf,'(A,I4,1X,A)')
92       &    'SETDIAG: Not enough space for Diagnostic #',ndId,cdiag(ndId)       &    'SETDIAG: Not enough space for Diagnostic #',ndId,cdiag(ndId)
93           CALL PRINT_MESSAGE(msgBuf, errUnit, SQUEEZE_RIGHT, myThid)           CALL PRINT_MESSAGE(msgBuf, errUnit, SQUEEZE_RIGHT, myThid)
94          ELSE          ELSE
95           WRITE(msgBuf,'(A,I3,A,I4,1X,A)') 'SETDIAG: Allocate',           WRITE(msgBuf,'(A,2(I3,A),I4,1X,A)') 'SETDIAG: Allocate',
96       &    kdiag(ndId), ' Levels for Diagnostic #', ndId, cdiag(ndId)       &                   kdiag(ndId), ' x', averageCycle(listId),
97         &                ' Levels for Diagnostic #', ndId, cdiag(ndId)
98           CALL PRINT_MESSAGE(msgBuf, stdUnit, SQUEEZE_RIGHT, myThid)           CALL PRINT_MESSAGE(msgBuf, stdUnit, SQUEEZE_RIGHT, myThid)
99          ENDIF          ENDIF
         idiag(mId,listId) = ndiagmx + 1  
         ndiagmx = ndiagmx + kdiag(ndId)  
100        ELSE        ELSE
101          WRITE(msgBuf,'(A,I4,1X,2A)')          WRITE(msgBuf,'(A,I4,1X,2A)')
102       &    '- WARNING - SETDIAG: Diagnostic #', ndId, cdiag(ndId),       &    '- WARNING - SETDIAG: Diagnostic #', ndId, cdiag(ndId),
# Line 107  c Check for Counter Diagnostic Line 110  c Check for Counter Diagnostic
110  c ----------------------------  c ----------------------------
111        mate = 0        mate = 0
112        IF ( parms1(5:5).EQ.'C') THEN        IF ( parms1(5:5).EQ.'C') THEN
113          mate_index = parms1(6:8)          READ(parms1,'(5X,I3)') mate
         READ (mate_index,'(I3)') mate  
114    
115  C--     Seach for the same diag (with same freq) to see if already set  C--     Seach for the same diag (with same freq) to see if already set
116          flag = .TRUE.          flag = .TRUE.
117          DO l=1,listId          DO l=1,listId
118           IF (flag .AND. freq(l).EQ.freq(listId)           IF (flag .AND. freq(l) .EQ.freq(listId)
119       &            .AND. phase(l).EQ.phase(listId) ) THEN       &            .AND. phase(l).EQ.phase(listId)
120         &            .AND. averageFreq(l) .EQ.averageFreq(listId)
121         &            .AND. averagePhase(l).EQ.averagePhase(listId)
122         &            .AND. averageCycle(l).EQ.averageCycle(listId) ) THEN
123            DO k=1,MIN(nActive(l),numperlist)            DO k=1,MIN(nActive(l),numperlist)
124             IF (flag .AND. jdiag(k,l).GT.0) THEN             IF (flag .AND. jdiag(k,l).GT.0) THEN
125              IF (cdiag(mate).EQ.cdiag(jdiag(k,l)) ) THEN              IF (cdiag(mate).EQ.cdiag(jdiag(k,l)) ) THEN
# Line 128  C-    diagnostics already set ; use the Line 133  C-    diagnostics already set ; use the
133          ENDDO          ENDDO
134    
135          IF ( flag ) THEN          IF ( flag ) THEN
136            IF (ndiagmx+kdiag(mate).GT.numdiags) THEN            mdiag(mId,listId) = ndiagmx + 1
137              ndiagmx = ndiagmx + kdiag(mate)*averageCycle(listId)
138              IF ( ndiagmx.GT.numdiags ) THEN
139             WRITE(msgBuf,'(A,I4,1X,A)')             WRITE(msgBuf,'(A,I4,1X,A)')
140       &      'SETDIAG: Not enough space for Counter Diagnostic #',       &      'SETDIAG: Not enough space for Counter Diagnostic #',
141       &      mate, cdiag(mate)       &      mate, cdiag(mate)
142             CALL PRINT_MESSAGE(msgBuf, errUnit, SQUEEZE_RIGHT, myThid)             CALL PRINT_MESSAGE(msgBuf, errUnit, SQUEEZE_RIGHT, myThid)
143            ELSE            ELSE
144             WRITE(msgBuf,'(A,I3,A,I4,1X,A)') 'SETDIAG: Allocate',             WRITE(msgBuf,'(A,2(I3,A),I4,1X,A)') 'SETDIAG: Allocate',
145       &     kdiag(mate), ' Levels for Count.Diag #', mate, cdiag(mate)       &                     kdiag(mate), ' x', averageCycle(listId),
146         &                  ' Levels for Count.Diag #', mate, cdiag(mate)
147             CALL PRINT_MESSAGE(msgBuf, stdUnit, SQUEEZE_RIGHT, myThid)             CALL PRINT_MESSAGE(msgBuf, stdUnit, SQUEEZE_RIGHT, myThid)
148            ENDIF            ENDIF
           mdiag(mId,listId) = ndiagmx + 1  
           ndiagmx = ndiagmx + kdiag(mate)  
149          ELSE          ELSE
150            WRITE(msgBuf,'(A,I4,1X,2A)')            WRITE(msgBuf,'(A,I4,1X,2A)')
151       &    '- NOTE - SETDIAG: Counter Diagnostic #', mate, cdiag(mate),       &    '- NOTE - SETDIAG: Counter Diagnostic #', mate, cdiag(mate),

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

  ViewVC Help
Powered by ViewVC 1.1.22