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

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

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


Revision 1.3 - (show annotations) (download)
Sun Jun 26 18:23:03 2005 UTC (18 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57t_post, checkpoint57o_post, checkpoint58e_post, checkpoint57m_post, checkpoint57s_post, checkpoint57k_post, checkpoint57y_post, checkpoint57y_pre, checkpoint57v_post, checkpoint57r_post, checkpoint58, checkpoint58f_post, checkpoint57x_post, checkpoint57n_post, checkpoint58d_post, checkpoint58c_post, checkpoint57w_post, checkpoint57p_post, checkpint57u_post, checkpoint58a_post, checkpoint57q_post, checkpoint57z_post, checkpoint57j_post, checkpoint58b_post, checkpoint57l_post
Changes since 1.2: +2 -1 lines
fix previous modification.

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_setdiag.F,v 1.2 2005/06/26 16:51:49 jmc Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: DIAGNOSTICS_SETDIAG
8 C !INTERFACE:
9 SUBROUTINE DIAGNOSTICS_SETDIAG(
10 O mate,
11 U ndiagmx,
12 I mId, listId, ndId, myThid )
13
14 C !DESCRIPTION: \bv
15 C *==================================================================
16 C | S/R DIAGNOSTICS_SETDIAG
17 C | o activate diagnostic "ndId":
18 C | set pointer locations for this diagnostic ;
19 C | look for a counter mate and set it
20 C *==================================================================
21 C \ev
22
23 C !USES:
24 IMPLICIT NONE
25
26 C == Global variables ===
27 #include "EEPARAMS.h"
28 #include "SIZE.h"
29 #include "DIAGNOSTICS_SIZE.h"
30 #include "DIAGNOSTICS.h"
31
32 C !INPUT/OUTPUT PARAMETERS:
33 C == Routine arguments ==
34 C mate :: counter-mate number in available diagnostics list
35 C ndiagmx :: current space allocated in storage array
36 C mId :: current field index in list "listId"
37 C listId :: current list number that contains field "mId"
38 C ndId :: diagnostic number in available diagnostics list
39 C myThid :: Thread number for this instance of the routine.
40 INTEGER mate
41 INTEGER ndiagmx
42 INTEGER mId, listId, ndId
43 INTEGER myThid
44 CEOP
45
46 C !LOCAL VARIABLES:
47 C == Local variables ==
48 INTEGER stdUnit, errUnit
49 INTEGER k, l
50 LOGICAL flag
51
52 CHARACTER*8 parms1
53 CHARACTER*3 mate_index
54 CHARACTER*(MAX_LEN_MBUF) msgBuf
55
56
57 C **********************************************************************
58 C **** SET POINTERS FOR DIAGNOSTIC NUM ****
59 C **********************************************************************
60
61 parms1 = gdiag(ndId)(1:8)
62 stdUnit = standardMessageUnit
63 errUnit = errorMessageUnit
64
65 C-- Seach for the same diag (with same freq) to see if already set
66 flag = .TRUE.
67 DO l=1,listId
68 IF (flag .AND. freq(l) .EQ. freq(listId)
69 & .AND. phase(l).EQ.phase(listId) ) THEN
70 DO k=1,MIN(nActive(l),numperlist)
71 IF (flag .AND. jdiag(k,l).GT.0) THEN
72 IF ( cdiag(ndId).EQ.cdiag(jdiag(k,l)) ) THEN
73 C- diagnostics already set ; use the same slot:
74 flag = .FALSE.
75 idiag(mId,listId) = -ABS(idiag(k,l))
76 mdiag(mId,listId) = mdiag(k,l)
77 ENDIF
78 ENDIF
79 ENDDO
80 ENDIF
81 ENDDO
82
83 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
84
85 IF ( flag ) THEN
86 IF (ndiagmx+kdiag(ndId).GT.numdiags) THEN
87 WRITE(msgBuf,'(A,I4,1X,A)')
88 & 'SETDIAG: Not enough space for Diagnostic #',ndId,cdiag(ndId)
89 CALL PRINT_MESSAGE(msgBuf, errUnit, SQUEEZE_RIGHT, myThid)
90 ELSE
91 WRITE(msgBuf,'(A,I3,A,I4,1X,A)') 'SETDIAG: Allocate',
92 & kdiag(ndId), ' Levels for Diagnostic #', ndId, cdiag(ndId)
93 CALL PRINT_MESSAGE(msgBuf, stdUnit, SQUEEZE_RIGHT, myThid)
94 ENDIF
95 idiag(mId,listId) = ndiagmx + 1
96 ndiagmx = ndiagmx + kdiag(ndId)
97 ELSE
98 WRITE(msgBuf,'(A,I4,1X,2A)')
99 & '- WARNING - SETDIAG: Diagnostic #', ndId, cdiag(ndId),
100 & ' has already been set'
101 CALL PRINT_MESSAGE(msgBuf, errUnit, SQUEEZE_RIGHT, myThid)
102 mate = 0
103 RETURN
104 ENDIF
105
106 c Check for Counter Diagnostic
107 c ----------------------------
108 mate = 0
109 IF ( parms1(5:5).EQ.'C') THEN
110 mate_index = parms1(6:8)
111 READ (mate_index,'(I3)') mate
112
113 C-- Seach for the same diag (with same freq) to see if already set
114 flag = .TRUE.
115 DO l=1,listId
116 IF (flag .AND. freq(l).EQ.freq(listId)
117 & .AND. phase(l).EQ.phase(listId) ) THEN
118 DO k=1,MIN(nActive(l),numperlist)
119 IF (flag .AND. jdiag(k,l).GT.0) THEN
120 IF (cdiag(mate).EQ.cdiag(jdiag(k,l)) ) THEN
121 C- diagnostics already set ; use the same slot:
122 flag = .FALSE.
123 mdiag(mId,listId) = ABS(idiag(k,l))
124 ENDIF
125 ENDIF
126 ENDDO
127 ENDIF
128 ENDDO
129
130 IF ( flag ) THEN
131 IF (ndiagmx+kdiag(mate).GT.numdiags) THEN
132 WRITE(msgBuf,'(A,I4,1X,A)')
133 & 'SETDIAG: Not enough space for Counter Diagnostic #',
134 & mate, cdiag(mate)
135 CALL PRINT_MESSAGE(msgBuf, errUnit, SQUEEZE_RIGHT, myThid)
136 ELSE
137 WRITE(msgBuf,'(A,I3,A,I4,1X,A)') 'SETDIAG: Allocate',
138 & kdiag(mate), ' Levels for Count.Diag #', mate, cdiag(mate)
139 CALL PRINT_MESSAGE(msgBuf, stdUnit, SQUEEZE_RIGHT, myThid)
140 ENDIF
141 mdiag(mId,listId) = ndiagmx + 1
142 ndiagmx = ndiagmx + kdiag(mate)
143 ELSE
144 WRITE(msgBuf,'(A,I4,1X,2A)')
145 & '- NOTE - SETDIAG: Counter Diagnostic #', mate, cdiag(mate),
146 & ' has already been set'
147 CALL PRINT_MESSAGE(msgBuf, stdUnit, SQUEEZE_RIGHT, myThid)
148 mate = 0
149 ENDIF
150 ENDIF
151
152 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
153 RETURN
154 END

  ViewVC Help
Powered by ViewVC 1.1.22