Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs =================================================================== diff -u -r5127 -r5157 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 5127) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 5157) @@ -335,7 +335,7 @@ result.Surfaces.Clear(); foreach (GeometrySurface surface in result.Geometry.Surfaces) { - SoilLayer2D soilLayer2D1 = new SoilLayer2D + var soilLayer2D1 = new SoilLayer2D { GeometrySurface = surface, Soil = defaultSoil @@ -351,8 +351,21 @@ if (layerFromOldSurfaces == null) { - var oldSoil = GetSoilIfSurfaceIsLeftOrRightOfOldSurfaces(surface, oldSurfaces); - soilLayer2D2.Soil = oldSoil ?? defaultSoil; + SoilLayer2D oldLayer = GetSoilIfSurfaceIsLeftOrRightOfOldSurfaces(surface, oldSurfaces); + if (oldLayer != null) + { + soilLayer2D2.IsAquifer = oldLayer.IsAquifer; + soilLayer2D2.WaterpressureInterpolationModel = oldLayer.WaterpressureInterpolationModel; + soilLayer2D2.SoilName = oldLayer.SoilName; + soilLayer2D2.Soil = oldLayer.Soil; + } + else + { + soilLayer2D2.IsAquifer = false; + soilLayer2D2.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Automatic; + soilLayer2D2.SoilName = defaultSoil.Name; + soilLayer2D2.Soil = defaultSoil; + } } result.Surfaces.Add(soilLayer2D2); } @@ -367,7 +380,7 @@ } } - private static Soil GetSoilIfSurfaceIsLeftOrRightOfOldSurfaces(GeometrySurface surface, List oldSurfaces) + private static SoilLayer2D GetSoilIfSurfaceIsLeftOrRightOfOldSurfaces(GeometrySurface surface, List oldSurfaces) { double[] xMin = surface.OuterLoop.CalcPoints.Select(p => p.X).OrderBy(x => x).Distinct().ToArray(); double[] zMin = surface.OuterLoop.CalcPoints.Select(p => p.Z).OrderBy(z => z).Distinct().ToArray(); @@ -377,10 +390,10 @@ Z = zMin[0] + 0.1 }; - var soil = FindSoilFromPointInOldSurfaces(oldSurfaces, leftPoint); - if (soil != null) + SoilLayer2D soilLayer = FindLayerFromPointInOldSurfaces(oldSurfaces, leftPoint); + if (soilLayer != null) { - return soil; + return soilLayer; } var rightPoint = new Point2D @@ -389,21 +402,21 @@ Z = zMin[0] + 0.1 }; - soil = FindSoilFromPointInOldSurfaces(oldSurfaces, rightPoint); - return soil; + soilLayer = FindLayerFromPointInOldSurfaces(oldSurfaces, rightPoint); + return soilLayer; } - private static Soil FindSoilFromPointInOldSurfaces(List oldSurfaces, Point2D searchPoint) + private static SoilLayer2D FindLayerFromPointInOldSurfaces(List oldSurfaces, Point2D searchPoint) { for (var i = 0; i < oldSurfaces.Count; i++) { bool find = oldSurfaces[i].GeometrySurface.OuterLoop.IsPointInLoopArea(searchPoint); if (find) { - return oldSurfaces[i].Soil; + return oldSurfaces[i]; } } - + return null; } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs =================================================================== diff -u -r5111 -r5157 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs (.../GeometryLoop.cs) (revision 5111) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs (.../GeometryLoop.cs) (revision 5157) @@ -141,6 +141,7 @@ /// True if continuous, false if not public bool IsContinuous() { + for (var i = 0; i < CurveList.Count - 1; i++) { if ((CurveList[i].EndPoint != CurveList[i + 1].HeadPoint) && Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs =================================================================== diff -u -r5150 -r5157 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 5150) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 5157) @@ -67,14 +67,15 @@ { case SoilProfileType.ProfileType1D: CombineSoilProfile1DWithSurfaceLine(subSoilScenario, surfaceLine2, dikeEmbankmentSoil); - return subSoilScenario.SoilProfile2D; break; case SoilProfileType.ProfileType2D: - return CombineSoilProfile2DWithSurfaceLine(subSoilScenario, surfaceLine2, dikeEmbankmentSoil); + CombineSoilProfile2DWithSurfaceLine(subSoilScenario, surfaceLine2, dikeEmbankmentSoil); break; default: throw new NotImplementedException(); } + + return subSoilScenario.SoilProfile2D; } /// @@ -413,13 +414,12 @@ /// The surfaceline. /// The dike embankment soil. /// Thrown when no SoilProfile2D is defined - private static SoilProfile2D CombineSoilProfile2DWithSurfaceLine(SoilGeometryProbability subSoilScenario, SurfaceLine2 surfaceLine2, + private static void CombineSoilProfile2DWithSurfaceLine(SoilGeometryProbability subSoilScenario, SurfaceLine2 surfaceLine2, Soil dikeEmbankmentSoil) { ValidateForCombineSoilProfile2DWithSurfaceLine(subSoilScenario, surfaceLine2, dikeEmbankmentSoil); - return SoilProfile2DSurfaceLineHelper.CombineSurfaceLineWithSoilProfile2D(surfaceLine2.Geometry, subSoilScenario.SoilProfile2D, - dikeEmbankmentSoil, 0); + subSoilScenario.SoilProfile2D = SoilProfile2DSurfaceLineHelper.CombineSurfaceLineWithSoilProfile2D(surfaceLine2.Geometry, subSoilScenario.SoilProfile2D, dikeEmbankmentSoil, 0); } private static void ValidateForCombineSoilProfile2DWithSurfaceLine(SoilGeometryProbability subSoilScenario, SurfaceLine2 surfaceLine2, Soil dikeEmbankmentSoil) Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/GeometryLoopTests.cs =================================================================== diff -u -r5063 -r5157 --- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/GeometryLoopTests.cs (.../GeometryLoopTests.cs) (revision 5063) +++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geometry/GeometryLoopTests.cs (.../GeometryLoopTests.cs) (revision 5157) @@ -653,4 +653,32 @@ // assert Assert.That(points, Is.Empty); } + + /// + /// X=10 curve 1-2 X=20 + /// Point 1 |------------------------| Points 2 and 3 Level -2 m + /// | | + /// | | curve 3-4 + /// | | + /// Point 6 |------------------------| Points 4 and 5 Level -5 m + /// curve 5-6 + /// + [Test] + public void GivenALoopWithCurvesConnectedByDifferentPointButSameLocation_WhenDeterminingIfCurveIsContinuous_ThenReturnsFalse() + { + var point1 = new Point2D(10.0, -2.0); + var point2 = new Point2D(20.0, -2.0); + var point3 = new Point2D(20.0, -2.0); + var point4 = new Point2D(20.0, -5.0); + var point5 = new Point2D(20.0, -5.0); + var point6 = new Point2D(10.0, -5.0); + + var loop = new GeometryLoop(); + loop.CurveList.Add(new GeometryCurve(point1, point2)); + loop.CurveList.Add(new GeometryCurve(point3, point4)); + loop.CurveList.Add(new GeometryCurve(point5, point6)); + loop.CurveList.Add(new GeometryCurve(point6, point1)); + + Assert.That(loop.IsContinuous(), Is.False); + } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryHelper.cs =================================================================== diff -u -r5058 -r5157 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryHelper.cs (.../GeometryHelper.cs) (revision 5058) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryHelper.cs (.../GeometryHelper.cs) (revision 5157) @@ -74,15 +74,20 @@ geometry.Curves.Add(newhorizontalCurve1); for (var i = 1; i < edgePoints.Length; i++) { + if (edgePoints[i].LocationEquals(edgePoints[i - 1])) + { + continue; + } + var newSurface = new GeometrySurface(); - + var newTopPoint = new Point2D(toX, edgePoints[i].Z); geometry.Points.Add(newTopPoint); var newhorizontalCurve2 = new GeometryCurve(edgePoints[i], newTopPoint); geometry.Curves.Add(newhorizontalCurve2); var newVerticalCurve = new GeometryCurve(newBottomPoint, newTopPoint); geometry.Curves.Add(newVerticalCurve); - + var newLoop = new GeometryLoop(); newLoop.CurveList.Add(newhorizontalCurve1); newLoop.CurveList.Add(newVerticalCurve);