Mercurial > dive4elements > river
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; |