/[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.4 - (show annotations) (download)
Mon Jun 5 18:15:53 2006 UTC (17 years, 11 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58l_post, mitgcm_mapl_00, checkpoint58u_post, checkpoint58w_post, checkpoint58r_post, checkpoint58n_post, checkpoint58x_post, checkpoint58t_post, checkpoint58h_post, checkpoint58q_post, checkpoint58j_post, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint59j, checkpoint59, checkpoint58i_post, checkpoint58g_post, checkpoint58o_post, checkpoint58y_post, checkpoint58k_post, checkpoint58v_post, checkpoint58s_post, checkpoint58p_post, checkpoint58m_post
Changes since 1.3: +23 -17 lines
Implement periodic averaging diagnostics (e.g., mean seasonal cycle,
 mean diurnal cycle)

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_setdiag.F,v 1.3 2005/06/26 18:23:03 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*(MAX_LEN_MBUF) msgBuf
54
55
56 C **********************************************************************
57 C **** SET POINTERS FOR DIAGNOSTIC NUM ****
58 C **********************************************************************
59
60 parms1 = gdiag(ndId)(1:8)
61 stdUnit = standardMessageUnit
62 errUnit = errorMessageUnit
63
64 C-- Seach for the same diag (with same freq) to see if already set
65 flag = .TRUE.
66 DO l=1,listId
67 IF (flag .AND. freq(l) .EQ. freq(listId)
68 & .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)
73 IF (flag .AND. jdiag(k,l).GT.0) THEN
74 IF ( cdiag(ndId).EQ.cdiag(jdiag(k,l)) ) THEN
75 C- diagnostics already set ; use the same slot:
76 flag = .FALSE.
77 idiag(mId,listId) = -ABS(idiag(k,l))
78 mdiag(mId,listId) = mdiag(k,l)
79 ENDIF
80 ENDIF
81 ENDDO
82 ENDIF
83 ENDDO
84
85 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
86
87 IF ( flag ) THEN
88 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)')
92 & 'SETDIAG: Not enough space for Diagnostic #',ndId,cdiag(ndId)
93 CALL PRINT_MESSAGE(msgBuf, errUnit, SQUEEZE_RIGHT, myThid)
94 ELSE
95 WRITE(msgBuf,'(A,2(I3,A),I4,1X,A)') 'SETDIAG: Allocate',
96 & kdiag(ndId), ' x', averageCycle(listId),
97 & ' Levels for Diagnostic #', ndId, cdiag(ndId)
98 CALL PRINT_MESSAGE(msgBuf, stdUnit, SQUEEZE_RIGHT, myThid)
99 ENDIF
100 ELSE
101 WRITE(msgBuf,'(A,I4,1X,2A)')
102 & '- WARNING - SETDIAG: Diagnostic #', ndId, cdiag(ndId),
103 & ' has already been set'
104 CALL PRINT_MESSAGE(msgBuf, errUnit, SQUEEZE_RIGHT, myThid)
105 mate = 0
106 RETURN
107 ENDIF
108
109 c Check for Counter Diagnostic
110 c ----------------------------
111 mate = 0
112 IF ( parms1(5:5).EQ.'C') THEN
113 READ(parms1,'(5X,I3)') mate
114
115 C-- Seach for the same diag (with same freq) to see if already set
116 flag = .TRUE.
117 DO l=1,listId
118 IF (flag .AND. freq(l) .EQ.freq(listId)
119 & .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)
124 IF (flag .AND. jdiag(k,l).GT.0) THEN
125 IF (cdiag(mate).EQ.cdiag(jdiag(k,l)) ) THEN
126 C- diagnostics already set ; use the same slot:
127 flag = .FALSE.
128 mdiag(mId,listId) = ABS(idiag(k,l))
129 ENDIF
130 ENDIF
131 ENDDO
132 ENDIF
133 ENDDO
134
135 IF ( flag ) THEN
136 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)')
140 & 'SETDIAG: Not enough space for Counter Diagnostic #',
141 & mate, cdiag(mate)
142 CALL PRINT_MESSAGE(msgBuf, errUnit, SQUEEZE_RIGHT, myThid)
143 ELSE
144 WRITE(msgBuf,'(A,2(I3,A),I4,1X,A)') 'SETDIAG: Allocate',
145 & kdiag(mate), ' x', averageCycle(listId),
146 & ' Levels for Count.Diag #', mate, cdiag(mate)
147 CALL PRINT_MESSAGE(msgBuf, stdUnit, SQUEEZE_RIGHT, myThid)
148 ENDIF
149 ELSE
150 WRITE(msgBuf,'(A,I4,1X,2A)')
151 & '- NOTE - SETDIAG: Counter Diagnostic #', mate, cdiag(mate),
152 & ' has already been set'
153 CALL PRINT_MESSAGE(msgBuf, stdUnit, SQUEEZE_RIGHT, myThid)
154 mate = 0
155 ENDIF
156 ENDIF
157
158 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
159 RETURN
160 END

  ViewVC Help
Powered by ViewVC 1.1.22