Mercurial > dive4elements > river
changeset 4798:39885bdfc6fc
Added calculation of the "Umhuellende" to calculation of "W fuer ungleichwertige Abfluesse".
This is done by figuring out the WST columns that imfold the data and then do
simple "gleichwertige" calculations from the start of the interval. This
is too much because only the Qs are needed for the "Umhuellende".
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Sun, 13 Jan 2013 16:18:28 +0100 (2013-01-13) |
parents | 43e69af28b3c |
children | e3532c7850b9 |
files | flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation4.java |
diffstat | 1 files changed, 55 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation4.java Sun Jan 13 14:18:04 2013 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation4.java Sun Jan 13 16:18:28 2013 +0100 @@ -11,6 +11,7 @@ import de.intevation.flys.utils.DoubleUtil; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -228,9 +229,63 @@ results[i].setName(createName(i)); } + // Generate the "Umhuellende". + results = generateInfolding(table, results, from, to, step); + return new CalculationResult(results, this); } + protected WQKms [] generateInfolding( + WstValueTable wst, + WQKms [] results, + double from, + double to, + double step + ) { + WstValueTable.Column [] columns = wst.getColumns(); + + InfoldingColumns ic = new InfoldingColumns(columns); + ic.markInfoldingColumns(results); + + List<WQKms> infoldings = new ArrayList<WQKms>(); + + boolean [] infoldingColumns = ic.getInfoldingColumns(); + for (int i = 0; i < infoldingColumns.length; ++i) { + if (infoldingColumns[i]) { + continue; + } + double q = columns[i].getQRangeTree().findQ(from); + if (Double.isNaN(q)) { + addProblem(from, "cannot.find.q"); + continue; + } + double [] kms = DoubleUtil.explode(from, to, step); + double [] oqs = new double[kms.length]; + double [] ows = new double[kms.length]; + boolean success = + wst.interpolate(q, from, kms, ows, oqs, this) != null; + + if (success) { + // TODO: generate a better name. I18N. + String name = "Umh\u00fcllende " + columns[i].getName(); + WQKms wqkms = new WQKms(kms, oqs, ows, name); + infoldings.add(wqkms); + } + } + + int N = infoldings.size(); + if (N > 0) { + WQKms [] newResults = new WQKms[results.length + N]; + System.arraycopy(results, 0, newResults, 0, results.length); + for (int i = 0; i < N; ++i) { + newResults[i+results.length] = infoldings.get(i); + } + results = newResults; + } + + return results; + } + protected String createName(int index) { // TODO: i18n StringBuilder sb = new StringBuilder(isQ ? "Q" : "W");