Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/IssuesTests.cs
===================================================================
diff -u -r6245 -r6276
--- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/IssuesTests.cs (.../IssuesTests.cs) (revision 6245)
+++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/IssuesTests.cs (.../IssuesTests.cs) (revision 6276)
@@ -44,7 +44,7 @@
[TestCase("DWP_7", 6,9, 65, 57, 37, 1.264)]
[TestCase("DWP_8", 7,27, 117, 91, 46, 0.989)]
[TestCase("DWP_16", 15,26, 99, 74, 39, 0.849)]
- [TestCase("DWP_17", 16,19, 82, 64, 32, 1.256)]
+ [TestCase("DWP_17", 16,18, 79, 62, 31, 1.256)]
[TestCase("DWP_20", 19,24, 102, 79, 46, 1.523)]
public void TestGeometryAndResultForIssueWithDwpsFromTutorial(string location, int segmentIndex, int surfaceCount, int curveCount, int pointCount, int surfaceLinePointCount, double safetyFactor)
{
Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs
===================================================================
diff -u -r6274 -r6276
--- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs (.../MacroStabilityInwardsTests.cs) (revision 6274)
+++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs (.../MacroStabilityInwardsTests.cs) (revision 6276)
@@ -383,7 +383,7 @@
Output output = GeneralHelper.RunAfterInputValidation(inputString);
- Assert.That(output.Results.CalculationResults.First().StabilityDesignResults.SafetyFactor, Is.EqualTo(2.062).Within(tolerance));
+ Assert.That(output.Results.CalculationResults.First().StabilityDesignResults.SafetyFactor, Is.EqualTo(2.061).Within(tolerance));
}
[Test]
@@ -396,10 +396,10 @@
// Set UseNewMinDistanceDikeToeStartDitch(Use new allowed distance toe-ditch) = true (to force value to be written to XML)
//
// Parameters: CalcDir - StabilityModel - DesignStrategy - CalculationResult - FoS - EntryPointX - ExitPointX - DikeLength - ShoulderHeight - Iterations - ResultMessage
- [TestCase("TestStabInwardsBishopDesignSequential", "Bishop", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.467, 45.387, 2.799, 5, "")]
+ [TestCase("TestStabInwardsBishopDesignSequential", "Bishop", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.467, 45.385, 2.799, 5, "")]
[TestCase("TestStabInwardsBishopDesignOptimized", "Bishop", "OptimizedSlopeAndShoulderAdaption", CalculationResult.Succeeded, 1.483, 43.760, 3.889, 4, "")]
- [TestCase("TestStabInwardsUpliftVanDesignSequential", "UpliftVan", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.428, 47.737, 3.132, 6, "")]
- [TestCase("TestStabInwardsUpliftVanDesignOptimized", "UpliftVan", "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.342, 80.402, 4.545, 20, "After height adaption ditch does not fit inside surfaceline anymore.")]
+ [TestCase("TestStabInwardsUpliftVanDesignSequential", "UpliftVan", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.427, 47.735, 3.132, 6, "")]
+ [TestCase("TestStabInwardsUpliftVanDesignOptimized", "UpliftVan", "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.342, 80.417, 4.545, 20, "After height adaption ditch does not fit inside surfaceline anymore.")]
public void CanPerformStabilityInwardsDesignTutorialDesignWithAdaption_OneLocation(
string calcDir, string stabilityModel, string designStrategy,
CalculationResult calculationResult, double expectedSafetyFactor,
@@ -937,13 +937,13 @@
}
[Test, Category(Categories.Slow)]
- [TestCase("DWP_1", InputStabilityModelType.Bishop, "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.4, 1.493, 5)]
+ [TestCase("DWP_1", InputStabilityModelType.Bishop, "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.4, 1.492, 5)]
[TestCase("DWP_1", InputStabilityModelType.Bishop, "OptimizedSlopeAndShoulderAdaption", CalculationResult.Succeeded, 1.4, 1.545, 4)]
[TestCase("DWP_2", InputStabilityModelType.Bishop, "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.5, 1.546, 9)]
[TestCase("DWP_2", InputStabilityModelType.Bishop, "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.5, 1.176, 17, "Location 'DWP_2', subsoil scenario 'DWP_2.stix', design scenario '1': The calculation failed with error message 'The design was not successful. After height adaption ditch does not fit inside surfaceline anymore.'")]
[TestCase("DWP_13", InputStabilityModelType.Bishop, "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.5, 0.936, 23, "The characteristic points of the surfaceline are not ascending in X-direction.")]
[TestCase("DWP_10", InputStabilityModelType.Bishop, "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.5, 1.308, 16, "Location 'DWP_10', subsoil scenario 'DWP_10.stix', design scenario '3': The calculation failed with error message 'The design was not successful. After height adaption ditch does not fit inside surfaceline anymore.'")]
- [TestCase("DWP_1", InputStabilityModelType.BishopUpliftVan, "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.4, 1.406, 6)]
+ [TestCase("DWP_1", InputStabilityModelType.BishopUpliftVan, "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.4, 1.405, 6)]
public void GivenTutorialDesign_WhenSpecifiedLocationRunWithGeometryAdaption_ThenGivesExpectedResults(string locationId, InputStabilityModelType stabilityModelType, string designMethod,
CalculationResult calculationResult, double requiredSafetyFactor, double actualSafetyFactor, int iterationCount, string errorMessage = "", string firstStabilityMessage = "")
{
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs
===================================================================
diff -u -r6245 -r6276
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 6245)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 6276)
@@ -99,6 +99,7 @@
result.Geometry.Rebox();
result.Geometry.UpdateSurfaceLine();
RoundCoordinates(result.Geometry);
+ CorrectSurfacelinePointsForGeometryCoordinates(result.Geometry, surfaceLine);
return result;
}
@@ -136,9 +137,24 @@
if (surfaceLine != null)
{
surfaceLine.RoundPointsCoordinates(GeometryConstants.Accuracy);
+ CorrectSurfacelinePointsForGeometryCoordinates(geometry, surfaceLine);
}
}
+ private static void CorrectSurfacelinePointsForGeometryCoordinates(GeometryData geometry, GeometryPointString surfaceLine)
+ {
+ foreach (Point2D surfaceLinePoint in surfaceLine.Points)
+ {
+ var point = geometry.GetPointAtLocation(surfaceLinePoint, GeometryConstants.Accuracy * 1.5);
+ if (point != null)
+ {
+ surfaceLinePoint.X = point.X;
+ surfaceLinePoint.Z = point.Z;
+ }
+ }
+ surfaceLine.RemovePointsAtSameXLocation();
+ }
+
private static GeometryData CreateNewGeometryForSoilProfile2DByCombiningItsGeometryWithSurfaceLine(
GeometryPointString surfaceLine, GeometryData originalGeometry)
{
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryPointString.cs
===================================================================
diff -u -r6245 -r6276
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryPointString.cs (.../GeometryPointString.cs) (revision 6245)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryPointString.cs (.../GeometryPointString.cs) (revision 6276)
@@ -482,6 +482,31 @@
}
///
+ /// Removes points with same X coordinates and different Z
+ ///
+ public void RemovePointsAtSameXLocation()
+ {
+ var pointsToDelete = new List();
+ Point2D[] pointsAsArray = Points.ToArray();
+ for (var i = 0; i < pointsAsArray.Length; i++)
+ {
+ for (int j = i; j < pointsAsArray.Length; j++)
+ {
+ if (i != j && Math.Abs(pointsAsArray[i].X - pointsAsArray[j].X) < GeometryConstants.Accuracy &&
+ Math.Abs(pointsAsArray[i].Z - pointsAsArray[j].Z) > GeometryConstants.Accuracy && !pointsToDelete.Contains(pointsAsArray[j]))
+ {
+ pointsToDelete.Add(pointsAsArray[j]);
+ }
+ }
+ }
+
+ foreach (Point2D point in pointsToDelete)
+ {
+ Points.Remove(point);
+ }
+ }
+
+ ///
/// Finds all intersections in the XZ-plane the given list.
///
/// The list.
Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/CheckLargeResultsSets.cs
===================================================================
diff -u -r6274 -r6276
--- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/CheckLargeResultsSets.cs (.../CheckLargeResultsSets.cs) (revision 6274)
+++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/CheckLargeResultsSets.cs (.../CheckLargeResultsSets.cs) (revision 6276)
@@ -176,7 +176,7 @@
{
Assert.Multiple(() =>
{
- Assert.That(designResult.StabilityDesignResults.SafetyFactor, Is.EqualTo(8.437).Within(tolerance));
+ Assert.That(designResult.StabilityDesignResults.SafetyFactor, Is.EqualTo(8.438).Within(tolerance));
Assert.That(designResult.ScenarioName, Is.EqualTo("3"));
Assert.That(designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, Is.EqualTo(-1.03).Within(tol2Digits));
});
@@ -187,7 +187,7 @@
{
Assert.Multiple(() =>
{
- Assert.That(designResult.StabilityDesignResults.SafetyFactor, Is.EqualTo(8.437).Within(tolerance));
+ Assert.That(designResult.StabilityDesignResults.SafetyFactor, Is.EqualTo(8.438).Within(tolerance));
Assert.That(designResult.ScenarioName, Is.EqualTo("4"));
Assert.That(designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, Is.EqualTo(-0.57).Within(tol2Digits));
});
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs
===================================================================
diff -u -r6245 -r6276
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs (.../GeometryData.cs) (revision 6245)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs (.../GeometryData.cs) (revision 6276)
@@ -191,12 +191,13 @@
/// Finds the point at location.
///
/// Point location to be found.
+ /// Maximum allowed distance between the points
/// The point at the location; if not found returns null.
- public Point2D GetPointAtLocation(Point2D point2D)
+ public Point2D GetPointAtLocation(Point2D point2D, double distance = GeometryConstants.Accuracy)
{
for (var i = 0; i < Points.Count; i++)
{
- if (Routines2D.DetermineIfPointsCoincide(point2D.X, point2D.Z, Points[i].X, Points[i].Z, GeometryConstants.Accuracy))
+ if (Routines2D.DetermineIfPointsCoincide(point2D.X, point2D.Z, Points[i].X, Points[i].Z, distance))
{
return Points[i];
}
@@ -983,12 +984,16 @@
private void RemoveDoublesFromNewlyEffectedPoints()
{
var pointsToDelete = new List();
+ double minDist = GeometryConstants.Accuracy * 9;
Point2D[] pointsAsArray = NewlyEffectedPoints.ToArray();
for (var i = 0; i < pointsAsArray.Length; i++)
{
for (int j = i; j < pointsAsArray.Length; j++)
{
- if (i != j && pointsAsArray[i].LocationEquals(pointsAsArray[j]) && !pointsToDelete.Contains(pointsAsArray[j]))
+ if (i != j &&
+ (pointsAsArray[i].LocationEquals(pointsAsArray[j]) ||
+ Routines2D.Compute2DDistance(pointsAsArray[i].X, pointsAsArray[i].Z, pointsAsArray[j].X, pointsAsArray[j].Z) < minDist)
+ && !pointsToDelete.Contains(pointsAsArray[j]))
{
pointsToDelete.Add(pointsAsArray[j]);
}