Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/Input/WaternetCalculatorInput.cs
===================================================================
diff -u
--- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/Input/WaternetCalculatorInput.cs (revision 0)
+++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Calculators/Waternet/Input/WaternetCalculatorInput.cs (revision 557444d8587632235e4fda55487e6f322cde9ce7)
@@ -0,0 +1,310 @@
+// Copyright (C) Stichting Deltares 2017. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Input;
+using Ringtoets.MacroStabilityInwards.Primitives;
+
+namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet.Input
+{
+ ///
+ /// This class contains all the parameters that are required to perform a Waternet calculation.
+ ///
+ public class WaternetCalculatorInput
+ {
+ ///
+ /// Creates a new instance of .
+ ///
+ /// The object containing the values for the properties
+ /// of the new .
+ /// Thrown when is null.
+ /// /// Thrown when one of the following properties is null:
+ ///
+ /// - ;
+ /// - ;
+ ///
+ ///
+ public WaternetCalculatorInput(ConstructionProperties properties)
+ {
+ if (properties == null)
+ {
+ throw new ArgumentNullException(nameof(properties));
+ }
+
+ if (properties.SurfaceLine == null)
+ {
+ throw new ArgumentException("SurfaceLine must be set.");
+ }
+ if (properties.SoilProfile == null)
+ {
+ throw new ArgumentException("SoilProfile must be set.");
+ }
+
+ AssessmentLevel = properties.AssessmentLevel;
+ SurfaceLine = properties.SurfaceLine;
+ SoilProfile = properties.SoilProfile;
+ WaterLevelRiverAverage = properties.WaterLevelRiverAverage;
+ WaterLevelPolderExtreme = properties.WaterLevelPolderExtreme;
+ WaterLevelPolderDaily = properties.WaterLevelPolderDaily;
+ MinimumLevelPhreaticLineAtDikeTopRiver = properties.MinimumLevelPhreaticLineAtDikeTopRiver;
+ MinimumLevelPhreaticLineAtDikeTopPolder = properties.MinimumLevelPhreaticLineAtDikeTopPolder;
+ LeakageLengthOutwardsPhreaticLine3 = properties.LeakageLengthOutwardsPhreaticLine3;
+ LeakageLengthInwardsPhreaticLine3 = properties.LeakageLengthInwardsPhreaticLine3;
+ LeakageLengthOutwardsPhreaticLine4 = properties.LeakageLengthOutwardsPhreaticLine4;
+ LeakageLengthInwardsPhreaticLine4 = properties.LeakageLengthInwardsPhreaticLine4;
+ PiezometricHeadPhreaticLine2Outwards = properties.PiezometricHeadPhreaticLine2Outwards;
+ PiezometricHeadPhreaticLine2Inwards = properties.PiezometricHeadPhreaticLine2Inwards;
+ PenetrationLength = properties.PenetrationLength;
+ AdjustPhreaticLine3And4ForUplift = properties.AdjustPhreaticLine3And4ForUplift;
+ DikeSoilScenario = properties.DikeSoilScenario;
+ }
+
+ ///
+ /// Container for properties for constructing a .
+ ///
+ public class ConstructionProperties
+ {
+ ///
+ /// Creates new instance of .
+ ///
+ public ConstructionProperties()
+ {
+ AssessmentLevel = double.NaN;
+ WaterLevelRiverAverage = double.NaN;
+ WaterLevelPolderExtreme = double.NaN;
+ WaterLevelPolderDaily = double.NaN;
+ MinimumLevelPhreaticLineAtDikeTopRiver = double.NaN;
+ MinimumLevelPhreaticLineAtDikeTopPolder = double.NaN;
+ LeakageLengthOutwardsPhreaticLine3 = double.NaN;
+ LeakageLengthInwardsPhreaticLine3 = double.NaN;
+ LeakageLengthOutwardsPhreaticLine4 = double.NaN;
+ LeakageLengthInwardsPhreaticLine4 = double.NaN;
+ PiezometricHeadPhreaticLine2Outwards = double.NaN;
+ PiezometricHeadPhreaticLine2Inwards = double.NaN;
+ PenetrationLength = double.NaN;
+ DikeSoilScenario = MacroStabilityInwardsDikeSoilScenario.ClayDikeOnClay;
+ }
+
+ #region Properties
+
+ ///
+ /// Gets or sets the outside high water level.
+ /// [m+NAP]
+ ///
+ public double AssessmentLevel { internal get; set; }
+
+ ///
+ /// Gets or sets the surface line.
+ ///
+ public MacroStabilityInwardsSurfaceLine SurfaceLine { internal get; set; }
+
+ ///
+ /// Gets or sets the profile which contains a definition of soil layers with properties.
+ ///
+ public SoilProfile SoilProfile { internal get; set; }
+
+ ///
+ /// Gets or sets the dike soil scenario.
+ ///
+ public MacroStabilityInwardsDikeSoilScenario DikeSoilScenario { internal get; set; }
+
+ ///
+ /// Gets or sets the average river water level.
+ /// [m+NAP]
+ ///
+ public double WaterLevelRiverAverage { internal get; set; }
+
+ ///
+ /// Gets or sets the polder water level under extreme circumstances.
+ /// [m+NAP]
+ ///
+ public double WaterLevelPolderExtreme { internal get; set; }
+
+ ///
+ /// Gets or sets the polder water level under daily circumstances.
+ /// [m+NAP]
+ ///
+ public double WaterLevelPolderDaily { internal get; set; }
+
+ ///
+ /// Gets or sets the minimum level phreatic line at dike top river.
+ /// [m+NAP]
+ ///
+ public double MinimumLevelPhreaticLineAtDikeTopRiver { internal get; set; }
+
+ ///
+ /// Gets or sets the minimum level phreatic line at dike top polder.
+ /// [m+NAP]
+ ///
+ public double MinimumLevelPhreaticLineAtDikeTopPolder { internal get; set; }
+
+ ///
+ /// Gets or sets whether phreatic line 3 and 4 should be adjusted for Uplift.
+ ///
+ public bool AdjustPhreaticLine3And4ForUplift { internal get; set; }
+
+ ///
+ /// Gets or sets the leakage length outwards of phreatic line 3.
+ /// [m]
+ ///
+ public double LeakageLengthOutwardsPhreaticLine3 { internal get; set; }
+
+ ///
+ /// Gets or sets the leakage length inwards of phreatic line 3.
+ /// [m]
+ ///
+ public double LeakageLengthInwardsPhreaticLine3 { internal get; set; }
+
+ ///
+ /// Gets or sets the leakage length outwards of phreatic line 4.
+ /// [m]
+ ///
+ public double LeakageLengthOutwardsPhreaticLine4 { internal get; set; }
+
+ ///
+ /// Gets or sets the leakage length inwards of phreatic line 4.
+ /// [m]
+ ///
+ public double LeakageLengthInwardsPhreaticLine4 { internal get; set; }
+
+ ///
+ /// Gets or sets the piezometric head of the phreatic line 2 outwards.
+ /// [m+NAP]
+ ///
+ public double PiezometricHeadPhreaticLine2Outwards { internal get; set; }
+
+ ///
+ /// Gets or sets the piezometric head of the phreatic line 2 inwards.
+ /// [m+NAP]
+ ///
+ public double PiezometricHeadPhreaticLine2Inwards { internal get; set; }
+
+ ///
+ /// Gets or sets the penetration length.
+ /// [m]
+ ///
+ public double PenetrationLength { internal get; set; }
+
+ #endregion
+ }
+
+ #region Properties
+
+ ///
+ /// Gets the outside high water level.
+ /// [m+NAP]
+ ///
+ public double AssessmentLevel { get; }
+ ///
+ /// Gets the surface line.
+ ///
+ public MacroStabilityInwardsSurfaceLine SurfaceLine { get; }
+
+ ///
+ /// Gets the profile which contains a definition of soil layers with properties.
+ ///
+ public SoilProfile SoilProfile { get; }
+
+ ///
+ /// Gets the dike soil scenario.
+ ///
+ public MacroStabilityInwardsDikeSoilScenario DikeSoilScenario { get; }
+
+ ///
+ /// Gets the average river water level.
+ /// [m+NAP]
+ ///
+ public double WaterLevelRiverAverage { get; }
+
+ ///
+ /// Gets the polder water level under extreme circumstances.
+ /// [m+NAP]
+ ///
+ public double WaterLevelPolderExtreme { get; }
+
+ ///
+ /// Gets the polder water level under daily circumstances.
+ /// [m+NAP]
+ ///
+ public double WaterLevelPolderDaily { get; }
+
+ ///
+ /// Gets the minimum level phreatic line at dike top river.
+ /// [m+NAP]
+ ///
+ public double MinimumLevelPhreaticLineAtDikeTopRiver { get; }
+
+ ///
+ /// Gets the minimum level phreatic line at dike top polder.
+ /// [m+NAP]
+ ///
+ public double MinimumLevelPhreaticLineAtDikeTopPolder { get; }
+
+ ///
+ /// Gets whether phreatic line 3 and 4 should be adjusted for Uplift.
+ ///
+ public bool AdjustPhreaticLine3And4ForUplift { get; }
+
+ ///
+ /// Gets the leakage length outwards of phreatic line 3.
+ /// [m]
+ ///
+ public double LeakageLengthOutwardsPhreaticLine3 { get; }
+
+ ///
+ /// Gets the leakage length inwards of phreatic line 3.
+ /// [m]
+ ///
+ public double LeakageLengthInwardsPhreaticLine3 { get; }
+
+ ///
+ /// Gets the leakage length outwards of phreatic line 4.
+ /// [m]
+ ///
+ public double LeakageLengthOutwardsPhreaticLine4 { get; }
+
+ ///
+ /// Gets the leakage length inwards of phreatic line 4.
+ /// [m]
+ ///
+ public double LeakageLengthInwardsPhreaticLine4 { get; }
+
+ ///
+ /// Gets the piezometric head of the phreatic line 2 outwards.
+ /// [m+NAP]
+ ///
+ public double PiezometricHeadPhreaticLine2Outwards { get; }
+
+ ///
+ /// Gets the piezometric head of the phreatic line 2 inwards.
+ /// [m+NAP]
+ ///
+ public double PiezometricHeadPhreaticLine2Inwards { get; }
+
+ ///
+ /// Gets the penetration length.
+ /// [m]
+ ///
+ public double PenetrationLength { get; }
+
+ #endregion
+ }
+}
\ No newline at end of file
Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Ringtoets.MacroStabilityInwards.KernelWrapper.csproj
===================================================================
diff -u -r2f475a02ae31bb68d351db98e3e7e82cb7456291 -r557444d8587632235e4fda55487e6f322cde9ce7
--- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Ringtoets.MacroStabilityInwards.KernelWrapper.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.csproj) (revision 2f475a02ae31bb68d351db98e3e7e82cb7456291)
+++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.KernelWrapper/Ringtoets.MacroStabilityInwards.KernelWrapper.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.csproj) (revision 557444d8587632235e4fda55487e6f322cde9ce7)
@@ -58,6 +58,7 @@
+
Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Calculators/Waternet/Input/WaternetCalculatorInputTest.cs
===================================================================
diff -u
--- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Calculators/Waternet/Input/WaternetCalculatorInputTest.cs (revision 0)
+++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Calculators/Waternet/Input/WaternetCalculatorInputTest.cs (revision 557444d8587632235e4fda55487e6f322cde9ce7)
@@ -0,0 +1,178 @@
+// Copyright (C) Stichting Deltares 2017. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using Core.Common.TestUtil;
+using NUnit.Framework;
+using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.UpliftVan.Input;
+using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Waternet.Input;
+using Ringtoets.MacroStabilityInwards.KernelWrapper.TestUtil.Calculators.Input;
+using Ringtoets.MacroStabilityInwards.Primitives;
+
+namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Test.Calculators.Waternet.Input
+{
+ [TestFixture]
+ public class WaternetCalculatorInputTest
+ {
+ [Test]
+ public void Constructor_ConstructionPropertiesNull_ThrowsArgumentNullException()
+ {
+ // Call
+ TestDelegate call = () => new WaternetCalculatorInput(null);
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("properties", exception.ParamName);
+ }
+
+ [Test]
+ public void Constructor_WithConstructionProperties_PropertiesAreSet()
+ {
+ // Setup
+ var random = new Random(11);
+
+ double hRiverValue = random.NextDouble();
+ var surfaceLine = new MacroStabilityInwardsSurfaceLine(string.Empty);
+ var soilProfile = new TestSoilProfile();
+
+ double waterLevelRiverAverage = random.Next();
+ double waterLevelPolderExtreme = random.Next();
+ double waterLevelPolderDaily = random.Next();
+ double minimumLevelPhreaticLineAtDikeTopRiver = random.Next();
+ double minimumLevelPhreaticLineAtDikeTopPolder = random.Next();
+ double leakageLengthOutwardsPhreaticLine3 = random.Next();
+ double leakageLengthInwardsPhreaticLine3 = random.Next();
+ double leakageLengthOutwardsPhreaticLine4 = random.Next();
+ double leakageLengthInwardsPhreaticLine4 = random.Next();
+ double piezometricHeadPhreaticLine2Outwards = random.Next();
+ double piezometricHeadPhreaticLine2Inwards = random.Next();
+ double penetrationLength = random.Next();
+ bool adjustPhreaticLine3And4ForUplift = random.NextBoolean();
+ var dikeSoilScenario = random.NextEnumValue();
+
+ // Call
+ var input = new WaternetCalculatorInput(
+ new WaternetCalculatorInput.ConstructionProperties
+ {
+ AssessmentLevel = hRiverValue,
+ SurfaceLine = surfaceLine,
+ SoilProfile = soilProfile,
+ WaterLevelRiverAverage = waterLevelRiverAverage,
+ WaterLevelPolderExtreme = waterLevelPolderExtreme,
+ WaterLevelPolderDaily = waterLevelPolderDaily,
+ MinimumLevelPhreaticLineAtDikeTopRiver = minimumLevelPhreaticLineAtDikeTopRiver,
+ MinimumLevelPhreaticLineAtDikeTopPolder = minimumLevelPhreaticLineAtDikeTopPolder,
+ LeakageLengthOutwardsPhreaticLine3 = leakageLengthOutwardsPhreaticLine3,
+ LeakageLengthInwardsPhreaticLine3 = leakageLengthInwardsPhreaticLine3,
+ LeakageLengthOutwardsPhreaticLine4 = leakageLengthOutwardsPhreaticLine4,
+ LeakageLengthInwardsPhreaticLine4 = leakageLengthInwardsPhreaticLine4,
+ PiezometricHeadPhreaticLine2Outwards = piezometricHeadPhreaticLine2Outwards,
+ PiezometricHeadPhreaticLine2Inwards = piezometricHeadPhreaticLine2Inwards,
+ PenetrationLength = penetrationLength,
+ AdjustPhreaticLine3And4ForUplift = adjustPhreaticLine3And4ForUplift,
+ DikeSoilScenario = dikeSoilScenario
+ });
+
+ // Assert
+ Assert.AreEqual(hRiverValue, input.AssessmentLevel);
+ Assert.AreSame(surfaceLine, input.SurfaceLine);
+ Assert.AreSame(soilProfile, input.SoilProfile);
+
+ Assert.AreEqual(waterLevelRiverAverage, input.WaterLevelRiverAverage);
+ Assert.AreEqual(waterLevelPolderExtreme, input.WaterLevelPolderExtreme);
+ Assert.AreEqual(waterLevelPolderDaily, input.WaterLevelPolderDaily);
+ Assert.AreEqual(minimumLevelPhreaticLineAtDikeTopRiver, input.MinimumLevelPhreaticLineAtDikeTopRiver);
+ Assert.AreEqual(minimumLevelPhreaticLineAtDikeTopPolder, input.MinimumLevelPhreaticLineAtDikeTopPolder);
+ Assert.AreEqual(leakageLengthOutwardsPhreaticLine3, input.LeakageLengthOutwardsPhreaticLine3);
+ Assert.AreEqual(leakageLengthInwardsPhreaticLine3, input.LeakageLengthInwardsPhreaticLine3);
+ Assert.AreEqual(leakageLengthOutwardsPhreaticLine4, input.LeakageLengthOutwardsPhreaticLine4);
+ Assert.AreEqual(leakageLengthInwardsPhreaticLine4, input.LeakageLengthInwardsPhreaticLine4);
+ Assert.AreEqual(piezometricHeadPhreaticLine2Outwards, input.PiezometricHeadPhreaticLine2Outwards);
+ Assert.AreEqual(piezometricHeadPhreaticLine2Inwards, input.PiezometricHeadPhreaticLine2Inwards);
+ Assert.AreEqual(penetrationLength, input.PenetrationLength);
+ Assert.AreEqual(adjustPhreaticLine3And4ForUplift, input.AdjustPhreaticLine3And4ForUplift);
+
+ Assert.AreEqual(dikeSoilScenario, input.DikeSoilScenario);
+ }
+
+ [Test]
+ public void Constructor_EmptyConstructionProperties_ExpectedValues()
+ {
+ // Setup
+ var surfaceLine = new MacroStabilityInwardsSurfaceLine(string.Empty);
+ var soilProfile = new TestSoilProfile();
+
+ // Call
+ var input = new WaternetCalculatorInput(
+ new WaternetCalculatorInput.ConstructionProperties
+ {
+ SurfaceLine = surfaceLine,
+ SoilProfile = soilProfile
+ });
+
+ // Assert
+ Assert.IsNaN(input.AssessmentLevel);
+ Assert.IsNaN(input.WaterLevelRiverAverage);
+ Assert.IsNaN(input.WaterLevelPolderExtreme);
+ Assert.IsNaN(input.WaterLevelPolderDaily);
+ Assert.IsNaN(input.MinimumLevelPhreaticLineAtDikeTopRiver);
+ Assert.IsNaN(input.MinimumLevelPhreaticLineAtDikeTopPolder);
+ Assert.IsNaN(input.LeakageLengthOutwardsPhreaticLine3);
+ Assert.IsNaN(input.LeakageLengthInwardsPhreaticLine3);
+ Assert.IsNaN(input.LeakageLengthOutwardsPhreaticLine4);
+ Assert.IsNaN(input.LeakageLengthInwardsPhreaticLine4);
+ Assert.IsNaN(input.PiezometricHeadPhreaticLine2Outwards);
+ Assert.IsNaN(input.PiezometricHeadPhreaticLine2Inwards);
+ Assert.IsNaN(input.PenetrationLength);
+ Assert.IsFalse(input.AdjustPhreaticLine3And4ForUplift);
+
+ Assert.AreEqual(MacroStabilityInwardsDikeSoilScenario.ClayDikeOnClay, input.DikeSoilScenario);
+ }
+
+ [Test]
+ public void Constructor_SurfaceLineNull_ThrowsArgumentException()
+ {
+ // Call
+ TestDelegate test = () => new WaternetCalculatorInput(
+ new WaternetCalculatorInput.ConstructionProperties
+ {
+ SoilProfile = new TestSoilProfile()
+ });
+
+ // Assert
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "SurfaceLine must be set.");
+ }
+
+ [Test]
+ public void Constructor_SoilProfileNull_ThrowsArgumentException()
+ {
+ // Call
+ TestDelegate test = () => new WaternetCalculatorInput(
+ new WaternetCalculatorInput.ConstructionProperties
+ {
+ SurfaceLine = new MacroStabilityInwardsSurfaceLine("test")
+ });
+
+ // Assert
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "SoilProfile must be set.");
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj
===================================================================
diff -u -r2f475a02ae31bb68d351db98e3e7e82cb7456291 -r557444d8587632235e4fda55487e6f322cde9ce7
--- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj) (revision 2f475a02ae31bb68d351db98e3e7e82cb7456291)
+++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test/Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj (.../Ringtoets.MacroStabilityInwards.KernelWrapper.Test.csproj) (revision 557444d8587632235e4fda55487e6f322cde9ce7)
@@ -77,6 +77,7 @@
+