Index: dam engine/trunk/src/Deltares.DamEngine.Data/General/FailureMechanismeParamatersMStab.cs =================================================================== diff -u -r452 -r830 --- dam engine/trunk/src/Deltares.DamEngine.Data/General/FailureMechanismeParamatersMStab.cs (.../FailureMechanismeParamatersMStab.cs) (revision 452) +++ dam engine/trunk/src/Deltares.DamEngine.Data/General/FailureMechanismeParamatersMStab.cs (.../FailureMechanismeParamatersMStab.cs) (revision 830) @@ -36,6 +36,7 @@ this.MStabParameters = new MStabParameters(); this.IsStabilityCheckOnUplift = false; } + public string ProjectWorkingPath { get; set; } public Location Location { get; set; } public SurfaceLine2 SurfaceLine { get; set; } public PLLines PLLines { get; set; } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/MStabXmlDocTests.cs =================================================================== diff -u -r829 -r830 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/MStabXmlDocTests.cs (.../MStabXmlDocTests.cs) (revision 829) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/MStabXmlDocTests.cs (.../MStabXmlDocTests.cs) (revision 830) @@ -63,7 +63,7 @@ var line = FactoryForSurfaceLines.CreateSurfaceLineTutorial1(); var location = new Location(); - var scenario = CreateScenarioForLocation(location, line); + var scenario = DamMacroStabilityTestHelper.CreateScenarioForLocation(location, line); scenario.Location.SoildatabaseName = soilDbName; var surfaceLine = scenario.Location.SurfaceLine; @@ -146,60 +146,5 @@ return xDocument; } - public static DesignScenario CreateScenarioForLocation(Location location, SurfaceLine2 surfaceLine) - { - DesignScenario scenario = new DesignScenario(); - scenario.Location = location; - scenario.Location.DamType = DamType.Regional; - scenario.Location.Name = "LocationName"; - scenario.Location.DikeEmbankmentMaterial = "OB1"; - scenario.Location.ShoulderEmbankmentMaterial = "OB2"; - scenario.Location.SoilList = CreateSoilList(); - scenario.LocationScenarioID = "ScenarioID"; - scenario.Location.SurfaceLine = surfaceLine; - return scenario; - } - private static SoilList CreateSoilList() - { - var soilList = new SoilList(); - var s1 = new Soil("DKN5") - { - AbovePhreaticLevel = 17.5, - BelowPhreaticLevel = 17.50 - }; - soilList.Soils.Add(s1); - var s2 = new Soil("DKN4") - { - AbovePhreaticLevel = 17.16, - BelowPhreaticLevel = 17.16 - }; - soilList.Soils.Add(s2); - var s3 = new Soil("OA") - { - AbovePhreaticLevel = 18.00, - BelowPhreaticLevel = 20.00 - }; - soilList.Soils.Add(s3); - var s4 = new Soil("DKN3"); - soilList.Soils.Add(s4); - var s5 = new Soil("LM"); - soilList.Soils.Add(s5); - - var s6 = new Soil("OB1"); - soilList.Soils.Add(s6); - var s7 = new Soil("OB2"); - soilList.Soils.Add(s7); - - soilList.AquiferDictionary = new Dictionary(); - soilList.AquiferDictionary.Add(s1, false); - soilList.AquiferDictionary.Add(s2, false); - soilList.AquiferDictionary.Add(s3, true); - soilList.AquiferDictionary.Add(s4, false); - soilList.AquiferDictionary.Add(s5, true); - soilList.AquiferDictionary.Add(s6, false); - soilList.AquiferDictionary.Add(s7, false); - return soilList; - } - } } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityCommon/DamMacroStabilityUtils.cs =================================================================== diff -u -r826 -r830 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityCommon/DamMacroStabilityUtils.cs (.../DamMacroStabilityUtils.cs) (revision 826) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityCommon/DamMacroStabilityUtils.cs (.../DamMacroStabilityUtils.cs) (revision 830) @@ -38,9 +38,10 @@ /// The dam kernel input. /// Index of the iteration. /// The model. + /// Working directory /// public static string GetStabilityInputFileName(DamKernelInput damKernelInput, int iterationIndex, - MStabModelType model) + MStabModelType model, string projectWorkingPath) { // Assume 2D sti-file, then check on type being 1D string soilGeometryName = damKernelInput.SubSoilScenario.StiFileName; @@ -53,7 +54,7 @@ damKernelInput.DesignScenario.LocationScenarioID, soilGeometryName, iterationIndex); const string filenameExtension = ".sti"; string fileName = calculationName + filenameExtension; - string stabilityDirectory = GetStabilityCalculationDirectory(model); + string stabilityDirectory = GetStabilityCalculationDirectory(model, projectWorkingPath); return Path.Combine(stabilityDirectory, fileName); } @@ -74,9 +75,9 @@ return Regex.Replace(calculationName, @"[\\\/:\*\?""'<>|.]", "_"); } - private static string GetStabilityCalculationDirectory(MStabModelType model) + private static string GetStabilityCalculationDirectory(MStabModelType model, string projectWorkingPath) { - string calculationBaseDirectory = DamProjectData.ProjectWorkingPath; + string calculationBaseDirectory = projectWorkingPath; const string stabilitySubDir = @"Stability\"; string stabilityDirectory = Path.Combine(calculationBaseDirectory, stabilitySubDir); var modelSubDirectory = model.ToString(); Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r826 -r830 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapper.cs (.../DamMacroStabilityInwardsKernelWrapper.cs) (revision 826) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapper.cs (.../DamMacroStabilityInwardsKernelWrapper.cs) (revision 830) @@ -81,7 +81,8 @@ var damMacroStabilityInput = new DamMacroStabilityInput() { DGeoStabilityExePath = Path.Combine(DamMacroStabilityFolder, DGeoStabilityExe), - DGeoStabilityInputFileName = DamMacroStabilityUtils.GetStabilityInputFileName(damKernelInput, iterationIndex, model), + DGeoStabilityInputFileName = DamMacroStabilityUtils.GetStabilityInputFileName( + damKernelInput, iterationIndex, model, FailureMechanismeParamatersMStab.ProjectWorkingPath), FailureMechanismeParamatersMStab = FailureMechanismeParamatersMStab }; @@ -98,7 +99,9 @@ { // see if uplift is required // if so, both upliftvan and bishop are to be prepared, calculated and worst case is to be determined - damMacroStabilityInput.DGeoStabilityInputFileNameSecondModel = DamMacroStabilityUtils.GetStabilityInputFileName(damKernelInput, iterationIndex, MStabModelType.UpliftVan); + damMacroStabilityInput.DGeoStabilityInputFileNameSecondModel = + DamMacroStabilityUtils.GetStabilityInputFileName(damKernelInput, iterationIndex, + MStabModelType.UpliftVan, FailureMechanismeParamatersMStab.ProjectWorkingPath); // if not, only Bishop calculation so leave SecondModel empty. break; } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj =================================================================== diff -u -r829 -r830 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 829) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 830) @@ -46,6 +46,7 @@ + Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/DamMacroStabilityTestHelper.cs =================================================================== diff -u --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/DamMacroStabilityTestHelper.cs (revision 0) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/DamMacroStabilityTestHelper.cs (revision 830) @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Deltares.DamEngine.Data.Design; +using Deltares.DamEngine.Data.General; +using Deltares.DamEngine.Data.Geotechnics; + +namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.DamMacroStabilityCommon +{ + public static class DamMacroStabilityTestHelper + { + public static DesignScenario CreateScenarioForLocation(Location location, SurfaceLine2 surfaceLine) + { + DesignScenario scenario = new DesignScenario(); + scenario.Location = location; + scenario.Location.DamType = DamType.Regional; + scenario.Location.Name = "LocationName"; + scenario.Location.DikeEmbankmentMaterial = "OB1"; + scenario.Location.ShoulderEmbankmentMaterial = "OB2"; + scenario.Location.SoilList = CreateSoilList(); + scenario.LocationScenarioID = "ScenarioID"; + scenario.Location.SurfaceLine = surfaceLine; + return scenario; + } + private static SoilList CreateSoilList() + { + var soilList = new SoilList(); + var s1 = new Soil("DKN5") + { + AbovePhreaticLevel = 17.5, + BelowPhreaticLevel = 17.50 + }; + soilList.Soils.Add(s1); + var s2 = new Soil("DKN4") + { + AbovePhreaticLevel = 17.16, + BelowPhreaticLevel = 17.16 + }; + soilList.Soils.Add(s2); + var s3 = new Soil("OA") + { + AbovePhreaticLevel = 18.00, + BelowPhreaticLevel = 20.00 + }; + soilList.Soils.Add(s3); + var s4 = new Soil("DKN3"); + soilList.Soils.Add(s4); + var s5 = new Soil("LM"); + soilList.Soils.Add(s5); + + var s6 = new Soil("OB1"); + soilList.Soils.Add(s6); + var s7 = new Soil("OB2"); + soilList.Soils.Add(s7); + + soilList.AquiferDictionary = new Dictionary(); + soilList.AquiferDictionary.Add(s1, false); + soilList.AquiferDictionary.Add(s2, false); + soilList.AquiferDictionary.Add(s3, true); + soilList.AquiferDictionary.Add(s4, false); + soilList.AquiferDictionary.Add(s5, true); + soilList.AquiferDictionary.Add(s6, false); + soilList.AquiferDictionary.Add(s7, false); + return soilList; + } + + } +} Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapper.cs =================================================================== diff -u -r826 -r830 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapper.cs (.../DamMacroStabilityOutwardsKernelWrapper.cs) (revision 826) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapper.cs (.../DamMacroStabilityOutwardsKernelWrapper.cs) (revision 830) @@ -90,7 +90,7 @@ { DGeoStabilityExePath = Path.Combine(damMacroStabilityFolder, dGeoStabilityExe), DGeoStabilityInputFileName = DamMacroStabilityUtils.GetStabilityInputFileName(damKernelInput, iterationIndex, - FailureMechanismeParamatersMStab.MStabParameters.Model), + FailureMechanismeParamatersMStab.MStabParameters.Model, FailureMechanismeParamatersMStab.ProjectWorkingPath), FailureMechanismeParamatersMStab = FailureMechanismeParamatersMStab }; kernelDataInput = damMacroStabilityInput; Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapperTests.cs =================================================================== diff -u -r829 -r830 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapperTests.cs (.../DamMacroStabilityInwardsKernelWrapperTests.cs) (revision 829) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapperTests.cs (.../DamMacroStabilityInwardsKernelWrapperTests.cs) (revision 830) @@ -25,11 +25,16 @@ using System.IO; using System.Linq; using System.Xml.Linq; +using Deltares.DamEngine.Calculators.KernelWrappers.Common; using Deltares.DamEngine.Calculators.KernelWrappers.DamMacroStabilityCommon; using Deltares.DamEngine.Calculators.KernelWrappers.DamMacroStabilityCommon.Assemblers; using Deltares.DamEngine.Calculators.KernelWrappers.DamMacroStabilityInwards; +using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces; +using Deltares.DamEngine.Calculators.Tests.KernelWrappers.DamMacroStabilityCommon; +using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.General.Results; using Deltares.DamEngine.Data.Standard.Logging; +using Deltares.DamEngine.TestHelpers; using NUnit.Framework; namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.DamMacroStabilityInwards @@ -39,39 +44,62 @@ { private const string TestFolder = @"..\..\Deltares.DamEngine.Calculators.Tests\KernelWrappers\DamMacroStabilityCommon\TestData"; - // [Test] - // public void TestFullCalculation() - // { - // const double diff = 0.01; - // - // // ToDo zant Fill input - // var damKernelInput = new DamKernelInput(); - // - // var kernelWrapper = new DamMacroStabilityKernelWrapper(); - // - // // Prepare the wrapper. Result is input for the calculation dll - // IKernelDataInput damStabilityInput; - // IKernelDataOutput kernelOutput; - // kernelWrapper.Prepare(damKernelInput, out damStabilityInput, out kernelOutput); - // - // // Validate the input - // List messages; - // kernelWrapper.Validate(damStabilityInput, kernelOutput, out messages); - // Assert.AreEqual(0, messages.Count); - // - // // Run the dll - // kernelWrapper.Execute(damStabilityInput, kernelOutput, out messages); - // DamMacroStabilityOutput damMacroStabilityOutput = (DamMacroStabilityOutput) kernelOutput; - // Assert.AreEqual(0, messages.Count); - // Assert.AreEqual(1.282, damMacroStabilityOutput.Zone1Results.SafetyFactor, diff); - // Assert.IsNull(damMacroStabilityOutput.Zone2Results); - // - // // Fill the design results - // DesignResult result; - // kernelWrapper.PostProcess(damKernelInput, damMacroStabilityOutput, "", out result); - // Assert.AreEqual(1.282, result.StabilityDesignResults.SafetyFactor, diff); - // } + [Test] + [Category(Categories.WorkInProgress)] + public void TestFullCalculation() + { + const double diff = 0.01; + var soilDbName = Path.Combine(TestFolder, "soilmaterials.mdb"); + var soilGeometry2DName = Path.Combine(TestFolder, "1D1.sti"); + var line = FactoryForSurfaceLines.CreateSurfaceLineTutorial1(); + var location = new Location(); + var scenario = DamMacroStabilityTestHelper.CreateScenarioForLocation(location, line); + scenario.Location.SoildatabaseName = soilDbName; + + var trafficLoad = 10.0; + var subSoilScenario = new SoilGeometryProbability(); + subSoilScenario.StiFileName = soilGeometry2DName; + subSoilScenario.SoilProfileType = SoilProfileType.ProfileTypeStiFile; + subSoilScenario.SegmentFailureMechanismType = FailureMechanismSystemType.StabilityInside; + + var failureMechanismeParamatersMStab = new FailureMechanismeParamatersMStab(); + failureMechanismeParamatersMStab.MStabParameters.GridPosition = MStabGridPosition.Right; + failureMechanismeParamatersMStab.MStabParameters.SearchMethod = MStabSearchMethod.GeneticAlgorithm; + failureMechanismeParamatersMStab.MStabParameters.CalculationOptions.MinimalCircleDepth = 1.0; + failureMechanismeParamatersMStab.ProjectWorkingPath = TestFolder; // ToDo zant: is this the desired folder? + + var damKernelInput = new DamKernelInput(); + damKernelInput.Location = location; + damKernelInput.DesignScenario = scenario; + damKernelInput.SubSoilScenario = subSoilScenario; + + var kernelWrapper = new DamMacroStabilityInwardsKernelWrapper(); + kernelWrapper.FailureMechanismeParamatersMStab = failureMechanismeParamatersMStab; + + // Prepare the wrapper. Result is input for the calculation dll + IKernelDataInput damStabilityInput; + IKernelDataOutput kernelOutput; + kernelWrapper.Prepare(damKernelInput, 0, out damStabilityInput, out kernelOutput); + + // Validate the input + List messages; + kernelWrapper.Validate(damStabilityInput, kernelOutput, out messages); + Assert.AreEqual(0, messages.Count); + + // Run the dll + kernelWrapper.Execute(damStabilityInput, kernelOutput, out messages); + DamMacroStabilityOutput damMacroStabilityOutput = (DamMacroStabilityOutput) kernelOutput; + Assert.AreEqual(0, messages.Count); + Assert.AreEqual(1.5570, damMacroStabilityOutput.StabilityOutputItems[0].Zone1Results.SafetyFactor, diff); + Assert.IsNull(damMacroStabilityOutput.StabilityOutputItems[0].Zone2Results); + + // Fill the design results + List results; + kernelWrapper.PostProcess(damKernelInput, damMacroStabilityOutput, "", out results); + Assert.AreEqual(1.5570, results[0].StabilityDesignResults.SafetyFactor, diff); + } + public XDocument ModifiedXmlDocument(string stiFileName) { var xmlFileName = Path.Combine(TestFolder, "test.xml");