Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs =================================================================== diff -u -r6400 -r6404 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 6400) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 6404) @@ -1,4 +1,4 @@ -// Copyright (C) Stichting Deltares 2024. All rights reserved. +// Copyright (C) Stichting Deltares 2025. All rights reserved. // // This file is part of the Dam Engine. // @@ -45,7 +45,7 @@ using Deltares.StixFileWriter; using CharacteristicPointType = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointType; using MacroStabilityOutput = Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards.MacroStabilityOutput; -using Point2D = Deltares.Geo.Common.Geometry.Point2D; +using Point2D = Deltares.DamEngine.Data.Geometry.Point2D; using Soil = Deltares.DamEngine.Data.Geotechnics.Soil; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon; @@ -114,7 +114,7 @@ SlipCircleDefinition slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; StabilityGridPosition gridPosition = damKernelInput.DamFailureMechanismeCalculationSpecification - .FailureMechanismParametersMStab.MStabParameters.GridPosition; + .FailureMechanismParametersMStab.MStabParameters.GridPosition; BishopCalculationGrid bishopCalculationGrid = BishopGridCreator.DetermineGridsFromSettings(gridPosition, slipCircleDefinition, damKernelInput.Location.SurfaceLine); double centerOfLeftGridXCoordinate = (bishopCalculationGrid.GridXLeft + bishopCalculationGrid.GridXRight) * 0.5; @@ -212,7 +212,7 @@ designScenario, damKernelInput.SubSoilScenario.SoilProfile1D, soilProfile2DName) { // Initialize to the result of the designScenario - CalculationResult = (designScenario != null) ? designScenario.CalculationResult : CalculationResult.NoRun, + CalculationResult = (designScenario != null) ? designScenario.CalculationResult : CalculationResult.NoRun, StabilityDesignResults = new StabilityDesignResults() }; var stabilityDesignResults = new StabilityDesignResults @@ -303,7 +303,7 @@ { var macroStabilityKernelDataInput = (MacroStabilityKernelDataInput) kernelDataInput; messages = new List(); - + try { ValidationOutput result = new Validator(macroStabilityKernelDataInput.Input).Validate(); @@ -402,6 +402,29 @@ } } + /// + /// Create the waternet using the 1D soil profile if available, otherwise the 2D soil profile. + /// + /// + /// + /// The waternet. + public static Waternet CreateWaternet(DamKernelInput damKernelInput, PlLines plLines) + { + double penetrationLength = damKernelInput.Location.ModelParametersForPlLines.PenetrationLength; + IntrusionVerticalWaterPressureType? pressureType = damKernelInput.Location.IntrusionVerticalWaterPressure; + + ThrowWhenSoilProfile2DIsNull(damKernelInput.SubSoilScenario); + + SurfaceLine2 surfaceLine = damKernelInput.Location.SurfaceLine; + if (damKernelInput.SubSoilScenario.SoilProfile1D != null) + { + return PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, damKernelInput.SubSoilScenario.SoilProfile1D, surfaceLine, penetrationLength, pressureType); + } + + SoilProfile2D soilProfile2D = damKernelInput.SubSoilScenario.SoilProfile2D; + return PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile2D, surfaceLine, penetrationLength, pressureType); + } + private void StoreResultsAndWriteStixFile(MacroStabilityInput input, MacroStabilityOutput macroStabilityOutput, string fileName, List messages) { try @@ -436,29 +459,6 @@ } /// - /// Create the waternet using the 1D soil profile if available, otherwise the 2D soil profile. - /// - /// - /// - /// The waternet. - public static Waternet CreateWaternet(DamKernelInput damKernelInput, PlLines plLines) - { - double penetrationLength = damKernelInput.Location.ModelParametersForPlLines.PenetrationLength; - IntrusionVerticalWaterPressureType? pressureType = damKernelInput.Location.IntrusionVerticalWaterPressure; - - ThrowWhenSoilProfile2DIsNull(damKernelInput.SubSoilScenario); - - SurfaceLine2 surfaceLine = damKernelInput.Location.SurfaceLine; - if (damKernelInput.SubSoilScenario.SoilProfile1D != null) { - - return PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, damKernelInput.SubSoilScenario.SoilProfile1D, surfaceLine, penetrationLength, pressureType); - } - - SoilProfile2D soilProfile2D = damKernelInput.SubSoilScenario.SoilProfile2D; - return PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile2D, surfaceLine, penetrationLength, pressureType); - } - - /// /// Combines the surface line with the SoilProfile2D. /// /// The sub soil scenario. @@ -473,21 +473,22 @@ subSoilScenario.SoilProfile2D = SoilProfile2DSurfaceLineHelper.CombineSurfaceLineWithSoilProfile2D(surfaceLine2.Geometry, subSoilScenario.SoilProfile2D, dikeEmbankmentSoil); CorrectSurfacelinePointsForGeometryCoordinates(subSoilScenario.SoilProfile2D.Geometry, surfaceLine2); } - + private static void CorrectSurfacelinePointsForGeometryCoordinates(GeometryData geometry, SurfaceLine2 surfaceLine) { - foreach (Data.Geometry.Point2D surfaceLinePoint in surfaceLine.Geometry.Points) + foreach (Point2D surfaceLinePoint in surfaceLine.Geometry.Points) { - var point = geometry.GetPointAtLocation(surfaceLinePoint, GeometryConstants.Accuracy * 1.5); + Point2D point = geometry.GetPointAtLocation(surfaceLinePoint, GeometryConstants.Accuracy * 1.5); if (point != null) { surfaceLinePoint.X = point.X; surfaceLinePoint.Z = point.Z; } } + RemovePointsAtSameXLocation(surfaceLine); } - + /// /// Removes points with same X coordinates and different Z /// @@ -499,7 +500,7 @@ { for (int j = i; j < pointsAsArray.Length; j++) { - if (i != j && Math.Abs(pointsAsArray[i].Point.X - pointsAsArray[j].Point.X) < GeometryConstants.Accuracy && + if (i != j && Math.Abs(pointsAsArray[i].Point.X - pointsAsArray[j].Point.X) < GeometryConstants.Accuracy && Math.Abs(pointsAsArray[i].Point.Z - pointsAsArray[j].Point.Z) > GeometryConstants.Accuracy && !pointsToDelete.Contains(pointsAsArray[j])) { if (pointsAsArray[j].CharacteristicPointType == CharacteristicPointType.None) @@ -511,7 +512,7 @@ if (pointsAsArray[i].CharacteristicPointType == CharacteristicPointType.None) { pointsToDelete.Add(pointsAsArray[i]); - } + } } } }