Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs =================================================================== diff -u -r3025 -r3029 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs (.../FillMacroStabilityWrapperInputFromEngine.cs) (revision 3025) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs (.../FillMacroStabilityWrapperInputFromEngine.cs) (revision 3029) @@ -97,8 +97,8 @@ .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; TransferUpliftVanCalculationGridSettings(slipCircleDefinition, top, bottom, macroStabilityInput.PreprocessingInput.SearchAreaConditions); - //TransferUpliftVanCalculationGrid(UpliftVanCalculationGrid, macroStabilityInput.StabilityModel.UpliftVanCalculationGrid, - // macroStabilityInput.PreprocessingInput.SearchAreaConditions); + TransferUpliftVanCalculationGrid(UpliftVanCalculationGrid, macroStabilityInput.StabilityModel.UpliftVanCalculationGrid, + macroStabilityInput.PreprocessingInput.SearchAreaConditions); lastStage.UniformLoads = new List(); // ToDo check whether this is needed. TransferUniformLoads(TrafficLoad, lastStage.UniformLoads); return macroStabilityInput; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r3025 -r3029 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3025) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3029) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Data; +using System.IO; using System.Linq; using Deltares.DamEngine.Calculators.DikesDesign; using Deltares.DamEngine.Calculators.KernelWrappers.Common; @@ -112,7 +113,7 @@ FillMacroStabilityWrapperInputFromEngine fillMacroStabilityWrapperFromEngine = new FillMacroStabilityWrapperInputFromEngine() { TrafficLoad = trafficLoad, - UpliftVanCalculationGrid = null, + UpliftVanCalculationGrid = DetermineGridFromSettings(damKernelInput.Location.SurfaceLine) }; // ToDo MWDAM-1373/1374: fill SoilProfile2D @@ -132,6 +133,30 @@ return PrepareResult.NotRelevant; } + private MacroStabilityCommon.UpliftVanCalculationGrid DetermineGridFromSettings(SurfaceLine2 surfaceLine) + { + var upliftVanCalculationGrid = new MacroStabilityCommon.UpliftVanCalculationGrid(); + if (surfaceLine != null) + { + upliftVanCalculationGrid.IsAuto = false; + upliftVanCalculationGrid.LeftGridXCount = 3; + upliftVanCalculationGrid.LeftGridXLeft = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).X + 2; + upliftVanCalculationGrid.LeftGridXRight = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X + 5; + upliftVanCalculationGrid.LeftGridZCount = 3; + upliftVanCalculationGrid.LeftGridZTop = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z + 6; + upliftVanCalculationGrid.LeftGridZBottom = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z + 0.2; + + upliftVanCalculationGrid.RightGridXCount = 3; + upliftVanCalculationGrid.RightGridXLeft = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X + 10; + upliftVanCalculationGrid.RightGridXRight = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X - 5; + upliftVanCalculationGrid.RightGridZCount = 3; + upliftVanCalculationGrid.RightGridZTop = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).Z + 2; + upliftVanCalculationGrid.RightGridZBottom = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).Z + 2; + } + + return upliftVanCalculationGrid; + } + private void EnsureSoilProfile2DIsFilled(SoilGeometryProbability subSoilScenario, SurfaceLine2 surfaceLine2, Soil dikeEmbankmentSoil) { var soilProfile2D = subSoilScenario.SoilProfile2D; @@ -163,6 +188,7 @@ stabilityCalculator = new Calculator(input); // For now a simple check to see if any data has been past at all. var inputAsXml = stabilityCalculator.KernelInputXml; + File.WriteAllText("TestfileFromPrepare.xml", inputAsXml); if (inputAsXml.Length > 10) { return PrepareResult.Successful; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs =================================================================== diff -u -r3025 -r3029 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs (.../FillEngineFromMacroStabilityWrapperInput.cs) (revision 3025) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs (.../FillEngineFromMacroStabilityWrapperInput.cs) (revision 3029) @@ -34,6 +34,7 @@ using KernelHeadLine = Deltares.MacroStability.CSharpWrapper.HeadLine; using KernelWaternetLine = Deltares.MacroStability.CSharpWrapper.WaternetLine; using WaternetLine = Deltares.DamEngine.Data.Geometry.WaternetLine; +using KernelUpliftVanCalculationGrid = Deltares.MacroStability.CSharpWrapper.UpliftVanCalculationGrid; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo @@ -96,6 +97,7 @@ TransferSurfaceLine(lastPreConStage.SurfaceLine); TransferWaternet(macroStabilityInput.StabilityModel.ConstructionStages.Last().Waternet); TransferUpliftVanCalculationGridSettings(macroStabilityInput.PreprocessingInput.SearchAreaConditions); + TransferUpliftVanCalculationGrid(macroStabilityInput.StabilityModel.UpliftVanCalculationGrid, macroStabilityInput.PreprocessingInput.SearchAreaConditions); TransferTrafficLoad(macroStabilityInput.StabilityModel.ConstructionStages.Last().UniformLoads); } @@ -121,6 +123,33 @@ } } + private void TransferUpliftVanCalculationGrid(KernelUpliftVanCalculationGrid kernelSlipPlaneUpliftVan, + SearchAreaConditions kernelSearchAreaConditions) + { + // UpliftVanCalculationGrid.IsAuto = kernelSearchAreaConditions.AutoSearchArea; + UpliftVanCalculationGrid = new UpliftVanCalculationGrid + { + LeftGridXCount = kernelSlipPlaneUpliftVan.LeftGrid.GridXNumber, + LeftGridXLeft = kernelSlipPlaneUpliftVan.LeftGrid.GridXLeft, + LeftGridXRight = kernelSlipPlaneUpliftVan.LeftGrid.GridXRight, + LeftGridZCount = kernelSlipPlaneUpliftVan.LeftGrid.GridZNumber, + LeftGridZTop = kernelSlipPlaneUpliftVan.LeftGrid.GridZTop, + LeftGridZBottom = kernelSlipPlaneUpliftVan.LeftGrid.GridZBottom, + RightGridXCount = kernelSlipPlaneUpliftVan.RightGrid.GridXNumber, + RightGridXLeft = kernelSlipPlaneUpliftVan.RightGrid.GridXLeft, + RightGridXRight = kernelSlipPlaneUpliftVan.RightGrid.GridXRight, + RightGridZCount = kernelSlipPlaneUpliftVan.RightGrid.GridZNumber, + RightGridZTop = kernelSlipPlaneUpliftVan.RightGrid.GridZTop, + RightGridZBottom = kernelSlipPlaneUpliftVan.RightGrid.GridZBottom + }; + + // Tangent lines are filled from bottom to top as specified by the FillMacroStabilityWrapperInputFromEngine. + IEnumerable tangentLines = kernelSlipPlaneUpliftVan.TangentLines.ToArray(); + UpliftVanCalculationGrid.TangentLineZBottom = tangentLines.First(); + UpliftVanCalculationGrid.TangentLineZTop = tangentLines.Last(); + UpliftVanCalculationGrid.TangentLineCount = tangentLines.Count() - 1; // -1 as the ZTop coordinate is inclusive + } + private void TransferUpliftVanCalculationGridSettings(SearchAreaConditions kernelSearchAreaConditions) { slipCircleDefinition = new SlipCircleDefinition {GridSizeDetermination = GridSizeDetermination.Specified}; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs =================================================================== diff -u -r3009 -r3029 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs (.../MacroStabilityIoTests.cs) (revision 3009) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs (.../MacroStabilityIoTests.cs) (revision 3029) @@ -79,7 +79,7 @@ // Given DamEngine data (DamProjectData) DamProjectData expectedDamProjectData = CreateExampleDamProjectData(); Waternet expectedWaternet = CreateExampleWaternet(); - //UpliftVanCalculationGrid expectedUpliftVanCalculationGrid = CreateExampleUpliftVanCalculationGrid(); + UpliftVanCalculationGrid expectedUpliftVanCalculationGrid = CreateExampleUpliftVanCalculationGrid(); Location expectedLocation = expectedDamProjectData.Dike.Locations[0]; SoilList expectedSoilList = expectedDamProjectData.Dike.SoilList; @@ -94,7 +94,7 @@ }; var fillMacroStabilityWrapperInputFromEngine = new FillMacroStabilityWrapperInputFromEngine { - //UpliftVanCalculationGrid = expectedUpliftVanCalculationGrid, + UpliftVanCalculationGrid = expectedUpliftVanCalculationGrid, TrafficLoad = expectedTrafficLoad }; var damKernelInput = new DamKernelInput @@ -119,11 +119,37 @@ var expectedUpliftVanCalculationGridSettings = expectedParametersMStab.MStabParameters.SlipCircleDefinition; CompareUpliftVanCalculationGridSettings(expectedUpliftVanCalculationGridSettings, fillEngineFromMacroStabilityWrapperInput.SlipCircleDefinition); - //CompareUpliftVanCalculationGrid(expectedUpliftVanCalculationGrid, fillEngineFromMacroStabilityWrapperInput.UpliftVanCalculationGrid); + CompareUpliftVanCalculationGrid(expectedUpliftVanCalculationGrid, fillEngineFromMacroStabilityWrapperInput.UpliftVanCalculationGrid); CompareWaternet(expectedWaternet, fillEngineFromMacroStabilityWrapperInput.Waternet); //Todo : add and or implement comparer per item as these are added to the code } + private static UpliftVanCalculationGrid CreateExampleUpliftVanCalculationGrid() + { + var random = new Random(21); + var upliftVanCalculationGrid = new UpliftVanCalculationGrid + { + LeftGridXLeft = random.NextDouble(), + LeftGridXRight = random.NextDouble(), + LeftGridZTop = random.NextDouble(), + LeftGridZBottom = random.NextDouble(), + LeftGridXCount = random.Next(), + LeftGridZCount = random.Next(), + + RightGridXLeft = random.NextDouble(), + RightGridXRight = random.NextDouble(), + RightGridZTop = random.NextDouble(), + RightGridZBottom = random.NextDouble(), + RightGridXCount = random.Next(), + RightGridZCount = random.Next(), + + TangentLineZBottom = 0, + TangentLineZTop = 10, + TangentLineCount = 10 + }; + return upliftVanCalculationGrid; + } + private static Waternet CreateExampleWaternet() { var waterNet = new Waternet @@ -201,6 +227,28 @@ } + private void CompareUpliftVanCalculationGrid(UpliftVanCalculationGrid expectedSlipPlaneUpliftVan, + UpliftVanCalculationGrid actualSlipPlaneUpliftVan) + { + Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridXLeft, actualSlipPlaneUpliftVan.LeftGridXLeft); + Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridXRight, actualSlipPlaneUpliftVan.LeftGridXRight); + Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridZTop, actualSlipPlaneUpliftVan.LeftGridZTop); + Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridZBottom, actualSlipPlaneUpliftVan.LeftGridZBottom); + Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridXCount, actualSlipPlaneUpliftVan.LeftGridXCount); + Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridZCount, actualSlipPlaneUpliftVan.LeftGridZCount); + + Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridXLeft, actualSlipPlaneUpliftVan.RightGridXLeft); + Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridXRight, actualSlipPlaneUpliftVan.RightGridXRight); + Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridZTop, actualSlipPlaneUpliftVan.RightGridZTop); + Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridZBottom, actualSlipPlaneUpliftVan.RightGridZBottom); + Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridXCount, actualSlipPlaneUpliftVan.RightGridXCount); + Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridZCount, actualSlipPlaneUpliftVan.RightGridZCount); + + Assert.AreEqual(expectedSlipPlaneUpliftVan.TangentLineZTop, actualSlipPlaneUpliftVan.TangentLineZTop); + Assert.AreEqual(expectedSlipPlaneUpliftVan.TangentLineZBottom, actualSlipPlaneUpliftVan.TangentLineZBottom); + Assert.AreEqual(expectedSlipPlaneUpliftVan.TangentLineCount, actualSlipPlaneUpliftVan.TangentLineCount); + } + private static void CompareWaternet(Waternet expectedWaternet, Waternet actualWaternet) { Assert.AreEqual(expectedWaternet.Name, actualWaternet.Name);