/[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.10 - (show annotations) (download)
Mon Sep 3 20:29:47 2012 UTC (11 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63s, checkpoint64, checkpoint65, checkpoint65a
Changes since 1.9: +31 -31 lines
only one space between 'CALL' and S/R name (easier to grep for)

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagstats_local.F,v 1.9 2009/12/21 00:10:07 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, region2fill, ndId, parsFld,
16 I 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 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 INTEGER sizF,sizK,sizTx,sizTy
64 _RL inpFld(sizI1:sizI2,sizJ1:sizJ2,sizK,sizTx,sizTy)
65 _RL frcFld(sizI1:sizI2,sizJ1:sizJ2,sizF,sizTx,sizTy)
66 _RL scaleFact
67 INTEGER power
68 LOGICAL useFract
69 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 C !FUNCTIONS:
77 #ifdef ALLOW_FIZHI
78 _RL getcon
79 EXTERNAL getcon
80 #endif
81
82 C !LOCAL VARIABLES:
83 C i,j :: loop indices
84 INTEGER i, n, kFr, kRegMsk
85 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 #ifdef ALLOW_FIZHI
99 IF ( useFIZHI ) THEN
100 exclSpVal = .TRUE.
101 specialVal = getcon('UNDEF')
102 ENDIF
103 #endif
104 kFr = MIN(kIn,sizF)
105
106 DO n=0,nRegions
107 IF (region2fill(n).NE.0) THEN
108 C--- Compute statistics for this tile, level and region:
109
110 kRegMsk = diagSt_kRegMsk(n)
111
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 CALL DIAGSTATS_CALC(
121 O statLoc,
122 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
123 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
124 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
125 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
126 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
127 I maskW(1-OLx,1-OLy,k,bi,bj),
128 I hFacW(1-OLx,1-OLy,k,bi,bj), rAw(1-OLx,1-OLy,bi,bj),
129 I drLoc, specialVal, exclSpVal, useWeight, myThid )
130 c I drLoc, k,bi,bj, parsFld, myThid )
131 ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
132 CALL DIAGSTATS_CALC(
133 O statLoc,
134 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
135 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
136 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
137 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
138 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
139 I maskS(1-OLx,1-OLy,k,bi,bj),
140 I hFacS(1-OLx,1-OLy,k,bi,bj), rAs(1-OLx,1-OLy,bi,bj),
141 I drLoc, specialVal, exclSpVal, useWeight, myThid )
142 ELSE
143 CALL DIAGSTATS_CALC(
144 O statLoc,
145 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
146 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
147 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
148 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
149 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
150 I maskC(1-OLx,1-OLy,k,bi,bj),
151 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 ELSEIF ( useFIZHI .AND.
156 & (parsFld(10:10).EQ.'L' .OR. parsFld(10:10).EQ.'M')
157 & ) THEN
158 CALL DIAGSTATS_LM_CALC(
159 O statLoc,
160 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
161 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
162 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
163 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
164 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
165 I maskInC(1-OLx,1-OLy,bi,bj), rA(1-OLx,1-OLy,bi,bj),
166 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 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
175 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
176 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
177 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
178 I rA(1-OLx,1-OLy,bi,bj),
179 I specialVal, exclSpVal,
180 I k,bi,bj, parsFld, myThid )
181 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 CALL DIAGSTATS_CALC(
188 O statLoc,
189 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
190 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
191 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
192 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
193 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
194 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 I drLoc, specialVal, exclSpVal, useWeight, myThid )
197 ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
198 CALL DIAGSTATS_CALC(
199 O statLoc,
200 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
201 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
202 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
203 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
204 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
205 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 I drLoc, specialVal, exclSpVal, useWeight, myThid )
208 ELSE
209 CALL DIAGSTATS_CALC(
210 O statLoc,
211 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
212 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
213 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
214 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
215 I diagSt_regMask(1-OLx,1-OLy,kRegMsk,bi,bj),
216 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 I drLoc, specialVal, exclSpVal, useWeight, myThid )
219 ENDIF
220
221 ENDIF
222
223 C Update cumulative statistics array
224 IF ( statLoc(0).GT.0. ) THEN
225 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 ENDIF
236
237 C--- processing region "n" ends here.
238 ENDIF
239 ENDDO
240
241 RETURN
242 END

  ViewVC Help
Powered by ViewVC 1.1.22