/[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.9 - (hide annotations) (download)
Mon Dec 21 00:10:07 2009 UTC (14 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint62, checkpoint63, 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
Changes since 1.8: +9 -11 lines
- use interior masks (instead of maskH, <- to be remove).

1 jmc 1.9 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagstats_local.F,v 1.8 2009/09/03 20:37:17 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     I k,bi,bj, region2fill, ndId, parsFld,
16 jmc 1.8 I 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     C region2fill :: indicates whether to compute statistics over this region
58     C ndId :: Diagnostics Id Number (in available diag. list)
59     C parsFld :: parser field with characteristics of the diagnostics
60     C myThid :: my Thread Id number
61     _RL statFld(0:nStats,0:nRegions)
62     INTEGER sizI1,sizI2,sizJ1,sizJ2
63 jmc 1.3 INTEGER sizF,sizK,sizTx,sizTy
64 jmc 1.1 _RL inpFld(sizI1:sizI2,sizJ1:sizJ2,sizK,sizTx,sizTy)
65 jmc 1.3 _RL frcFld(sizI1:sizI2,sizJ1:sizJ2,sizF,sizTx,sizTy)
66     _RL scaleFact
67 jmc 1.4 INTEGER power
68 jmc 1.3 LOGICAL useFract
69 jmc 1.1 INTEGER iRun, jRun, kIn, biIn, bjIn
70     INTEGER k, bi, bj, ndId
71     INTEGER region2fill(0:nRegions)
72     CHARACTER*16 parsFld
73     INTEGER myThid
74     CEOP
75    
76 jmc 1.7 C !FUNCTIONS:
77     #ifdef ALLOW_FIZHI
78     _RL getcon
79     EXTERNAL getcon
80     #endif
81    
82 jmc 1.1 C !LOCAL VARIABLES:
83     C i,j :: loop indices
84 jmc 1.9 INTEGER i, n, kFr, kRegMsk
85 jmc 1.1 INTEGER im, ix, iv
86     PARAMETER ( iv = nStats - 2 , im = nStats - 1 , ix = nStats )
87     LOGICAL exclSpVal
88     LOGICAL useWeight
89     _RL statLoc(0:nStats)
90     _RL drLoc
91     _RL specialVal
92    
93     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
94    
95     useWeight = .FALSE.
96     exclSpVal = .FALSE.
97     specialVal = 0.
98 jmc 1.7 #ifdef ALLOW_FIZHI
99 jmc 1.1 IF ( useFIZHI ) THEN
100     exclSpVal = .TRUE.
101 jmc 1.2 specialVal = getcon('UNDEF')
102 jmc 1.1 ENDIF
103 jmc 1.7 #endif
104 jmc 1.3 kFr = MIN(kIn,sizF)
105 jmc 1.2
106 jmc 1.1 DO n=0,nRegions
107     IF (region2fill(n).NE.0) THEN
108     C--- Compute statistics for this tile, level and region:
109 jmc 1.2
110 jmc 1.6 kRegMsk = diagSt_kRegMsk(n)
111 jmc 1.1
112     IF ( parsFld(10:10) .EQ. 'R' ) THEN
113    
114     drLoc = drF(k)
115     IF ( parsFld(9:9).EQ.'L') drLoc = drC(k)
116     IF ( parsFld(9:9).EQ.'U') drLoc = drC(MIN(k+1,Nr))
117     IF ( parsFld(9:9).EQ.'M') useWeight = .TRUE.
118    
119     IF ( parsFld(2:2).EQ.'U' ) THEN
120 jmc 1.2 CALL DIAGSTATS_CALC(
121 jmc 1.1 O statLoc,
122     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
123 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
124 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
125 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
126 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
127     I maskW(1-Olx,1-Oly,k,bi,bj),
128 jmc 1.2 I hFacW(1-Olx,1-Oly,k,bi,bj), rAw(1-Olx,1-Oly,bi,bj),
129 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
130     c I drLoc, k,bi,bj, parsFld, myThid )
131     ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
132 jmc 1.2 CALL DIAGSTATS_CALC(
133 jmc 1.1 O statLoc,
134     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
135 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
136 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
137 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
138 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
139     I maskS(1-Olx,1-Oly,k,bi,bj),
140 jmc 1.2 I hFacS(1-Olx,1-Oly,k,bi,bj), rAs(1-Olx,1-Oly,bi,bj),
141 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
142     ELSE
143 jmc 1.2 CALL DIAGSTATS_CALC(
144 jmc 1.1 O statLoc,
145     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
146 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
147 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
148 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
149 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
150     I maskC(1-Olx,1-Oly,k,bi,bj),
151 jmc 1.1 I hFacC(1-Olx,1-Oly,k,bi,bj), rA(1-Olx,1-Oly,bi,bj),
152     I drLoc, specialVal, exclSpVal, useWeight, myThid )
153     ENDIF
154    
155 jmc 1.2 ELSEIF ( useFIZHI .AND.
156     & (parsFld(10:10).EQ.'L' .OR. parsFld(10:10).EQ.'M')
157     & ) THEN
158     CALL DIAGSTATS_LM_CALC(
159 jmc 1.1 O statLoc,
160     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
161 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
162 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
163 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
164 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
165 jmc 1.9 I maskInC(1-Olx,1-Oly,bi,bj), rA(1-Olx,1-Oly,bi,bj),
166 jmc 1.2 I specialVal, exclSpVal,
167     I k,bi,bj, parsFld, myThid )
168     ELSEIF ( useLand .AND.
169     & (parsFld(10:10).EQ.'G' .OR. parsFld(10:10).EQ.'g')
170     & ) THEN
171     CALL DIAGSTATS_G_CALC(
172     O statLoc,
173     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
174 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
175 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
176 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
177 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
178 jmc 1.2 I rA(1-Olx,1-Oly,bi,bj),
179     I specialVal, exclSpVal,
180     I k,bi,bj, parsFld, myThid )
181 jmc 1.1 c ELSEIF ( parsFld(10:10) .EQ. 'I' ) THEN
182     c ELSEIF ( parsFld(10:10) .EQ. '1' ) THEN
183     ELSE
184    
185     drLoc = 1. _d 0
186     IF ( parsFld(2:2).EQ.'U' ) THEN
187 jmc 1.2 CALL DIAGSTATS_CALC(
188 jmc 1.1 O statLoc,
189     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
190 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
191 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
192 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
193 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
194 jmc 1.9 I maskInW(1-Olx,1-Oly,bi,bj),
195     I maskInW(1-Olx,1-Oly,bi,bj),rAw(1-Olx,1-Oly,bi,bj),
196 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
197     ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
198 jmc 1.2 CALL DIAGSTATS_CALC(
199 jmc 1.1 O statLoc,
200     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
201 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
202 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
203 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
204 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
205 jmc 1.9 I maskInS(1-Olx,1-Oly,bi,bj),
206     I maskInS(1-Olx,1-Oly,bi,bj),rAs(1-Olx,1-Oly,bi,bj),
207 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
208     ELSE
209 jmc 1.2 CALL DIAGSTATS_CALC(
210 jmc 1.1 O statLoc,
211     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
212 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
213 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
214 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
215 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
216 jmc 1.9 I maskInC(1-Olx,1-Oly,bi,bj),
217     I maskInC(1-Olx,1-Oly,bi,bj), rA(1-Olx,1-Oly,bi,bj),
218 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
219     ENDIF
220    
221     ENDIF
222    
223     C Update cumulative statistics array
224 jmc 1.6 IF ( statLoc(0).GT.0. ) THEN
225 jmc 1.1 IF ( statFld(0,n).LE.0. ) THEN
226     statFld(im,n) = statLoc(im)
227     statFld(ix,n) = statLoc(ix)
228     ELSE
229     statFld(im,n) = MIN( statFld(im,n), statLoc(im) )
230     statFld(ix,n) = MAX( statFld(ix,n), statLoc(ix) )
231     ENDIF
232     DO i=0,iv
233     statFld(i,n) = statFld(i,n) + statLoc(i)
234     ENDDO
235 jmc 1.6 ENDIF
236 jmc 1.1
237     C--- processing region "n" ends here.
238     ENDIF
239     ENDDO
240    
241 jmc 1.2 RETURN
242     END

  ViewVC Help
Powered by ViewVC 1.1.22