Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs =================================================================== diff -u -r5085 -r5252 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (.../PlLinesToWaternetConverter.cs) (revision 5085) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (.../PlLinesToWaternetConverter.cs) (revision 5252) @@ -43,7 +43,9 @@ LowestLayer } - private const double epsilon = 1e-9; + private const double deviationX = 1e-06; + private const double toleranceAlmostEqual = 1e-09; + private const string waternetLine1Name = "Waternet line phreatic line"; private const string waternetLine2Name = "Penetration zone lower aquifer"; private const string waternetLine3Name = "Waternet line lower aquifer"; @@ -333,7 +335,7 @@ } line.SyncCalcPoints(); - LineHelper.RemoveDuplicatedPoints(line.CalcPoints, epsilon); + LineHelper.RemoveDuplicatedPoints(line.CalcPoints, toleranceAlmostEqual); line.RemoveUnnecessaryPoints(); line.SyncPoints(); @@ -361,8 +363,8 @@ { if (HasAquiferAVerticalPartAtGivenX(layerType, xCoordinate, soilProfile, indexInBetweenAquifer)) { - xCoordinatesAll.Add(xCoordinate - epsilon); - xCoordinatesAll.Add(xCoordinate + epsilon); + xCoordinatesAll.Add(xCoordinate - deviationX); + xCoordinatesAll.Add(xCoordinate + deviationX); } else { @@ -403,8 +405,8 @@ private static bool IsLayerBoundaryContinuous(List boundaryPoints, double leftGeometryBoundary, double rightGeometryBoundary) { - return boundaryPoints.Any() && (Math.Abs(boundaryPoints.First().X - leftGeometryBoundary) < epsilon) - && Math.Abs(boundaryPoints.Last().X - rightGeometryBoundary) < epsilon; + return boundaryPoints.Any() && (Math.Abs(boundaryPoints.First().X - leftGeometryBoundary) < toleranceAlmostEqual) + && Math.Abs(boundaryPoints.Last().X - rightGeometryBoundary) < toleranceAlmostEqual; } private static SoilLayer1D GetSoilLayer1D(LayerType layerType, SoilProfile1D soilProfile1D, int indexInBetweenAquifer) @@ -565,7 +567,7 @@ } // For lowest layers that intersect the phreatic line the bottom of these layers is kept - if (intersectionPoints.Count > 0 && outerLoop.Points.Any(p => Math.Abs(p.Z - soilProfile2D.GetSoilProfile1D(p.X).BottomLevel) < epsilon)) + if (intersectionPoints.Count > 0 && outerLoop.Points.Any(p => Math.Abs(p.Z - soilProfile2D.GetSoilProfile1D(p.X).BottomLevel) < toleranceAlmostEqual)) { var geometrySurface = new GeometrySurface(outerLoop); GeometryPointString bottom = geometrySurface.DetermineBottomGeometrySurface(); @@ -582,11 +584,11 @@ List splitLines = SplitLinesAtXCoordinates(xCoordinates, lines); for (var i = 0; i < xCoordinates.Length - 1; i++) { - List relevantLines = splitLines.FindAll(line => Math.Abs(line.BeginPoint.X - xCoordinates[i]) < epsilon && Math.Abs(line.BeginPoint.X - line.EndPoint.X) > 0); + List relevantLines = splitLines.FindAll(line => Math.Abs(line.BeginPoint.X - xCoordinates[i]) < toleranceAlmostEqual && Math.Abs(line.BeginPoint.X - line.EndPoint.X) > 0); double maxZBegin = relevantLines.Select(line => line.BeginPoint.Z).Max(); - List relevantLines2 = relevantLines.FindAll(line => Math.Abs(line.BeginPoint.Z - maxZBegin) < epsilon); + List relevantLines2 = relevantLines.FindAll(line => Math.Abs(line.BeginPoint.Z - maxZBegin) < toleranceAlmostEqual); double maxZEnd = relevantLines2.Select(line => line.EndPoint.Z).Max(); - Line relevantLine = relevantLines2.Find(line => Math.Abs(line.EndPoint.Z - maxZEnd) < epsilon); + Line relevantLine = relevantLines2.Find(line => Math.Abs(line.EndPoint.Z - maxZEnd) < toleranceAlmostEqual); waternetLine.Points.Add(new GeometryPoint(relevantLine.BeginPoint.X, relevantLine.BeginPoint.Z)); waternetLine.Points.Add(new GeometryPoint(relevantLine.EndPoint.X, relevantLine.EndPoint.Z)); } @@ -599,7 +601,7 @@ } waternetLine.SyncCalcPoints(); - LineHelper.RemoveDuplicatedPoints(waternetLine.CalcPoints, epsilon); + LineHelper.RemoveDuplicatedPoints(waternetLine.CalcPoints, toleranceAlmostEqual); waternetLine.RemoveUnnecessaryPoints(); waternetLine.SyncPoints(); @@ -608,8 +610,8 @@ private static bool HasAquiferAVerticalPartAtGivenX(LayerType layerType, double xCoordinate, SoilProfile2D soilProfile, int indexInBetweenAquifer) { - SoilProfile1D crossSectionLeft = soilProfile.GetSoilProfile1D(xCoordinate - epsilon); - SoilProfile1D crossSectionRight = soilProfile.GetSoilProfile1D(xCoordinate + epsilon); + SoilProfile1D crossSectionLeft = soilProfile.GetSoilProfile1D(xCoordinate - deviationX); + SoilProfile1D crossSectionRight = soilProfile.GetSoilProfile1D(xCoordinate + deviationX); if (crossSectionLeft != null && crossSectionRight != null) { SoilLayer1D currentAquiferLeft = GetSoilLayer1D(layerType, crossSectionLeft, indexInBetweenAquifer); @@ -714,7 +716,7 @@ foreach (GeometryPoint waternetLine1Point in from waternetLineOther in waternet.WaternetLineList.FindAll(w => w.Name != waternetLine1Name) from waternetLine1Point in waternetLine1.Points - where waternetLineOther.Points.Any(point => Math.Abs(point.Z - waternetLine1Point.Z) < epsilon) + where waternetLineOther.Points.Any(point => Math.Abs(point.Z - waternetLine1Point.Z) < toleranceAlmostEqual) select waternetLine1Point) { waternetLine1Point.Z += minimumDistance; @@ -728,7 +730,7 @@ var splitLines = new List(); foreach (Line line in lines) { - List xCoordinatesToBeAdded = xCoordinates.Where(xCoordinate => line.BeginPoint.X.IsLessThan(xCoordinate, epsilon) && xCoordinate.IsLessThan(line.EndPoint.X, epsilon)).ToList(); + List xCoordinatesToBeAdded = xCoordinates.Where(xCoordinate => line.BeginPoint.X.IsLessThan(xCoordinate, toleranceAlmostEqual) && xCoordinate.IsLessThan(line.EndPoint.X, toleranceAlmostEqual)).ToList(); if (xCoordinatesToBeAdded.Count > 0) {