Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs =================================================================== diff -u -r770 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs (.../DamPipingSellmeijer4ForcesKernelWrapper.cs) (revision 770) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs (.../DamPipingSellmeijer4ForcesKernelWrapper.cs) (revision 814) @@ -29,7 +29,7 @@ /// /// Result of the prepare /// - public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) + public PrepareResult Prepare(DamKernelInput damKernelInput, int iterationIndex, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) { var damOutput = new DamPipingSellmeijer4ForcesOutput() { Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijerVnk/DamPipingSellmeijerVnkKernelWrapper.cs =================================================================== diff -u -r783 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijerVnk/DamPipingSellmeijerVnkKernelWrapper.cs (.../DamPipingSellmeijerVnkKernelWrapper.cs) (revision 783) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijerVnk/DamPipingSellmeijerVnkKernelWrapper.cs (.../DamPipingSellmeijerVnkKernelWrapper.cs) (revision 814) @@ -52,7 +52,7 @@ throw new NotImplementedException(); } - public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) + public PrepareResult Prepare(DamKernelInput damKernelInput, int iterationIndex, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) { var damOutput = new DamPipingSellmeijerVnkOutput() { Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapper.cs =================================================================== diff -u -r805 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapper.cs (.../DamMacroStabilityOutwardsKernelWrapper.cs) (revision 805) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapper.cs (.../DamMacroStabilityOutwardsKernelWrapper.cs) (revision 814) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Data; using System.IO; +using System.Text.RegularExpressions; using System.Xml.Linq; using Deltares.DamEngine.Calculators.KernelWrappers.Common; using Deltares.DamEngine.Calculators.KernelWrappers.DamMacroStability; @@ -56,15 +57,24 @@ public FailureMechanismeParamatersMStab FailureMechanismeParamatersMStab { get; set; } /// + /// Gets or sets the index of the iteration. + /// + /// + /// The index of the iteration. + /// + public int IterationIndex { get; set; } + + /// /// Prepares the specified dam kernel input. /// /// The dam kernel input. + /// /// The kernel data input. /// The kernel data output /// /// Result of the prepare /// - public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) + public PrepareResult Prepare(DamKernelInput damKernelInput, int iterationIndex, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) { var damMacroStabilityOutput = new DamMacroStabilityOutput() { @@ -76,23 +86,10 @@ // Make sure the gridposition is Left. FailureMechanismeParamatersMStab.MStabParameters.GridPosition = MStabGridPosition.Left; - //damKernelInput.Location.StabilityOptions. - // ToDo zant set stiFileName - // string stabilityDirectory = GetStabilityCalculationDirectory(); - // string filenameExtension = GetFilenameExtension(); - // string fileName = calculationName + filenameExtension; - // var stabilityProjectFilename = Path.Combine(stabilityDirectory, fileName); - - const string testFolder = @"..\..\Deltares.DamEngine.Calculators.Tests\Files\MacroStability"; - // Relative paths in ini file do not work yet in DGeoStability 16.2. This is fixed in 18.1. - var absoluteFolder = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), testFolder)); - var stiFileName = Path.Combine(absoluteFolder, "test.sti"); - - var damMacroStabilityInput = new DamMacroStabilityInput() { DGeoStabilityExePath = Path.Combine(DamMacroStabilityFolder, DGeoStabilityExe), - DGeoStabilityInputFileName = stiFileName, + DGeoStabilityInputFileName = GetStabilityInputFileName(damKernelInput, iterationIndex), FailureMechanismeParamatersMStab = FailureMechanismeParamatersMStab }; kernelDataInput = damMacroStabilityInput; @@ -269,5 +266,53 @@ } designResult.StabilityDesignResults = stabilityDesignResults; } + + private string GetStabilityInputFileName(DamKernelInput damKernelInput, int iterationIndex) + { + // Assume 2D sti-file, then check on type being 1D + string soilGeometryName = damKernelInput.SubSoilScenario.StiFileName; + if (damKernelInput.SubSoilScenario.SoilProfileType == SoilProfileType.ProfileType1D) + { + soilGeometryName = damKernelInput.SubSoilScenario.SoilProfile1DName; + } + + string calculationName = DetermineCalculationFilename(damKernelInput.DesignScenario.Location.Name, + damKernelInput.DesignScenario.LocationScenarioID, soilGeometryName, iterationIndex); + const string filenameExtension = ".sti"; + string fileName = calculationName + filenameExtension; + string stabilityDirectory = GetStabilityCalculationDirectory(); + return Path.Combine(stabilityDirectory, fileName); + + } + + private string DetermineCalculationFilename(string locationName, string scenarioName, + string soilGeometryName, int iterationIndex) + { + string calculationName; + if (iterationIndex <= 0) + { + calculationName = String.Format("Loc({0})_Sce({1})_Pro({2})", locationName, scenarioName, + soilGeometryName); + } + else + { + calculationName = String.Format("Loc({0})_Sce({1})_Pro({2})_Ite({3})", locationName, scenarioName, + soilGeometryName, iterationIndex); + } + return Regex.Replace(calculationName, @"[\\\/:\*\?""'<>|.]", "_"); + } + + private string GetStabilityCalculationDirectory() + { + string calculationBaseDirectory = DamProjectData.ProjectWorkingPath; + const string stabilitySubDir = @"Stability\"; + string stabilityDirectory = Path.Combine(calculationBaseDirectory, stabilitySubDir); + var modelSubDirectory = FailureMechanismeParamatersMStab.MStabParameters.Model.ToString(); + if (modelSubDirectory != "") + stabilityDirectory = Path.Combine(stabilityDirectory, modelSubDirectory); + if (!Directory.Exists(stabilityDirectory)) + Directory.CreateDirectory(stabilityDirectory); + return stabilityDirectory; + } } } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/MStabXmlDoc.cs =================================================================== diff -u -r787 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/MStabXmlDoc.cs (.../MStabXmlDoc.cs) (revision 787) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/MStabXmlDoc.cs (.../MStabXmlDoc.cs) (revision 814) @@ -167,7 +167,6 @@ if (failureMechanismeParamatersMStab.MStabParameters.GridPosition == MStabGridPosition.Left && scenario.RiverLevelLow.HasValue) { riverLevelLow = scenario.RiverLevelLow.Value; - // ToDo bka #zant: riverLevelLow is not used. In classic it was used in CreateAllPLLines } double? riverLevelHigh = riverLevel; var surfaceLevelOutside = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelOutside); Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapperTests.cs =================================================================== diff -u -r772 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapperTests.cs (.../DamPipingBlighKernelWrapperTests.cs) (revision 772) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapperTests.cs (.../DamPipingBlighKernelWrapperTests.cs) (revision 814) @@ -80,7 +80,7 @@ // Prepare the wrapper. Result is input for the calculation dll IKernelDataInput damPipingInput; IKernelDataOutput kernelDataOutput; - kernelWrapper.Prepare(damKernelInput, out damPipingInput, out kernelDataOutput); + kernelWrapper.Prepare(damKernelInput, 0, out damPipingInput, out kernelDataOutput); // Validate the input List messages; @@ -139,7 +139,7 @@ var kernelWrapper = new DamPipingBlighKernelWrapper(); IKernelDataInput kernelDataInput; IKernelDataOutput kernelDataOutput; - kernelWrapper.Prepare(damKernelInput, out kernelDataInput, out kernelDataOutput); + kernelWrapper.Prepare(damKernelInput, 0, out kernelDataInput, out kernelDataOutput); DamPipingBlighInput damPipingInput = (DamPipingBlighInput)kernelDataInput; Assert.AreEqual(2.0, damPipingInput.HRiver, diff); Assert.AreEqual(0.0, damPipingInput.HExit, diff); Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapper.cs =================================================================== diff -u -r805 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapper.cs (.../DamMacroStabilityKernelWrapper.cs) (revision 805) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapper.cs (.../DamMacroStabilityKernelWrapper.cs) (revision 814) @@ -63,7 +63,7 @@ /// /// Result of the prepare /// - public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) + public PrepareResult Prepare(DamKernelInput damKernelInput, int iterationIndex, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) { var damMacroStabilityOutput = new DamMacroStabilityOutput() { Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/Dikes Design/DesignCalculator.cs =================================================================== diff -u -r787 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/Dikes Design/DesignCalculator.cs (.../DesignCalculator.cs) (revision 787) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/Dikes Design/DesignCalculator.cs (.../DesignCalculator.cs) (revision 814) @@ -72,7 +72,7 @@ IKernelDataInput kernelDataInput; IKernelDataOutput kernelDataOutput; - PrepareResult prepareResult = kernelWrapper.Prepare(damKernelInput, out kernelDataInput, out kernelDataOutput); + PrepareResult prepareResult = kernelWrapper.Prepare(damKernelInput, 0, out kernelDataInput, out kernelDataOutput); // Sometimes the kernelDataInput is not created (p.e when soilprofileprobablility is meant for // stability where Piping calc is wanted). In that case, do nothing but just skip. Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs =================================================================== diff -u -r694 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs (.../IKernelWrapper.cs) (revision 694) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs (.../IKernelWrapper.cs) (revision 814) @@ -26,12 +26,13 @@ /// Prepares the failure mechanism input based on general dam kernel input. /// /// The dam kernel input. + /// The number of the current iteration /// The kernel data input. /// The kernel data output. /// /// Result of the prepare /// - PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput); + PrepareResult Prepare(DamKernelInput damKernelInput, int iterationIndex, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput); /// /// Validates the kernel data input. /// Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijerVnk/DamPipingSellmeijerVnkKernelWrapperTests.cs =================================================================== diff -u -r784 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijerVnk/DamPipingSellmeijerVnkKernelWrapperTests.cs (.../DamPipingSellmeijerVnkKernelWrapperTests.cs) (revision 784) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijerVnk/DamPipingSellmeijerVnkKernelWrapperTests.cs (.../DamPipingSellmeijerVnkKernelWrapperTests.cs) (revision 814) @@ -106,7 +106,7 @@ // Prepare the wrapper. Result is input for the calculation dll IKernelDataInput damPipingInput; IKernelDataOutput kernelDataOutput; - kernelWrapper.Prepare(damKernelInput, out damPipingInput, out kernelDataOutput); + kernelWrapper.Prepare(damKernelInput, 0, out damPipingInput, out kernelDataOutput); // Validate the input List messages; @@ -165,7 +165,7 @@ var kernelWrapper = new DamPipingSellmeijerVnkKernelWrapper(); IKernelDataInput kernelDataInput; IKernelDataOutput kernelDataOutput; - kernelWrapper.Prepare(damKernelInput, out kernelDataInput, out kernelDataOutput); + kernelWrapper.Prepare(damKernelInput, 0, out kernelDataInput, out kernelDataOutput); DamPipingSellmeijerVnkInput damPipingInput = (DamPipingSellmeijerVnkInput)kernelDataInput; Assert.AreEqual(1.0, damPipingInput.HRiver, diff); Assert.AreEqual(0.0, damPipingInput.HExit, diff); Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs =================================================================== diff -u -r772 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 772) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 814) @@ -32,7 +32,7 @@ /// /// Result of the prepare /// - public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) + public PrepareResult Prepare(DamKernelInput damKernelInput, int iterationIndex, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) { var damPipingBlighOutput = new DamPipingBlighOutput() { Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapperTests.cs =================================================================== diff -u -r765 -r814 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapperTests.cs (.../DamPipingSellmeijer4ForcesKernelWrapperTests.cs) (revision 765) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapperTests.cs (.../DamPipingSellmeijer4ForcesKernelWrapperTests.cs) (revision 814) @@ -83,7 +83,7 @@ // Prepare the wrapper. Result is input for the calculation dll IKernelDataInput damPipingInput; IKernelDataOutput kernelDataOutput; - kernelWrapper.Prepare(damKernelInput, out damPipingInput, out kernelDataOutput); + kernelWrapper.Prepare(damKernelInput, 0, out damPipingInput, out kernelDataOutput); // Validate the input List messages; @@ -142,7 +142,7 @@ var kernelWrapper = new DamPipingSellmeijer4ForcesKernelWrapper(); IKernelDataInput kernelDataInput; IKernelDataOutput kernelDataOutput; - kernelWrapper.Prepare(damKernelInput, out kernelDataInput, out kernelDataOutput); + kernelWrapper.Prepare(damKernelInput, 0, out kernelDataInput, out kernelDataOutput); DamPipingSellmeijer4ForcesInput damPipingInput = (DamPipingSellmeijer4ForcesInput) kernelDataInput; Assert.AreEqual(1.0, damPipingInput.HRiver, diff); Assert.AreEqual(0.0, damPipingInput.HExit, diff);