/[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.6 - (show annotations) (download)
Mon Jan 23 22:31:10 2006 UTC (18 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58l_post, checkpoint58e_post, mitgcm_mapl_00, checkpoint58u_post, checkpoint58w_post, checkpoint60, checkpoint61, 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, checkpoint58y_post, checkpoint58k_post, checkpoint58v_post, checkpoint58s_post, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint58p_post, checkpoint61a, checkpoint58b_post, checkpoint58m_post
Changes since 1.5: +29 -426 lines
- split diagstats_local.F file in 3 ;
- compute statistics for each selected region.

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagstats_local.F,v 1.5 2005/11/04 01:30:33 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 porcess
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 !LOCAL VARIABLES:
77 C i,j :: loop indices
78 INTEGER i, n, km, kFr, kRegMsk
79 INTEGER im, ix, iv
80 PARAMETER ( iv = nStats - 2 , im = nStats - 1 , ix = nStats )
81 LOGICAL exclSpVal
82 LOGICAL useWeight
83 _RL statLoc(0:nStats)
84 _RL drLoc
85 _RL specialVal
86 _RL getcon
87 EXTERNAL getcon
88
89 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
90
91 useWeight = .FALSE.
92 exclSpVal = .FALSE.
93 specialVal = 0.
94 IF ( useFIZHI ) THEN
95 exclSpVal = .TRUE.
96 specialVal = getcon('UNDEF')
97 ENDIF
98 kFr = MIN(kIn,sizF)
99
100 DO n=0,nRegions
101 IF (region2fill(n).NE.0) THEN
102 C--- Compute statistics for this tile, level and region:
103
104 kRegMsk = diagSt_kRegMsk(n)
105
106 IF ( parsFld(10:10) .EQ. 'R' ) THEN
107
108 drLoc = drF(k)
109 IF ( parsFld(9:9).EQ.'L') drLoc = drC(k)
110 IF ( parsFld(9:9).EQ.'U') drLoc = drC(MIN(k+1,Nr))
111 IF ( parsFld(9:9).EQ.'M') useWeight = .TRUE.
112
113 IF ( parsFld(2:2).EQ.'U' ) THEN
114 CALL DIAGSTATS_CALC(
115 O statLoc,
116 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
117 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
118 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
119 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
120 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
121 I maskW(1-Olx,1-Oly,k,bi,bj),
122 I hFacW(1-Olx,1-Oly,k,bi,bj), rAw(1-Olx,1-Oly,bi,bj),
123 I drLoc, specialVal, exclSpVal, useWeight, myThid )
124 c I drLoc, k,bi,bj, parsFld, myThid )
125 ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
126 CALL DIAGSTATS_CALC(
127 O statLoc,
128 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
129 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
130 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
131 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
132 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
133 I maskS(1-Olx,1-Oly,k,bi,bj),
134 I hFacS(1-Olx,1-Oly,k,bi,bj), rAs(1-Olx,1-Oly,bi,bj),
135 I drLoc, specialVal, exclSpVal, useWeight, myThid )
136 ELSE
137 CALL DIAGSTATS_CALC(
138 O statLoc,
139 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
140 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
141 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
142 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
143 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
144 I maskC(1-Olx,1-Oly,k,bi,bj),
145 I hFacC(1-Olx,1-Oly,k,bi,bj), rA(1-Olx,1-Oly,bi,bj),
146 I drLoc, specialVal, exclSpVal, useWeight, myThid )
147 ENDIF
148
149 ELSEIF ( useFIZHI .AND.
150 & (parsFld(10:10).EQ.'L' .OR. parsFld(10:10).EQ.'M')
151 & ) THEN
152 CALL DIAGSTATS_LM_CALC(
153 O statLoc,
154 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
155 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
156 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
157 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
158 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
159 I maskH(1-Olx,1-Oly,bi,bj), rA(1-Olx,1-Oly,bi,bj),
160 I specialVal, exclSpVal,
161 I k,bi,bj, parsFld, myThid )
162 ELSEIF ( useLand .AND.
163 & (parsFld(10:10).EQ.'G' .OR. parsFld(10:10).EQ.'g')
164 & ) THEN
165 CALL DIAGSTATS_G_CALC(
166 O statLoc,
167 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
168 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
169 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
170 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
171 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
172 I rA(1-Olx,1-Oly,bi,bj),
173 I specialVal, exclSpVal,
174 I k,bi,bj, parsFld, myThid )
175 c ELSEIF ( parsFld(10:10) .EQ. 'I' ) THEN
176 c ELSEIF ( parsFld(10:10) .EQ. '1' ) THEN
177 ELSE
178
179 km = 1
180 IF ( usingPCoords ) km = Nr
181 drLoc = 1. _d 0
182 IF ( parsFld(2:2).EQ.'U' ) THEN
183 CALL DIAGSTATS_CALC(
184 O statLoc,
185 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
186 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
187 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
188 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
189 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
190 I maskW(1-Olx,1-Oly,km,bi,bj),
191 I maskW(1-Olx,1-Oly,km,bi,bj),rAw(1-Olx,1-Oly,bi,bj),
192 I drLoc, specialVal, exclSpVal, useWeight, myThid )
193 ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
194 CALL DIAGSTATS_CALC(
195 O statLoc,
196 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
197 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
198 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
199 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
200 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
201 I maskS(1-Olx,1-Oly,km,bi,bj),
202 I maskS(1-Olx,1-Oly,km,bi,bj),rAs(1-Olx,1-Oly,bi,bj),
203 I drLoc, specialVal, exclSpVal, useWeight, myThid )
204 ELSE
205 CALL DIAGSTATS_CALC(
206 O statLoc,
207 I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
208 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
209 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
210 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
211 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
212 I maskH(1-Olx,1-Oly,bi,bj),
213 I maskH(1-Olx,1-Oly,bi,bj), rA(1-Olx,1-Oly,bi,bj),
214 I drLoc, specialVal, exclSpVal, useWeight, myThid )
215 ENDIF
216
217 ENDIF
218
219 C Update cumulative statistics array
220 IF ( statLoc(0).GT.0. ) THEN
221 IF ( statFld(0,n).LE.0. ) THEN
222 statFld(im,n) = statLoc(im)
223 statFld(ix,n) = statLoc(ix)
224 ELSE
225 statFld(im,n) = MIN( statFld(im,n), statLoc(im) )
226 statFld(ix,n) = MAX( statFld(ix,n), statLoc(ix) )
227 ENDIF
228 DO i=0,iv
229 statFld(i,n) = statFld(i,n) + statLoc(i)
230 ENDDO
231 ENDIF
232
233 C--- processing region "n" ends here.
234 ENDIF
235 ENDDO
236
237 RETURN
238 END

  ViewVC Help
Powered by ViewVC 1.1.22