diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/WaterlevelValuesFinder.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 5d5d482da3e9
children
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/WaterlevelValuesFinder.java	Wed Mar 28 17:04:20 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/WaterlevelValuesFinder.java	Thu Mar 29 15:48:17 2018 +0200
@@ -9,10 +9,9 @@
  */
 package org.dive4elements.river.artifacts.sinfo.tkhcalculation;
 
-import org.apache.commons.math.ArgumentOutsideDomainException;
-import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction;
+import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.WKms;
-import org.dive4elements.river.utils.DoubleUtil;
+import org.dive4elements.river.artifacts.sinfo.util.LinearInterpolator;
 
 /**
  * Abstraction for access to waterlevels by station.
@@ -21,23 +20,19 @@
  */
 public class WaterlevelValuesFinder {
 
-    public static WaterlevelValuesFinder fromKms(final WKms wkms) {
-        return new WaterlevelValuesFinder(wkms);
+    private static final double MAX_DSTANCE_KM = 1.0;
+
+    public static WaterlevelValuesFinder fromKms(final Calculation problems, final WKms wkms) {
+        return new WaterlevelValuesFinder(problems, wkms);
     }
 
-    private final PolynomialSplineFunction wstInterpolator;
+    private final LinearInterpolator wstInterpolator;
 
-    private WaterlevelValuesFinder(final WKms wkms) {
-        this.wstInterpolator = DoubleUtil.getLinearInterpolator(wkms.allKms(), wkms.allWs());
+    private WaterlevelValuesFinder(final Calculation problems, final WKms wkms) {
+        this.wstInterpolator = LinearInterpolator.create(problems, wkms.allKms(), wkms.allWs(), MAX_DSTANCE_KM);
     }
 
     public double getWaterlevel(final double km) {
-        try {
-            return this.wstInterpolator.value(km);
-        }
-        catch (final ArgumentOutsideDomainException e) {
-            e.printStackTrace();
-            return Double.NaN;
-        }
+        return this.wstInterpolator.value(km);
     }
 }
\ No newline at end of file

http://dive4elements.wald.intevation.org