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

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

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


Revision 1.12 - (show annotations) (download)
Mon Aug 25 21:59:18 2014 UTC (9 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65c, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.11: +19 -13 lines
- fix missing interior mask (use with OBCS) in 3-D fields statistics;
- pass grid location (Center, U or V pt) to S/R DIAGSTATS_CALC for
  regional Stats diagnostics (now extended to region edges).

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagstats_local.F,v 1.11 2014/08/08 19:29:48 jmc Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: DIAGSTATS_LOCAL
8 C !INTERFACE:
9 SUBROUTINE DIAGSTATS_LOCAL(
10 U statFld,
11 I inpFld, frcFld,
12 I scaleFact, power, useFract, sizF,
13 I sizI1,sizI2,sizJ1,sizJ2,sizK,sizTx,sizTy,
14 I iRun,jRun,kIn,biIn,bjIn,
15 I k,bi,bj, bibjFlg, region2fill,
16 I ndId, parsFld, myThid )
17
18 C !DESCRIPTION:
19 C Update array statFld
20 C by adding statistics over the range [1:iRun],[1:jRun]
21 C from input field array inpFld
22 C- note:
23 C a) this S/R should not see DIAGNOSTICS pkg commons blocks (in DIAGNOSTICS.h)
24 C b) for main grid variables, get area & weigting factors (to compute global mean)
25 C from the main common blocks.
26 C c) for other type of grids, call a specifics S/R which include its own
27 C grid common blocks
28
29 C !USES:
30 IMPLICIT NONE
31
32 #include "EEPARAMS.h"
33 #include "SIZE.h"
34 #include "DIAGNOSTICS_SIZE.h"
35 #include "DIAGSTATS_REGIONS.h"
36 #include "PARAMS.h"
37 #include "GRID.h"
38 c #include "SURFACE.h"
39
40 C !INPUT/OUTPUT PARAMETERS:
41 C == Routine Arguments ==
42 C statFld :: cumulative statistics array (updated)
43 C inpFld :: input field array to process (compute stats & add to statFld)
44 C frcFld :: fraction used for weighted-average diagnostics
45 C scaleFact :: scaling factor
46 C power :: option to fill-in with the field square (power=2)
47 C useFract :: if True, use fraction-weight
48 C sizF :: size of frcFld array: 3rd dimension
49 C sizI1,sizI2 :: size of inpFld array: 1rst index range (min,max)
50 C sizJ1,sizJ2 :: size of inpFld array: 2nd index range (min,max)
51 C sizK :: size of inpFld array: 3rd dimension
52 C sizTx,sizTy :: size of inpFld array: tile dimensions
53 C iRun,jRun :: range of 1rst & 2nd index
54 C kIn :: level index of inpFld array to process
55 C biIn,bjIn :: tile indices of inpFld array to process
56 C k,bi,bj :: level and tile indices used for weighting (mask,area ...)
57 C bibjFlg :: passed from calling S/R (see diagstats_fill.F)
58 C region2fill :: indicates whether to compute statistics over this region
59 C ndId :: Diagnostics Id Number (in available diag. list)
60 C parsFld :: parser field with characteristics of the diagnostics
61 C myThid :: my Thread Id number
62 _RL statFld(0:nStats,0:nRegions)
63 INTEGER sizI1,sizI2,sizJ1,sizJ2
64 INTEGER sizF,sizK,sizTx,sizTy
65 _RL inpFld(sizI1:sizI2,sizJ1:sizJ2,sizK,sizTx,sizTy)
66 _RL frcFld(sizI1:sizI2,sizJ1:sizJ2,sizF,sizTx,sizTy)
67 _RL scaleFact
68 INTEGER power
69 LOGICAL useFract
70 INTEGER iRun, jRun, kIn, biIn, bjIn
71 INTEGER k, bi, bj, bibjFlg
72 INTEGER region2fill(0:nRegions)
73 INTEGER ndId
74 CHARACTER*16 parsFld
75 INTEGER myThid
76 CEOP
77
78 C !FUNCTIONS:
79 #ifdef ALLOW_FIZHI
80 _RL getcon
81 EXTERNAL getcon
82 #endif
83
84 C !LOCAL VARIABLES:
85 C i,j :: loop indices
86 INTEGER i, n, kFr, kRegMsk, lReg
87 INTEGER im, ix, iv
88 PARAMETER ( iv = nStats - 2 , im = nStats - 1 , ix = nStats )
89 LOGICAL exclSpVal
90 LOGICAL useWeight
91 _RL statLoc(0:nStats)
92 _RL drLoc
93 _RL specialVal
94
95 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
96
97 useWeight = .FALSE.
98 exclSpVal = .FALSE.
99 specialVal = 0.
100 #ifdef ALLOW_FIZHI
101 IF ( useFIZHI ) THEN
102 exclSpVal = .TRUE.
103 specialVal = getcon('UNDEF')
104 ENDIF
105 #endif
106 kFr = MIN(kIn,sizF)
107
108 DO n=0,nRegions
109 IF (region2fill(n).NE.0) THEN
110 C--- Compute statistics for this tile, level and region:
111
112 kRegMsk = diagSt_kRegMsk(n)
113 lReg = 0
114 IF ( n.GE.1 ) THEN
115 lReg = 1
116 IF ( parsFld(2:2).EQ.'U' ) lReg = 2
117 IF ( parsFld(2:2).EQ.'V' ) lReg = 3
118 ENDIF
119
120 IF ( parsFld(10:10) .EQ. 'R' ) THEN
121
122 drLoc = drF(k)
123 IF ( parsFld(9:9).EQ.'L') drLoc = drC(k)
124 IF ( parsFld(9:9).EQ.'U') drLoc = drC(MIN(k+1,Nr))
125 IF ( parsFld(9:9).EQ.'M') useWeight = .TRUE.
126
127 IF ( parsFld(2:2).EQ.'U' ) THEN
128 CALL DIAGSTATS_CALC(
129 O statLoc,
130 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
131 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
132 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
133 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
134 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
135 I maskInW(1-OLx,1-OLy,bi,bj),
136 I hFacW(1-OLx,1-OLy,k,bi,bj), rAw(1-OLx,1-OLy,bi,bj),
137 I drLoc, specialVal, exclSpVal, useWeight, myThid )
138 c I drLoc, k,bi,bj, parsFld, myThid )
139 ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
140 CALL DIAGSTATS_CALC(
141 O statLoc,
142 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
143 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
144 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
145 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
146 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
147 I maskInS(1-OLx,1-OLy,bi,bj),
148 I hFacS(1-OLx,1-OLy,k,bi,bj), rAs(1-OLx,1-OLy,bi,bj),
149 I drLoc, specialVal, exclSpVal, useWeight, myThid )
150 ELSE
151 CALL DIAGSTATS_CALC(
152 O statLoc,
153 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
154 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
155 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
156 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
157 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
158 I maskInC(1-OLx,1-OLy,bi,bj),
159 I hFacC(1-OLx,1-OLy,k,bi,bj), rA(1-OLx,1-OLy,bi,bj),
160 I drLoc, specialVal, exclSpVal, useWeight, myThid )
161 ENDIF
162
163 ELSEIF ( useFIZHI .AND.
164 & (parsFld(10:10).EQ.'L' .OR. parsFld(10:10).EQ.'M')
165 & ) THEN
166 CALL DIAGSTATS_LM_CALC(
167 O statLoc,
168 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
169 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
170 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
171 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
172 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
173 I maskInC(1-OLx,1-OLy,bi,bj), rA(1-OLx,1-OLy,bi,bj),
174 I specialVal, exclSpVal,
175 I k,bi,bj, parsFld, myThid )
176 ELSEIF ( useLand .AND.
177 & (parsFld(10:10).EQ.'G' .OR. parsFld(10:10).EQ.'g')
178 & ) THEN
179 CALL DIAGSTATS_G_CALC(
180 O statLoc,
181 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
182 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
183 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
184 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
185 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
186 I rA(1-OLx,1-OLy,bi,bj),
187 I specialVal, exclSpVal,
188 I k,bi,bj, parsFld, myThid )
189 c ELSEIF ( parsFld(10:10) .EQ. 'I' ) THEN
190 c ELSEIF ( parsFld(10:10) .EQ. '1' ) THEN
191 ELSE
192
193 drLoc = 1. _d 0
194 IF ( parsFld(2:2).EQ.'U' ) THEN
195 CALL DIAGSTATS_CALC(
196 O statLoc,
197 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
198 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
199 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
200 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
201 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
202 I maskInW(1-OLx,1-OLy,bi,bj),
203 I maskInW(1-OLx,1-OLy,bi,bj),rAw(1-OLx,1-OLy,bi,bj),
204 I drLoc, specialVal, exclSpVal, useWeight, myThid )
205 ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
206 CALL DIAGSTATS_CALC(
207 O statLoc,
208 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
209 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
210 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
211 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
212 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
213 I maskInS(1-OLx,1-OLy,bi,bj),
214 I maskInS(1-OLx,1-OLy,bi,bj),rAs(1-OLx,1-OLy,bi,bj),
215 I drLoc, specialVal, exclSpVal, useWeight, myThid )
216 ELSE
217 CALL DIAGSTATS_CALC(
218 O statLoc,
219 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
220 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
221 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
222 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
223 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
224 I maskInC(1-OLx,1-OLy,bi,bj),
225 I maskInC(1-OLx,1-OLy,bi,bj), rA(1-OLx,1-OLy,bi,bj),
226 I drLoc, specialVal, exclSpVal, useWeight, myThid )
227 ENDIF
228
229 ENDIF
230
231 C Update cumulative statistics array
232 IF ( statLoc(0).GT.0. ) THEN
233 IF ( statFld(0,n).LE.0. ) THEN
234 statFld(im,n) = statLoc(im)
235 statFld(ix,n) = statLoc(ix)
236 ELSE
237 statFld(im,n) = MIN( statFld(im,n), statLoc(im) )
238 statFld(ix,n) = MAX( statFld(ix,n), statLoc(ix) )
239 ENDIF
240 IF ( bibjFlg.GE.0 ) THEN
241 DO i=0,iv
242 statFld(i,n) = statFld(i,n) + statLoc(i)
243 ENDDO
244 ELSE
245 DO i=1,iv
246 statFld(i,n) = statFld(i,n) + statLoc(i)
247 ENDDO
248 ENDIF
249 ENDIF
250
251 C--- processing region "n" ends here.
252 ENDIF
253 ENDDO
254
255 RETURN
256 END

  ViewVC Help
Powered by ViewVC 1.1.22