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

http://dive4elements.wald.intevation.org