1111 * DESCRIP-END.
1212 * FUNCTIONS: Aggregate()
1313 * COMMENTS:
14- * $Id$
14+ * $Id: Aggregate.c,v 1.17 2004/08/18 01:01:25 colleen Exp $
1515 */
1616
1717#include <assert.h>
@@ -47,17 +47,16 @@ void Aggregate(MAPSIZE *Map, OPTIONSTRUCT *Options, TOPOPIX **TopoMap,
4747 int NPixels ; /* Number of pixels in the basin */
4848 int NPixelsfine ; /* Number of pixels in the finemap */
4949 int NSoilL ; /* Number of soil layers for current pixel */
50- int NVegL ; /* Number of vegetation layers for current
51- pixel */
52- int i ; /* counter */
53- int j ; /* counter */
50+ int NVegL ; /* Number of vegetation layers for current pixel */
51+ int i ; /* counter */
52+ int j ; /* counter */
5453 int x ;
5554 int y ;
5655 float DeepDepth ; /* depth to bottom of lowest rooting zone */
57- int ii ; /* FineMap counter */
58- int jj ; /* FineMap counter */
59- int xx ; /* x-coordinate on FineMap grid */
60- int yy ; /* y-coordinate on FineMap grid */
56+ int ii ; /* FineMap counter */
57+ int jj ; /* FineMap counter */
58+ int xx ; /* x-coordinate on FineMap grid */
59+ int yy ; /* y-coordinate on FineMap grid */
6160
6261 NPixels = 0 ;
6362 * roadarea = 0. ;
@@ -66,35 +65,35 @@ void Aggregate(MAPSIZE *Map, OPTIONSTRUCT *Options, TOPOPIX **TopoMap,
6665 for (y = 0 ; y < Map -> NY ; y ++ ) {
6766 for (x = 0 ; x < Map -> NX ; x ++ ) {
6867 if (INBASIN (TopoMap [y ][x ].Mask )) {
69-
70- NPixels ++ ;
71- NSoilL = Soil -> NLayers [SoilMap [y ][x ].Soil - 1 ];
72- NVegL = Veg -> NLayers [ VegMap [ y ][ x ]. Veg - 1 ];
73-
74- /* aggregate the evaporation data */
75- Total -> Evap . ETot += Evap [ y ][ x ]. ETot ;
76- for ( i = 0 ; i < NVegL ; i ++ ) {
77- Total -> Evap .EPot [i ] += Evap [y ][x ].EPot [i ];
78- Total -> Evap .EAct [i ] += Evap [y ][x ].EAct [i ];
79- Total -> Evap . EInt [ i ] += Evap [ y ][ x ]. EInt [ i ];
80- }
81- Total -> Evap .EPot [Veg -> MaxLayers ] += Evap [y ][x ].EPot [NVegL ];
82- Total -> Evap . EAct [ Veg -> MaxLayers ] += Evap [ y ][ x ]. EAct [ NVegL ];
83- for (i = 0 ; i < NVegL ; i ++ ) {
84- for (j = 0 ; j < NSoilL ; j ++ ) {
85- Total -> Evap .ESoil [i ][j ] += Evap [y ][x ].ESoil [i ][j ];
86- }
87- }
88- Total -> Evap .EvapSoil += Evap [y ][x ].EvapSoil ;
89-
90- /* aggregate precipitation data */
91- Total -> Precip .Precip += Precip [y ][x ].Precip ;
92- for (i = 0 ; i < NVegL ; i ++ ) {
93- Total -> Precip .IntRain [i ] += Precip [y ][x ].IntRain [i ];
94- Total -> Precip .IntSnow [i ] += Precip [y ][x ].IntSnow [i ];
95- Total -> CanopyWater += Precip [y ][x ].IntRain [i ] +
96- Precip [y ][x ].IntSnow [i ];
97- }
68+ NPixels ++ ;
69+ NSoilL = Soil -> NLayers [ SoilMap [ y ][ x ]. Soil - 1 ] ;
70+ NVegL = Veg -> NLayers [VegMap [y ][x ].Veg - 1 ];
71+
72+ /* aggregate the evaporation data */
73+ Total -> Evap . ETot += Evap [ y ][ x ]. ETot ;
74+ for ( i = 0 ; i < NVegL ; i ++ ) {
75+ Total -> Evap . EPot [ i ] += Evap [ y ][ x ]. EPot [ i ];
76+ Total -> Evap .EAct [i ] += Evap [y ][x ].EAct [i ];
77+ Total -> Evap .EInt [i ] += Evap [y ][x ].EInt [i ];
78+ }
79+ Total -> Evap . EPot [ Veg -> MaxLayers ] += Evap [ y ][ x ]. EPot [ NVegL ];
80+ Total -> Evap .EAct [Veg -> MaxLayers ] += Evap [y ][x ].EAct [NVegL ];
81+
82+ for (i = 0 ; i < NVegL ; i ++ ) {
83+ for (j = 0 ; j < NSoilL ; j ++ ) {
84+ Total -> Evap .ESoil [i ][j ] += Evap [y ][x ].ESoil [i ][j ];
85+ }
86+ }
87+ Total -> Evap .EvapSoil += Evap [y ][x ].EvapSoil ;
88+
89+ /* aggregate precipitation data */
90+ Total -> Precip .Precip += Precip [y ][x ].Precip ;
91+ for (i = 0 ; i < NVegL ; i ++ ) {
92+ Total -> Precip .IntRain [i ] += Precip [y ][x ].IntRain [i ];
93+ Total -> Precip .IntSnow [i ] += Precip [y ][x ].IntSnow [i ];
94+ Total -> CanopyWater += Precip [y ][x ].IntRain [i ] +
95+ Precip [y ][x ].IntSnow [i ];
96+ }
9897
9998 /* aggregate radiation data */
10099 if (Options -> MM5 == TRUE) {
@@ -108,87 +107,88 @@ void Aggregate(MAPSIZE *Map, OPTIONSTRUCT *Options, TOPOPIX **TopoMap,
108107
109108 /* aggregate snow data */
110109 if (Snow [y ][x ].HasSnow )
111- Total -> Snow .HasSnow = TRUE;
112- Total -> Snow .Swq += Snow [y ][x ].Swq ;
113- Total -> Snow .Glacier += Snow [y ][x ].Glacier ;
114- /* Total->Snow.Melt += Snow[y][x].Melt; */
115- Total -> Snow .Melt += Snow [y ][x ].Outflow ;
116- Total -> Snow .PackWater += Snow [y ][x ].PackWater ;
117- Total -> Snow .TPack += Snow [y ][x ].TPack ;
118- Total -> Snow .SurfWater += Snow [y ][x ].SurfWater ;
119- Total -> Snow .TSurf += Snow [y ][x ].TSurf ;
120- Total -> Snow .ColdContent += Snow [y ][x ].ColdContent ;
121- Total -> Snow .Albedo += Snow [y ][x ].Albedo ;
122- Total -> Snow .Depth += Snow [y ][x ].Depth ;
123- Total -> Snow .VaporMassFlux += Snow [y ][x ].VaporMassFlux ;
124- Total -> Snow .CanopyVaporMassFlux += Snow [y ][x ].CanopyVaporMassFlux ;
110+ Total -> Snow .HasSnow = TRUE;
111+ Total -> Snow .Swq += Snow [y ][x ].Swq ;
112+ Total -> Snow .Glacier += Snow [y ][x ].Glacier ;
113+ /* Total->Snow.Melt += Snow[y][x].Melt; */
114+ Total -> Snow .Melt += Snow [y ][x ].Outflow ;
115+ Total -> Snow .PackWater += Snow [y ][x ].PackWater ;
116+ Total -> Snow .TPack += Snow [y ][x ].TPack ;
117+ Total -> Snow .SurfWater += Snow [y ][x ].SurfWater ;
118+ Total -> Snow .TSurf += Snow [y ][x ].TSurf ;
119+ Total -> Snow .ColdContent += Snow [y ][x ].ColdContent ;
120+ Total -> Snow .Albedo += Snow [y ][x ].Albedo ;
121+ Total -> Snow .Depth += Snow [y ][x ].Depth ;
122+ Total -> Snow .VaporMassFlux += Snow [y ][x ].VaporMassFlux ;
123+ Total -> Snow .CanopyVaporMassFlux += Snow [y ][x ].CanopyVaporMassFlux ;
125124
126- /* aggregate soil moisture data */
127- Total -> Soil .Depth += SoilMap [y ][x ].Depth ;
128- DeepDepth = 0.0 ;
125+ /* aggregate soil moisture data */
126+ Total -> Soil .Depth += SoilMap [y ][x ].Depth ;
127+ DeepDepth = 0.0 ;
129128
130- for (i = 0 ; i < NSoilL ; i ++ ) {
131- Total -> Soil .Moist [i ] += SoilMap [y ][x ].Moist [i ];
132- assert (SoilMap [y ][x ].Moist [i ] >= 0.0 );
133- Total -> Soil .Perc [i ] += SoilMap [y ][x ].Perc [i ];
134- Total -> Soil .Temp [i ] += SoilMap [y ][x ].Temp [i ];
135- Total -> SoilWater += SoilMap [y ][x ].Moist [i ] *
136- VType [VegMap [y ][x ].Veg - 1 ].RootDepth [i ] * Network [y ][x ].Adjust [i ];
137- DeepDepth += VType [VegMap [y ][x ].Veg - 1 ].RootDepth [i ];
138- }
139- Total -> Soil .Moist [Soil -> MaxLayers ] += SoilMap [y ][x ].Moist [NSoilL ];
140- Total -> SoilWater += SoilMap [y ][x ].Moist [NSoilL ] *
141- (SoilMap [y ][x ].Depth - DeepDepth )
142- * Network [y ][x ].Adjust [NSoilL ];
129+ for (i = 0 ; i < NSoilL ; i ++ ) {
130+ Total -> Soil .Moist [i ] += SoilMap [y ][x ].Moist [i ];
131+ assert (SoilMap [y ][x ].Moist [i ] >= 0.0 );
132+ Total -> Soil .Perc [i ] += SoilMap [y ][x ].Perc [i ];
133+ Total -> Soil .Temp [i ] += SoilMap [y ][x ].Temp [i ];
134+ Total -> SoilWater += SoilMap [y ][x ].Moist [i ] * VType [VegMap [y ][x ].Veg - 1 ].RootDepth [i ] * Network [y ][x ].Adjust [i ];
135+ DeepDepth += VType [VegMap [y ][x ].Veg - 1 ].RootDepth [i ];
136+ }
143137
144- Total -> Soil .TableDepth += SoilMap [y ][x ].TableDepth ;
145- if (SoilMap [y ][x ].TableDepth <= 0 )
146- (Total -> Saturated )++ ;
147- Total -> Soil .WaterLevel += SoilMap [y ][x ].WaterLevel ;
148- Total -> Soil .SatFlow += SoilMap [y ][x ].SatFlow ;
149- Total -> Soil .TSurf += SoilMap [y ][x ].TSurf ;
150- Total -> Soil .Qnet += SoilMap [y ][x ].Qnet ;
151- Total -> Soil .Qs += SoilMap [y ][x ].Qs ;
152- Total -> Soil .Qe += SoilMap [y ][x ].Qe ;
153- Total -> Soil .Qg += SoilMap [y ][x ].Qg ;
154- Total -> Soil .Qst += SoilMap [y ][x ].Qst ;
155- Total -> Soil .IExcess += SoilMap [y ][x ].IExcess ;
156- if (Options -> RoadRouting ){
157- if (Network [y ][x ].RoadArea > 0 ) {
158- for (i = 0 ; i < CELLFACTOR ; i ++ )
159- Total -> Road .IExcess += (Network [y ][x ].h [i ] *
160- Network [y ][x ].RoadArea )/
161- ((float )CELLFACTOR * (Map -> DX * Map -> DY ));
162- }
163- }
164- if (Options -> Infiltration == DYNAMIC )
165- Total -> Soil .InfiltAcc += SoilMap [y ][x ].InfiltAcc ;
166- Total -> Runoff += SoilMap [y ][x ].Runoff ;
167- Total -> ChannelInt += SoilMap [y ][x ].ChannelInt ;
168- SoilMap [y ][x ].ChannelInt = 0.0 ;
169- Total -> RoadInt += SoilMap [y ][x ].RoadInt ;
170- SoilMap [y ][x ].RoadInt = 0.0 ;
171- if (Options -> Sediment ){
172- if (Options -> SurfaceErosion ) {
173- Total -> Sediment .Erosion += SedMap [y ][x ].Erosion ;
174- Total -> Sediment .SedFluxOut += SedMap [y ][x ].SedFluxOut ;
175- }
176- * roadarea += Network [y ][x ].RoadArea ;
177- Total -> Road .Erosion += Network [y ][x ].Erosion ;
178- Total -> Sediment .RoadSed += SedMap [y ][x ].RoadSed ;
179- for (ii = 0 ; ii < Map -> DY /Map -> DMASS ; ii ++ ) {
180- for (jj = 0 ; jj < Map -> DX /Map -> DMASS ; jj ++ ) {
181- yy = (int ) y * Map -> DY /Map -> DMASS + ii ;
182- xx = (int ) x * Map -> DX /Map -> DMASS + jj ;
183- Total -> Fine .SatThickness += (* FineMap [yy ][xx ]).SatThickness ;
184- Total -> Fine .DeltaDepth += (* FineMap [yy ][xx ]).DeltaDepth ;
185- Total -> Fine .Probability += (* FineMap [yy ][xx ]).Probability ;
186- Total -> Fine .MassWasting += (* FineMap [yy ][xx ]).MassWasting ;
187- Total -> Fine .MassDeposition += (* FineMap [yy ][xx ]).MassDeposition ;
188- Total -> Fine .SedimentToChannel += (* FineMap [yy ][xx ]).SedimentToChannel ;
189- }
190- }
191- }
138+ Total -> Soil .Moist [Soil -> MaxLayers ] += SoilMap [y ][x ].Moist [NSoilL ];
139+ Total -> SoilWater += SoilMap [y ][x ].Moist [NSoilL ] * (SoilMap [y ][x ].Depth - DeepDepth ) * Network [y ][x ].Adjust [NSoilL ];
140+ Total -> Soil .TableDepth += SoilMap [y ][x ].TableDepth ;
141+
142+ if (SoilMap [y ][x ].TableDepth <= 0 )
143+ (Total -> Saturated )++ ;
144+
145+ Total -> Soil .WaterLevel += SoilMap [y ][x ].WaterLevel ;
146+ Total -> Soil .SatFlow += SoilMap [y ][x ].SatFlow ;
147+ Total -> Soil .TSurf += SoilMap [y ][x ].TSurf ;
148+ Total -> Soil .Qnet += SoilMap [y ][x ].Qnet ;
149+ Total -> Soil .Qs += SoilMap [y ][x ].Qs ;
150+ Total -> Soil .Qe += SoilMap [y ][x ].Qe ;
151+ Total -> Soil .Qg += SoilMap [y ][x ].Qg ;
152+ Total -> Soil .Qst += SoilMap [y ][x ].Qst ;
153+ Total -> Soil .IExcess += SoilMap [y ][x ].IExcess ;
154+ Total -> Soil .DetentionStorage += SoilMap [y ][x ].DetentionStorage ;
155+ if (Options -> RoadRouting ){
156+ if (Network [y ][x ].RoadArea > 0 ) {
157+ for (i = 0 ; i < CELLFACTOR ; i ++ )
158+ Total -> Road .IExcess += (Network [y ][x ].h [i ]* Network [y ][x ].RoadArea )/((float )CELLFACTOR * (Map -> DX * Map -> DY ));
159+ }
160+ }
161+
162+ if (Options -> Infiltration == DYNAMIC )
163+ Total -> Soil .InfiltAcc += SoilMap [y ][x ].InfiltAcc ;
164+
165+ Total -> Runoff += SoilMap [y ][x ].Runoff ;
166+ Total -> ChannelInt += SoilMap [y ][x ].ChannelInt ;
167+ SoilMap [y ][x ].ChannelInt = 0.0 ;
168+ Total -> RoadInt += SoilMap [y ][x ].RoadInt ;
169+ SoilMap [y ][x ].RoadInt = 0.0 ;
170+
171+ if (Options -> Sediment ){
172+ if (Options -> SurfaceErosion ) {
173+ Total -> Sediment .Erosion += SedMap [y ][x ].Erosion ;
174+ Total -> Sediment .SedFluxOut += SedMap [y ][x ].SedFluxOut ;
175+ }
176+ * roadarea += Network [y ][x ].RoadArea ;
177+ Total -> Road .Erosion += Network [y ][x ].Erosion ;
178+ Total -> Sediment .RoadSed += SedMap [y ][x ].RoadSed ;
179+ for (ii = 0 ; ii < Map -> DY /Map -> DMASS ; ii ++ ) {
180+ for (jj = 0 ; jj < Map -> DX /Map -> DMASS ; jj ++ ) {
181+ yy = (int ) y * Map -> DY /Map -> DMASS + ii ;
182+ xx = (int ) x * Map -> DX /Map -> DMASS + jj ;
183+ Total -> Fine .SatThickness += (* FineMap [yy ][xx ]).SatThickness ;
184+ Total -> Fine .DeltaDepth += (* FineMap [yy ][xx ]).DeltaDepth ;
185+ Total -> Fine .Probability += (* FineMap [yy ][xx ]).Probability ;
186+ Total -> Fine .MassWasting += (* FineMap [yy ][xx ]).MassWasting ;
187+ Total -> Fine .MassDeposition += (* FineMap [yy ][xx ]).MassDeposition ;
188+ Total -> Fine .SedimentToChannel += (* FineMap [yy ][xx ]).SedimentToChannel ;
189+ }
190+ }
191+ }
192192 }
193193 }
194194 }
@@ -265,7 +265,9 @@ void Aggregate(MAPSIZE *Map, OPTIONSTRUCT *Options, TOPOPIX **TopoMap,
265265 Total -> Soil .Qg /= NPixels ;
266266 Total -> Soil .Qst /= NPixels ;
267267 Total -> Soil .IExcess /= NPixels ;
268+ Total -> Soil .DetentionStorage /= NPixels ;
268269 Total -> Road .IExcess /= NPixels ;
270+
269271 if (Options -> Infiltration == DYNAMIC )
270272 Total -> Soil .InfiltAcc /= NPixels ;
271273 Total -> SoilWater /= NPixels ;
@@ -275,6 +277,8 @@ void Aggregate(MAPSIZE *Map, OPTIONSTRUCT *Options, TOPOPIX **TopoMap,
275277 Total -> CulvertReturnFlow /= NPixels ;
276278 Total -> CulvertToChannel /= NPixels ;
277279 Total -> RunoffToChannel /= NPixels ;
280+
281+ /* Average Sediment results */
278282 if (Options -> Sediment ) {
279283 if (Options -> SurfaceErosion ){
280284 Total -> Sediment .Erosion /= NPixels ;
0 commit comments