Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadCalculation.java @ 7054:f4d6ef50665a
issue1436: Repair sedimentload epoch calculation,
get initial NaNs out of the way, they give a bad taste when building sums over them.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Thu, 19 Sep 2013 12:51:30 +0200 |
parents | 7ee382b3f839 |
children | fabb5e7a3b66 |
comparison
equal
deleted
inserted
replaced
7053:3a55f49be155 | 7054:f4d6ef50665a |
---|---|
123 } | 123 } |
124 else { | 124 else { |
125 logger.error("Unknown mode " + yearEpoch); | 125 logger.error("Unknown mode " + yearEpoch); |
126 } | 126 } |
127 return null; | 127 return null; |
128 } | |
129 | |
130 | |
131 /** Returns val if not NaN, 0d otherwise. */ | |
132 private static double makeNaN0(double val) { | |
133 return Double.isNaN(val) | |
134 ? 0d | |
135 : val; | |
128 } | 136 } |
129 | 137 |
130 /** | 138 /** |
131 * Take Loads and build average of all fractions at given km. | 139 * Take Loads and build average of all fractions at given km. |
132 * The average fractions value is set in resLoad. | 140 * The average fractions value is set in resLoad. |
147 int ssbSum = 0; | 155 int ssbSum = 0; |
148 int sseSum = 0; | 156 int sseSum = 0; |
149 for (SedimentLoad load : epochLoads) { | 157 for (SedimentLoad load : epochLoads) { |
150 SedimentLoadFraction f = load.getFraction(km); | 158 SedimentLoadFraction f = load.getFraction(km); |
151 if (f.getCoarse() > 0d) { | 159 if (f.getCoarse() > 0d) { |
152 double c = resLoad.getFraction(km).getCoarse(); | 160 double c = makeNaN0(resLoad.getFraction(km).getCoarse()); |
153 resLoad.setCoarse(km, c + f.getCoarse(), f.getCoarseRange()); | 161 resLoad.setCoarse(km, c + f.getCoarse(), f.getCoarseRange()); |
154 cSum++; | 162 cSum++; |
155 } | 163 } |
156 if (f.getFineMiddle() > 0d) { | 164 if (f.getFineMiddle() > 0d) { |
157 double fm = resLoad.getFraction(km).getFineMiddle(); | 165 double fm = makeNaN0(resLoad.getFraction(km).getFineMiddle()); |
158 resLoad.setFineMiddle(km, fm + f.getFineMiddle(), f.getFineMiddleRange()); | 166 resLoad.setFineMiddle(km, fm + f.getFineMiddle(), f.getFineMiddleRange()); |
159 fmSum++; | 167 fmSum++; |
160 } | 168 } |
161 if (f.getSand() > 0d) { | 169 if (f.getSand() > 0d) { |
162 double s = resLoad.getFraction(km).getSand(); | 170 double s = makeNaN0(resLoad.getFraction(km).getSand()); |
163 resLoad.setSand(km, s + f.getSand(), f.getSandRange()); | 171 resLoad.setSand(km, s + f.getSand(), f.getSandRange()); |
164 sSum++; | 172 sSum++; |
165 } | 173 } |
166 if (f.getSuspSand() > 0d) { | 174 if (f.getSuspSand() > 0d) { |
167 double s = resLoad.getFraction(km).getSuspSand(); | 175 double s = makeNaN0(resLoad.getFraction(km).getSuspSand()); |
168 resLoad.setSuspSand(km, s + f.getSuspSand(), f.getSuspSandRange()); | 176 resLoad.setSuspSand(km, s + f.getSuspSand(), f.getSuspSandRange()); |
169 ssSum++; | 177 ssSum++; |
170 } | 178 } |
171 if (f.getSuspSandBed() > 0d) { | 179 if (f.getSuspSandBed() > 0d) { |
172 double s = resLoad.getFraction(km).getSuspSandBed(); | 180 double s = makeNaN0(resLoad.getFraction(km).getSuspSandBed()); |
173 resLoad.setSuspSandBed(km, s + f.getSuspSandBed(), f.getSuspSandBedRange()); | 181 resLoad.setSuspSandBed(km, s + f.getSuspSandBed(), f.getSuspSandBedRange()); |
174 ssbSum++; | 182 ssbSum++; |
175 } | 183 } |
176 if (f.getSuspSediment() > 0d) { | 184 if (f.getSuspSediment() > 0d) { |
177 double s = resLoad.getFraction(km).getSuspSediment(); | 185 double s = makeNaN0(resLoad.getFraction(km).getSuspSediment()); |
178 resLoad.setSuspSediment(km, s + f.getSuspSediment(), f.getSuspSedimentRange()); | 186 resLoad.setSuspSediment(km, s + f.getSuspSediment(), f.getSuspSedimentRange()); |
179 sseSum++; | 187 sseSum++; |
180 } | 188 } |
181 } | 189 } |
182 | 190 |