//----------------------------------------------------------------------- // // Copyright (c) 2009 Deltares. All rights reserved. // // B.S.T.I.M. The // tom.the@deltares.nl // 03-12-2009 // Tests for SurfaceLineHeightAdapter //----------------------------------------------------------------------- using Deltares.Dam.TestHelper; using Deltares.Geotechnics; using Deltares.Geotechnics.Soils; using Deltares.Geotechnics.TestUtils; using Deltares.Standard; using Deltares.Standard.Logging; using Deltares.Standard.TestUtils; namespace Deltares.Dam.Tests { using System.IO; using Deltares.Dam.Data; using Deltares.Soilbase; using NUnit.Framework; [TestFixture] public class StabilityCalculatorTest { const double tolerance = 0.0001; [TearDown] public void TearDown() { LogManager.Clear(); } [Test] public void IsFirstParameterMinimalSafetyFactor() { var results1 = new MStabResults(); results1.zone1.safetyFactor = 2.0; results1.zone1.circleSurfacePointRightXCoordinate = 12.0; var results2 = new MStabResults(); results2.zone1.safetyFactor = 3.0; results2.zone1.circleSurfacePointRightXCoordinate = 10.0; var actualResult = StabilityCalculator.MinMStabResults(results1, results2); Assert.AreEqual(results1.zone1.safetyFactor, actualResult.zone1.safetyFactor, tolerance); Assert.AreEqual(results1.zone1.circleSurfacePointRightXCoordinate, actualResult.zone1.circleSurfacePointRightXCoordinate, tolerance); } [Test] public void IsSecondParameterMinimalSafetyFactor() { var results1 = new MStabResults(); results1.zone1.safetyFactor = 2.0; results1.zone1.circleSurfacePointRightXCoordinate = 12.0; var results2 = new MStabResults(); results2.zone1.safetyFactor = 1.0; results2.zone1.circleSurfacePointRightXCoordinate = 10.0; var actualResult = StabilityCalculator.MinMStabResults(results1, results2); Assert.AreEqual(results2.zone1.safetyFactor, actualResult.zone1.safetyFactor, tolerance); Assert.AreEqual(results2.zone1.circleSurfacePointRightXCoordinate, actualResult.zone1.circleSurfacePointRightXCoordinate, tolerance); } [Test] [Category(Categories.Slow)] public void CanCalculateStabilitySafetyFactorGeometry1D() { using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); SoilProfile1D soilProfile = FactoryForStabilityTests.CreateSoilProfile(); const double cToleranceSafetyFactor = 0.001; using (var stabilityCalculator = SetupStabilityCalculator()) { stabilityCalculator.Calculate(scenario, soilProfile, null, 0); Assert.AreEqual(1.486, scenario.GetMStabResults(soilProfile, "").Value.zone1.safetyFactor, cToleranceSafetyFactor); } } } [Test, Ignore("This test only proves that the .NET Stability kernel is connected to the DAM stability kernel. It shows the results are not identical")] public void CanCalculateStabilitySafetyFactorGeometry1D_UsingDotNetKernel() { using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); SoilProfile1D soilProfile = FactoryForStabilityTests.CreateSoilProfile(); const double cToleranceSafetyFactor = 0.001; using (var stabilityCalculator = SetupStabilityCalculator()) { stabilityCalculator.SelectedStabilityKernelType = StabilityKernelType.DamClassicDotNet; stabilityCalculator.Calculate(scenario, soilProfile, null, 0); Assert.AreEqual(1.486, scenario.GetMStabResults(soilProfile, "").Value.zone1.safetyFactor, cToleranceSafetyFactor); } } } [Test] [Category(Categories.Slow)] public void CanCalculateStabilitySafetyFactorGeometry1D_UsingWTIStabilityKernel() { using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); SoilProfile1D soilProfile = FactoryForStabilityTests.CreateSoilProfile(); const double cToleranceSafetyFactor = 0.1; using (var stabilityCalculator = SetupStabilityCalculator()) { stabilityCalculator.SelectedStabilityKernelType = StabilityKernelType.DamClassicWti; stabilityCalculator.Calculate(scenario, soilProfile, null, 0); Assert.AreEqual(1.6231, scenario.GetMStabResults(soilProfile, "").Value.zone1.safetyFactor, cToleranceSafetyFactor); } } } private static StabilityCalculator SetupStabilityCalculator() { const double cTrafficLoad = 10.0; const double cMinimalCircleDepth = 1.0; const double cSafetyFactorStabilityInnerSlope = 1.1; const string cmstabProgramPath = ".\\DGeoStability.exe"; //#BKA zie failed test map: resultaten van versie 505 verschillen van 902 Laten zien aan Han + overleg!! Ook PipingFactorSellmeijerCalculator met Han nagaan evenals wens Ray voor uplift tangentlines ModelParametersForPLLines modelParametersForPLLines = new ModelParametersForPLLines(); MStabParameters mstabParameters = FactoryForStabilityTests.CreateMStabParameters(); DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification(); damFailureMechanismeCalculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters = mstabParameters; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ZonesType = MStabZonesType.NoZones; StabilityCalculator stabilityCalculator = new StabilityCalculator(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab, ProgramType.MStab, modelParametersForPLLines, cTrafficLoad, cMinimalCircleDepth, cSafetyFactorStabilityInnerSlope, cmstabProgramPath, cmstabProgramPath, null, null, null, null, ProbabilisticType.Deterministic); return stabilityCalculator; } [Test] [Category(Categories.Slow)] public void CanCalculateStabilitySafetyFactorHorizontalBalanceGeometry1D() { const double cToleranceSafetyFactor = 0.001; const double cTrafficLoad = 10.0; const double cMinimalCircleDepth = 1.0; const double cSafetyFactorStabilityInnerSlope = 1.1; const string cmstabProgramPath = ".\\DGeoStability.exe"; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); SoilProfile1D soilProfile = FactoryForStabilityTests.CreateSoilProfile(); ModelParametersForPLLines modelParametersForPLLines = new ModelParametersForPLLines(); MStabParameters mstabParameters = FactoryForStabilityTests.CreateMStabParameters(); mstabParameters.Model = MStabModelType.HorizontalBalance; mstabParameters.SearchMethod = MStabSearchMethod.Grid; DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification(); damFailureMechanismeCalculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters = mstabParameters; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ZonesType = MStabZonesType.NoZones; using ( StabilityCalculator stabilityCalculator = new StabilityCalculator(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab, ProgramType.MStab, modelParametersForPLLines, cTrafficLoad, cMinimalCircleDepth, cSafetyFactorStabilityInnerSlope, cmstabProgramPath, cmstabProgramPath, null, null, null, null, ProbabilisticType.Deterministic)) { scenario.RiverLevel = 4.0; scenario.Location.PolderLevel = -1.0; stabilityCalculator.Calculate(scenario, soilProfile, null, 0); // the following calculation result has been obtained from a trial test run Assert.AreEqual(10.169, scenario.GetMStabResults(soilProfile, "").Value.zone1.safetyFactor, cToleranceSafetyFactor); } } } [Test, Ignore("This test requires SlopeW with a valid license")] public void CanCalculateStabilitySafetyFactorGeometry1DUsingSlopeW() { const double cToleranceSafetyFactor = 0.001; const double cTrafficLoad = 10.0; const double cMinimalCircleDepth = 1.0; const double cSafetyFactorStabilityInnerSlope = 1.1; const string cmstabProgramPath = ".\\Slope2.exe"; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); SoilProfile1D soilProfile = FactoryForStabilityTests.CreateSoilProfile(); ModelParametersForPLLines modelParametersForPLLines = new ModelParametersForPLLines(); MStabParameters mstabParameters = FactoryForStabilityTests.CreateMStabParameters(); DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification(); damFailureMechanismeCalculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters = mstabParameters; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ZonesType = MStabZonesType.NoZones; using (StabilityCalculator stabilityCalculator = new StabilityCalculator(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab, ProgramType.SlopeW, modelParametersForPLLines, cTrafficLoad, cMinimalCircleDepth, cSafetyFactorStabilityInnerSlope, cmstabProgramPath, cmstabProgramPath, null, null, null, null, ProbabilisticType.Deterministic)) { stabilityCalculator.Calculate(scenario, soilProfile, null, 0); Assert.AreEqual(1.6555, scenario.GetMStabResults(soilProfile, "").Value.zone1.safetyFactor, cToleranceSafetyFactor); } } } /// /// This test fails on some Windows 7 x64 machines /// /// This test now fails because of rev. 12881, where the Bishop grid is enlarged, which causes the calculation to find a local slipcircle in the ditch /// [Test, Ignore("This test fails on some Windows 7 x64 machines")] public void CanCalculateStabilityProbablitityGeometry1D() { const double cToleranceProbability = 0.00001; const double cTrafficLoad = 10.0; const double cMinimalCircleDepth = 1.0; const double cSafetyFactorStabilityInnerSlope = 1.1; const string cmstabProgramPath = ".\\DGeoStability.exe"; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); SoilProfile1D soilProfile = FactoryForStabilityTests.CreateSoilProfile(); ModelParametersForPLLines modelParametersForPLLines = new ModelParametersForPLLines(); MStabParameters mstabParameters = FactoryForStabilityTests.CreateMStabParameters(); mstabParameters.SearchMethod = MStabSearchMethod.Grid; DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification(); damFailureMechanismeCalculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters = mstabParameters; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ZonesType = MStabZonesType.NoZones; using (StabilityCalculator stabilityCalculator = new StabilityCalculator(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab, ProgramType.MStab, modelParametersForPLLines, cTrafficLoad, cMinimalCircleDepth, cSafetyFactorStabilityInnerSlope, cmstabProgramPath, cmstabProgramPath, null, null, null, null, ProbabilisticType.Probabilistic)) { stabilityCalculator.Calculate(scenario, soilProfile, null, 0); // The expected value is read from the dumpfile itself Assert.AreEqual(0.0057654520770, scenario.GetFailureProbabilityStability(soilProfile, "").Value, cToleranceProbability); } } } /// /// This test fails on some Windows 7 x64 machines /// [Test, Ignore("This test fails on some Windows 7 x64 machines")] public void CanCalculateStabilityProbablitityAdvancedGeometry1D() { const double cToleranceProbability = 0.00001; const double cTrafficLoad = 10.0; const double cMinimalCircleDepth = 1.0; const double cSafetyFactorStabilityInnerSlope = 1.1; const string cmstabProgramPath = ".\\DGeoStability.exe"; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); scenario.DikeTableHeight = 5; scenario.RiverLevel = 3; scenario.WaterHeightDecimeringsHoogte = 0.75; scenario.MaxWaterLevel = 10; SoilProfile1D soilProfile = FactoryForStabilityTests.CreateSoilProfile(); ModelParametersForPLLines modelParametersForPLLines = new ModelParametersForPLLines(); MStabParameters mstabParameters = FactoryForStabilityTests.CreateMStabParameters(); mstabParameters.SearchMethod = MStabSearchMethod.Grid; DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification(); damFailureMechanismeCalculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters = mstabParameters; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ZonesType = MStabZonesType.NoZones; using (StabilityCalculator stabilityCalculator = new StabilityCalculator(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab, ProgramType.MStab, modelParametersForPLLines, cTrafficLoad, cMinimalCircleDepth, cSafetyFactorStabilityInnerSlope, cmstabProgramPath, cmstabProgramPath, null, null, null, null, ProbabilisticType.ProbabilisticFragility)) { stabilityCalculator.Calculate(scenario, soilProfile, null, 0); // The expected value is read from the dumpfile itself Assert.AreEqual(0.002362116352747, scenario.GetFailureProbabilityStability(soilProfile, "").Value, cToleranceProbability); } } } [Test] [Category(Categories.Slow)] public void CanCalculateStabilitySafetyFactorGeometry2D() { // setup const double cToleranceSafetyFactor = 0.001; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); var soilGeometry2DName = SoilGeometry2DName(); using (StabilityCalculator stabilityCalculator = SetUpStabilityCalculator()) { // call stabilityCalculator.Calculate(scenario, null, soilGeometry2DName, 0); // assert // The expected value is read from the dumpfile itself Assert.AreEqual(1.5570, scenario.GetMStabResults(null, Path.GetFileName(soilGeometry2DName)).Value.zone1.safetyFactor, cToleranceSafetyFactor); } } } [Test, Ignore("This test only proves that the .NET Stability kernel is connected to the DAM stability kernel. It shows the results are not identical")] public void CanCalculateStabilitySafetyFactorGeometry2D_UsingNETkernel() { // setup const double cToleranceSafetyFactor = 0.001; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); var soilGeometry2DName = SoilGeometry2DName(); using (StabilityCalculator stabilityCalculator = SetUpStabilityCalculator()) { // use the .NET Stability kernel stabilityCalculator.SelectedStabilityKernelType = StabilityKernelType.DamClassicDotNet; // call stabilityCalculator.Calculate(scenario, null, soilGeometry2DName, 0); // assert using (var results = stabilityCalculator.GetDotNetStabilityKernelResults()) { Assert.AreEqual(1.5570, results.Stability.MinimumSafetyCurve.SafetyFactor, cToleranceSafetyFactor); } } } } [Test] [Category(Categories.Slow)] public void CanCalculateStabilitySafetyFactorGeometry2D_UsingWTIStabilitykernel() { // setup const double cToleranceSafetyFactor = 0.01; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); var soilGeometry2DName = SoilGeometry2DName(); using (StabilityCalculator stabilityCalculator = SetUpStabilityCalculator()) { // use the .NET Stability kernel stabilityCalculator.SelectedStabilityKernelType = StabilityKernelType.DamClassicWti; // call stabilityCalculator.Calculate(scenario, null, soilGeometry2DName, 0); // assert Assert.AreEqual(1.5885, scenario.GetMStabResults(null, Path.GetFileName(soilGeometry2DName)).Value.zone1.safetyFactor, cToleranceSafetyFactor); //var results = stabilityCalculator.GetDotNetStabilityKernelResults(); //Assert.AreEqual(1.5570, results.Stability.MinimumSafetyCurve.SafetyFactor, cToleranceSafetyFactor); } } } private static StabilityCalculator SetUpStabilityCalculator() { const double cTrafficLoad = 10.0; const double cMinimalCircleDepth = 1.0; const double cSafetyFactorStabilityInnerSlope = 1.1; const string cMStabProgramPath = ".\\DGeoStability.exe"; ModelParametersForPLLines modelParametersForPLLines = new ModelParametersForPLLines(); MStabParameters mstabParameters = FactoryForStabilityTests.CreateMStabParameters(); string soilDatabaseName = FactoryForStabilityTests.cSoilDatabaseName; soilDatabaseName = Path.GetFullPath(soilDatabaseName); mstabParameters.SoilDatabaseName = soilDatabaseName; DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification(); damFailureMechanismeCalculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters = mstabParameters; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ZonesType = MStabZonesType.NoZones; var soilBaseDb = SoilbaseDB.Create(soilDatabaseName); StabilityCalculator stabilityCalculator = new StabilityCalculator(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab, ProgramType.MStab, modelParametersForPLLines, cTrafficLoad, cMinimalCircleDepth, cSafetyFactorStabilityInnerSlope, cMStabProgramPath, cMStabProgramPath, null, null, soilBaseDb, soilBaseDb.CreateSoilList(), ProbabilisticType.Deterministic); return stabilityCalculator; } private static string SoilGeometry2DName() { const string cSoilGeometry2DName = @"TestData\1D1.sti"; string soilGeometry2DName = cSoilGeometry2DName; soilGeometry2DName = Path.GetFullPath(soilGeometry2DName); return soilGeometry2DName; } [Test, Ignore("This test requires SlopeW with a valid license")] public void CanCalculateStabilitySafetyFactorGeometry2DUsingSlopeW() { const double cToleranceSafetyFactor = 0.001; const double cTrafficLoad = 10.0; const double cMinimalCircleDepth = 1.0; const double cSafetyFactorStabilityInnerSlope = 1.1; const string cMStabProgramPath = ".\\Slope2.exe"; const string cSoilGeometry2DName = @"TestData\1D1.sti"; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); string soilGeometry2DName = cSoilGeometry2DName; ModelParametersForPLLines modelParametersForPLLines = new ModelParametersForPLLines(); MStabParameters mstabParameters = FactoryForStabilityTests.CreateMStabParameters(); soilGeometry2DName = Path.GetFullPath(soilGeometry2DName); string soilDatabaseName = FactoryForStabilityTests.cSoilDatabaseName; soilDatabaseName = Path.GetFullPath(soilDatabaseName); mstabParameters.SoilDatabaseName = soilDatabaseName; DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification(); damFailureMechanismeCalculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters = mstabParameters; damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ZonesType = MStabZonesType.NoZones; var soilBaseDb = SoilbaseDB.Create(soilDatabaseName); using (StabilityCalculator stabilityCalculator = new StabilityCalculator(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab, ProgramType.SlopeW, modelParametersForPLLines, cTrafficLoad, cMinimalCircleDepth, cSafetyFactorStabilityInnerSlope, cMStabProgramPath, cMStabProgramPath, null, null, soilBaseDb, soilBaseDb.CreateSoilList(), ProbabilisticType.Deterministic)) { stabilityCalculator.Calculate(scenario, null, soilGeometry2DName, 0); Assert.AreEqual(1.7353, scenario.GetMStabResults(null, Path.GetFileName(soilGeometry2DName)).Value.zone1.safetyFactor, cToleranceSafetyFactor); } } } [Test] public void IsDetermineProperWaterlevelsForProbabilisticAdvancedWorkingForHighMaxLevel() { const double cToleranceSafetyFactor = 0.001; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); scenario.RiverLevel = 0; scenario.WaterHeightDecimeringsHoogte = 1; scenario.MaxWaterLevel = 20; double[] waterLevels = scenario.DetermineProperWaterlevelsForProbabilisticAdvanced(); Assert.AreEqual(1.0, waterLevels[0], cToleranceSafetyFactor); Assert.AreEqual(0.0, waterLevels[1], cToleranceSafetyFactor); Assert.AreEqual(-1.0, waterLevels[2], cToleranceSafetyFactor); } } [Test] public void IsDetermineProperWaterlevelsForProbabilisticAdvancedWorkingForLowMaxLevel() { const double cToleranceSafetyFactor = 0.001; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); scenario.RiverLevel = 0; scenario.WaterHeightDecimeringsHoogte = 1; scenario.MaxWaterLevel = -20; double[] waterLevels = scenario.DetermineProperWaterlevelsForProbabilisticAdvanced(); Assert.AreEqual(-20.0, waterLevels[0], cToleranceSafetyFactor); Assert.AreEqual(-20.0, waterLevels[1], cToleranceSafetyFactor); Assert.AreEqual(-20.0, waterLevels[2], cToleranceSafetyFactor); } } [Test] public void IsDetermineProperWaterlevelsForProbabilisticAdvancedWorkingForMaxLevelBelowTopLevel() { const double cToleranceSafetyFactor = 0.001; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); scenario.RiverLevel = 0; scenario.WaterHeightDecimeringsHoogte = 1; scenario.MaxWaterLevel = 0.5; double[] waterLevels = scenario.DetermineProperWaterlevelsForProbabilisticAdvanced(); Assert.AreEqual(0.5, waterLevels[0], cToleranceSafetyFactor); Assert.AreEqual(0.0, waterLevels[1], cToleranceSafetyFactor); Assert.AreEqual(-1.0, waterLevels[2], cToleranceSafetyFactor); } } [Test] public void IsDetermineProperWaterlevelsForProbabilisticAdvancedWorkingForMaxLevelBelowRiverLevel() { const double cToleranceSafetyFactor = 0.001; using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) using (var location = new Location()) { Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line); scenario.RiverLevel = 0; scenario.WaterHeightDecimeringsHoogte = 1; scenario.MaxWaterLevel = -0.5; double[] waterLevels = scenario.DetermineProperWaterlevelsForProbabilisticAdvanced(); Assert.AreEqual(-0.5, waterLevels[0], cToleranceSafetyFactor); Assert.AreEqual(-0.5, waterLevels[1], cToleranceSafetyFactor); Assert.AreEqual(-1.0, waterLevels[2], cToleranceSafetyFactor); } } } }