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 @@ +