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

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

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


Revision 1.15 - (show annotations) (download)
Mon Dec 13 21:55:48 2004 UTC (19 years, 4 months ago) by jmc
Branch: MAIN
Changes since 1.14: +116 -154 lines
new S/R diagnostics_fill (replace fill_diagnostics):
 * look through the short list of active diag. (instead of through the long
   list of all available diagnostics) ;
 * create function DIAGNOSTICS_IS_ON to tell if a diagnostics is active

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_utils.F,v 1.14 2004/07/26 21:16:18 molod Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP 0
8 C !ROUTINE: GETDIAG
9
10 C !INTERFACE:
11 SUBROUTINE GETDIAG (levreal,ipoint,undef,qtmp,myThid)
12
13 C !DESCRIPTION:
14 C Retrieve averaged model diagnostic
15
16 C !USES:
17 implicit none
18 #include "EEPARAMS.h"
19 #include "SIZE.h"
20 #include "DIAGNOSTICS_SIZE.h"
21 #include "DIAGNOSTICS.h"
22 CEOP
23
24 #ifdef ALLOW_FIZHI
25 #include "fizhi_SIZE.h"
26 #else
27 integer Nrphys
28 parameter (Nrphys=0)
29 #endif
30
31 C INPUT:
32 C levreal .... Diagnostic LEVEL
33 C ipoint ..... DIAGNOSTIC NUMBER FROM MENU
34 C undef ..... UNDEFINED VALUE
35 C bi ..... X-direction process(or) number
36 C bj ..... Y-direction process(or) number
37 _RL levreal
38 integer myThid,ipoint
39 _RL undef
40
41 C OUTPUT:
42 C qtmp ..... AVERAGED DIAGNOSTIC QUANTITY
43 _RL qtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+Nrphys,nSx,nSy)
44
45 _RL factor
46 integer i,j,ipnt,klev
47 integer bi,bj
48 integer lev
49
50 if (ipoint.ge.1) then
51 lev = NINT(levreal)
52
53 klev = kdiag(ipoint)
54 if (klev.ge.lev) then
55 ipnt = idiag(ipoint) + lev - 1
56 factor = 1.0
57 if (ndiag(ipoint).ne.0) factor = 1.0/ndiag(ipoint)
58
59 do bj=myByLo(myThid), myByHi(myThid)
60 do bi=myBxLo(myThid), myBxHi(myThid)
61
62 do j = 1,sNy
63 do i = 1,sNx
64 if ( qdiag(i,j,ipnt,bi,bj) .le. undef ) then
65 qtmp(i,j,lev,bi,bj) = qdiag(i,j,ipnt,bi,bj)*factor
66 else
67 qtmp(i,j,lev,bi,bj) = undef
68 endif
69 enddo
70 enddo
71
72 enddo
73 enddo
74
75 endif
76 endif
77
78 RETURN
79 END
80
81 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
82 CBOP 0
83 C !ROUTINE: GETDIAG2
84
85 C !INTERFACE:
86 SUBROUTINE GETDIAG2 (levreal,ipoint,undef,qtmp,myThid)
87
88 C !DESCRIPTION:
89 C***********************************************************************
90 C PURPOSE
91 C Retrieve averaged model diagnostic
92 C INPUT:
93 C levreal .... Diagnostic LEVEL
94 C ipoint ..... DIAGNOSTIC NUMBER FROM MENU
95 C undef ..... UNDEFINED VALUE
96 C
97 C OUTPUT:
98 C qtmp ..... AVERAGED DIAGNOSTIC QUANTITY
99 C
100 C***********************************************************************
101
102 C !USES:
103 implicit none
104 #include "EEPARAMS.h"
105 #include "SIZE.h"
106 #include "DIAGNOSTICS_SIZE.h"
107 #include "DIAGNOSTICS.h"
108 CEOP
109
110 #ifdef ALLOW_FIZHI
111 #include "fizhi_SIZE.h"
112 #else
113 integer Nrphys
114 parameter (Nrphys=0)
115 #endif
116
117 _RL levreal
118 integer myThid,ipoint
119 _RL undef
120 _RL qtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+Nrphys,nSx,nSy)
121
122 integer i,j,ipnt,klev
123 integer bi,bj
124 integer lev
125
126 if (ipoint.ge.1) then
127 lev = NINT(levreal)
128
129 klev = kdiag(ipoint)
130 if (klev.ge.lev) then
131 ipnt = idiag(ipoint) + lev - 1
132
133 do bj=myByLo(myThid), myByHi(myThid)
134 do bi=myBxLo(myThid), myBxHi(myThid)
135
136 do j = 1,sNy
137 do i = 1,sNx
138 if ( qdiag(i,j,ipnt,bi,bj) .le. undef ) then
139 qtmp(i,j,lev,bi,bj) = qdiag(i,j,ipnt,bi,bj)
140 else
141 qtmp(i,j,lev,bi,bj) = undef
142 endif
143 enddo
144 enddo
145
146 enddo
147 enddo
148
149 endif
150 endif
151
152 RETURN
153 END
154
155 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
156
157 subroutine clrindx (listnum, myThid)
158 C***********************************************************************
159 C
160 C PURPOSE
161 C DRIVER TO CLEAR DIAGNOSTICS SPECIFIED IN DIAGNOSTIC INDEX LIST
162 C
163 C ARGUMENT DESCRIPTION
164 C listnum .... diagnostics list number
165 C
166 C***********************************************************************
167
168 implicit none
169 #include "EEPARAMS.h"
170 #include "SIZE.h"
171 #include "DIAGNOSTICS_SIZE.h"
172 #include "DIAGNOSTICS.h"
173
174 integer myThid, listnum
175
176 integer m, n
177 character*8 parms1
178 character*3 mate_index
179 integer mate
180
181 do n=1,nfields(listnum)
182 do m=1,ndiagt
183 if( flds(n,listnum).eq.cdiag(m) .and. idiag(m).ne.0 ) then
184 call clrdiag (m, myThid)
185
186 c Check for Counter Diagnostic
187 c ----------------------------
188 parms1 = gdiag(m)(1:8)
189 if ( parms1(5:5).eq.'C' ) then
190 mate_index = parms1(6:8)
191 read (mate_index,'(I3)') mate
192 call clrdiag (mate, myThid)
193 endif
194 endif
195 enddo
196 enddo
197
198 RETURN
199 END
200
201
202 subroutine clrdiag (index, myThid)
203 C***********************************************************************
204 C PURPOSE
205 C ZERO OUT MODEL DIAGNOSTIC ARRAY ELEMENTS
206 C***********************************************************************
207
208 implicit none
209 #include "EEPARAMS.h"
210 #include "SIZE.h"
211 #include "DIAGNOSTICS_SIZE.h"
212 #include "DIAGNOSTICS.h"
213
214 integer myThid, index
215
216 integer bi,bj
217 integer i,j,k
218
219 C **********************************************************************
220 C **** SET DIAGNOSTIC AND COUNTER TO ZERO ****
221 C **********************************************************************
222
223 do bj=myByLo(myThid), myByHi(myThid)
224 do bi=myBxLo(myThid), myBxHi(myThid)
225 do k = 1,kdiag(index)
226 do j = 1-OLy,sNy+OLy
227 do i = 1-OLx,sNx+OLx
228 qdiag(i,j,idiag(index)+k-1,bi,bj) = 0.0
229 enddo
230 enddo
231 enddo
232 enddo
233 enddo
234
235 ndiag(index) = 0
236
237 RETURN
238 END
239
240 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
241
242 CBOP 0
243 C !ROUTINE: DIAGNOSTICS_IS_ON
244
245 C !INTERFACE:
246 LOGICAL FUNCTION DIAGNOSTICS_IS_ON( diagName, myThid )
247
248 C !DESCRIPTION:
249 C *==========================================================*
250 C | FUNCTION DIAGNOSTIC_IS_ON
251 C | o Return TRUE if diagnostics "diagName" is Active
252 C *==========================================================*
253
254 C !USES:
255 IMPLICIT NONE
256 #include "EEPARAMS.h"
257 #include "SIZE.h"
258 #include "DIAGNOSTICS_SIZE.h"
259 #include "DIAGNOSTICS.h"
260
261 C !INPUT PARAMETERS:
262 C diagName :: diagnostic identificator name (8 characters long)
263 C myThid :: my thread Id number
264 CHARACTER*8 diagName
265 INTEGER myThid
266 CEOP
267
268 C !LOCAL VARIABLES:
269 INTEGER j,n,m
270
271 DIAGNOSTICS_IS_ON = .FALSE.
272 DO n=1,nlists
273 DO m=1,nActive(n)
274 IF ( diagName.EQ.flds(m,n) ) THEN
275 j = jdiag(m,n)
276 IF (idiag(j).NE.0 ) DIAGNOSTICS_IS_ON = .TRUE.
277 ENDIF
278 ENDDO
279 ENDDO
280
281 RETURN
282 END

  ViewVC Help
Powered by ViewVC 1.1.22