comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadCalculation.java @ 6928:2119f13f95ab

SedimentLoadCalculation: Refactoring, extracted method.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 27 Aug 2013 14:58:03 +0200
parents 68c7b5811c4f
children d4108d6c4000
comparison
equal deleted inserted replaced
6927:0288db5e90d5 6928:2119f13f95ab
123 results.toArray(new SedimentLoadResult[results.size()]), this); 123 results.toArray(new SedimentLoadResult[results.size()]), this);
124 } 124 }
125 return null; 125 return null;
126 } 126 }
127 127
128 private void calculateEpochKm(
129 List<SedimentLoad> epochLoads,
130 SedimentLoad resLoad,
131 double km
132 ) {
133 int cSum = 0;
134 int fmSum = 0;
135 int sSum = 0;
136 int ssSum = 0;
137 int ssbSum = 0;
138 int sseSum = 0;
139 for (SedimentLoad load : epochLoads) {
140 SedimentLoadFraction f = load.getFraction(km);
141 if (f.getCoarse() > 0d) {
142 double c = resLoad.getFraction(km).getCoarse();
143 resLoad.setCoarse(km, c + f.getCoarse(), f.getCoarseRange());
144 cSum++;
145 }
146 if (f.getFineMiddle() > 0d) {
147 double fm = resLoad.getFraction(km).getFineMiddle();
148 resLoad.setFineMiddle(km, fm + f.getFineMiddle(), f.getFineMiddleRange());
149 fmSum++;
150 }
151 if (f.getSand() > 0d) {
152 double s = resLoad.getFraction(km).getSand();
153 resLoad.setSand(km, s + f.getSand(), f.getSandRange());
154 sSum++;
155 }
156 if (f.getSuspSand() > 0d) {
157 double s = resLoad.getFraction(km).getSuspSand();
158 resLoad.setSuspSand(km, s + f.getSuspSand(), f.getSuspSandRange());
159 ssSum++;
160 }
161 if (f.getSuspSandBed() > 0d) {
162 double s = resLoad.getFraction(km).getSuspSandBed();
163 resLoad.setSuspSandBed(km, s + f.getSuspSandBed(), f.getSuspSandBedRange());
164 ssbSum++;
165 }
166 if (f.getSuspSediment() > 0d) {
167 double s = resLoad.getFraction(km).getSuspSediment();
168 resLoad.setSuspSediment(km, s + f.getSuspSediment(), f.getSuspSedimentRange());
169 sseSum++;
170 }
171 }
172
173 SedimentLoadFraction fr = resLoad.getFraction(km);
174 // Prevent divisions by zero, the fraction defaults to 0d.
175 if (cSum != 0) {
176 resLoad.setCoarse(km, fr.getCoarse()/cSum, fr.getCoarseRange());
177 }
178 if (fmSum != 0) {
179 resLoad.setFineMiddle(km, fr.getFineMiddle()/fmSum,
180 fr.getFineMiddleRange());
181 }
182 if (sSum != 0) {
183 resLoad.setSand(km, fr.getSand()/sSum, fr.getSandRange());
184 }
185 if (ssSum != 0) {
186 resLoad.setSuspSand(km, fr.getSuspSand()/ssSum,
187 fr.getSuspSandRange());
188 }
189 if (ssbSum != 0) {
190 resLoad.setSuspSandBed(km, fr.getSuspSandBed()/ssbSum,
191 fr.getSuspSandBedRange());
192 }
193 if (sseSum != 0) {
194 resLoad.setSuspSediment(km, fr.getSuspSediment()/sseSum, fr.getSuspSedimentRange());
195 }
196 }
197
128 private SedimentLoadResult calculateEpoch(int i) { 198 private SedimentLoadResult calculateEpoch(int i) {
129 List<SedimentLoad> epochLoads = new ArrayList<SedimentLoad>(); 199 List<SedimentLoad> epochLoads = new ArrayList<SedimentLoad>();
130 for (int j = epoch[i][0]; j < epoch[i][1]; j++) { 200 for (int j = epoch[i][0]; j < epoch[i][1]; j++) {
131 epochLoads.add(SedimentLoadFactory.getLoadWithData( 201 epochLoads.add(SedimentLoadFactory.getLoadWithData(
132 this.river, 202 this.river,
147 } 217 }
148 } 218 }
149 } 219 }
150 220
151 for (int j = 0; j < kms.size(); j++) { 221 for (int j = 0; j < kms.size(); j++) {
152 int cSum = 0; 222 calculateEpochKm(epochLoads, resLoad, kms.get(j));
153 int fmSum = 0;
154 int sSum = 0;
155 int ssSum = 0;
156 int ssbSum = 0;
157 int sseSum = 0;
158 double km = kms.get(j);
159 for (SedimentLoad load : epochLoads) {
160 SedimentLoadFraction f = load.getFraction(km);
161 if (f.getCoarse() > 0d) {
162 double c = resLoad.getFraction(km).getCoarse();
163 resLoad.setCoarse(km, c + f.getCoarse(), f.getCoarseRange());
164 cSum++;
165 }
166 if (f.getFineMiddle() > 0d) {
167 double fm = resLoad.getFraction(km).getFineMiddle();
168 resLoad.setFineMiddle(km, fm + f.getFineMiddle(), f.getFineMiddleRange());
169 fmSum++;
170 }
171 if (f.getSand() > 0d) {
172 double s = resLoad.getFraction(km).getSand();
173 resLoad.setSand(km, s + f.getSand(), f.getSandRange());
174 sSum++;
175 }
176 if (f.getSuspSand() > 0d) {
177 double s = resLoad.getFraction(km).getSuspSand();
178 resLoad.setSuspSand(km, s + f.getSuspSand(), f.getSuspSandRange());
179 ssSum++;
180 }
181 if (f.getSuspSandBed() > 0d) {
182 double s = resLoad.getFraction(km).getSuspSandBed();
183 resLoad.setSuspSandBed(km, s + f.getSuspSandBed(), f.getSuspSandBedRange());
184 ssbSum++;
185 }
186 if (f.getSuspSediment() > 0d) {
187 double s = resLoad.getFraction(km).getSuspSediment();
188 resLoad.setSuspSediment(km, s + f.getSuspSediment(), f.getSuspSedimentRange());
189 sseSum++;
190 }
191 }
192 SedimentLoadFraction fr = resLoad.getFraction(km);
193 // Prevent divisions by zero, the fraction defaults to 0d.
194 if (cSum != 0) {
195 resLoad.setCoarse(km, fr.getCoarse()/cSum, fr.getCoarseRange());
196 }
197 if (fmSum != 0) {
198 resLoad.setFineMiddle(km, fr.getFineMiddle()/fmSum,
199 fr.getFineMiddleRange());
200 }
201 if (sSum != 0) {
202 resLoad.setSand(km, fr.getSand()/sSum, fr.getSandRange());
203 }
204 if (ssSum != 0) {
205 resLoad.setSuspSand(km, fr.getSuspSand()/ssSum,
206 fr.getSuspSandRange());
207 }
208 if (ssbSum != 0) {
209 resLoad.setSuspSandBed(km, fr.getSuspSandBed()/ssbSum,
210 fr.getSuspSandBedRange());
211 }
212 if (sseSum != 0) {
213 resLoad.setSuspSediment(km, fr.getSuspSediment()/sseSum, fr.getSuspSedimentRange());
214 }
215 } 223 }
216 resLoad.setDescription(""); 224 resLoad.setDescription("");
217 resLoad.setEpoch(true); 225 resLoad.setEpoch(true);
218 226
219 SedimentLoadResult result; 227 SedimentLoadResult result;

http://dive4elements.wald.intevation.org