Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/FlowVelocityModelKmValueFinder.java @ 8964:45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
author | gernotbelger |
---|---|
date | Thu, 29 Mar 2018 15:48:17 +0200 |
parents | d9dbf0b74bc2 |
children | 9b9f5f4ddb80 |
rev | line source |
---|---|
8898 | 1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde |
2 * Software engineering by | |
3 * Björnsen Beratende Ingenieure GmbH | |
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt | |
5 * | |
6 * This file is Free Software under the GNU AGPL (>=v3) | |
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the | |
8 * documentation coming with Dive4Elements River for details. | |
9 */ | |
10 | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
11 package org.dive4elements.river.artifacts.sinfo.tkhcalculation; |
8898 | 12 |
13 import java.util.ArrayList; | |
14 import java.util.List; | |
15 | |
16 import org.apache.commons.lang.math.DoubleRange; | |
17 import org.apache.log4j.Logger; | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
18 import org.dive4elements.river.artifacts.math.Linear; |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
19 import org.dive4elements.river.artifacts.math.Utils; |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
20 import org.dive4elements.river.artifacts.model.Calculation; |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
21 import org.dive4elements.river.artifacts.sinfo.flowdepth.FlowVelocityKmModelValues; |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
22 import org.dive4elements.river.backend.SessionHolder; |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
23 import org.dive4elements.river.model.River; |
8898 | 24 import org.hibernate.SQLQuery; |
25 import org.hibernate.Session; | |
26 import org.hibernate.type.StandardBasicTypes; | |
27 | |
28 import gnu.trove.TDoubleArrayList; | |
29 | |
30 /** | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
31 * Searchable sorted km array with parallel FlowVelocityKmModelValues array and linear interpolation for km and the |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
32 * model values between the array elements.<br /> |
8898 | 33 * {@link loadValues} loads all the model values for a given km range of a river.<br /> |
34 * {@link findKmQValues} then searches a km in the values table or the nearest including km interval, resp. | |
35 * The v and tau values for a given discharge are either found directly or also interpolated linearly.<br /> | |
36 * | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
37 * (Created based on a copy of FlowVelocityMeasurementFactory.) |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
38 * |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
39 * @author Matthias Schäfer |
8898 | 40 */ |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
41 // TODO: noch mal prüfen, ob wir eine interpolationsschranke brauchen (max. km-abstand) |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
42 final class FlowVelocityModelKmValueFinder { |
8898 | 43 /***** FIELDS *****/ |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
44 |
8898 | 45 /** |
46 * Private log to use here. | |
47 */ | |
48 private static Logger log = Logger.getLogger(FlowVelocityModelKmValueFinder.class); | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
49 |
8898 | 50 /** |
51 * Query for a range of stations of a river with all their q, main-v and tau values.<br /> | |
52 * (Might be several 10000 rows if many stations and large q range) | |
53 */ | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
54 private static final String SQL_SELECT_ALL = // |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
55 "SELECT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
56 + " FROM (discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id)" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
57 + " INNER JOIN flow_velocity_model_values fvmv ON fvm.id = fvmv.flow_velocity_model_id" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
58 + " WHERE (dz.river_id = :river_id) AND (fvmv.station BETWEEN :kmfrom - 0.0001 AND :kmto + 0.0001)" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
59 /* + " WHERE (dz.river_id = :river_id) AND (fvmv.q BETWEEN :qmin AND :qmax)" */ |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
60 + " ORDER BY fvmv.station ASC, fvmv.q ASC"; |
8898 | 61 |
62 /** | |
63 * Query for a river's max km below a limit with all its q, main-v and tau values. | |
64 */ | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
65 private static final String SQL_SELECT_KMLOWER = // |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
66 "SELECT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau" + " FROM flow_velocity_model_values fvmv" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
67 + " INNER JOIN (SELECT MAX(fvmvi.station) AS kmmax" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
68 + " FROM(discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id)" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
69 + " INNER JOIN flow_velocity_model_values fvmvi ON fvm.id = fvmvi.flow_velocity_model_id" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
70 + " WHERE (dz.river_id = :river_id) AND (fvmvi.station < :kmfrom - 0.0001)) finf ON fvmv.station = finf.kmmax" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
71 + " ORDER BY fvmv.q ASC"; |
8898 | 72 |
73 /** | |
74 * Query for a river's min km above a limit with all its q, main-v and tau values. | |
75 */ | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
76 private static final String SQL_SELECT_KMUPPER = // |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
77 "SELECT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau" + " FROM flow_velocity_model_values fvmv" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
78 + " INNER JOIN (SELECT MIN(fvmvi.station) AS kmmin" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
79 + " FROM(discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id)" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
80 + " INNER JOIN flow_velocity_model_values fvmvi ON fvm.id = fvmvi.flow_velocity_model_id" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
81 + " WHERE (dz.river_id = :river_id) AND (fvmvi.station > :kmto + 0.0001)) fsup ON fvmv.station = fsup.kmmin" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
82 + " ORDER BY fvmv.q ASC"; |
8898 | 83 |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
84 // /** |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
85 // * Query to select all km-q-v-tau of a river that are the q maxima below a q limit |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
86 // */ |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
87 // private static final String SQL_SELECT_QLOWER = |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
88 // "SELECT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
89 // + " FROM flow_velocity_model_values fvmv" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
90 // + " INNER JOIN (SELECT fv2.station, MAX(fv2.q) AS q" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
91 // + " FROM (discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id)" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
92 // + " INNER JOIN flow_velocity_model_values fv2 ON fvm.id = fv2.flow_velocity_model_id" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
93 // + " WHERE (dz.river_id = :river_id) AND (fv2.q < :qlim) GROUP BY fv2.station) qx" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
94 // + " ON (fvmv.station=qx.station) AND (fvmv.q=qx.q)" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
95 // + " ORDER BY fvmv.station ASC"; |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
96 // |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
97 // /** |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
98 // * Query to select all km-q-v-tau of a river that are the q minima above a q limit |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
99 // */ |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
100 // private static final String SQL_SELECT_QUPPER = |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
101 // "SELECT fvmv.station AS station, fvmv.q AS q, fvmv.main_channel AS vmain, fvmv.shear_stress AS tau" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
102 // + " FROM flow_velocity_model_values fvmv" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
103 // + " INNER JOIN (SELECT fv2.station, MIN(fv2.q) AS q" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
104 // + " FROM (discharge_zone dz INNER JOIN flow_velocity_model fvm ON dz.id = fvm.discharge_zone_id)" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
105 // + " INNER JOIN flow_velocity_model_values fv2 ON fvm.id = fv2.flow_velocity_model_id" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
106 // + " WHERE (dz.river_id = :river_id) AND (fv2.q > :qlim) GROUP BY fv2.station) qx" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
107 // + " ON (fvmv.station=qx.station) AND (fvmv.q=qx.q)" |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
108 // + " ORDER BY fvmv.station ASC"; |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
109 |
8898 | 110 /** |
111 * Kms of the loaded river range | |
112 */ | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
113 private final TDoubleArrayList kms = new TDoubleArrayList(); |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
114 |
8898 | 115 /** |
116 * For each km in kms a list of q-v-tau-tupels | |
117 */ | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
118 private final List<FlowVelocityKmModelValues> values = new ArrayList<>(); |
8898 | 119 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
120 private Calculation problems; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
121 |
8898 | 122 /** |
123 * Searched km of the last findKmValue | |
124 */ | |
125 private double findKm; | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
126 |
8898 | 127 /** |
128 * kms and values index of the interval start found by the last findKmValue | |
129 */ | |
130 private int leftIndexFound = -1; | |
131 | |
132 /** | |
133 * kms and values index of the interval end found by the last findKmValue | |
134 */ | |
135 private int rightIndexFound = -1; | |
136 | |
137 /** | |
138 * Q of the last findKmQValues | |
139 */ | |
140 private double findQ; | |
141 | |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
142 public FlowVelocityModelKmValueFinder(final Calculation problems) { |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
143 this.problems = problems; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
144 } |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
145 |
8898 | 146 /***** METHODS *****/ |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
147 |
8898 | 148 /** |
149 * Discharge of the last {@link findKmQValue} | |
150 */ | |
151 public double getFindQ() { | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
152 return this.findQ; |
8898 | 153 } |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
154 |
8898 | 155 /** |
156 * Velocity of the last {@link findKmQValues} | |
157 */ | |
158 public double getFindVmainFound() { | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
159 if (this.leftIndexFound < 0) |
8898 | 160 return Double.NaN; |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
161 else if (this.leftIndexFound == this.rightIndexFound) |
8898 | 162 return getLeftValues().getVmainFound(); |
163 else | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
164 return Linear.linear(this.findKm, getLeftValues().getKm(), getRightValues().getKm(), getLeftValues().getVmainFound(), |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
165 getRightValues().getVmainFound()); |
8898 | 166 } |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
167 |
8898 | 168 /** |
169 * Shear stress tau of the last {@link findKmQValues} | |
170 */ | |
171 public double getFindTauFound() { | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
172 if (this.leftIndexFound < 0) |
8898 | 173 return Double.NaN; |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
174 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
175 if (this.leftIndexFound == this.rightIndexFound) |
8898 | 176 return getLeftValues().getTauFound(); |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
177 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
178 return Linear.linear(this.findKm, getLeftValues().getKm(), getRightValues().getKm(), getLeftValues().getTauFound(), getRightValues().getTauFound()); |
8898 | 179 } |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
180 |
8898 | 181 /** |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
182 * Whether the discharge has been interpolated in the last {@link findKmQValues} |
8898 | 183 */ |
184 public boolean getFindIsQInterpolated() { | |
185 return (getLeftValues() != null) && (getLeftValues().getIsInterpolated() || getRightValues().getIsInterpolated()); | |
186 } | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
187 |
8898 | 188 /** |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
189 * Static constructor: queries a range of a river's kms with all their q-v-tau values. |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
190 * |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
191 * @param problems |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
192 * |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
193 * @return Whether the load has been successful the new instance, <code>null</code> otherwise. |
8898 | 194 */ |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
195 public static FlowVelocityModelKmValueFinder loadValues(final Calculation problems, final River river, final DoubleRange kmRange, |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
196 final DoubleRange qRange) { |
8898 | 197 // DB session |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
198 log.debug(String.format("loadValues km %.3f - %.3f / q %.1f - %.1f", kmRange.getMinimumDouble(), kmRange.getMaximumDouble(), qRange.getMinimumDouble(), |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
199 qRange.getMaximumDouble())); |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
200 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
201 final FlowVelocityModelKmValueFinder instance = new FlowVelocityModelKmValueFinder(problems); |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
202 |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
203 final TDoubleArrayList kms = instance.kms; |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
204 final List<FlowVelocityKmModelValues> values = instance.values; |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
205 |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
206 final boolean isDemoValuesCorrection = river.getName().equalsIgnoreCase("beispielfluss"); |
8898 | 207 final Session session = SessionHolder.HOLDER.get(); |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
208 |
8898 | 209 // Select km infimum |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
210 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_KMLOWER).addScalar("station", StandardBasicTypes.DOUBLE).addScalar("q", StandardBasicTypes.DOUBLE) |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
211 .addScalar("vmain", StandardBasicTypes.DOUBLE).addScalar("tau", StandardBasicTypes.DOUBLE); |
8898 | 212 sqlQuery.setParameter("river_id", river.getId()); |
213 sqlQuery.setParameter("kmfrom", kmRange.getMinimumDouble()); | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
214 instance.addKms(sqlQuery.list(), isDemoValuesCorrection); |
8898 | 215 |
216 // Select km range | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
217 sqlQuery = session.createSQLQuery(SQL_SELECT_ALL).addScalar("station", StandardBasicTypes.DOUBLE).addScalar("q", StandardBasicTypes.DOUBLE) |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
218 .addScalar("vmain", StandardBasicTypes.DOUBLE).addScalar("tau", StandardBasicTypes.DOUBLE); |
8898 | 219 sqlQuery.setParameter("river_id", river.getId()); |
220 sqlQuery.setParameter("kmfrom", kmRange.getMinimumDouble()); | |
221 sqlQuery.setParameter("kmto", kmRange.getMaximumDouble()); | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
222 // sqlQuery.setParameter("qmin", qRange.getMinimumDouble()); |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
223 // sqlQuery.setParameter("qmax", qRange.getMaximumDouble()); |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
224 |
8898 | 225 int kmcount = kms.size(); |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
226 final int rowcount = instance.addKms(sqlQuery.list(), isDemoValuesCorrection); |
8898 | 227 kmcount = kms.size() - kmcount; |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
228 |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
229 // Select km supremum |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
230 sqlQuery = session.createSQLQuery(SQL_SELECT_KMUPPER).addScalar("station", StandardBasicTypes.DOUBLE).addScalar("q", StandardBasicTypes.DOUBLE) |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
231 .addScalar("vmain", StandardBasicTypes.DOUBLE).addScalar("tau", StandardBasicTypes.DOUBLE); |
8898 | 232 sqlQuery.setParameter("river_id", river.getId()); |
233 sqlQuery.setParameter("kmto", kmRange.getMaximumDouble()); | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
234 final int supcnt = instance.addKms(sqlQuery.list(), isDemoValuesCorrection); |
8898 | 235 |
236 // Add copy of last km for search of max km value | |
237 if ((supcnt == 0) && (values.size() >= 1)) { | |
238 kms.add(kms.getQuick(kms.size()) + 0.0001); | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
239 values.add(new FlowVelocityKmModelValues(kms.getQuick(kms.size() - 1), values.get(values.size() - 1))); |
8898 | 240 } |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
241 |
8898 | 242 // log.debug |
243 if (values.size() - 1 >= 0) { | |
244 log.debug(String.format("loadValues %d: km %.3f - %d values", 0, values.get(0).getKm(), values.get(0).size())); | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
245 |
8898 | 246 if (values.size() - 1 >= 1) { |
247 log.debug(String.format("loadValues %d: km %.3f - %d values", 1, values.get(1).getKm(), values.get(1).size())); | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
248 |
8898 | 249 if (values.size() - 1 >= 2) |
250 log.debug("loadValues ..."); | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
251 |
8898 | 252 if (values.size() - 2 >= 3) |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
253 log.debug(String.format("loadValues %d: km %.3f - %d values", values.size() - 2, values.get(values.size() - 2).getKm(), |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
254 values.get(values.size() - 2).size())); |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
255 |
8898 | 256 if (values.size() - 1 >= 3) |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
257 log.debug(String.format("loadValues %d: km %.3f - %d values", values.size() - 1, values.get(values.size() - 1).getKm(), |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
258 values.get(values.size() - 1).size())); |
8898 | 259 } |
260 } | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
261 |
8898 | 262 log.debug(String.format("loadValues %d kms, %d values loaded", kmcount, rowcount)); |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
263 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
264 if (kms.size() == 0) { |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
265 problems.addProblem("flowvelocitymodelkmvaluefinder.empty"); |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
266 return null; |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
267 } |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
268 |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
269 return instance; |
8898 | 270 } |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
271 |
8898 | 272 /** |
273 * Adds the km-q-v-tau values of a query result row to the last km of the list, or a new one resp. | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
274 * |
8898 | 275 * @return Number of rows |
276 */ | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
277 private int addKms(final List<Object[]> rows, final boolean isDemoValuesCorrection) { |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
278 for (final Object[] row : rows) { |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
279 if ((this.kms.size() == 0) || !Utils.epsilonEquals(this.kms.get(this.kms.size() - 1), (double) row[0], 0.0001)) { |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
280 this.kms.add((double) row[0]); |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
281 this.values.add(new FlowVelocityKmModelValues(this.kms.get(this.kms.size() - 1))); |
8898 | 282 } |
283 if (isDemoValuesCorrection) | |
284 // "Verfremdung" der v-Werte etwas korrigieren (Originalwerte wurden mit Zufallswert zwischen 10 und 20 multipliziert) | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
285 this.values.get(this.values.size() - 1).addValues((double) row[1], ((double) row[2]) / 10, (double) row[3]); |
8898 | 286 else |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
287 this.values.get(this.values.size() - 1).addValues((double) row[1], (double) row[2], (double) row[3]); |
8898 | 288 } |
289 return rows.size(); | |
290 } | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
291 |
8898 | 292 /** |
293 * Searches a km and finds or interpolates the velocity and shear stress values for a discharge<br /> | |
294 * The values may be got via {@link getVmainFound} etc. | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
295 * |
8898 | 296 * @return Whether values have been found |
297 */ | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
298 public boolean findKmQValues(final double km, final double q) { |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
299 this.findQ = q; |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
300 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
301 final boolean found = doFindKmQValues(km, q); |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
302 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
303 if (this.problems != null) { |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
304 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
305 this.problems.addProblem(km, "flowvelocitymodelkmvaluefinder.missing"); |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
306 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
307 // report only once |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
308 this.problems = null; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
309 } |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
310 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
311 return found; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
312 } |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
313 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
314 private boolean doFindKmQValues(final double km, final double q) { |
8898 | 315 if (!searchKm(km)) |
316 return false; | |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
317 |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
318 if (this.leftIndexFound == this.rightIndexFound) { |
8898 | 319 // Exact km match |
320 final double qfound = getLeftValues().findQ(q); | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
321 log.debug(String.format("findKmQValues km %.3f q %.0f = %.0f (%d)", km, q, qfound, this.leftIndexFound)); |
8898 | 322 return !Double.isNaN(qfound); |
323 } | |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
324 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
325 final double[] qfound = { getLeftValues().findQ(q), getRightValues().findQ(q) }; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
326 log.debug(String.format("findKmQValues km %.3f q %.0f = %.0f (%d, %.3f) - %.0f (%d, %.3f)", km, q, qfound[0], this.leftIndexFound, |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
327 getLeftValues().getKm(), qfound[1], this.rightIndexFound, getRightValues().getKm())); |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
328 return !Double.isNaN(qfound[0]) && !Double.isNaN(qfound[1]); |
8898 | 329 } |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
330 |
8898 | 331 /** |
332 * Searches a km | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
333 * |
8898 | 334 * @return Whether the km was within the supported range |
335 */ | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
336 private boolean searchKm(final double km) { |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
337 this.findKm = km; |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
338 this.leftIndexFound = -1; |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
339 this.rightIndexFound = -1; |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
340 |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
341 int i = this.kms.binarySearch(km); |
8898 | 342 if (i >= 0) { |
343 // Exact km match | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
344 this.leftIndexFound = i; |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
345 this.rightIndexFound = i; |
8898 | 346 return true; |
347 } | |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
348 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
349 // Out of range or within km interval |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
350 if (i < 0) |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
351 i = -i - 1; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
352 if ((i <= 0) || (i >= this.kms.size())) |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
353 return false; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
354 this.leftIndexFound = i - 1; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
355 this.rightIndexFound = i; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8915
diff
changeset
|
356 return true; |
8898 | 357 } |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
358 |
8898 | 359 private FlowVelocityKmModelValues getLeftValues() { |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
360 return this.values.get(this.leftIndexFound); |
8898 | 361 } |
362 | |
8915
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
363 private FlowVelocityKmModelValues getRightValues() { |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
364 return this.values.get(this.rightIndexFound); |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
365 } |
d9dbf0b74bc2
Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents:
8898
diff
changeset
|
366 } |