diff artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java @ 9504:76c0665888a3

No rounding during calculation (Meilenstein-2 2.4.2 and 2.9), delta-w-cm as double (for historical scenario)
author mschaefer
date Fri, 28 Sep 2018 10:13:09 +0200
parents 853f2dafc16e
children 8b7bf26b8782
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java	Fri Sep 28 10:11:06 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculator.java	Fri Sep 28 10:13:09 2018 +0200
@@ -9,7 +9,6 @@
  */
 package org.dive4elements.river.artifacts.uinfo.salix;
 
-import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -18,7 +17,6 @@
 
 import org.dive4elements.river.artifacts.WINFOArtifact;
 import org.dive4elements.river.artifacts.access.ComputationRangeAccess;
-import org.dive4elements.river.artifacts.common.AbstractResultType;
 import org.dive4elements.river.artifacts.common.GeneralResultType;
 import org.dive4elements.river.artifacts.common.ResultRow;
 import org.dive4elements.river.artifacts.model.Calculation;
@@ -28,8 +26,6 @@
 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
 import org.dive4elements.river.artifacts.uinfo.common.UInfoResultType;
 import org.dive4elements.river.artifacts.uinfo.salix.SalixLineAccess.ScenarioType;
-import org.dive4elements.river.artifacts.uinfo.vegetationzones.VegetationZoneServerClientXChange;
-import org.dive4elements.river.utils.Formatter;
 
 /**
  * Calculation of the result rows of the u-info salix line calc mode
@@ -38,23 +34,25 @@
  */
 final class SalixLineCalculator {
 
-    private static final String MAIN_VALUE_MNQ = "mnq";
-
-    private static final String MAIN_VALUE_MQ = "mq";
+    private static final String MAIN_VALUE_MNQ = "MNQ";
 
-    private static final String MAIN_VALUE_MHQ = "mhq";
+    private static final String MAIN_VALUE_MQ = "MQ";
 
-    private static final String MAIN_VALUE_HQ5 = "hq5";
+    private static final String MAIN_VALUE_MHQ = "MHQ";
 
-    private static final BigDecimal SALIX_DISTANCE = new BigDecimal("2.31");
+    private static final String MAIN_VALUE_HQ5 = "HQ5";
+
+    private static final double SALIX_DISTANCE = 2.31;
     private final List<ResultRow> rows = new ArrayList<>();
 
     private final RiverInfoProvider riverInfoProvider;
 
+
     public SalixLineCalculator(final RiverInfoProvider riverInfoProvider) {
         this.riverInfoProvider = riverInfoProvider;
     }
 
+
     /**
      * Calculate the salix line result rows
      */
@@ -98,8 +96,6 @@
 
     /**
      * Create a result row for a station and its gauge, and add w-q-values as selected
-     *
-     * @param mainWstValues
      */
     private ResultRow createRow(final MainWstValuesCalculator mainWstValues, final double station, final NavigableMap<Double, List<Double>> rangeScenarios) {
 
@@ -123,7 +119,7 @@
         // Calc salix-line and mw-mnw
         row.putValue(UInfoResultType.salixline, calcSalix(mhw, mw, 0.0));
         row.putValue(UInfoResultType.salix_mw_mnw, calcMwmnw(mw, mnw));
-        final double salixw = Formatter.roundW(mhw).subtract(SALIX_DISTANCE).doubleValue();
+        final double salixw = mhw - SALIX_DISTANCE;
         row.putValue(UInfoResultType.salixw, salixw);
         // Calc scenario values (always all scenario types set, Result variant extracts the fields needed)
         final List<SalixScenario> scenarios = new ArrayList<>();
@@ -132,7 +128,7 @@
             if (deltaw != null) {
                 final double salix = calcSalix(mhw, mw, deltaw.doubleValue());
                 final double scen = calcSalix(mhw, 0.0, deltaw.doubleValue());
-                scenarios.add(new SalixScenario((int) (deltaw * 100), salix, scen));
+                scenarios.add(new SalixScenario(deltaw * 100, salix, scen));
             } else {
                 scenarios.add(null);
             }
@@ -148,7 +144,7 @@
     private double calcSalix(final double mhw, final double mw, final double deltamw) {
         if (Double.isNaN(mw) || Double.isInfinite(mw) || Double.isNaN(mhw) || Double.isInfinite(mhw))
             return mhw - mw; // preserving NaN or Infinity
-        return Formatter.roundW(mhw).subtract(SALIX_DISTANCE).subtract(Formatter.roundW(mw).add(Formatter.roundW(deltamw))).doubleValue();
+        return mhw - SALIX_DISTANCE - mw - deltamw;
     }
 
     /**
@@ -157,7 +153,7 @@
     private double calcMwmnw(final double mw, final double mnw) {
         if (Double.isNaN(mw) || Double.isInfinite(mw) || Double.isNaN(mnw) || Double.isInfinite(mnw))
             return mnw - mw; // preserving NaN or Inifinity
-        return Formatter.roundW(mnw).subtract(Formatter.roundW(mw)).doubleValue();
+        return mnw - mw;
     }
 
     /**
@@ -174,19 +170,6 @@
     }
 
     /**
-     * Find and return a height (iota, w main value) of a station in a previously calculated result
-     */
-    public double fetchStationHeight(final Calculation problems, final double station, final AbstractResultType resultType,
-            final SalixLineCalculationResult result) {
-
-        // Search the station in the previously calculated result rows
-        final ResultRow stationRow = searchStation(station, result.getRows());
-        if (stationRow != null)
-            return stationRow.getDoubleValue(resultType);
-        return Double.NaN;
-    }
-
-    /**
      * Searches the row of a station in a result rows collection
      */
     private ResultRow searchStation(final double station, final Collection<ResultRow> rows) {
@@ -196,29 +179,4 @@
         }
         return null;
     }
-
-    /**
-     * Computes the height of a vegetation zone limit for a station and a previously computed salix line result
-     */
-    public double computeVegetationZoneHeight(final Calculation problems, final double station, final int vegetationZoneType,
-            final SalixLineCalculationResult result) {
-
-        // Search the station in the previously calculated result rows
-        final ResultRow stationRow = searchStation(station, result.getRows());
-        if (stationRow == null)
-            return Double.NaN;
-
-        // Compute height from overflow duration days
-        final List<VegetationZoneServerClientXChange> vzs = VegetationZoneServerClientXChange.getStandardList(null, null); // TODO river, context
-        if ((vegetationZoneType >= 1) && (vegetationZoneType <= vzs.size())) {
-            final int uefd = vzs.get(vegetationZoneType - 1).getMin_day_overflow();
-            // Üfd = -70,559 ∗ ln((DGM - MW) + 0,5) + 80,711
-            final double f1 = -70.559;
-            final double f2 = -88.711;
-            final double mw = stationRow.getDoubleValue(UInfoResultType.waterlevelMW);
-            final double dgm = Math.exp((uefd - f2) / f1) + mw - 0.5;
-            return dgm;
-        }
-        return Double.NaN;
-    }
 }

http://dive4elements.wald.intevation.org