Mercurial > dive4elements > river
annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java @ 3454:98745f308319
fix vol/l/mer.
flys-artifacts/trunk@5120 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 25 Jul 2012 09:53:24 +0000 |
parents | 4c4ec9e9650a |
children | da1969b05292 |
rev | line source |
---|---|
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.flys.artifacts.model; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
2 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
3 import java.io.Serializable; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
4 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
5 import de.intevation.flys.artifacts.math.Linear; |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
6 import de.intevation.flys.artifacts.math.Function; |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
7 |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
8 import java.util.Arrays; |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 import java.util.ArrayList; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 import java.util.List; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 import java.util.Collections; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
13 import org.apache.log4j.Logger; |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
14 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
15 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
|
16 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
17 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
|
18 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
19 import org.apache.commons.math.ArgumentOutsideDomainException; |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
20 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
21 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
|
22 |
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
|
23 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
|
24 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
25 /** |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
26 * 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
|
27 */ |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 public class WstValueTable |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
29 implements Serializable |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 { |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
31 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
|
32 |
395
aae8f327425e
'berechnete Abflusskurve': generate ws from qs
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
380
diff
changeset
|
33 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
|
34 |
2253
707b47d8c554
Dont sort the data series in reference curve.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2248
diff
changeset
|
35 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
|
36 |
1721
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
37 /** |
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
38 * A Column in the table, typically representing one measurement session. |
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
39 */ |
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
|
40 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
|
41 implements Serializable |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 protected String name; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 |
632
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
45 protected QRangeTree qRangeTree; |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
46 |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 public Column() { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
50 public Column(String name) { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 this.name = name; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
53 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
54 public String getName() { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
55 return name; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
56 } |
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 public void setName(String name) { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
59 this.name = name; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
60 } |
632
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
61 |
1907
6c7fdfd262ac
Do not re-evaluate constant size() in for-loops.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1899
diff
changeset
|
62 public QRangeTree getQRangeTree() { |
632
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
63 return qRangeTree; |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
64 } |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
65 |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
66 public void setQRangeTree(QRangeTree qRangeTree) { |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
67 this.qRangeTree = qRangeTree; |
07640ab913fd
First part of storing qs in ranges
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
621
diff
changeset
|
68 } |
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
|
69 } // class Column |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
70 |
1721
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
71 /** |
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
72 * A (weighted) position used for interpolation. |
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
73 */ |
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
|
74 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
|
75 |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
76 protected int index; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
77 protected double weight; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
78 |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
79 public QPosition() { |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
80 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
81 |
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
|
82 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
|
83 this.index = index; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
84 this.weight = weight; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
85 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
86 |
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
|
87 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
|
88 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
|
89 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
|
90 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
|
91 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
92 |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
93 } // class Position |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
94 |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
95 public static final class SplineFunction { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
96 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
97 public PolynomialSplineFunction spline; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
98 public double [] splineQs; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
99 public double [] splineWs; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
100 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
101 public SplineFunction( |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
102 PolynomialSplineFunction spline, |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
103 double [] splineQs, |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
104 double [] splineWs |
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 this.spline = spline; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
107 this.splineQs = splineQs; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
108 this.splineWs = 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 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
111 public double [][] sample( |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
112 int numSamples, |
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
113 double km, |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
114 Calculation errors |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
115 ) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
116 double minQ = getQMin(); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
117 double maxQ = getQMax(); |
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 double [] outWs = new double[numSamples]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
120 double [] outQs = new double[numSamples]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
121 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
122 Arrays.fill(outWs, Double.NaN); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
123 Arrays.fill(outQs, Double.NaN); |
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 stepWidth = (maxQ - minQ)/numSamples; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
126 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
127 try { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
128 double q = minQ; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
129 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
|
130 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
|
131 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
132 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
133 catch (ArgumentOutsideDomainException aode) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
134 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
135 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
|
136 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
137 log.error("spline interpolation failed.", aode); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
138 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
139 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
140 return new double [][] { outWs, outQs }; |
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 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
143 public double getQMin() { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
144 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
|
145 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
146 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
147 public double getQMax() { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
148 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
|
149 } |
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 /** 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
|
152 public PolynomialSplineFunction createIndexQRelation() { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
153 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
154 double [] indices = new double[splineQs.length]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
155 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
|
156 indices[i] = i; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
157 } |
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 try { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
160 SplineInterpolator interpolator = new SplineInterpolator(); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
161 return interpolator.interpolate(indices, splineQs); |
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 catch (MathIllegalArgumentException miae) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
164 // Ignore me! |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
165 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
166 return null; |
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 } // class SplineFunction |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
169 |
1721
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
170 /** |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
171 * A row, typically a position where measurements were taken. |
1721
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
172 */ |
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
|
173 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
|
174 implements Serializable, Comparable<Row> |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
175 { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
176 double km; |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
177 double [] ws; |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
178 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
179 public Row() { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
180 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
181 |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
182 public Row(double km) { |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
183 this.km = km; |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
184 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
185 |
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
|
186 public Row(double km, double [] ws) { |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
187 this(km); |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
188 this.ws = ws; |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
189 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
190 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
191 /** |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
192 * Compare according to place of measurement (km). |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
193 */ |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
194 public int compareTo(Row other) { |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
195 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
|
196 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
|
197 if (d > 0.0001) return +1; |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
198 return 0; |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
199 } |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
200 |
1887
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
201 /** |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
202 * Interpolate Ws, given Qs and a km. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
203 * |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
204 * @param iqs Given ("input") Qs. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
205 * @param ows Resulting ("output") Ws. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
206 * @param table Table of which to use data for interpolation. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
207 */ |
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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 double [] ows, |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
213 WstValueTable table, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
214 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
|
215 ) { |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
216 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
|
217 |
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
|
218 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
|
219 |
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 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
|
221 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
|
222 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
|
223 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
|
224 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
|
225 if (errors != null) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
226 errors.addProblem( |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
227 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
|
228 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
229 ows[i] = Double.NaN; |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
230 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
231 else { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
232 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
|
233 } |
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
|
234 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
235 else { |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
236 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
237 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
|
238 } |
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
|
239 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
|
240 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
241 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
242 } |
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 |
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
|
244 |
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
|
245 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
|
246 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
|
247 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
|
248 ) { |
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
|
249 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
|
250 |
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
|
251 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
|
252 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
253 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
|
254 } |
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 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
|
256 } |
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 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
|
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 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
|
261 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
|
262 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
|
263 errors.addProblem( |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
264 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
|
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 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
|
267 } |
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 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
|
270 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
|
271 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
|
272 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
|
273 |
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 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
|
275 } |
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 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
|
277 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
278 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
|
279 } |
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 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
|
281 } |
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 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
|
283 } |
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 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
|
286 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
|
287 double km, |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
288 WstValueTable table, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
289 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
|
290 ) { |
395
aae8f327425e
'berechnete Abflusskurve': generate ws from qs
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
380
diff
changeset
|
291 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
|
292 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
293 if (W < 1) { |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
294 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
295 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
|
296 } |
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
|
297 return null; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
298 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
299 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
300 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
|
301 |
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
|
302 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
|
303 double [] splineWs = new double[W]; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
304 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
305 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
|
306 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
|
307 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
|
308 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
|
309 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
|
310 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
|
311 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
312 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
|
313 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
314 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
|
315 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
316 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
317 |
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
|
318 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
|
319 splineQs[i] = wqs; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
320 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
321 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
322 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
|
323 |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
324 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
|
325 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
|
326 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
|
327 |
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 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
|
329 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
330 catch (MathIllegalArgumentException miae) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
331 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
332 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
|
333 } |
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
|
334 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
|
335 } |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
336 |
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
|
337 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
|
338 } |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
339 |
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
|
340 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
|
341 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
|
342 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
|
343 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
|
344 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
|
345 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
|
346 ) { |
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
|
347 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
|
348 |
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
|
349 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
|
350 ? 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
|
351 : new double[2][0]; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
352 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
353 |
1721
eb35570df0e8
Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1681
diff
changeset
|
354 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
355 public double [][] interpolateWQ( |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
704
diff
changeset
|
356 int steps, |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
357 WstValueTable table, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
358 Calculation errors |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
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 SplineFunction sf = createSpline(table, errors); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
361 |
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
|
362 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
|
363 ? 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
|
364 : new double[2][0]; |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
365 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
366 |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
367 |
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
|
368 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
|
369 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
|
370 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
|
371 |
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
|
372 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
|
373 ? ws[index] |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
374 : 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
|
375 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
376 |
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
|
377 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
|
378 Row other, |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
379 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
|
380 QPosition qPosition |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
381 ) { |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
382 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
|
383 |
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
|
384 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
|
385 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
|
386 |
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
|
387 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
|
388 |
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
|
389 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
|
390 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
|
391 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
|
392 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
393 else { |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
704
diff
changeset
|
394 tw = Linear.weight(weight, ws[index-1], ws[index]); |
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
704
diff
changeset
|
395 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
|
396 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
397 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
398 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
|
399 } |
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
|
400 |
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
|
401 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
|
402 |
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
|
403 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
|
404 |
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
|
405 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
|
406 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
|
407 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
|
408 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
|
409 } |
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
|
410 } |
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 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
|
413 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
|
414 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
|
415 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
|
416 } |
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 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
|
418 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
|
419 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
|
420 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
|
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 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
|
423 } |
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 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
|
425 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
|
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 |
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 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
|
430 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
|
431 } |
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 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
|
434 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
|
435 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
|
436 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
|
437 } |
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 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
|
440 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
|
441 } |
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 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
|
444 } |
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 |
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 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
|
447 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
|
448 double w, |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
449 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
|
450 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
|
451 ) { |
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 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
|
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 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
|
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 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
|
457 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
|
458 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
|
459 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
|
460 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
|
461 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
|
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 } |
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 |
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 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
|
467 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
|
468 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
|
469 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
|
470 } |
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 (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
|
472 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
|
473 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
|
474 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
|
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 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
|
477 } |
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 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
|
479 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
|
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 |
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 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
|
484 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
|
485 } |
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 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
|
488 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
|
489 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
|
490 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
|
491 } |
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 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
|
494 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
|
495 } |
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 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
|
498 } |
2557
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
499 |
2558
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
500 public double [] getMinMaxW(double [] result) { |
2557
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
501 double minW = Double.MAX_VALUE; |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
502 double maxW = -Double.MAX_VALUE; |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
503 for (int i = 0; i < ws.length; ++i) { |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
504 double w = ws[i]; |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
505 if (w < minW) minW = w; |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
506 if (w > maxW) maxW = w; |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
507 } |
2558
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
508 result[0] = minW; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
509 result[1] = maxW; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
510 return result; |
2557
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
511 } |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
512 |
2558
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
513 public double [] getMinMaxW(Row other, double km, double [] result) { |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
514 double [] m1 = this .getMinMaxW(new double [2]); |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
515 double [] m2 = other.getMinMaxW(new double [2]); |
2557
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
516 double factor = Linear.factor(km, this.km, other.km); |
2558
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
517 result[0] = Linear.weight(factor, m1[0], m2[0]); |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
518 result[1] = Linear.weight(factor, m1[1], m2[1]); |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
519 return result; |
2557
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
520 } |
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
|
521 } // class Row |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
522 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
523 /** Rows in table. */ |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
524 protected List<Row> rows; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
525 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
526 /** Columns in table. */ |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
527 protected Column [] columns; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
528 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
529 public WstValueTable() { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
530 rows = new ArrayList<Row>(); |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
531 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
532 |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
533 public WstValueTable(Column [] columns) { |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
534 this(); |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
535 this.columns = columns; |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
536 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
537 |
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
|
538 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
|
539 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
|
540 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
|
541 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
542 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
543 /** Sort rows (by km). */ |
458
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
544 public void sortRows() { |
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
545 Collections.sort(rows); |
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
546 } |
523a256451cd
Use unsharp km lookup (epsilon = 0.0001).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
443
diff
changeset
|
547 |
1887
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
548 /** |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
549 * @param km Given kilometer. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
550 * @param qs Given Q values. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
551 * @param ws output parameter. |
d2e217f438bc
Minor doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1860
diff
changeset
|
552 */ |
380
5f55047a17e8
Moved expensive allocation of result arrays out of km loop.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
374
diff
changeset
|
553 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
|
554 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
|
555 } |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
556 |
1098
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
557 |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
558 /** |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
559 * @param ws (output parameter), gets returned. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
560 * @return output parameter ws. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
561 */ |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
562 public double [] interpolateW( |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
563 double km, |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
704
diff
changeset
|
564 double [] qs, |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
565 double [] ws, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
566 Calculation errors |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
567 ) { |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
568 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
|
569 |
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
|
570 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
|
571 |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
572 if (rowIndex >= 0) { // direct row match |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
573 Row row = rows.get(rowIndex); |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
574 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
|
575 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
|
576 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
577 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
|
578 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
579 ws[i] = Double.NaN; |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
580 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
581 else { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
582 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
|
583 && errors != null) { |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
584 errors.addProblem( |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
585 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
|
586 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
587 } |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
588 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
589 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
590 else { // needs bilinear interpolation |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
591 rowIndex = -rowIndex -1; |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
592 |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
593 if (rowIndex < 1 || rowIndex >= rows.size()) { |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
594 // do not extrapolate |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
595 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
|
596 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
597 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
|
598 } |
335
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
599 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
600 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
|
601 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
|
602 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
|
603 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
|
604 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
605 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
606 |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
607 return ws; |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
608 } |
64cfbd631f29
Implemented the "Wasserstand/Wasserspiegellagen" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
609 |
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
|
610 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
|
611 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
|
612 } |
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
|
613 |
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
|
614 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
|
615 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
|
616 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
|
617 |
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
|
618 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
|
619 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
|
620 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
|
621 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
|
622 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
|
623 } |
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
|
624 } |
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 |
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 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
|
627 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
|
628 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
|
629 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
|
630 } |
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 |
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 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
|
633 } |
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 |
2560
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
635 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
|
636 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
|
637 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
638 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
|
639 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
|
640 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
641 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
|
642 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
|
643 from = to; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
644 to = tmp; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
645 } |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
646 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
647 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
|
648 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
649 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
|
650 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
|
651 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
|
652 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
|
653 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
|
654 } |
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 |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
657 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
|
658 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
|
659 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
|
660 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
|
661 } |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
662 } |
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 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
|
665 ? 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
|
666 : null; |
0d8c97374dc9
WstValueTable: Forget to check in the range method of getMinMaxQ().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2559
diff
changeset
|
667 } |
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
|
668 |
2557
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
669 public double [] getMinMaxW(double km) { |
2558
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
670 return getMinMaxW(km, new double [2]); |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
671 |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
672 } |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
673 public double [] getMinMaxW(double km, double [] result) { |
2557
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
674 int rowIndex = Collections.binarySearch(rows, new Row(km)); |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
675 |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
676 if (rowIndex >= 0) { |
2558
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
677 return rows.get(rowIndex).getMinMaxW(result); |
2557
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
678 } |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
679 |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
680 rowIndex = -rowIndex -1; |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
681 |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
682 if (rowIndex < 1 || rowIndex >= rows.size()) { |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
683 // do not extrapolate |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
684 return null; |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
685 } |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
686 |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
687 Row r1 = rows.get(rowIndex-1); |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
688 Row r2 = rows.get(rowIndex); |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
689 |
2558
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
690 return r1.getMinMaxW(r2, km, result); |
2557
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
691 } |
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
692 |
2558
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
693 public double [] getMinMaxW(double from, double to, double step) { |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
694 double [] result = new double[2]; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
695 |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
696 double minW = Double.MAX_VALUE; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
697 double maxW = -Double.MAX_VALUE; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
698 |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
699 if (from > to) { |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
700 double tmp = from; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
701 from = to; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
702 to = tmp; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
703 } |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
704 |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
705 step = Math.max(Math.abs(step), 0.0001); |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
706 |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
707 double d = from; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
708 for (; d <= to; d += step) { |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
709 if (getMinMaxW(d, result) != null) { |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
710 if (result[0] < minW) minW = result[0]; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
711 if (result[1] > maxW) maxW = result[1]; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
712 } |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
713 } |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
714 |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
715 if (d != to) { |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
716 if (getMinMaxW(to, result) != null) { |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
717 if (result[0] < minW) minW = result[0]; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
718 if (result[1] > maxW) maxW = result[1]; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
719 } |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
720 } |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
721 |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
722 return minW < Double.MAX_VALUE |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
723 ? new double [] { minW, maxW } |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
724 : null; |
33e4481933e2
WstValueTable: Added method to find the w extent for a given km range.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2557
diff
changeset
|
725 } |
2557
adb8641f5b5d
WstValueTable: Added method to find the w extent for a given km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2404
diff
changeset
|
726 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
727 /** |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
728 * Interpolate W and Q values at a given km. |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
729 */ |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
730 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
|
731 return interpolateWQ(km, null); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
732 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
733 |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
734 /** |
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
735 * Interpolate W and Q values at a given km. |
3265
c1f445b94d03
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
736 * |
c1f445b94d03
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
737 * @param errors where to store errors. |
c1f445b94d03
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
738 * |
c1f445b94d03
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
3076
diff
changeset
|
739 * @return double double array, first index Ws, second Qs. |
1838
853cd2120d69
Cosmetics, doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1721
diff
changeset
|
740 */ |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
741 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
|
742 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
|
743 } |
3271
4c4ec9e9650a
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3265
diff
changeset
|
744 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
745 |
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
|
746 /** |
ddd425858169
Improved logging to include exception in fail case of spline interpolation of wst.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1838
diff
changeset
|
747 * 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
|
748 */ |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
749 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
|
750 |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
751 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
|
752 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
753 if (rowIndex >= 0) { // direct row match |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
754 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
|
755 return row.interpolateWQ(steps, this, errors); |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
756 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
757 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
758 rowIndex = -rowIndex -1; |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
759 |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
760 if (rowIndex < 1 || rowIndex >= rows.size()) { |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
761 // do not extrapolate |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
762 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
763 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
|
764 } |
339
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
765 return new double[2][0]; |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
766 } |
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 Row r1 = rows.get(rowIndex-1); |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
769 Row r2 = rows.get(rowIndex); |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
770 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
771 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
|
772 } |
4509ba8fae68
Implementation of "Abflusskurve/Abflusstafel" calculation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
335
diff
changeset
|
773 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
774 public boolean interpolate( |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
775 double km, |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
776 double [] out, |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
777 QPosition qPosition, |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
778 Function qFunction |
649
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
779 ) { |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
780 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
|
781 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
782 out[1] = qFunction.value(getQ(qPosition, km)); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
783 |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
784 if (Double.isNaN(out[1])) { |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
785 return false; |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
786 } |
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
|
787 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
788 QPosition nPosition = new QPosition(); |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
789 if (getQPosition(km, out[1], nPosition) == null) { |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
790 return false; |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
791 } |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
792 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
793 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
|
794 |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
795 if (rowIndex >= 0) { |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
796 // direct row match |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
797 out[0] = rows.get(rowIndex).getW(nPosition); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
798 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
|
799 } |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
800 |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
801 rowIndex = -rowIndex -1; |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
802 |
1681
e5f7f25a511c
fixed flys/issue201
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1098
diff
changeset
|
803 if (rowIndex < 1 || rowIndex > R1) { |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
804 // do not extrapolate |
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 } |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
807 |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
808 Row r1 = rows.get(rowIndex-1); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
809 Row r2 = rows.get(rowIndex); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
810 out[0] = r1.getW(r2, km, nPosition); |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
811 |
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
812 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
|
813 } |
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
814 |
1098
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
815 |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
816 /** |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
817 * Look up interpolation of a Q at given positions. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
818 * |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
819 * @param q the non-interpolated Q value. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
820 * @param referenceKm the reference km (e.g. gauge position). |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
821 * @param kms positions for which to interpolate. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
822 * @param ws (output) resulting interpolated ws. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
823 * @param qs (output) resulting interpolated qs. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
824 * @param errors calculation object to store errors. |
1ea7eb72aaa6
Minor cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
742
diff
changeset
|
825 */ |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
826 public QPosition interpolate( |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
827 double q, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
828 double referenceKm, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
829 double [] kms, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
830 double [] ws, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
831 double [] qs, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
832 Calculation errors |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
833 ) { |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
834 return interpolate( |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
835 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
|
836 } |
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
837 |
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
838 public QPosition interpolate( |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
839 double q, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
840 double referenceKm, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
841 double [] kms, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
842 double [] ws, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
843 double [] qs, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
844 int startIndex, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
845 int length, |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
846 Calculation errors |
649
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
847 ) { |
645
433f67a076aa
Use an explicit reference km for interpolation now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
848 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
|
849 |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
850 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
|
851 // 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
|
852 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
|
853 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
|
854 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
855 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
|
856 } |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
857 return null; |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
858 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
859 |
645
433f67a076aa
Use an explicit reference km for interpolation now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
860 Row kmKey = new Row(); |
433f67a076aa
Use an explicit reference km for interpolation now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
861 |
433f67a076aa
Use an explicit reference km for interpolation now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
633
diff
changeset
|
862 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
|
863 |
649
44175d4720f8
Fix crashes in back jump correction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
645
diff
changeset
|
864 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
|
865 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
866 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
|
867 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
868 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
|
869 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
870 ws[i] = Double.NaN; |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
871 continue; |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
872 } |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
873 |
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
874 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
|
875 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
|
876 |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
877 if (rowIndex >= 0) { |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
878 // direct row match |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
879 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
|
880 && errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
881 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
|
882 } |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
883 continue; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
884 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
885 |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
886 rowIndex = -rowIndex -1; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
887 |
1681
e5f7f25a511c
fixed flys/issue201
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1098
diff
changeset
|
888 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
|
889 // do not extrapolate |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
890 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
891 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
|
892 } |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
893 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
|
894 continue; |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
895 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
896 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
|
897 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
|
898 |
686
3dc61e00385e
Merged with trunk and introduced hashing of computed values.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
655
diff
changeset
|
899 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
|
900 && errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
901 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
|
902 } |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
903 } |
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
904 |
427
909196be11a0
First step to calculate "W fuer ungleichwertige Abfluesse" correctly. flys/issue55
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
426
diff
changeset
|
905 return qPosition; |
426
c6b7ca0febcb
Fix step to fix issue69: Do the right calculation
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
395
diff
changeset
|
906 } |
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
|
907 |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
908 /** |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
909 * 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
|
910 * |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
911 * @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
|
912 * @param row1 first row. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
913 * @param row2 second row. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
914 * @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
|
915 * |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
916 * @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
|
917 */ |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
918 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
|
919 if (row1 == null || row2 == null) { |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
920 return Double.NaN; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
921 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
922 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
923 return Linear.linear(km, |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
924 row1.km, row2.km, |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
925 row1.ws[col], row2.ws[col]); |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
926 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
927 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
928 /** |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
929 * 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
|
930 * of other columns). |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
931 * @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
|
932 * @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
|
933 */ |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
934 public double [][] interpolateWQColumnwise(double km) { |
1919
9bec7d2f8c35
Prevent ArrayIndexOutOfBounds, log method entry.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1907
diff
changeset
|
935 log.debug("WstValueTable.interpolateWQColumnwise"); |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
936 double [] qs = new double[columns.length]; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
937 double [] ws = new double[columns.length]; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
938 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
939 // 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
|
940 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
|
941 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
942 if (rowIndex < 0) { |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
943 rowIndex = -rowIndex -1; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
944 } |
2248 | 945 |
946 // 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
|
947 if (rowIndex >= rows.size()) { |
1919
9bec7d2f8c35
Prevent ArrayIndexOutOfBounds, log method entry.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1907
diff
changeset
|
948 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
|
949 } |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
950 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
951 Row startRow = rows.get(rowIndex); |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
952 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
953 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
|
954 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
|
955 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
|
956 // Great. W is defined at km. |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
957 ws[col] = startRow.ws[col]; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
958 continue; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
959 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
960 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
961 // 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
|
962 Row rowBefore = null; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
963 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
|
964 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
|
965 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
|
966 rowBefore = rows.get(before); |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
967 break; |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
968 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
969 } |
2248 | 970 if (rowBefore != null) { |
971 for (int after = rowIndex, R = rows.size(); after < R; after++) { | |
972 if (!Double.isNaN(rows.get(after).ws[col])) { | |
973 rowAfter = rows.get(after); | |
974 break; | |
975 } | |
1888
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
976 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
977 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
978 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
979 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
|
980 } |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
981 |
abf5da3b285c
Added new (at fixed columns) interpolation mechanism.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
1887
diff
changeset
|
982 return new double [][] {qs, ws}; |
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 |
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
|
985 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
|
986 |
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
|
987 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
|
988 |
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
|
989 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
|
990 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
|
991 } |
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
|
992 |
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
|
993 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
|
994 |
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
|
995 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
|
996 // 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
|
997 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
|
998 } |
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
|
999 |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1000 // 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
|
1001 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
|
1002 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
|
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 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
|
1005 } |
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 |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1007 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
|
1008 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1009 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
|
1010 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1011 if (rowIndex >= 0) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1012 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
|
1013 if (sf == null && errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
1014 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
|
1015 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1016 return sf; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1017 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1018 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1019 rowIndex = -rowIndex - 1; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1020 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1021 if (rowIndex < 1 || rowIndex >= rows.size()) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1022 // Do not extrapolate. |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1023 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
1024 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
|
1025 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1026 return null; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1027 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1028 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1029 // Needs bilinear interpolation. |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1030 Row r1 = rows.get(rowIndex-1); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1031 Row r2 = rows.get(rowIndex); |
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 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
|
1034 if (sf == null && errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
1035 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
|
1036 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1037 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1038 return sf; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1039 } |
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 /** 'Bezugslinienverfahren' */ |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1042 public double [][] relateWs( |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
1043 double km1, |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1044 double km2, |
2186
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1045 Calculation errors |
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1046 ) { |
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1047 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
|
1048 } |
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1049 |
2396
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1050 private static class ErrorHandler { |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1051 |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1052 boolean hasErrors; |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1053 Calculation errors; |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1054 |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1055 ErrorHandler(Calculation errors) { |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1056 this.errors = errors; |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1057 } |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1058 |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1059 void error(double km, String key, Object ... args) { |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1060 if (errors != null && !hasErrors) { |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1061 hasErrors = true; |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1062 errors.addProblem(km, key, args); |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1063 } |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1064 } |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1065 } // class ErrorHandler |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1066 |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1067 |
2186
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1068 /* 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
|
1069 * 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
|
1070 * 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
|
1071 */ |
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1072 public double [][] relateWs( |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
1073 double km1, |
2186
ec2574eb2d32
Added calculation class for "Bezugslinienverfahren" to created by WINFOArtifact.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2166
diff
changeset
|
1074 double km2, |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1075 int numSamples, |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1076 Calculation errors |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1077 ) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1078 SplineFunction sf1 = createSpline(km1, errors); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1079 if (sf1 == null) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1080 return new double[2][0]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1081 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1082 |
2248 | 1083 SplineFunction sf2 = createSpline(km2, errors); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1084 if (sf2 == null) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1085 return new double[2][0]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1086 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1087 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1088 PolynomialSplineFunction iQ1 = sf1.createIndexQRelation(); |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1089 if (iQ1 == null) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1090 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
1091 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
|
1092 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1093 return new double[2][0]; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1094 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1095 |
2404
750cdcccb39c
'Bezugslinienverfahren': Fix the index bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2403
diff
changeset
|
1096 PolynomialSplineFunction iQ2 = sf2.createIndexQRelation(); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1097 if (iQ2 == null) { |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1098 if (errors != null) { |
2166
2898b1ff6013
I18N for WINFO calculation result messages.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1939
diff
changeset
|
1099 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
|
1100 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1101 return new double[2][0]; |
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 |
2316
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1104 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
|
1105 double stepWidth = N/(double)numSamples; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1106 |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1107 PolynomialSplineFunction qW1 = sf1.spline; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1108 PolynomialSplineFunction qW2 = sf2.spline; |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1109 |
2316
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1110 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
|
1111 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
|
1112 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
|
1113 TDoubleArrayList qs2 = new TDoubleArrayList(numSamples); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1114 |
2396
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1115 ErrorHandler err = new ErrorHandler(errors); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1116 |
2316
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1117 int i = 0; |
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1118 for (double p = 0d; p <= N-1; p += stepWidth, ++i) { |
2396
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1119 |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1120 double q1; |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1121 try { |
2396
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1122 q1 = iQ1.value(p); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1123 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1124 catch (ArgumentOutsideDomainException aode) { |
2396
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1125 err.error(km1, "w.w.qkm1.failed", p); |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1126 continue; |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1127 } |
2396
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1128 |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1129 double w1; |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1130 try { |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1131 w1 = qW1.value(q1); |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1132 } |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1133 catch (ArgumentOutsideDomainException aode) { |
2403
177b0c91928d
'Bezugslinienverfahren': Improve the error messages even more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2396
diff
changeset
|
1134 err.error(km1, "w.w.wkm1.failed", q1, p); |
2396
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1135 continue; |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1136 } |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1137 |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1138 double q2; |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1139 try { |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1140 q2 = iQ2.value(p); |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1141 } |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1142 catch (ArgumentOutsideDomainException aode) { |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1143 err.error(km2, "w.w.qkm2.failed", p); |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1144 continue; |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1145 } |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1146 |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1147 double w2; |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1148 try { |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1149 w2 = qW2.value(q2); |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1150 } |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1151 catch (ArgumentOutsideDomainException aode) { |
2403
177b0c91928d
'Bezugslinienverfahren': Improve the error messages even more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2396
diff
changeset
|
1152 err.error(km2, "w.w.wkm2.failed", q2, p); |
2396
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1153 continue; |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1154 } |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1155 |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1156 ws1.add(w1); |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1157 ws2.add(w2); |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1158 qs1.add(q1); |
2c62bbe2e415
Give more precise message when an error occurs in W~W relation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2316
diff
changeset
|
1159 qs2.add(q2); |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1160 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1161 |
2316
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1162 return new double [][] { |
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1163 ws1.toNativeArray(), |
3076
5642a83420f2
FLYS artifacts: Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2560
diff
changeset
|
1164 qs1.toNativeArray(), |
2316
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1165 ws2.toNativeArray(), |
61b32380ffdb
Be more conservative about arrays and indices in "Bezugslinienverfahren".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2282
diff
changeset
|
1166 qs2.toNativeArray() }; |
1939
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1167 } |
2730d17df021
Added the implementation of the 'Bezugslinienverfahren'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1938
diff
changeset
|
1168 |
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
|
1169 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
|
1170 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
|
1171 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1172 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1173 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
|
1174 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1175 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
|
1176 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
|
1177 } |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1178 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1179 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
|
1180 |
d08f77e7f7e8
WST value table: Qs are now stored in ranges for each column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
632
diff
changeset
|
1181 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
|
1182 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
|
1183 } |
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 |
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 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
|
1186 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
|
1187 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
|
1188 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
|
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 |
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 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
|
1192 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
|
1193 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
|
1194 |
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 if (q > qMin && q < qMax) { |
655
913b52064449
Refactored version of "Berechnung 4"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
649
diff
changeset
|
1196 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
|
1197 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
|
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 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
|
1200 } |
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 |
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 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
|
1203 } |
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 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
|
1206 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
|
1207 } |
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 |
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 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
|
1210 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
|
1211 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
|
1212 |
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 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
|
1214 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
|
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 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
|
1217 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
|
1218 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
|
1219 } |
326
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1220 } |
07eba6d3b4a5
Fetches w/q value tables from the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1221 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |