annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/extreme/Curve.java @ 5863:4897a58c8746

River artifacts: Added new copyright headers.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 28 Apr 2013 14:40:59 +0200
parents 5aa05a7a34b7
children af13ceeba52a
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
6 * documentation coming with Dive4Elements River for details.
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4354
diff changeset
9 package org.dive4elements.river.artifacts.model.extreme;
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4354
diff changeset
11 import org.dive4elements.river.artifacts.math.Function;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4354
diff changeset
12 import org.dive4elements.river.artifacts.math.NaNFunction;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4354
diff changeset
13 import org.dive4elements.river.artifacts.math.UnivariateRealFunctionFunction;
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4354
diff changeset
15 import org.dive4elements.river.artifacts.math.fitting.FunctionFactory;
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 import java.io.Serializable;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 import java.lang.ref.SoftReference;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 import org.apache.commons.math.analysis.interpolation.SplineInterpolator;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 import org.apache.commons.math.exception.MathIllegalArgumentException;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 import org.apache.log4j.Logger;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26
4311
5a28312aee99 Doc for WQFacet and Curve.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4307
diff changeset
27 /** An extrapolating W/Q function/curve. */
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 public class Curve
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 implements Serializable, Function
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 private static Logger log = Logger.getLogger(Curve.class);
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32
3737
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
33 protected double [] qs;
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
34 protected double [] ws;
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 protected String function;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 protected double [] coeffs;
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
37 protected double chiSqr;
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38
4335
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
39 /** Suggested maximum value for q to input. */
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
40 protected double suggestedMaxQ;
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
41
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 // The spline is pretty heavy weight so cache it with a soft ref only.
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 protected transient SoftReference<Function> spline;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 protected transient Function extrapolation;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 public Curve() {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48
3737
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
49 public Curve(
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
50 double [] qs,
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
51 double [] ws,
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
52 String function,
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
53 double [] coeffs,
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
54 double chiSqr
3737
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
55 ) {
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
56 this.qs = qs;
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
57 this.ws = ws;
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 this.function = function;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 this.coeffs = coeffs;
4335
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
60 this.suggestedMaxQ = Double.MAX_VALUE;
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62
3737
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
63 public double [] getQs() {
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
64 return qs;
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
65 }
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
66
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
67 public double [] getWs() {
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
68 return ws;
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 public String getFunction() {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 return function;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 public double [] getCoeffs() {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 return coeffs;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78
4307
2e8e00026059 Curve: Tiny javadoc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4259
diff changeset
79
4335
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
80 public void setSuggestedMaxQ(double newMaxQ) {
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
81 this.suggestedMaxQ = newMaxQ;
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
82 }
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
83
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
84
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
85 public double getSuggestedMaxQ() {
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
86 return this.suggestedMaxQ;
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
87 }
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
88
5948de9788d5 Curve: Added field, getter and setter for suggestedMaxQ .
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4311
diff changeset
89
4307
2e8e00026059 Curve: Tiny javadoc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4259
diff changeset
90 /** Calculate value at given x. */
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91 @Override
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92 public double value(double x) {
4354
e0add97c432b Circumvent NPE in Curve. issue flys/1019
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4335
diff changeset
93 if (qs == null || x < qs[0]) return Double.NaN;
3737
976be312a84c Simplified code for extreme curves.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3733
diff changeset
94 return (x <= qs[qs.length-1]
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 ? getSpline()
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96 : getExtrapolation()).value(x);
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 protected synchronized Function getExtrapolation() {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100 if (extrapolation == null) {
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4354
diff changeset
101 org.dive4elements.river.artifacts.math.fitting.Function
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 f = FunctionFactory.getInstance().getFunction(function);
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
104 extrapolation = f != null
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 ? f.instantiate(coeffs)
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106 : NaNFunction.INSTANCE;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108 return extrapolation;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110
4259
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
111 /**
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
112 * Gets the chiSqr for this instance.
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
113 *
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
114 * @return The chiSqr.
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
115 */
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
116 public double getChiSqr() {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
117 return this.chiSqr;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
118 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
119
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
120 /**
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
121 * Sets the chiSqr for this instance.
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
122 *
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
123 * @param chiSqr The chiSqr.
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
124 */
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
125 public void setChiSqr(double chiSqr) {
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
126 this.chiSqr = chiSqr;
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
127 }
5cc9453456a7 First complete but untested version of the 'Auslagerung extremer Wasserspiegellagen' calculation.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3742
diff changeset
128
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 protected synchronized Function getSpline() {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 Function sp;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131 if (spline != null) {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 if ((sp = spline.get()) != null) {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133 return sp;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 }
3742
467efea19d15 Added type safety.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3737
diff changeset
136 spline = new SoftReference<Function>(sp = createSpline());
3733
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 return sp;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 protected Function createSpline() {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 SplineInterpolator interpolator = new SplineInterpolator();
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 try {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143 return new UnivariateRealFunctionFunction(
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144 interpolator.interpolate(qs, ws));
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146 catch (MathIllegalArgumentException miae) {
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
147 log.debug("creation on spline failed", miae);
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 return NaNFunction.INSTANCE;
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
149 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 }
893b2477208f Some first models needed for the extreme waterlevels.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
152 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org