Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 2418:899ca89f497e
Another partial fix for flys/issue499: Do the W to Q conversions
needed for 'W am Pegel' correctly.
flys-artifacts/trunk@4052 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 14 Feb 2012 16:48:13 +0000 |
parents | 64dd65aa620d |
children | 44dc117aa2b7 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Tue Feb 14 09:02:51 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Tue Feb 14 16:48:13 2012 +0000 @@ -48,6 +48,7 @@ import de.intevation.flys.model.FastCrossSectionLine; import de.intevation.flys.model.Gauge; import de.intevation.flys.model.River; +import de.intevation.flys.model.DischargeTable; import de.intevation.flys.utils.DoubleUtil; import de.intevation.flys.utils.FLYSUtils; @@ -925,36 +926,44 @@ logger.debug("convert w->q with gauge '" + g.getName() + "'"); } - DischargeTables dt = new DischargeTables(r.getName(), g.getName()); - Map<String, double [][]> tmp = dt.getValues(); + DischargeTable dt = g.fetchMasterDischargeTable(); - double[][] values = tmp.get(g.getName()); - double[] qs = new double[ws.length]; + if (dt == null) { + logger.warn("No master discharge table found for gauge '" + + g.getName() + "'"); + return null; + } + + double [][] values = DischargeTables.loadDischargeTableValues(dt, 1); TDoubleArrayList wsOut = new TDoubleArrayList(ws.length); TDoubleArrayList qsOut = new TDoubleArrayList(ws.length); + boolean generatedWs = false; + for (int i = 0; i < ws.length; i++) { if (Double.isNaN(ws[i])) { logger.warn("W is NaN: ignored"); continue; } - double w = ws[i] / 100.0; - double q = dt.getQForW(values, w); - if (Double.isNaN(q)) { - logger.warn("No Q found for W = " + ws[i]); - continue; + double w = ws[i] / 100d; + double [] qs = DischargeTables.getQsForW(values, w); + + if (qs.length == 0) { + logger.warn("No Qs found for W = " + ws[i]); } - wsOut.add(w); - qsOut.add(q); - if (debug) { - logger.debug("w: " + w + " -> q: " + q); + else { + for (double q: qs) { + wsOut.add(ws[i]); + qsOut.add(q); + } } + generatedWs |= qs.length != 1; } return new double [][] { qsOut.toNativeArray(), - wsOut.toNativeArray() + generatedWs ? wsOut.toNativeArray() : null }; }