using Deltares.Dam.Data; using Deltares.Geotechnics; using Deltares.Geotechnics.Soils; using Deltares.Standard; using NUnit.Framework; namespace Deltares.Dam.Tests { [TestFixture] public class SchematizationFactorCalculationTest { private readonly SchematizationFactorCalculation schematizationFactorCalculation = new SchematizationFactorCalculation(); [TestFixtureSetUp] public void TestFixtureSetup() { schematizationFactorCalculation.DetrimentFactor = 1.0;// 1.01; schematizationFactorCalculation.Location = new Location("Test Location"); SchematizationFactorData schematizationFactorData = new SchematizationFactorData(); schematizationFactorData.RequiredProbability = 70; schematizationFactorData.SchematizationFactorDelta = 0.025; schematizationFactorData.SchematizationFactorMax = 1.3; schematizationFactorData.SchematizationFactorMin = 1.0; schematizationFactorCalculation.SchematizationFactorData = schematizationFactorData; RWScenariosResult scenariosResult = new RWScenariosResult(); // Results for scenario1 with two profiles RWScenarioResult scenarioResult = new RWScenarioResult(); scenarioResult.ScenarioType = ScenarioType.Scenario01; RWScenarioProfileResult scenarioProfileResult = new RWScenarioProfileResult(); scenarioProfileResult.ScenarioType = ScenarioType.Scenario01; SoilProfile1D soilProfile = new SoilProfile1D(); soilProfile.Name = "Prof 01A"; scenarioProfileResult.SoilGeometryProbability = new SoilGeometryProbability(){SoilProfile = soilProfile, Probability = 36 }; scenarioProfileResult.SafetyFactor = 1.05; scenarioResult.RWScenarioProfileResults.Add(scenarioProfileResult); RWScenarioProfileResult scenarioProfileResult1 = new RWScenarioProfileResult(); scenarioProfileResult1.ScenarioType = ScenarioType.Scenario01; SoilProfile1D soilProfile1 = new SoilProfile1D(); soilProfile1.Name = "Prof 01B"; scenarioProfileResult1.SoilGeometryProbability = new SoilGeometryProbability() { SoilProfile = soilProfile1, Probability = 64 }; scenarioProfileResult1.SafetyFactor = 1.15; scenarioResult.RWScenarioProfileResults.Add(scenarioProfileResult1); // min safety for all parts. scenarioResult.SafetyFactor = 1.05; scenariosResult.RWScenarioResults.Add(scenarioResult); // Results for scenario5 with 5 profiles RWScenarioResult scenarioResult1 = new RWScenarioResult(); scenarioResult1.ScenarioType = ScenarioType.Scenario05; RWScenarioProfileResult scenarioProfileResult2 = new RWScenarioProfileResult(); scenarioProfileResult2.ScenarioType = ScenarioType.Scenario05; SoilProfile1D soilProfile2 = new SoilProfile1D(); soilProfile2.Name = "Prof 05A"; scenarioProfileResult2.SoilGeometryProbability = new SoilGeometryProbability() { SoilProfile = soilProfile2, Probability = 36 }; scenarioProfileResult2.SafetyFactor = 1.05; scenarioResult1.RWScenarioProfileResults.Add(scenarioProfileResult2); RWScenarioProfileResult scenarioProfileResult3 = new RWScenarioProfileResult(); scenarioProfileResult3.ScenarioType = ScenarioType.Scenario05; SoilProfile1D soilProfile3 = new SoilProfile1D(); soilProfile3.Name = "Prof 05B"; scenarioProfileResult3.SoilGeometryProbability = new SoilGeometryProbability() { SoilProfile = soilProfile3, Probability = 14 }; scenarioProfileResult3.SafetyFactor = 1.265; scenarioResult1.RWScenarioProfileResults.Add(scenarioProfileResult3); RWScenarioProfileResult scenarioProfileResult4 = new RWScenarioProfileResult(); scenarioProfileResult4.ScenarioType = ScenarioType.Scenario05; SoilProfile1D soilProfile4 = new SoilProfile1D(); soilProfile4.Name = "Prof 05C"; scenarioProfileResult4.SoilGeometryProbability = new SoilGeometryProbability() { SoilProfile = soilProfile4, Probability = 4 }; scenarioProfileResult4.SafetyFactor = 0.76; scenarioResult1.RWScenarioProfileResults.Add(scenarioProfileResult4); RWScenarioProfileResult scenarioProfileResult5 = new RWScenarioProfileResult(); scenarioProfileResult5.ScenarioType = ScenarioType.Scenario05; SoilProfile1D soilProfile5 = new SoilProfile1D(); soilProfile5.Name = "Prof 05D"; scenarioProfileResult5.SoilGeometryProbability = new SoilGeometryProbability() { SoilProfile = soilProfile5, Probability = 22 }; scenarioProfileResult5.SafetyFactor = 1.01; scenarioResult1.RWScenarioProfileResults.Add(scenarioProfileResult5); RWScenarioProfileResult scenarioProfileResult6 = new RWScenarioProfileResult(); scenarioProfileResult6.ScenarioType = ScenarioType.Scenario05; SoilProfile1D soilProfile6 = new SoilProfile1D(); soilProfile6.Name = "Prof 05E"; scenarioProfileResult6.SoilGeometryProbability = new SoilGeometryProbability() { SoilProfile = soilProfile6, Probability = 24 }; scenarioProfileResult6.SafetyFactor = 0.93; scenarioResult1.RWScenarioProfileResults.Add(scenarioProfileResult6); // min safety for all parts. scenarioResult1.SafetyFactor = 0.76; scenariosResult.RWScenarioResults.Add(scenarioResult1); schematizationFactorCalculation.ScenariosResult = scenariosResult; } [TestFixtureTearDown] public void TestFixtureTearDown() { schematizationFactorCalculation.Location.Dispose(); } private void SetScenarioResultsAsSucceeded() { var status = CalculationResult.Succeeded; SetScenarioResultsAs(status); } private void SetScenarioResultsAs(CalculationResult status) { foreach (var rwScenarioResult in schematizationFactorCalculation.ScenariosResult.RWScenarioResults) { rwScenarioResult.CalculationResult = status; foreach (var rwScenarioProfileResult in rwScenarioResult.RWScenarioProfileResults) { rwScenarioProfileResult.CalculationResult = status; } } } private void SetScenarioResultsAsFailed() { var status = CalculationResult.RunFailed; SetScenarioResultsAs(status); } [Test] public void TestDetermineAllowedProbabilty() { var old = schematizationFactorCalculation.DetrimentFactor; schematizationFactorCalculation.DetrimentFactor = 1.15; Assert.AreEqual(1.28E-07, schematizationFactorCalculation.DetermineAllowedProbabilty(), 1e-9); schematizationFactorCalculation.DetrimentFactor = 0.9; Assert.AreEqual(6.17E-04, schematizationFactorCalculation.DetermineAllowedProbabilty(), 1e-6); schematizationFactorCalculation.DetrimentFactor = old; } [Test] public void TestFailDetermineCalculateSchematizationFactorResultForTypeWhenNoSucceededScenarioResults() { SetScenarioResultsAsFailed(); var res = schematizationFactorCalculation.CalculateSchematizationFactorResultForType(SchematizationType.MacroStabiltyInnerSideDry); Assert.AreEqual(CalculationResult.RunFailed, res.CalculationResult); Assert.AreEqual("Test Location", res.LocationName); Assert.AreEqual(SchematizationType.MacroStabiltyInnerSideDry, res.SchematizationType); Assert.AreEqual(null, res.SoilProfileName); Assert.AreEqual(0, res.SummedProfileProbability); Assert.AreEqual(0, res.SchematizationFactor); } [Test] public void TestDetermineCalculateSchematizationFactorResultForType() { SetScenarioResultsAsSucceeded(); schematizationFactorCalculation.SchematizationFactorData.SchematizationFactorMin = 1; schematizationFactorCalculation.DetrimentFactor = 0.8951; var res = schematizationFactorCalculation.CalculateSchematizationFactorResultForType(SchematizationType.MacroStabiltyInnerSideDry); Assert.AreEqual(CalculationResult.Succeeded, res.CalculationResult); Assert.AreEqual("Test Location", res.LocationName); Assert.AreEqual(SchematizationType.MacroStabiltyInnerSideDry, res.SchematizationType); Assert.AreEqual("Prof 05D", res.SoilProfileName); Assert.AreEqual(72, res.SummedProfileProbability); Assert.AreEqual(1.025, res.SchematizationFactor); } } }