# HG changeset patch # User Sascha L. Teichmann # Date 1358090308 -3600 # Node ID 39885bdfc6fc26fca8ccfad2728d5e29a06aa953 # Parent 43e69af28b3cdf1b25bcf620fa8bc9344c77b222 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". diff -r 43e69af28b3c -r 39885bdfc6fc flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation4.java --- 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 infoldings = new ArrayList(); + + 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");