/[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.6 - (hide 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 jmc 1.6 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagstats_local.F,v 1.5 2005/11/04 01:30:33 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     I myThid)
17    
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.3 C kIn :: level index of inpFld array to porcess
55     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     C !LOCAL VARIABLES:
77     C i,j :: loop indices
78 jmc 1.6 INTEGER i, n, km, kFr, kRegMsk
79 jmc 1.1 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 jmc 1.2 specialVal = getcon('UNDEF')
97 jmc 1.1 ENDIF
98 jmc 1.3 kFr = MIN(kIn,sizF)
99 jmc 1.2
100 jmc 1.1 DO n=0,nRegions
101     IF (region2fill(n).NE.0) THEN
102     C--- Compute statistics for this tile, level and region:
103 jmc 1.2
104 jmc 1.6 kRegMsk = diagSt_kRegMsk(n)
105 jmc 1.1
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 jmc 1.2 CALL DIAGSTATS_CALC(
115 jmc 1.1 O statLoc,
116     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
117 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
118 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
119 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
120 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
121     I maskW(1-Olx,1-Oly,k,bi,bj),
122 jmc 1.2 I hFacW(1-Olx,1-Oly,k,bi,bj), rAw(1-Olx,1-Oly,bi,bj),
123 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
124     c I drLoc, k,bi,bj, parsFld, myThid )
125     ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
126 jmc 1.2 CALL DIAGSTATS_CALC(
127 jmc 1.1 O statLoc,
128     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
129 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
130 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
131 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
132 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
133     I maskS(1-Olx,1-Oly,k,bi,bj),
134 jmc 1.2 I hFacS(1-Olx,1-Oly,k,bi,bj), rAs(1-Olx,1-Oly,bi,bj),
135 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
136     ELSE
137 jmc 1.2 CALL DIAGSTATS_CALC(
138 jmc 1.1 O statLoc,
139     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
140 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
141 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
142 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
143 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
144     I maskC(1-Olx,1-Oly,k,bi,bj),
145 jmc 1.1 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 jmc 1.2 ELSEIF ( useFIZHI .AND.
150     & (parsFld(10:10).EQ.'L' .OR. parsFld(10:10).EQ.'M')
151     & ) THEN
152     CALL DIAGSTATS_LM_CALC(
153 jmc 1.1 O statLoc,
154     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
155 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
156 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
157 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
158 jmc 1.6 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 jmc 1.2 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 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
169 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
170 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
171 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
172 jmc 1.2 I rA(1-Olx,1-Oly,bi,bj),
173     I specialVal, exclSpVal,
174     I k,bi,bj, parsFld, myThid )
175 jmc 1.1 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 jmc 1.2 CALL DIAGSTATS_CALC(
184 jmc 1.1 O statLoc,
185     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
186 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
187 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
188 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
189 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
190     I maskW(1-Olx,1-Oly,km,bi,bj),
191 jmc 1.2 I maskW(1-Olx,1-Oly,km,bi,bj),rAw(1-Olx,1-Oly,bi,bj),
192 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
193     ELSEIF ( parsFld(2:2).EQ.'V' ) THEN
194 jmc 1.2 CALL DIAGSTATS_CALC(
195 jmc 1.1 O statLoc,
196     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
197 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
198 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
199 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
200 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
201     I maskS(1-Olx,1-Oly,km,bi,bj),
202 jmc 1.2 I maskS(1-Olx,1-Oly,km,bi,bj),rAs(1-Olx,1-Oly,bi,bj),
203 jmc 1.1 I drLoc, specialVal, exclSpVal, useWeight, myThid )
204     ELSE
205 jmc 1.2 CALL DIAGSTATS_CALC(
206 jmc 1.1 O statLoc,
207     I inpFld(sizI1,sizJ1,kIn,biIn,bjIn),
208 jmc 1.3 I frcFld(sizI1,sizJ1,kFr,biIn,bjIn),
209 jmc 1.6 I scaleFact, power, useFract, n, diagSt_vRegMsk(n),
210 jmc 1.2 I nStats,sizI1,sizI2,sizJ1,sizJ2,iRun,jRun,
211 jmc 1.6 I diagSt_regMask(1-Olx,1-Oly,kRegMsk,bi,bj),
212     I maskH(1-Olx,1-Oly,bi,bj),
213 jmc 1.1 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 jmc 1.6 IF ( statLoc(0).GT.0. ) THEN
221 jmc 1.1 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 jmc 1.6 ENDIF
232 jmc 1.1
233     C--- processing region "n" ends here.
234     ENDIF
235     ENDDO
236    
237 jmc 1.2 RETURN
238     END

  ViewVC Help
Powered by ViewVC 1.1.22