Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/BishopGridCreator.cs =================================================================== diff -u -r3676 -r3682 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/BishopGridCreator.cs (.../BishopGridCreator.cs) (revision 3676) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/BishopGridCreator.cs (.../BishopGridCreator.cs) (revision 3682) @@ -24,7 +24,6 @@ using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Geotechnics; -using Deltares.MacroStability.CSharpWrapper; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards { @@ -76,35 +75,6 @@ return bishopCalculationGrid; } - /// Determines the Bishop grid from used from writing the input stix file. - /// The implementation should be identical as used in the MacroStability kernel. - /// the slip circle definition - /// The surface line. - /// The calculation grid - /// - public static void DetermineStixGrid(SlipCircleDefinition slipCircleDefinition, SurfaceLine2 surfaceLine, CalculationGrid calculationGrid) - { - // Define specified active (left) grid - if (surfaceLine != null) - { - // Use middle of the dike for X-coordinate - var dikeTopAtRiverPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver); - var dikeTopAtPolderPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder); - double gridXCoordinate = (dikeTopAtRiverPoint.X + dikeTopAtPolderPoint.X) * 0.5; - double gridYCoordinate = surfaceLine.Geometry.GetZatX(gridXCoordinate); - double gridWidth = slipCircleDefinition.BishopGridHorizontalPointDistance * - (slipCircleDefinition.BishopGridHorizontalPointCount - 1); - double gridHeight = slipCircleDefinition.BishopGridVerticalPointDistance * - (slipCircleDefinition.BishopGridVerticalPointCount - 1); - calculationGrid.GridXLeft = gridXCoordinate; - calculationGrid.GridXRight = gridXCoordinate + gridWidth; - calculationGrid.GridXNumber = slipCircleDefinition.BishopGridHorizontalPointCount; - calculationGrid.GridZBottom = gridYCoordinate; - calculationGrid.GridZTop = gridYCoordinate + gridHeight; - calculationGrid.GridZNumber = slipCircleDefinition.BishopGridVerticalPointCount; - } - } - /// Determines the tangent lines. /// The bishop calculation grid. /// The slip circle definition. Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityOutputItem.cs =================================================================== diff -u -r3523 -r3682 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityOutputItem.cs (.../MacroStabilityOutputItem.cs) (revision 3523) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityOutputItem.cs (.../MacroStabilityOutputItem.cs) (revision 3682) @@ -22,8 +22,9 @@ using System.Collections.Generic; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.General.Results; -using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Standard.Calculation; +using Deltares.MacroStability.CSharpWrapper; +using Point2D = Deltares.DamEngine.Data.Geometry.Point2D; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards { @@ -124,5 +125,21 @@ /// The result slices. /// public List ResultSlices { get; set; } + + /// + /// Gets or sets the Bishop calculation circle. + /// + /// + /// The bishop calculation circle. + /// + public BishopCalculationCircle BishopCalculationCircle { get; set; } + + /// + /// Gets or sets the Uplift Van calculation grid. + /// + /// + /// The Uplift Van calculation grid. + /// + public UpliftVanCalculationGrid UpliftVanCalculationGrid { get; set; } } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreator.cs =================================================================== diff -u -r3676 -r3682 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreator.cs (.../UpliftVanGridCreator.cs) (revision 3676) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreator.cs (.../UpliftVanGridCreator.cs) (revision 3682) @@ -101,60 +101,6 @@ return upliftVanCalculationGrid; } - /// Determines the Uplift Van grid from used from writing the input stix file. - /// The implementation should be identical as used in the MacroStability kernel. - /// the slip circle definition - /// The surface line. - /// The Uplift Van calculation grid. - /// - public static void DetermineStixGrids(SlipCircleDefinition slipCircleDefinition, SurfaceLine2 surfaceLine, Deltares.MacroStability.CSharpWrapper.UpliftVanCalculationGrid upliftVanCalculationGrid) - { - // Define specified active (left) grid - if (surfaceLine != null) - { - // Use middle of the dike for X-coordinate - var dikeTopAtRiverPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver); - var dikeTopAtPolderPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder); - double gridXCoordinate = (dikeTopAtRiverPoint.X + dikeTopAtPolderPoint.X) * 0.5; - double gridYCoordinate = surfaceLine.Geometry.GetZatX(gridXCoordinate); - double gridWidth = slipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance * - (slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount - 1); - double gridHeight = slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance * - (slipCircleDefinition.UpliftVanRightGridVerticalPointCount - 1); - upliftVanCalculationGrid.LeftGrid.GridXLeft = gridXCoordinate; - upliftVanCalculationGrid.LeftGrid.GridXRight = gridXCoordinate + gridWidth; - upliftVanCalculationGrid.LeftGrid.GridXNumber = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount; - upliftVanCalculationGrid.LeftGrid.GridZBottom = gridYCoordinate; - upliftVanCalculationGrid.LeftGrid.GridZTop = gridYCoordinate + gridHeight; - upliftVanCalculationGrid.LeftGrid.GridZNumber = slipCircleDefinition.UpliftVanRightGridVerticalPointCount; - } - - // Define specified passive (right) grid - if (surfaceLine != null) - { - const double gridOffset = 0.2; - var dikeToeAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); - - // X-coordinates settings of the grid - double gridWidth = slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance * - (slipCircleDefinition.UpliftVanRightGridHorizontalPointCount - 1); - // The grid starts at either last uplift point X-coordinate or dike toe at polder X-coordinate, whichever is largest - double gridXCoordinate = Math.Max(slipCircleDefinition.XCoordinateLastUpliftPoint - gridWidth, dikeToeAtPolder.X); - upliftVanCalculationGrid.RightGrid.GridXLeft = gridXCoordinate; - // The grid is limited to the right boundary of the surfaceline - double boundaryRight = surfaceLine.CharacteristicPoints.Geometry.GetGeometryBounds().Right; - upliftVanCalculationGrid.RightGrid.GridXRight = Math.Min(gridXCoordinate + gridWidth, boundaryRight); - upliftVanCalculationGrid.RightGrid.GridXNumber = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount; - - // Z-coordinates settings of the grid - double gridHeight = slipCircleDefinition.UpliftVanRightGridVerticalPointDistance * - (slipCircleDefinition.UpliftVanRightGridVerticalPointCount - 1); - upliftVanCalculationGrid.RightGrid.GridZBottom = dikeToeAtPolder.Z + gridOffset; - upliftVanCalculationGrid.RightGrid.GridZTop = upliftVanCalculationGrid.RightGrid.GridZBottom + gridHeight; - upliftVanCalculationGrid.RightGrid.GridZNumber = slipCircleDefinition.UpliftVanRightGridVerticalPointCount; - } - } - /// Determines the tangent lines. /// The uplift van calculation grid. /// The slip circle definition. Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs =================================================================== diff -u -r3620 -r3682 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs (.../FillEngineFromMacroStabilityWrapperOutput.cs) (revision 3620) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs (.../FillEngineFromMacroStabilityWrapperOutput.cs) (revision 3682) @@ -19,6 +19,7 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using System.Collections.Generic; using System.Linq; using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards; @@ -58,19 +59,26 @@ { CalculationResult = ConversionHelper.ConvertToDamResultType(kernelOutput.ResultType), SafetyFactor = kernelOutput.StabilityOutput.SafetyFactor, - StabilityModelType = ConversionHelper.ConvertToMStabModelType(kernelOutput.StabilityOutput.ModelOptionType) + StabilityModelType = ConversionHelper.ConvertToMStabModelType(kernelOutput.StabilityOutput.ModelOptionType), + BishopCalculationCircle = new BishopCalculationCircle(), + UpliftVanCalculationGrid = new MacroStability.CSharpWrapper.UpliftVanCalculationGrid() + }; if (outputItem.StabilityModelType == MStabModelType.Bishop) { var slidingCircleMinimumSafetyCurve = (SlidingCircleMinimumSafetyCurve)kernelOutput.StabilityOutput.MinimumSafetyCurve; FillBishopSlipCircle(slidingCircleMinimumSafetyCurve, outputItem); + var bishopPreprocessingOutput = (BishopPreprocessingOutput)kernelOutput.PreprocessingOutputBase; + outputItem.BishopCalculationCircle = bishopPreprocessingOutput.BishopCalculationCircle; } if (outputItem.StabilityModelType == MStabModelType.UpliftVan) { var dualSlidingCircleMinimumSafetyCurve = (DualSlidingCircleMinimumSafetyCurve)kernelOutput.StabilityOutput.MinimumSafetyCurve; FillUpliftVanDualSlipCircle(dualSlidingCircleMinimumSafetyCurve, outputItem); + var upliftVanPreprocessingOutput = (UpliftVanPreprocessingOutput)kernelOutput.PreprocessingOutputBase; + outputItem.UpliftVanCalculationGrid = upliftVanPreprocessingOutput.UpliftVanCalculationGrid; } if (outputItem.StabilityModelType == MStabModelType.Bishop || @@ -91,8 +99,7 @@ { Message = stabilityOutputMessage.Content, MessageType = ConversionHelper.ConvertKernelLogMessageTypeToLogMessageType( - stabilityOutputMessage - .MessageType) + stabilityOutputMessage.MessageType) }; logMessages.Add(logMessage); } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r3676 -r3682 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3676) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3682) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Data; using System.IO; +using System.Linq; using System.Text.RegularExpressions; using Deltares.DamEngine.Calculators.DikesDesign; using Deltares.DamEngine.Calculators.KernelWrappers.Common; @@ -100,13 +101,14 @@ var fillMacroStabilityWrapperFromEngine = new FillMacroStabilityWrapperInputFromEngine(); - var slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification - .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; + switch (FailureMechanismParametersMStab.MStabParameters.Model) { case MStabModelType.Bishop: { // Define slip circle Bishop + var slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification + .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; var minimumCircleDepth = damKernelInput.DamFailureMechanismeCalculationSpecification .FailureMechanismParametersMStab.MStabParameters.CalculationOptions.MinimalCircleDepth; var bishopCalculationGrid = BishopGridCreator.DetermineGridsFromSettings( @@ -147,6 +149,8 @@ } // Define slip circle UpliftVan + var slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification + .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; var minimumCircleDepth = damKernelInput.DamFailureMechanismeCalculationSpecification .FailureMechanismParametersMStab.MStabParameters.CalculationOptions.MinimalCircleDepth; var upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings( @@ -170,24 +174,6 @@ macroStabilityInput.Input = fillMacroStabilityWrapperFromEngine.CreateMacroStabilityInput(damKernelInput, FailureMechanismParametersMStab, waterNet); fileNameForCalculation = GetStabilityInputFileName(damKernelInput, iterationIndex, FailureMechanismParametersMStab.MStabParameters.Model); - var inputForStixFile = macroStabilityInput.Input; - if (slipCircleDefinition.GridSizeDetermination != GridSizeDetermination.Specified) - { - var surfaceLine = damKernelInput.Location.SurfaceLine; - switch (FailureMechanismParametersMStab.MStabParameters.Model) - { - case MStabModelType.Bishop: - BishopGridCreator.DetermineStixGrid(slipCircleDefinition, surfaceLine, inputForStixFile.StabilityModel.BishopCalculationCircle.Grid); - break; - case MStabModelType.UpliftVan: - UpliftVanGridCreator.DetermineStixGrids(slipCircleDefinition, surfaceLine, inputForStixFile.StabilityModel.UpliftVanCalculationGrid); - break; - default: - throw new ArgumentOutOfRangeException(nameof(FailureMechanismParametersMStab.MStabParameters.Model)); - } - } - WriteStixFileBasedOnInputAndSearchGrid(fileNameForCalculation, inputForStixFile); - return PrepareKernel(macroStabilityInput.Input); } catch(Exception e) @@ -348,6 +334,22 @@ var macroStabilityOutputKernel = stabilityCalculator.Calculate(); FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(macroStabilityOutputKernel, macroStabilityOutput, out messages); + var inputStixFile = input.Input; + foreach (var stabilityOutputItem in macroStabilityOutput.StabilityOutputItems) + { + switch (stabilityOutputItem.StabilityModelType) + { + case MStabModelType.Bishop: + inputStixFile.StabilityModel.BishopCalculationCircle = stabilityOutputItem.BishopCalculationCircle; + break; + case MStabModelType.UpliftVan: + inputStixFile.StabilityModel.UpliftVanCalculationGrid = stabilityOutputItem.UpliftVanCalculationGrid; + break; + } + + WriteStixFileBasedOnInputAndResultsSearchGrid(fileNameForCalculation, inputStixFile); + } + WriteStixFileBasedOnInputAndResultsSlipPlane(input, macroStabilityOutput); } catch (Exception e) @@ -357,7 +359,7 @@ } } - private void WriteStixFileBasedOnInputAndSearchGrid(string fileName, MacroStabilityInput input) + private void WriteStixFileBasedOnInputAndResultsSearchGrid(string fileName, MacroStabilityInput input) { if (!(input.StabilityModel.ModelOption == StabilityModelOptionType.UpliftVan && input.StabilityModel.SearchAlgorithm == SearchAlgorithm.Beeswarm)) Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs =================================================================== diff -u -r3676 -r3682 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs (.../MacroStabilityInwardsTests.cs) (revision 3676) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs (.../MacroStabilityInwardsTests.cs) (revision 3682) @@ -853,7 +853,7 @@ }; foreach (var file in fileList.Select(file => Path.Combine(Path.GetFullPath(calcDir), file))) { - Assert.IsTrue(File.Exists(file),file + "does not exists"); + Assert.IsTrue(File.Exists(file),file + " does not exists"); } }