Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/WstValueTable.java @ 6490:181c09bff978
issue1383: Added new facet type.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Fri, 28 Jun 2013 11:23:06 +0200 |
parents | 898afcce1d0a |
children | 0f0f09badd29 |
rev | line source |
---|---|
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
2 * Software engineering by Intevation GmbH |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
3 * |
5994
af13ceeba52a
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5863
diff
changeset
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
5994
af13ceeba52a
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5863
diff
changeset
|
6 * documentation coming with Dive4Elements River for details. |
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
7 */ |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
8 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4797
diff
changeset
|
9 package org.dive4elements.river.artifacts.model; |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 import java.io.Serializable; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4797
diff
changeset
|
13 import org.dive4elements.river.artifacts.math.Linear; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4797
diff
changeset
|
14 import org.dive4elements.river.artifacts.math.Function; |
6434
898afcce1d0a
Partial fix for flys/1303
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5994
diff
changeset
|
15 import org.dive4elements.river.utils.DoubleUtil; |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
16 |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
17 import java.util.Arrays; |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 import java.util.ArrayList; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 import java.util.List; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 import java.util.Collections; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
22 import org.apache.log4j.Logger; |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
23 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
24 import org.apache.commons.math.analysis.interpolation.SplineInterpolator; |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
25 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
26 import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction; |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
27 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
28 import org.apache.commons.math.ArgumentOutsideDomainException; |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
29 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
30 import org.apache.commons.math.exception.MathIllegalArgumentException; |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
31 |
1937
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
32 import gnu.trove.TDoubleArrayList; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
33 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
34 /** |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
35 * W, Q and km data from database 'wsts' spiced with interpolation algorithms. |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
36 */ |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 public class WstValueTable |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 implements Serializable |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 { |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
40 private static Logger log = Logger.getLogger(WstValueTable.class); |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
41 |
395
aae8f327425e
'berechnete Abflusskurve': generate ws from qs
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
380
diff
changeset
|
42 public static final int DEFAULT_Q_STEPS = 500; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
43 |
2253
707b47d8c554
Dont sort the data series in reference curve.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2248
diff
changeset
|
44 public static final int RELATE_WS_SAMPLES = 200; |
2186
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
45 |
1721
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
46 /** |
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
47 * A Column in the table, typically representing one measurement session. |
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
48 */ |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
49 public static final class Column |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
50 implements Serializable |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 protected String name; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
53 |
632
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
54 protected QRangeTree qRangeTree; |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
55 |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
56 public Column() { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
57 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
58 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
59 public Column(String name) { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
60 this.name = name; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
61 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
62 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
63 public String getName() { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
64 return name; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
65 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
66 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
67 public void setName(String name) { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
68 this.name = name; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
69 } |
632
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
70 |
4797
43e69af28b3c
A naive algorithm to figure out the "Umhuellende" of a set of WQKms.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4119
diff
changeset
|
71 public QRangeTree getQRangeTree() { |
632
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
72 return qRangeTree; |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
73 } |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
74 |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
75 public void setQRangeTree(QRangeTree qRangeTree) { |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
76 this.qRangeTree = qRangeTree; |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
77 } |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
78 } // class Column |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 |
1721
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
80 /** |
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
81 * A (weighted) position used for interpolation. |
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
82 */ |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
83 public static final class QPosition { |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
84 |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
85 protected int index; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
86 protected double weight; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
87 |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
88 public QPosition() { |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
89 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
90 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
91 public QPosition(int index, double weight) { |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
92 this.index = index; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
93 this.weight = weight; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
94 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
95 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
96 public QPosition set(int index, double weight) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
97 this.index = index; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
98 this.weight = weight; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
99 return this; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
100 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
101 |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
102 } // class Position |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
103 |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
104 public static final class SplineFunction { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
105 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
106 public PolynomialSplineFunction spline; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
107 public double [] splineQs; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
108 public double [] splineWs; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
109 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
110 public SplineFunction( |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
111 PolynomialSplineFunction spline, |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
112 double [] splineQs, |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
113 double [] splineWs |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
114 ) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
115 this.spline = spline; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
116 this.splineQs = splineQs; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
117 this.splineWs = splineWs; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
118 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
119 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
120 public double [][] sample( |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
121 int numSamples, |
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
122 double km, |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
123 Calculation errors |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
124 ) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
125 double minQ = getQMin(); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
126 double maxQ = getQMax(); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
127 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
128 double [] outWs = new double[numSamples]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
129 double [] outQs = new double[numSamples]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
130 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
131 Arrays.fill(outWs, Double.NaN); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
132 Arrays.fill(outQs, Double.NaN); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
133 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
134 double stepWidth = (maxQ - minQ)/numSamples; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
135 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
136 try { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
137 double q = minQ; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
138 for (int i = 0; i < outWs.length; ++i, q += stepWidth) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
139 outWs[i] = spline.value(outQs[i] = q); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
140 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
141 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
142 catch (ArgumentOutsideDomainException aode) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
143 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
144 errors.addProblem(km, "spline.interpolation.failed"); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
145 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
146 log.error("spline interpolation failed.", aode); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
147 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
148 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
149 return new double [][] { outWs, outQs }; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
150 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
151 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
152 public double getQMin() { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
153 return Math.min(splineQs[0], splineQs[splineQs.length-1]); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
154 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
155 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
156 public double getQMax() { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
157 return Math.max(splineQs[0], splineQs[splineQs.length-1]); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
158 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
159 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
160 /** Constructs a continues index between the columns to Qs. */ |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
161 public PolynomialSplineFunction createIndexQRelation() { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
162 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
163 double [] indices = new double[splineQs.length]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
164 for (int i = 0; i < indices.length; ++i) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
165 indices[i] = i; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
166 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
167 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
168 try { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
169 SplineInterpolator interpolator = new SplineInterpolator(); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
170 return interpolator.interpolate(indices, splineQs); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
171 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
172 catch (MathIllegalArgumentException miae) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
173 // Ignore me! |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
174 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
175 return null; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
176 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
177 } // class SplineFunction |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
178 |
1721
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
179 /** |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
180 * A row, typically a position where measurements were taken. |
1721
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
181 */ |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
182 public static final class Row |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
183 implements Serializable, Comparable<Row> |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
184 { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
185 double km; |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
186 double [] ws; |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
188 public Row() { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
189 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
190 |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
191 public Row(double km) { |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
192 this.km = km; |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
193 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
194 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
195 public Row(double km, double [] ws) { |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
196 this(km); |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
197 this.ws = ws; |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
198 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
199 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
200 /** |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
201 * Compare according to place of measurement (km). |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
202 */ |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
203 public int compareTo(Row other) { |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
204 double d = km - other.km; |
458
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
205 if (d < -0.0001) return -1; |
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
206 if (d > 0.0001) return +1; |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
207 return 0; |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
208 } |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
209 |
1887
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
210 /** |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
211 * Interpolate Ws, given Qs and a km. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
212 * |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
213 * @param iqs Given ("input") Qs. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
214 * @param ows Resulting ("output") Ws. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
215 * @param table Table of which to use data for interpolation. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
216 */ |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
217 public void interpolateW( |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
218 Row other, |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
219 double km, |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
220 double [] iqs, |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
221 double [] ows, |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
222 WstValueTable table, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
223 Calculation errors |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
224 ) { |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
225 double kmWeight = Linear.factor(km, this.km, other.km); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
226 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
227 QPosition qPosition = new QPosition(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
228 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
229 for (int i = 0; i < iqs.length; ++i) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
230 if (table.getQPosition(km, iqs[i], qPosition) != null) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
231 double wt = getW(qPosition); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
232 double wo = other.getW(qPosition); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
233 if (Double.isNaN(wt) || Double.isNaN(wo)) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
234 if (errors != null) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
235 errors.addProblem( |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
236 km, "cannot.find.w.for.q", iqs[i]); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
237 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
238 ows[i] = Double.NaN; |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
239 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
240 else { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
241 ows[i] = Linear.weight(kmWeight, wt, wo); |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
242 } |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
243 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
244 else { |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
245 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
246 errors.addProblem(km, "cannot.find.q", iqs[i]); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
247 } |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
248 ows[i] = Double.NaN; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
249 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
250 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
251 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
252 |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
253 |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
254 public SplineFunction createSpline( |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
255 WstValueTable table, |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
256 Calculation errors |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
257 ) { |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
258 int W = ws.length; |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
259 |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
260 if (W < 1) { |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
261 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
262 errors.addProblem(km, "no.ws.found"); |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
263 } |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
264 return null; |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
265 } |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
266 |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
267 double [] splineQs = new double[W]; |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
268 |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
269 for (int i = 0; i < W; ++i) { |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
270 double sq = table.getQIndex(i, km); |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
271 if (Double.isNaN(sq) && errors != null) { |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
272 errors.addProblem( |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
273 km, "no.q.found.in.column", (i+1)); |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
274 } |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
275 splineQs[i] = sq; |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
276 } |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
277 |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
278 try { |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
279 SplineInterpolator interpolator = new SplineInterpolator(); |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
280 PolynomialSplineFunction spline = |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
281 interpolator.interpolate(splineQs, ws); |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
282 |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
283 return new SplineFunction(spline, splineQs, ws); |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
284 } |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
285 catch (MathIllegalArgumentException miae) { |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
286 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
287 errors.addProblem(km, "spline.creation.failed"); |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
288 } |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
289 log.error("spline creation failed", miae); |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
290 } |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
291 return null; |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
292 } |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
293 |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
294 public SplineFunction createSpline( |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
295 Row other, |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
296 double km, |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
297 WstValueTable table, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
298 Calculation errors |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
299 ) { |
395
aae8f327425e
'berechnete Abflusskurve': generate ws from qs
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
380
diff
changeset
|
300 int W = Math.min(ws.length, other.ws.length); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
301 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
302 if (W < 1) { |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
303 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
304 errors.addProblem("no.ws.found"); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
305 } |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
306 return null; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
307 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
308 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
309 double factor = Linear.factor(km, this.km, other.km); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
310 |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
311 double [] splineQs = new double[W]; |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
312 double [] splineWs = new double[W]; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
313 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
314 for (int i = 0; i < W; ++i) { |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
315 double wws = Linear.weight(factor, ws[i], other.ws[i]); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
316 double wqs = Linear.weight( |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
317 factor, |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
318 table.getQIndex(i, km), |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
319 table.getQIndex(i, other.km)); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
320 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
321 if (Double.isNaN(wws) || Double.isNaN(wqs)) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
322 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
323 errors.addProblem(km, "cannot.find.w.or.q"); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
324 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
325 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
326 |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
327 splineWs[i] = wws; |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
328 splineQs[i] = wqs; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
329 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
330 |
6434
898afcce1d0a
Partial fix for flys/1303
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5994
diff
changeset
|
331 DoubleUtil.sortByFirst(splineQs, splineWs); |
898afcce1d0a
Partial fix for flys/1303
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5994
diff
changeset
|
332 |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
333 SplineInterpolator interpolator = new SplineInterpolator(); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
334 |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
335 try { |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
336 PolynomialSplineFunction spline = |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
337 interpolator.interpolate(splineQs, splineWs); |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
338 |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
339 return new SplineFunction(spline, splineQs, splineWs); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
340 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
341 catch (MathIllegalArgumentException miae) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
342 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
343 errors.addProblem(km, "spline.creation.failed"); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
344 } |
1860
ddd425858169
Improved logging to include exception in fail case of spline interpolation of wst.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1838
diff
changeset
|
345 log.error("spline creation failed", miae); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
346 } |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
347 |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
348 return null; |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
349 } |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
350 |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
351 public double [][] interpolateWQ( |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
352 Row other, |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
353 double km, |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
354 int steps, |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
355 WstValueTable table, |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
356 Calculation errors |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
357 ) { |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
358 SplineFunction sf = createSpline(other, km, table, errors); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
359 |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
360 return sf != null |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
361 ? sf.sample(steps, km, errors) |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
362 : new double[2][0]; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
363 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
364 |
1721
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
365 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
366 public double [][] interpolateWQ( |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
704
diff
changeset
|
367 int steps, |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
368 WstValueTable table, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
369 Calculation errors |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
370 ) { |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
371 SplineFunction sf = createSpline(table, errors); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
372 |
1938
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
373 return sf != null |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
374 ? sf.sample(steps, km, errors) |
1d991c91285b
Refactored the code of the 'berechnete Abflusskurve' to be reusable in the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1937
diff
changeset
|
375 : new double[2][0]; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
376 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
377 |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
378 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
379 public double getW(QPosition qPosition) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
380 int index = qPosition.index; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
381 double weight = qPosition.weight; |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
382 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
383 return weight == 1.0 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
384 ? ws[index] |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
385 : Linear.weight(weight, ws[index-1], ws[index]); |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
386 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
387 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
388 public double getW( |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
389 Row other, |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
390 double km, |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
391 QPosition qPosition |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
392 ) { |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
393 double kmWeight = Linear.factor(km, this.km, other.km); |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
394 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
395 int index = qPosition.index; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
396 double weight = qPosition.weight; |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
397 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
398 double tw, ow; |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
399 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
400 if (weight == 1.0) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
401 tw = ws[index]; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
402 ow = other.ws[index]; |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
403 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
404 else { |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
704
diff
changeset
|
405 tw = Linear.weight(weight, ws[index-1], ws[index]); |
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
704
diff
changeset
|
406 ow = Linear.weight(weight, other.ws[index-1], other.ws[index]); |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
407 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
408 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
409 return Linear.weight(kmWeight, tw, ow); |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
410 } |
1937
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
411 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
412 public double [] findQsForW(double w, WstValueTable table) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
413 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
414 TDoubleArrayList qs = new TDoubleArrayList(); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
415 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
416 if (ws.length > 0 && Math.abs(ws[0]-w) < 0.000001) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
417 double q = table.getQIndex(0, km); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
418 if (!Double.isNaN(q)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
419 qs.add(q); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
420 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
421 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
422 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
423 for (int i = 1; i < ws.length; ++i) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
424 double w2 = ws[i]; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
425 if (Double.isNaN(w2)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
426 continue; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
427 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
428 if (Math.abs(w2-w) < 0.000001) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
429 double q = table.getQIndex(i, km); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
430 if (!Double.isNaN(q)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
431 qs.add(q); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
432 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
433 continue; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
434 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
435 double w1 = ws[i-1]; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
436 if (Double.isNaN(w1)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
437 continue; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
438 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
439 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
440 if (w < Math.min(w1, w2) || w > Math.max(w1, w2)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
441 continue; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
442 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
443 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
444 double q1 = table.getQIndex(i-1, km); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
445 double q2 = table.getQIndex(i, km); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
446 if (Double.isNaN(q1) || Double.isNaN(q2)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
447 continue; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
448 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
449 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
450 double q = Linear.linear(w, w1, w2, q1, q2); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
451 qs.add(q); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
452 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
453 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
454 return qs.toNativeArray(); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
455 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
456 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
457 public double [] findQsForW( |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
458 Row other, |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
459 double w, |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
460 double km, |
1937
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
461 WstValueTable table |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
462 ) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
463 TDoubleArrayList qs = new TDoubleArrayList(); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
464 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
465 double factor = Linear.factor(km, this.km, other.km); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
466 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
467 if (ws.length > 0) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
468 double wt = Linear.weight(factor, ws[0], other.ws[0]); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
469 if (!Double.isNaN(wt)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
470 double q = table.getQIndex(0, km); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
471 if (!Double.isNaN(q)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
472 qs.add(q); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
473 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
474 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
475 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
476 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
477 for (int i = 1; i < ws.length; ++i) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
478 double w2 = Linear.weight(factor, ws[i], other.ws[i]); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
479 if (Double.isNaN(w2)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
480 continue; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
481 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
482 if (Math.abs(w2-w) < 0.000001) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
483 double q = table.getQIndex(i, km); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
484 if (!Double.isNaN(q)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
485 qs.add(q); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
486 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
487 continue; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
488 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
489 double w1 = Linear.weight(factor, ws[i-1], other.ws[i-1]); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
490 if (Double.isNaN(w1)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
491 continue; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
492 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
493 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
494 if (w < Math.min(w1, w2) || w > Math.max(w1, w2)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
495 continue; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
496 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
497 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
498 double q1 = table.getQIndex(i-1, km); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
499 double q2 = table.getQIndex(i, km); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
500 if (Double.isNaN(q1) || Double.isNaN(q2)) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
501 continue; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
502 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
503 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
504 double q = Linear.linear(w, w1, w2, q1, q2); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
505 qs.add(q); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
506 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
507 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
508 return qs.toNativeArray(); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
509 } |
2423
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
510 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
511 public double [] getMinMaxW(double [] result) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
512 double minW = Double.MAX_VALUE; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
513 double maxW = -Double.MAX_VALUE; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
514 for (int i = 0; i < ws.length; ++i) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
515 double w = ws[i]; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
516 if (w < minW) minW = w; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
517 if (w > maxW) maxW = w; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
518 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
519 result[0] = minW; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
520 result[1] = maxW; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
521 return result; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
522 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
523 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
524 public double [] getMinMaxW(Row other, double km, double [] result) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
525 double [] m1 = this .getMinMaxW(new double [2]); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
526 double [] m2 = other.getMinMaxW(new double [2]); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
527 double factor = Linear.factor(km, this.km, other.km); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
528 result[0] = Linear.weight(factor, m1[0], m2[0]); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
529 result[1] = Linear.weight(factor, m1[1], m2[1]); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
530 return result; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
531 } |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
532 } // class Row |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
533 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
534 /** Rows in table. */ |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
535 protected List<Row> rows; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
536 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
537 /** Columns in table. */ |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
538 protected Column [] columns; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
539 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
540 public WstValueTable() { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
541 rows = new ArrayList<Row>(); |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
542 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
543 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
544 public WstValueTable(Column [] columns) { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
545 this(); |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
546 this.columns = columns; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
547 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
548 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
549 public WstValueTable(Column [] columns, List<Row> rows) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
550 this.columns = columns; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
551 this.rows = rows; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
552 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
553 |
4797
43e69af28b3c
A naive algorithm to figure out the "Umhuellende" of a set of WQKms.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4119
diff
changeset
|
554 public Column [] getColumns() { |
43e69af28b3c
A naive algorithm to figure out the "Umhuellende" of a set of WQKms.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4119
diff
changeset
|
555 return columns; |
43e69af28b3c
A naive algorithm to figure out the "Umhuellende" of a set of WQKms.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4119
diff
changeset
|
556 } |
43e69af28b3c
A naive algorithm to figure out the "Umhuellende" of a set of WQKms.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4119
diff
changeset
|
557 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
558 /** Sort rows (by km). */ |
458
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
559 public void sortRows() { |
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
560 Collections.sort(rows); |
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
561 } |
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
562 |
1887
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
563 /** |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
564 * @param km Given kilometer. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
565 * @param qs Given Q values. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
566 * @param ws output parameter. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
567 */ |
380
5f55047a17e8
Moved expensive allocation of result arrays out of km loop.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
374
diff
changeset
|
568 public double [] interpolateW(double km, double [] qs, double [] ws) { |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
569 return interpolateW(km, qs, ws, null); |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
570 } |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
571 |
1098
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
572 |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
573 /** |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
574 * @param ws (output parameter), gets returned. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
575 * @return output parameter ws. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
576 */ |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
577 public double [] interpolateW( |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
578 double km, |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
704
diff
changeset
|
579 double [] qs, |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
580 double [] ws, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
581 Calculation errors |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
582 ) { |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
583 int rowIndex = Collections.binarySearch(rows, new Row(km)); |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
584 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
585 QPosition qPosition = new QPosition(); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
586 |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
587 if (rowIndex >= 0) { // direct row match |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
588 Row row = rows.get(rowIndex); |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
589 for (int i = 0; i < qs.length; ++i) { |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
590 if (getQPosition(km, qs[i], qPosition) == null) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
591 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
592 errors.addProblem(km, "cannot.find.q", qs[i]); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
593 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
594 ws[i] = Double.NaN; |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
595 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
596 else { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
597 if (Double.isNaN(ws[i] = row.getW(qPosition)) |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
598 && errors != null) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
599 errors.addProblem( |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
600 km, "cannot.find.w.for.q", qs[i]); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
601 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
602 } |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
603 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
604 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
605 else { // needs bilinear interpolation |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
606 rowIndex = -rowIndex -1; |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
607 |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
608 if (rowIndex < 1 || rowIndex >= rows.size()) { |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
609 // do not extrapolate |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
610 Arrays.fill(ws, Double.NaN); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
611 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
612 errors.addProblem(km, "km.not.found"); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
613 } |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
614 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
615 else { |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
616 Row r1 = rows.get(rowIndex-1); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
617 Row r2 = rows.get(rowIndex); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
618 r1.interpolateW(r2, km, qs, ws, this, errors); |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
619 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
620 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
621 |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
622 return ws; |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
623 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
624 |
2559
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
625 public double [] getMinMaxQ(double km) { |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
626 return getMinMaxQ(km, new double [2]); |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
627 } |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
628 |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
629 public double [] getMinMaxQ(double km, double [] result) { |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
630 double minQ = Double.MAX_VALUE; |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
631 double maxQ = -Double.MAX_VALUE; |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
632 |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
633 for (int i = 0; i < columns.length; ++i) { |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
634 double q = columns[i].getQRangeTree().findQ(km); |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
635 if (!Double.isNaN(q)) { |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
636 if (q < minQ) minQ = q; |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
637 if (q > maxQ) maxQ = q; |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
638 } |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
639 } |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
640 |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
641 if (minQ < Double.MAX_VALUE) { |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
642 result[0] = minQ; |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
643 result[1] = maxQ; |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
644 return result; |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
645 } |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
646 |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
647 return null; |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
648 } |
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
649 |
2560
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
650 public double [] getMinMaxQ(double from, double to, double step) { |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
651 double [] result = new double[2]; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
652 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
653 double minQ = Double.MAX_VALUE; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
654 double maxQ = -Double.MAX_VALUE; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
655 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
656 if (from > to) { |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
657 double tmp = from; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
658 from = to; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
659 to = tmp; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
660 } |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
661 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
662 step = Math.max(Math.abs(step), 0.0001); |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
663 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
664 double d = from; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
665 for (; d <= to; d += step) { |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
666 if (getMinMaxQ(d, result) != null) { |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
667 if (result[0] < minQ) minQ = result[0]; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
668 if (result[1] > maxQ) maxQ = result[1]; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
669 } |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
670 } |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
671 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
672 if (d != to) { |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
673 if (getMinMaxQ(to, result) != null) { |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
674 if (result[0] < minQ) minQ = result[0]; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
675 if (result[1] > maxQ) maxQ = result[1]; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
676 } |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
677 } |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
678 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
679 return minQ < Double.MAX_VALUE |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
680 ? new double [] { minQ, maxQ } |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
681 : null; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
682 } |
2559
407bbc74fe0b
WstValueTable: Symmetrical to getMinMaxW() add two methods to find min/max Q for a given
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2558
diff
changeset
|
683 |
2423
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
684 public double [] getMinMaxW(double km) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
685 return getMinMaxW(km, new double [2]); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
686 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
687 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
688 public double [] getMinMaxW(double km, double [] result) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
689 int rowIndex = Collections.binarySearch(rows, new Row(km)); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
690 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
691 if (rowIndex >= 0) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
692 return rows.get(rowIndex).getMinMaxW(result); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
693 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
694 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
695 rowIndex = -rowIndex -1; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
696 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
697 if (rowIndex < 1 || rowIndex >= rows.size()) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
698 // do not extrapolate |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
699 return null; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
700 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
701 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
702 Row r1 = rows.get(rowIndex-1); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
703 Row r2 = rows.get(rowIndex); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
704 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
705 return r1.getMinMaxW(r2, km, result); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
706 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
707 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
708 public double [] getMinMaxW(double from, double to, double step) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
709 double [] result = new double[2]; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
710 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
711 double minW = Double.MAX_VALUE; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
712 double maxW = -Double.MAX_VALUE; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
713 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
714 if (from > to) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
715 double tmp = from; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
716 from = to; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
717 to = tmp; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
718 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
719 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
720 step = Math.max(Math.abs(step), 0.0001); |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
721 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
722 double d = from; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
723 for (; d <= to; d += step) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
724 if (getMinMaxW(d, result) != null) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
725 if (result[0] < minW) minW = result[0]; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
726 if (result[1] > maxW) maxW = result[1]; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
727 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
728 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
729 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
730 if (d != to) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
731 if (getMinMaxW(to, result) != null) { |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
732 if (result[0] < minW) minW = result[0]; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
733 if (result[1] > maxW) maxW = result[1]; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
734 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
735 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
736 |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
737 return minW < Double.MAX_VALUE |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
738 ? new double [] { minW, maxW } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
739 : null; |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
740 } |
ac528b883b47
Picked rev 4070,4074,4076,4080 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2404
diff
changeset
|
741 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
742 /** |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
743 * Interpolate W and Q values at a given km. |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
744 */ |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
745 public double [][] interpolateWQ(double km) { |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
746 return interpolateWQ(km, null); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
747 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
748 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
749 /** |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
750 * Interpolate W and Q values at a given km. |
3265
c1f445b94d03
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
751 * |
c1f445b94d03
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
752 * @param errors where to store errors. |
c1f445b94d03
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
753 * |
c1f445b94d03
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
754 * @return double double array, first index Ws, second Qs. |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
755 */ |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
756 public double [][] interpolateWQ(double km, Calculation errors) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
757 return interpolateWQ(km, DEFAULT_Q_STEPS, errors); |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
758 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
759 |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
760 |
1860
ddd425858169
Improved logging to include exception in fail case of spline interpolation of wst.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1838
diff
changeset
|
761 /** |
ddd425858169
Improved logging to include exception in fail case of spline interpolation of wst.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1838
diff
changeset
|
762 * Interpolate W and Q values at a given km. |
ddd425858169
Improved logging to include exception in fail case of spline interpolation of wst.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1838
diff
changeset
|
763 */ |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
764 public double [][] interpolateWQ(double km, int steps, Calculation errors) { |
395
aae8f327425e
'berechnete Abflusskurve': generate ws from qs
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
380
diff
changeset
|
765 |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
766 int rowIndex = Collections.binarySearch(rows, new Row(km)); |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
767 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
768 if (rowIndex >= 0) { // direct row match |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
769 Row row = rows.get(rowIndex); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
770 return row.interpolateWQ(steps, this, errors); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
771 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
772 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
773 rowIndex = -rowIndex -1; |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
774 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
775 if (rowIndex < 1 || rowIndex >= rows.size()) { |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
776 // do not extrapolate |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
777 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
778 errors.addProblem(km, "km.not.found"); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
779 } |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
780 return new double[2][0]; |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
781 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
782 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
783 Row r1 = rows.get(rowIndex-1); |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
784 Row r2 = rows.get(rowIndex); |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
785 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
786 return r1.interpolateWQ(r2, km, steps, this, errors); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
787 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
788 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
789 public boolean interpolate( |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
790 double km, |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
791 double [] out, |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
792 QPosition qPosition, |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
793 Function qFunction |
649
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
794 ) { |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
795 int R1 = rows.size()-1; |
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
796 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
797 out[1] = qFunction.value(getQ(qPosition, km)); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
798 |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
799 if (Double.isNaN(out[1])) { |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
800 return false; |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
801 } |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
802 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
803 QPosition nPosition = new QPosition(); |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
804 if (getQPosition(km, out[1], nPosition) == null) { |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
805 return false; |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
806 } |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
807 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
808 int rowIndex = Collections.binarySearch(rows, new Row(km)); |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
809 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
810 if (rowIndex >= 0) { |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
811 // direct row match |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
812 out[0] = rows.get(rowIndex).getW(nPosition); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
813 return !Double.isNaN(out[0]); |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
814 } |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
815 |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
816 rowIndex = -rowIndex -1; |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
817 |
1681
e5f7f25a511c
fixed flys/issue201
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1098
diff
changeset
|
818 if (rowIndex < 1 || rowIndex > R1) { |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
819 // do not extrapolate |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
820 return false; |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
821 } |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
822 |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
823 Row r1 = rows.get(rowIndex-1); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
824 Row r2 = rows.get(rowIndex); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
825 out[0] = r1.getW(r2, km, nPosition); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
826 |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
827 return !Double.isNaN(out[0]); |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
828 } |
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
829 |
1098
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
830 |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
831 /** |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
832 * Look up interpolation of a Q at given positions. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
833 * |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
834 * @param q the non-interpolated Q value. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
835 * @param referenceKm the reference km (e.g. gauge position). |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
836 * @param kms positions for which to interpolate. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
837 * @param ws (output) resulting interpolated ws. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
838 * @param qs (output) resulting interpolated qs. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
839 * @param errors calculation object to store errors. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
840 */ |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
841 public QPosition interpolate( |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
842 double q, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
843 double referenceKm, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
844 double [] kms, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
845 double [] ws, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
846 double [] qs, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
847 Calculation errors |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
848 ) { |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
849 return interpolate( |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
850 q, referenceKm, kms, ws, qs, 0, kms.length, errors); |
649
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
851 } |
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
852 |
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
853 public QPosition interpolate( |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
854 double q, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
855 double referenceKm, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
856 double [] kms, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
857 double [] ws, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
858 double [] qs, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
859 int startIndex, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
860 int length, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
861 Calculation errors |
649
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
862 ) { |
645
433f67a076aa
Use an explicit reference km for interpolation now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
863 QPosition qPosition = getQPosition(referenceKm, q); |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
864 |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
865 if (qPosition == null) { |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
866 // we cannot locate q at km |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
867 Arrays.fill(ws, Double.NaN); |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
868 Arrays.fill(qs, Double.NaN); |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
869 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
870 errors.addProblem(referenceKm, "cannot.find.q", q); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
871 } |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
872 return null; |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
873 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
874 |
645
433f67a076aa
Use an explicit reference km for interpolation now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
875 Row kmKey = new Row(); |
433f67a076aa
Use an explicit reference km for interpolation now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
876 |
433f67a076aa
Use an explicit reference km for interpolation now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
877 int R1 = rows.size()-1; |
433f67a076aa
Use an explicit reference km for interpolation now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
878 |
649
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
879 for (int i = startIndex, end = startIndex+length; i < end; ++i) { |
458
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
880 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
881 if (Double.isNaN(qs[i] = getQ(qPosition, kms[i]))) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
882 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
883 errors.addProblem(kms[i], "cannot.find.q", q); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
884 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
885 ws[i] = Double.NaN; |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
886 continue; |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
887 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
888 |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
889 kmKey.km = kms[i]; |
645
433f67a076aa
Use an explicit reference km for interpolation now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
890 int rowIndex = Collections.binarySearch(rows, kmKey); |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
891 |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
892 if (rowIndex >= 0) { |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
893 // direct row match |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
894 if (Double.isNaN(ws[i] = rows.get(rowIndex).getW(qPosition)) |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
895 && errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
896 errors.addProblem(kms[i], "cannot.find.w.for.q", q); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
897 } |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
898 continue; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
899 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
900 |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
901 rowIndex = -rowIndex -1; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
902 |
1681
e5f7f25a511c
fixed flys/issue201
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1098
diff
changeset
|
903 if (rowIndex < 1 || rowIndex > R1) { |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
904 // do not extrapolate |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
905 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
906 errors.addProblem(kms[i], "km.not.found"); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
907 } |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
908 ws[i] = Double.NaN; |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
909 continue; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
910 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
911 Row r1 = rows.get(rowIndex-1); |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
912 Row r2 = rows.get(rowIndex); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
913 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
914 if (Double.isNaN(ws[i] = r1.getW(r2, kms[i], qPosition)) |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
915 && errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
916 errors.addProblem(kms[i], "cannot.find.w.for.q", q); |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
917 } |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
918 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
919 |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
920 return qPosition; |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
921 } |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
922 |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
923 /** |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
924 * Linearly interpolate w at a km at a column of two rows. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
925 * |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
926 * @param km position for which to interpolate. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
927 * @param row1 first row. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
928 * @param row2 second row. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
929 * @param col column-index at which to look. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
930 * |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
931 * @return Linearly interpolated w, NaN if one of the given rows was null. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
932 */ |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
933 public static double linearW(double km, Row row1, Row row2, int col) { |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
934 if (row1 == null || row2 == null) { |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
935 return Double.NaN; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
936 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
937 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
938 return Linear.linear(km, |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
939 row1.km, row2.km, |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
940 row1.ws[col], row2.ws[col]); |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
941 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
942 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
943 /** |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
944 * Do interpolation/lookup of W and Q within columns (i.e. ignoring values |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
945 * of other columns). |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
946 * @param km position (km) at which to interpolate/lookup. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
947 * @return [[q0, q1, .. qx] , [w0, w1, .. wx]] (can contain NaNs) |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
948 */ |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
949 public double [][] interpolateWQColumnwise(double km) { |
1919
9bec7d2f8c35
Prevent ArrayIndexOutOfBounds, log method entry.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1907
diff
changeset
|
950 log.debug("WstValueTable.interpolateWQColumnwise"); |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
951 double [] qs = new double[columns.length]; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
952 double [] ws = new double[columns.length]; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
953 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
954 // Find out row from where we will start searching. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
955 int rowIndex = Collections.binarySearch(rows, new Row(km)); |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
956 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
957 if (rowIndex < 0) { |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
958 rowIndex = -rowIndex -1; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
959 } |
2248 | 960 |
961 // TODO Beyond definition, we could stop more clever. | |
1937
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
962 if (rowIndex >= rows.size()) { |
1919
9bec7d2f8c35
Prevent ArrayIndexOutOfBounds, log method entry.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1907
diff
changeset
|
963 rowIndex = rows.size() -1; |
1937
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
964 } |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
965 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
966 Row startRow = rows.get(rowIndex); |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
967 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
968 for (int col = 0; col < columns.length; col++) { |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
969 qs[col] = columns[col].getQRangeTree().findQ(km); |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
970 if (startRow.km == km && startRow.ws[col] != Double.NaN) { |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
971 // Great. W is defined at km. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
972 ws[col] = startRow.ws[col]; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
973 continue; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
974 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
975 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
976 // Search neighbouring rows that define w at this col. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
977 Row rowBefore = null; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
978 Row rowAfter = null; |
1899
d002198c64a2
Removed logging noise, find better suited rows for W interpolation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1888
diff
changeset
|
979 for (int before = rowIndex -1; before >= 0; before--) { |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
980 if (!Double.isNaN(rows.get(before).ws[col])) { |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
981 rowBefore = rows.get(before); |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
982 break; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
983 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
984 } |
2248 | 985 if (rowBefore != null) { |
986 for (int after = rowIndex, R = rows.size(); after < R; after++) { | |
987 if (!Double.isNaN(rows.get(after).ws[col])) { | |
988 rowAfter = rows.get(after); | |
989 break; | |
990 } | |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
991 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
992 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
993 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
994 ws[col] = linearW(km, rowBefore, rowAfter, col); |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
995 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
996 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
997 return new double [][] {qs, ws}; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
998 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
999 |
1937
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1000 public double [] findQsForW(double km, double w) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1001 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1002 int rowIndex = Collections.binarySearch(rows, new Row(km)); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1003 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1004 if (rowIndex >= 0) { |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1005 return rows.get(rowIndex).findQsForW(w, this); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1006 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1007 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1008 rowIndex = -rowIndex - 1; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1009 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1010 if (rowIndex < 1 || rowIndex >= rows.size()) { |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1011 // Do not extrapolate. |
1937
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1012 return new double[0]; |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1013 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1014 |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1015 // Needs bilinear interpolation. |
1937
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1016 Row r1 = rows.get(rowIndex-1); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1017 Row r2 = rows.get(rowIndex); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1018 |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1019 return r1.findQsForW(r2, w, km, this); |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1020 } |
f07d64d5cbe1
'W auf freier Strecke' calculation. Fetch corresponding Qs for given Ws from the WST model
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1919
diff
changeset
|
1021 |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1022 protected SplineFunction createSpline(double km, Calculation errors) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1023 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1024 int rowIndex = Collections.binarySearch(rows, new Row(km)); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1025 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1026 if (rowIndex >= 0) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1027 SplineFunction sf = rows.get(rowIndex).createSpline(this, errors); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1028 if (sf == null && errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
1029 errors.addProblem(km, "cannot.create.wq.relation"); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1030 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1031 return sf; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1032 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1033 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1034 rowIndex = -rowIndex - 1; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1035 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1036 if (rowIndex < 1 || rowIndex >= rows.size()) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1037 // Do not extrapolate. |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1038 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
1039 errors.addProblem(km, "km.not.found"); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1040 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1041 return null; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1042 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1043 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1044 // Needs bilinear interpolation. |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1045 Row r1 = rows.get(rowIndex-1); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1046 Row r2 = rows.get(rowIndex); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1047 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1048 SplineFunction sf = r1.createSpline(r2, km, this, errors); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1049 if (sf == null && errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
1050 errors.addProblem(km, "cannot.create.wq.relation"); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1051 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1052 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1053 return sf; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1054 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1055 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1056 /** 'Bezugslinienverfahren' */ |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1057 public double [][] relateWs( |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
1058 double km1, |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1059 double km2, |
2186
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1060 Calculation errors |
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1061 ) { |
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1062 return relateWs(km1, km2, RELATE_WS_SAMPLES, errors); |
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1063 } |
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1064 |
2330
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1065 private static class ErrorHandler { |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1066 |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1067 boolean hasErrors; |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1068 Calculation errors; |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1069 |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1070 ErrorHandler(Calculation errors) { |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1071 this.errors = errors; |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1072 } |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1073 |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1074 void error(double km, String key, Object ... args) { |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1075 if (errors != null && !hasErrors) { |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1076 hasErrors = true; |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1077 errors.addProblem(km, key, args); |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1078 } |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1079 } |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1080 } // class ErrorHandler |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1081 |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1082 |
2186
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1083 /* TODO: Add optimized methods of relateWs to relate one |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
1084 * start km to many end kms. The index generation/spline stuff for |
2186
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1085 * the start km is always the same. |
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1086 */ |
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1087 public double [][] relateWs( |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
1088 double km1, |
2186
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1089 double km2, |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1090 int numSamples, |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1091 Calculation errors |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1092 ) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1093 SplineFunction sf1 = createSpline(km1, errors); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1094 if (sf1 == null) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1095 return new double[2][0]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1096 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1097 |
2248 | 1098 SplineFunction sf2 = createSpline(km2, errors); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1099 if (sf2 == null) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1100 return new double[2][0]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1101 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1102 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1103 PolynomialSplineFunction iQ1 = sf1.createIndexQRelation(); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1104 if (iQ1 == null) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1105 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
1106 errors.addProblem(km1, "cannot.create.index.q.relation"); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1107 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1108 return new double[2][0]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1109 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1110 |
2404
750cdcccb39c
'Bezugslinienverfahren': Fix the index bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2403
diff
changeset
|
1111 PolynomialSplineFunction iQ2 = sf2.createIndexQRelation(); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1112 if (iQ2 == null) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1113 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
1114 errors.addProblem(km2, "cannot.create.index.q.relation"); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1115 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1116 return new double[2][0]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1117 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1118 |
2316
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1119 int N = Math.min(sf1.splineQs.length, sf2.splineQs.length); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1120 double stepWidth = N/(double)numSamples; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1121 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1122 PolynomialSplineFunction qW1 = sf1.spline; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1123 PolynomialSplineFunction qW2 = sf2.spline; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1124 |
2316
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1125 TDoubleArrayList ws1 = new TDoubleArrayList(numSamples); |
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1126 TDoubleArrayList ws2 = new TDoubleArrayList(numSamples); |
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1127 TDoubleArrayList qs1 = new TDoubleArrayList(numSamples); |
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1128 TDoubleArrayList qs2 = new TDoubleArrayList(numSamples); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1129 |
2330
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1130 ErrorHandler err = new ErrorHandler(errors); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1131 |
2316
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1132 int i = 0; |
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1133 for (double p = 0d; p <= N-1; p += stepWidth, ++i) { |
2330
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1134 |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1135 double q1; |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1136 try { |
2330
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1137 q1 = iQ1.value(p); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1138 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1139 catch (ArgumentOutsideDomainException aode) { |
2330
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1140 err.error(km1, "w.w.qkm1.failed", p); |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1141 continue; |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1142 } |
2330
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1143 |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1144 double w1; |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1145 try { |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1146 w1 = qW1.value(q1); |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1147 } |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1148 catch (ArgumentOutsideDomainException aode) { |
2403
177b0c91928d
'Bezugslinienverfahren': Improve the error messages even more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2330
diff
changeset
|
1149 err.error(km1, "w.w.wkm1.failed", q1, p); |
2330
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1150 continue; |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1151 } |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1152 |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1153 double q2; |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1154 try { |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1155 q2 = iQ2.value(p); |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1156 } |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1157 catch (ArgumentOutsideDomainException aode) { |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1158 err.error(km2, "w.w.qkm2.failed", p); |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1159 continue; |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1160 } |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1161 |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1162 double w2; |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1163 try { |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1164 w2 = qW2.value(q2); |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1165 } |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1166 catch (ArgumentOutsideDomainException aode) { |
2403
177b0c91928d
'Bezugslinienverfahren': Improve the error messages even more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2330
diff
changeset
|
1167 err.error(km2, "w.w.wkm2.failed", q2, p); |
2330
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1168 continue; |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1169 } |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1170 |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1171 ws1.add(w1); |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1172 ws2.add(w2); |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1173 qs1.add(q1); |
594885703687
Picked changes r4015:4026 from trunk.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2316
diff
changeset
|
1174 qs2.add(q2); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1175 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1176 |
2316
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1177 return new double [][] { |
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1178 ws1.toNativeArray(), |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
1179 qs1.toNativeArray(), |
2316
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1180 ws2.toNativeArray(), |
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1181 qs2.toNativeArray() }; |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1182 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1183 |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1184 public QPosition getQPosition(double km, double q) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1185 return getQPosition(km, q, new QPosition()); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1186 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1187 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1188 public QPosition getQPosition(double km, double q, QPosition qPosition) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1189 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1190 if (columns.length == 0) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1191 return null; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1192 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1193 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1194 double qLast = columns[0].getQRangeTree().findQ(km); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1195 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1196 if (Math.abs(qLast - q) < 0.00001) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1197 return qPosition.set(0, 1d); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1198 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1199 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1200 for (int i = 1; i < columns.length; ++i) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1201 double qCurrent = columns[i].getQRangeTree().findQ(km); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1202 if (Math.abs(qCurrent - q) < 0.00001) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1203 return qPosition.set(i, 1d); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1204 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1205 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1206 double qMin, qMax; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1207 if (qLast < qCurrent) { qMin = qLast; qMax = qCurrent; } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1208 else { qMin = qCurrent; qMax = qLast; } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1209 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1210 if (q > qMin && q < qMax) { |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
1211 double weight = Linear.factor(q, qLast, qCurrent); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1212 return qPosition.set(i, weight); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1213 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1214 qLast = qCurrent; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1215 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1216 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1217 return null; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1218 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1219 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1220 public double getQIndex(int index, double km) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1221 return columns[index].getQRangeTree().findQ(km); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1222 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1223 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1224 public double getQ(QPosition qPosition, double km) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1225 int index = qPosition.index; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1226 double weight = qPosition.weight; |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1227 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1228 if (weight == 1d) { |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1229 return columns[index].getQRangeTree().findQ(km); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1230 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1231 double q1 = columns[index-1].getQRangeTree().findQ(km); |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1232 double q2 = columns[index ].getQRangeTree().findQ(km); |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
1233 return Linear.weight(weight, q1, q2); |
633
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1234 } |
3736
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1235 |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1236 public double [][] interpolateTabulated(double km) { |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1237 return interpolateTabulated(km, new double[2][columns.length]); |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1238 } |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1239 |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1240 public double [][] interpolateTabulated(double km, double [][] result) { |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1241 |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1242 int rowIndex = Collections.binarySearch(rows, new Row(km)); |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1243 |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1244 if (rowIndex >= 0) { |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1245 // Direct hit -> copy ws. |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1246 Row row = rows.get(rowIndex); |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1247 System.arraycopy( |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1248 row.ws, 0, result[0], 0, |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1249 Math.min(row.ws.length, result[0].length)); |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1250 } |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1251 else { |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1252 rowIndex = -rowIndex -1; |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1253 if (rowIndex < 1 || rowIndex >= rows.size()) { |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1254 // Out of bounds. |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1255 return null; |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1256 } |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1257 // Interpolate ws. |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1258 Row r1 = rows.get(rowIndex-1); |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1259 Row r2 = rows.get(rowIndex); |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1260 double factor = Linear.factor(km, r1.km, r2.km); |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1261 Linear.weight(factor, r1.ws, r2.ws, result[0]); |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1262 } |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1263 |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1264 double [] qs = result[1]; |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1265 for (int i = Math.min(qs.length, columns.length)-1; i >= 0; --i) { |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1266 qs[i] = columns[i].getQRangeTree().findQ(km); |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1267 } |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1268 return result; |
da1969b05292
WST tables: Added interpolation of tabulated values only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3271
diff
changeset
|
1269 } |
3743
51f76225823b
Extreme waterlevels: calculate the segments for Q km ranges.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3736
diff
changeset
|
1270 |
4119
760e2fe00138
Documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3969
diff
changeset
|
1271 |
760e2fe00138
Documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3969
diff
changeset
|
1272 /** Find ranges that are between km1 and km2 (inclusive?) */ |
3743
51f76225823b
Extreme waterlevels: calculate the segments for Q km ranges.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3736
diff
changeset
|
1273 public List<Range> findSegments(double km1, double km2) { |
51f76225823b
Extreme waterlevels: calculate the segments for Q km ranges.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3736
diff
changeset
|
1274 return columns.length != 0 |
51f76225823b
Extreme waterlevels: calculate the segments for Q km ranges.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3736
diff
changeset
|
1275 ? columns[columns.length-1].getQRangeTree().findSegments(km1, km2) |
51f76225823b
Extreme waterlevels: calculate the segments for Q km ranges.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3736
diff
changeset
|
1276 : Collections.<Range>emptyList(); |
51f76225823b
Extreme waterlevels: calculate the segments for Q km ranges.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3736
diff
changeset
|
1277 } |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1278 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1279 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |