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

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

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


Revision 1.12 - (hide 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 jmc 1.12 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagstats_local.F,v 1.11 2014/08/08 19:29:48 jmc Exp $
2 jmc 1.1 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 jmc 1.4 I inpFld, frcFld,
12     I scaleFact, power, useFract, sizF,
13 jmc 1.1 I sizI1,sizI2,sizJ1,sizJ2,sizK,sizTx,sizTy,
14     I iRun,jRun,kIn,biIn,bjIn,
15 jmc 1.11 I k,bi,bj, bibjFlg, region2fill,
16     I ndId, parsFld, myThid )
17 jmc 1.1
18     C !DESCRIPTION:
19 jmc 1.2 C Update array statFld
20 jmc 1.1 C by adding statistics over the range [1:iRun],[1:jRun]
21     C from input field array inpFld
22 jmc 1.2 C- note:
23 jmc 1.1 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 jmc 1.2 C c) for other type of grids, call a specifics S/R which include its own
27 jmc 1.1 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 jmc 1.6 #include "DIAGSTATS_REGIONS.h"
36 jmc 1.1 #include "PARAMS.h"
37     #include "GRID.h"
38 jmc 1.2 c #include "SURFACE.h"
39 jmc 1.1
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 jmc 1.3 C frcFld :: fraction used for weighted-average diagnostics
45     C scaleFact :: scaling factor
46 jmc 1.4 C power :: option to fill-in with the field square (power=2)
47 jmc 1.3 C useFract :: if True, use fraction-weight
48     C sizF :: size of frcFld array: 3rd dimension
49 jmc 1.1 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 jmc 1.8 C kIn :: level index of inpFld array to process
55 jmc 1.3 C biIn,bjIn :: tile indices of inpFld array to process
56 jmc 1.1 C k,bi,bj :: level and tile indices used for weighting (mask,area ...)
57 jmc 1.11 C bibjFlg :: passed from calling S/R (see diagstats_fill.F)
58 jmc 1.1 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 jmc 1.3 INTEGER sizF,sizK,sizTx,sizTy
65 jmc 1.1 _RL inpFld(sizI1:sizI2,sizJ1:sizJ2,sizK,sizTx,sizTy)
66 jmc 1.3 _RL frcFld(sizI1:sizI2,sizJ1:sizJ2,sizF,sizTx,sizTy)
67     _RL scaleFact
68 jmc 1.4 INTEGER power
69 jmc 1.3 LOGICAL useFract
70 jmc 1.1 INTEGER iRun, jRun, kIn, biIn, bjIn
71 jmc 1.11 INTEGER k, bi, bj, bibjFlg
72 jmc 1.1 INTEGER region2fill(0:nRegions)
73 jmc 1.11 INTEGER ndId
74 jmc 1.1 CHARACTER*16 parsFld
75     INTEGER myThid
76     CEOP
77    
78 jmc 1.7 C !FUNCTIONS:
79     #ifdef ALLOW_FIZHI
80     _RL getcon
81     EXTERNAL getcon
82     #endif
83    
84 jmc 1.1 C !LOCAL VARIABLES:
85     C i,j :: loop indices
86 jmc 1.12 INTEGER i, n, kFr, kRegMsk, lReg
87 jmc 1.1 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 jmc 1.7 #ifdef ALLOW_FIZHI
101 jmc 1.1 IF ( useFIZHI ) THEN
102     exclSpVal = .TRUE.
103 jmc 1.2 specialVal = getcon('UNDEF')
104 jmc 1.1 ENDIF
105 jmc 1.7 #endif
106 jmc 1.3 kFr = MIN(kIn,sizF)
107 jmc 1.2
108 jmc 1.1 DO n=0,nRegions
109     IF (region2fill(n).NE.0) THEN
110     C--- Compute statistics for this tile, level and region:
111 jmc 1.2
112 jmc 1.6 kRegMsk = diagSt_kRegMsk(n)
113 jmc 1.12 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 jmc 1.1
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 jmc 1.10 CALL DIAGSTATS_CALC(
129 jmc 1.1 O statLoc,
130     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
131 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
132 jmc 1.12 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
133 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
134 jmc 1.10 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
135 jmc 1.12 I maskInW(1-OLx,1-OLy,bi,bj),
136 jmc 1.10 I hFacW(1-OLx,1-OLy,k,bi,bj), rAw(1-OLx,1-OLy,bi,bj),
137 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
138     c I drLoc, k,bi,bj, parsFld, myThid )
139     ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
140 jmc 1.10 CALL DIAGSTATS_CALC(
141 jmc 1.1 O statLoc,
142     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
143 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
144 jmc 1.12 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
145 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
146 jmc 1.10 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
147 jmc 1.12 I maskInS(1-OLx,1-OLy,bi,bj),
148 jmc 1.10 I hFacS(1-OLx,1-OLy,k,bi,bj), rAs(1-OLx,1-OLy,bi,bj),
149 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
150     ELSE
151 jmc 1.10 CALL DIAGSTATS_CALC(
152 jmc 1.1 O statLoc,
153     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
154 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
155 jmc 1.12 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
156 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
157 jmc 1.10 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
158 jmc 1.12 I maskInC(1-OLx,1-OLy,bi,bj),
159 jmc 1.10 I hFacC(1-OLx,1-OLy,k,bi,bj), rA(1-OLx,1-OLy,bi,bj),
160 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
161     ENDIF
162    
163 jmc 1.2 ELSEIF ( useFIZHI .AND.
164     & (parsFld(10:10).EQ.'L' .OR. parsFld(10:10).EQ.'M')
165     & ) THEN
166 jmc 1.10 CALL DIAGSTATS_LM_CALC(
167 jmc 1.1 O statLoc,
168     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
169 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
170 jmc 1.12 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
171 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
172 jmc 1.10 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 jmc 1.2 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 jmc 1.10 CALL DIAGSTATS_G_CALC(
180 jmc 1.2 O statLoc,
181     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
182 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
183 jmc 1.12 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
184 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
185 jmc 1.10 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
186     I rA(1-OLx,1-OLy,bi,bj),
187 jmc 1.2 I specialVal, exclSpVal,
188     I k,bi,bj, parsFld, myThid )
189 jmc 1.1 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 jmc 1.10 CALL DIAGSTATS_CALC(
196 jmc 1.1 O statLoc,
197     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
198 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
199 jmc 1.12 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
200 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
201 jmc 1.10 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 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
205     ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
206 jmc 1.10 CALL DIAGSTATS_CALC(
207 jmc 1.1 O statLoc,
208     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
209 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
210 jmc 1.12 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
211 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
212 jmc 1.10 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 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
216     ELSE
217 jmc 1.10 CALL DIAGSTATS_CALC(
218 jmc 1.1 O statLoc,
219     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
220 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
221 jmc 1.12 I scaleFact, power, useFract, lReg, diagSt_vRegMsk(n),
222 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
223 jmc 1.10 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 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
227     ENDIF
228    
229     ENDIF
230    
231     C Update cumulative statistics array
232 jmc 1.6 IF ( statLoc(0).GT.0. ) THEN
233 jmc 1.11 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 jmc 1.1 DO i=0,iv
242 jmc 1.11 statFld(i,n) = statFld(i,n) + statLoc(i)
243 jmc 1.1 ENDDO
244 jmc 1.11 ELSE
245     DO i=1,iv
246     statFld(i,n) = statFld(i,n) + statLoc(i)
247     ENDDO
248     ENDIF
249 jmc 1.6 ENDIF
250 jmc 1.1
251     C--- processing region "n" ends here.
252     ENDIF
253     ENDDO
254    
255 jmc 1.2 RETURN
256     END

  ViewVC Help
Powered by ViewVC 1.1.22