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

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

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


Revision 1.1 - (show annotations) (download)
Mon Jan 23 22:31:11 2006 UTC (18 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58l_post, checkpoint58e_post, mitgcm_mapl_00, checkpoint58u_post, checkpoint58w_post, checkpoint63d, checkpoint63e, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint60, checkpoint61, checkpoint62, checkpoint63, checkpoint58r_post, checkpoint58n_post, checkpoint58x_post, checkpoint58t_post, checkpoint58h_post, checkpoint58q_post, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint58j_post, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint59j, checkpoint59, checkpoint58f_post, checkpoint58d_post, checkpoint58c_post, checkpoint58a_post, checkpoint58i_post, checkpoint58g_post, checkpoint58o_post, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint58y_post, checkpoint58k_post, checkpoint58v_post, checkpoint58s_post, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint58p_post, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y, checkpoint58b_post, checkpoint58m_post
- split diagstats_local.F file in 3 ;
- compute statistics for each selected region.

1 C $Header: $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: DIAGSTATS_CALC
8 C !INTERFACE:
9 SUBROUTINE DIAGSTATS_CALC(
10 O statArr,
11 I inpArr, frcArr, scaleFact, power, useFract,
12 I regId, regMskVal,
13 I nStats,sizI1,sizI2,sizJ1,sizJ2, iRun,jRun,
14 I regMask, arrMask, arrhFac, arrArea,
15 I arrDr, specialVal, exclSpVal, useWeight,
16 I myThid )
17
18 C !DESCRIPTION:
19 C Compute statistics for this tile, level, region
20
21 C !USES:
22 IMPLICIT NONE
23
24 #include "EEPARAMS.h"
25 #include "SIZE.h"
26
27 C !INPUT/OUTPUT PARAMETERS:
28 C == Routine Arguments ==
29 C statArr :: output statistics array
30 C inpArr :: input field array to process (compute stats & add to statFld)
31 C frcArr :: fraction used for weighted-average diagnostics
32 C scaleFact :: scaling factor
33 C power :: option to fill-in with the field square (power=2)
34 C useFract :: if True, use fraction-weight
35 C regId :: region number Id
36 C regMskVal :: region-mask identificator value
37 C (point i,j belong to region "regId" <=> regMask(i,j) = regMskVal)
38 C nStats :: size of output array: statArr
39 C sizI1,sizI2 :: size of inpArr array: 1rst index range (min,max)
40 C sizJ1,sizJ2 :: size of inpArr array: 2nd index range (min,max)
41 C iRun,jRun :: range of 1rst & 2nd index to process
42 C regMask :: regional mask
43 C arrMask :: mask for this input array
44 C arrhFac :: weight factor (horizontally varying)
45 C arrArea :: Area weighting factor
46 C arrDr :: uniform weighting factor
47 C specialVal :: special value in input array (to exclude if exclSpVal=T)
48 C exclSpVal :: if T, exclude "specialVal" in input array
49 C useWeight :: use weight factor "arrhFac"
50 Cc k,bi,bj :: level and tile indices used for weighting (mask,area ...)
51 Cc parsFld :: parser field with characteristics of the diagnostics
52 C myThid :: my Thread Id number
53 INTEGER nStats,sizI1,sizI2,sizJ1,sizJ2
54 INTEGER iRun, jRun
55 _RL statArr(0:nStats)
56 _RL inpArr (sizI1:sizI2,sizJ1:sizJ2)
57 _RL frcArr (sizI1:sizI2,sizJ1:sizJ2)
58 _RL scaleFact
59 INTEGER power
60 LOGICAL useFract
61 INTEGER regId
62 _RS regMskVal
63 _RS regMask(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
64 _RS arrMask(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
65 _RS arrhFac(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
66 _RS arrArea(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
67 _RL arrDr
68 _RL specialVal
69 LOGICAL exclSpVal
70 LOGICAL useWeight
71 INTEGER myThid
72 CEOP
73
74 C !LOCAL VARIABLES:
75 C i,j :: loop indices
76 INTEGER i, j, n
77 INTEGER im, ix
78 _RL tmpVol
79 _RL tmpFld
80 _RL tmpFac
81
82 im = nStats - 1
83 ix = nStats
84 DO n=0,nStats
85 statArr(n) = 0.
86 ENDDO
87 tmpFac = scaleFact
88 IF ( power.EQ.2) tmpFac = scaleFact*scaleFact
89
90 IF ( regId.EQ.0 .AND. useFract .AND. exclSpVal ) THEN
91
92 DO j = 1,jRun
93 DO i = 1,iRun
94 IF ( arrMask(i,j).NE.0. .AND. frcArr(i,j).NE.0.
95 & .AND. inpArr(i,j).NE.specialVal ) THEN
96 IF ( power.EQ.2) THEN
97 tmpFld = tmpFac*inpArr(i,j)*inpArr(i,j)
98 ELSE
99 tmpFld = tmpFac*inpArr(i,j)
100 ENDIF
101 IF ( statArr(0).EQ.0. ) THEN
102 statArr(im) = tmpFld
103 statArr(ix) = tmpFld
104 ELSE
105 statArr(im) = MIN(tmpFld,statArr(im))
106 statArr(ix) = MAX(tmpFld,statArr(ix))
107 ENDIF
108 IF ( useWeight ) THEN
109 tmpVol = arrDr*arrhFac(i,j)*arrArea(i,j)*frcArr(i,j)
110 ELSE
111 tmpVol = arrDr*arrArea(i,j)*frcArr(i,j)
112 ENDIF
113 statArr(0) = statArr(0) + tmpVol
114 statArr(1) = statArr(1) + tmpVol*tmpFld
115 statArr(2) = statArr(2) + tmpVol*tmpFld*tmpFld
116 ENDIF
117 ENDDO
118 ENDDO
119
120 ELSEIF ( regId.EQ.0 .AND. useFract ) THEN
121
122 DO j = 1,jRun
123 DO i = 1,iRun
124 IF ( arrMask(i,j).NE.0. .AND. frcArr(i,j).NE.0. ) THEN
125 IF ( power.EQ.2) THEN
126 tmpFld = tmpFac*inpArr(i,j)*inpArr(i,j)
127 ELSE
128 tmpFld = tmpFac*inpArr(i,j)
129 ENDIF
130 IF ( statArr(0).EQ.0. ) THEN
131 statArr(im) = tmpFld
132 statArr(ix) = tmpFld
133 ELSE
134 statArr(im) = MIN(tmpFld,statArr(im))
135 statArr(ix) = MAX(tmpFld,statArr(ix))
136 ENDIF
137 IF ( useWeight ) THEN
138 tmpVol = arrDr*arrhFac(i,j)*arrArea(i,j)*frcArr(i,j)
139 ELSE
140 tmpVol = arrDr*arrArea(i,j)*frcArr(i,j)
141 ENDIF
142 statArr(0) = statArr(0) + tmpVol
143 statArr(1) = statArr(1) + tmpVol*tmpFld
144 statArr(2) = statArr(2) + tmpVol*tmpFld*tmpFld
145 ENDIF
146 ENDDO
147 ENDDO
148
149 ELSEIF ( regId.EQ.0 .AND. exclSpVal ) THEN
150
151 DO j = 1,jRun
152 DO i = 1,iRun
153 IF ( arrMask(i,j).NE.0.
154 & .AND. inpArr(i,j).NE.specialVal ) THEN
155 IF ( power.EQ.2) THEN
156 tmpFld = tmpFac*inpArr(i,j)*inpArr(i,j)
157 ELSE
158 tmpFld = tmpFac*inpArr(i,j)
159 ENDIF
160 IF ( statArr(0).EQ.0. ) THEN
161 statArr(im) = tmpFld
162 statArr(ix) = tmpFld
163 ELSE
164 statArr(im) = MIN(tmpFld,statArr(im))
165 statArr(ix) = MAX(tmpFld,statArr(ix))
166 ENDIF
167 IF ( useWeight ) THEN
168 tmpVol = arrDr*arrhFac(i,j)*arrArea(i,j)
169 ELSE
170 tmpVol = arrDr*arrArea(i,j)
171 ENDIF
172 statArr(0) = statArr(0) + tmpVol
173 statArr(1) = statArr(1) + tmpVol*tmpFld
174 statArr(2) = statArr(2) + tmpVol*tmpFld*tmpFld
175 ENDIF
176 ENDDO
177 ENDDO
178
179 ELSEIF ( regId.EQ.0 ) THEN
180
181 DO j = 1,jRun
182 DO i = 1,iRun
183 IF ( arrMask(i,j).NE.0. ) THEN
184 IF ( power.EQ.2) THEN
185 tmpFld = tmpFac*inpArr(i,j)*inpArr(i,j)
186 ELSE
187 tmpFld = tmpFac*inpArr(i,j)
188 ENDIF
189 IF ( statArr(0).EQ.0. ) THEN
190 statArr(im) = tmpFld
191 statArr(ix) = tmpFld
192 ELSE
193 statArr(im) = MIN(tmpFld,statArr(im))
194 statArr(ix) = MAX(tmpFld,statArr(ix))
195 ENDIF
196 IF ( useWeight ) THEN
197 tmpVol = arrDr*arrhFac(i,j)*arrArea(i,j)
198 ELSE
199 tmpVol = arrDr*arrArea(i,j)
200 ENDIF
201 statArr(0) = statArr(0) + tmpVol
202 statArr(1) = statArr(1) + tmpVol*tmpFld
203 statArr(2) = statArr(2) + tmpVol*tmpFld*tmpFld
204 ENDIF
205 ENDDO
206 ENDDO
207
208 ELSEIF ( useFract .AND. exclSpVal ) THEN
209
210 DO j = 1,jRun
211 DO i = 1,iRun
212 IF ( arrMask(i,j).NE.0. .AND. frcArr(i,j).NE.0.
213 & .AND. inpArr(i,j).NE.specialVal
214 & .AND. regMask(i,j).EQ.regMskVal ) THEN
215 IF ( power.EQ.2) THEN
216 tmpFld = tmpFac*inpArr(i,j)*inpArr(i,j)
217 ELSE
218 tmpFld = tmpFac*inpArr(i,j)
219 ENDIF
220 IF ( statArr(0).EQ.0. ) THEN
221 statArr(im) = tmpFld
222 statArr(ix) = tmpFld
223 ELSE
224 statArr(im) = MIN(tmpFld,statArr(im))
225 statArr(ix) = MAX(tmpFld,statArr(ix))
226 ENDIF
227 IF ( useWeight ) THEN
228 tmpVol = arrDr*arrhFac(i,j)*arrArea(i,j)*frcArr(i,j)
229 ELSE
230 tmpVol = arrDr*arrArea(i,j)*frcArr(i,j)
231 ENDIF
232 statArr(0) = statArr(0) + tmpVol
233 statArr(1) = statArr(1) + tmpVol*tmpFld
234 statArr(2) = statArr(2) + tmpVol*tmpFld*tmpFld
235 ENDIF
236 ENDDO
237 ENDDO
238
239 ELSEIF ( useFract ) THEN
240
241 DO j = 1,jRun
242 DO i = 1,iRun
243 IF ( arrMask(i,j).NE.0. .AND. frcArr(i,j).NE.0.
244 & .AND. regMask(i,j).EQ.regMskVal ) THEN
245 IF ( power.EQ.2) THEN
246 tmpFld = tmpFac*inpArr(i,j)*inpArr(i,j)
247 ELSE
248 tmpFld = tmpFac*inpArr(i,j)
249 ENDIF
250 IF ( statArr(0).EQ.0. ) THEN
251 statArr(im) = tmpFld
252 statArr(ix) = tmpFld
253 ELSE
254 statArr(im) = MIN(tmpFld,statArr(im))
255 statArr(ix) = MAX(tmpFld,statArr(ix))
256 ENDIF
257 IF ( useWeight ) THEN
258 tmpVol = arrDr*arrhFac(i,j)*arrArea(i,j)*frcArr(i,j)
259 ELSE
260 tmpVol = arrDr*arrArea(i,j)*frcArr(i,j)
261 ENDIF
262 statArr(0) = statArr(0) + tmpVol
263 statArr(1) = statArr(1) + tmpVol*tmpFld
264 statArr(2) = statArr(2) + tmpVol*tmpFld*tmpFld
265 ENDIF
266 ENDDO
267 ENDDO
268
269 ELSEIF ( exclSpVal ) THEN
270
271 DO j = 1,jRun
272 DO i = 1,iRun
273 IF ( arrMask(i,j).NE.0.
274 & .AND. inpArr(i,j).NE.specialVal
275 & .AND. regMask(i,j).EQ.regMskVal ) THEN
276 IF ( power.EQ.2) THEN
277 tmpFld = tmpFac*inpArr(i,j)*inpArr(i,j)
278 ELSE
279 tmpFld = tmpFac*inpArr(i,j)
280 ENDIF
281 IF ( statArr(0).EQ.0. ) THEN
282 statArr(im) = tmpFld
283 statArr(ix) = tmpFld
284 ELSE
285 statArr(im) = MIN(tmpFld,statArr(im))
286 statArr(ix) = MAX(tmpFld,statArr(ix))
287 ENDIF
288 IF ( useWeight ) THEN
289 tmpVol = arrDr*arrhFac(i,j)*arrArea(i,j)
290 ELSE
291 tmpVol = arrDr*arrArea(i,j)
292 ENDIF
293 statArr(0) = statArr(0) + tmpVol
294 statArr(1) = statArr(1) + tmpVol*tmpFld
295 statArr(2) = statArr(2) + tmpVol*tmpFld*tmpFld
296 ENDIF
297 ENDDO
298 ENDDO
299
300 ELSE
301
302 DO j = 1,jRun
303 DO i = 1,iRun
304 IF ( arrMask(i,j).NE.0.
305 & .AND. regMask(i,j).EQ.regMskVal ) THEN
306 IF ( power.EQ.2) THEN
307 tmpFld = tmpFac*inpArr(i,j)*inpArr(i,j)
308 ELSE
309 tmpFld = tmpFac*inpArr(i,j)
310 ENDIF
311 IF ( statArr(0).EQ.0. ) THEN
312 statArr(im) = tmpFld
313 statArr(ix) = tmpFld
314 ELSE
315 statArr(im) = MIN(tmpFld,statArr(im))
316 statArr(ix) = MAX(tmpFld,statArr(ix))
317 ENDIF
318 IF ( useWeight ) THEN
319 tmpVol = arrDr*arrhFac(i,j)*arrArea(i,j)
320 ELSE
321 tmpVol = arrDr*arrArea(i,j)
322 ENDIF
323 statArr(0) = statArr(0) + tmpVol
324 statArr(1) = statArr(1) + tmpVol*tmpFld
325 statArr(2) = statArr(2) + tmpVol*tmpFld*tmpFld
326 ENDIF
327 ENDDO
328 ENDDO
329
330 ENDIF
331
332 RETURN
333 END

  ViewVC Help
Powered by ViewVC 1.1.22