Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometrySurface.cs
===================================================================
diff -u -r6245 -r6291
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometrySurface.cs (.../GeometrySurface.cs) (revision 6245)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometrySurface.cs (.../GeometrySurface.cs) (revision 6291)
@@ -67,6 +67,15 @@
/// All internal loops encompassed by .
///
public List InnerLoops { get; } = new List();
+
+ ///
+ /// Determines if there are any inner loops in this surface
+ ///
+ /// true when at least 1 inner loop is available else false
+ public bool HasInnerLoops()
+ {
+ return InnerLoops.Any();
+ }
///
/// Placeholder for the previous outer loop.
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/SoilProfile2DHelper.cs
===================================================================
diff -u -r6245 -r6291
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/SoilProfile2DHelper.cs (.../SoilProfile2DHelper.cs) (revision 6245)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/SoilProfile2DHelper.cs (.../SoilProfile2DHelper.cs) (revision 6291)
@@ -124,7 +124,8 @@
SoilProfile2D soilProfileWithoutInnerLoops = soilProfile.Clone();
var innerSurfaces = new List();
- foreach (GeometrySurface geometrySurface in soilProfileWithoutInnerLoops.Geometry.Surfaces.Where(surface => surface.InnerLoops.Count > 0))
+ IEnumerable geometrySurfaces = soilProfileWithoutInnerLoops.Geometry.Surfaces.Where(surface => surface.InnerLoops.Any());
+ foreach (GeometrySurface geometrySurface in geometrySurfaces)
{
foreach (GeometryLoop innerLoop in geometrySurface.InnerLoops)
{
@@ -141,7 +142,8 @@
innerSurfaces.Clear();
var innerSoiLayers2D = new List();
- foreach (SoilLayer2D surface in soilProfileWithoutInnerLoops.Surfaces.Where(surface => surface.GeometrySurface.InnerLoops.Count > 0))
+ IEnumerable surfaces = soilProfileWithoutInnerLoops.Surfaces.Where(surface => surface.GeometrySurface.InnerLoops.Any());
+ foreach (SoilLayer2D surface in surfaces)
{
foreach (GeometryLoop innerLoop in surface.GeometrySurface.InnerLoops)
{
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs
===================================================================
diff -u -r6276 -r6291
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 6276)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 6291)
@@ -99,7 +99,6 @@
result.Geometry.Rebox();
result.Geometry.UpdateSurfaceLine();
RoundCoordinates(result.Geometry);
- CorrectSurfacelinePointsForGeometryCoordinates(result.Geometry, surfaceLine);
return result;
}
@@ -137,24 +136,9 @@
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 -r6276 -r6291
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryPointString.cs (.../GeometryPointString.cs) (revision 6276)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryPointString.cs (.../GeometryPointString.cs) (revision 6291)
@@ -482,31 +482,6 @@
}
///
- /// 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/IssuesTests.cs
===================================================================
diff -u -r6276 -r6291
--- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/IssuesTests.cs (.../IssuesTests.cs) (revision 6276)
+++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/IssuesTests.cs (.../IssuesTests.cs) (revision 6291)
@@ -19,12 +19,8 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
-using System.Globalization;
using System.IO;
-using System.Linq;
-using System.Threading;
-using Deltares.DamEngine.Data.Geometry;
-using Deltares.DamEngine.Data.GeometryExport;
+using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon;
using Deltares.DamEngine.Data.Geotechnics;
using Deltares.DamEngine.Interface;
using Deltares.DamEngine.TestHelpers;
@@ -44,7 +40,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,18, 79, 62, 31, 1.256)]
+ [TestCase("DWP_17", 16,19, 82, 64, 32, 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)
{
@@ -63,8 +59,7 @@
string soilName = engineInterface.DamProjectData.Dike.Locations[0].DikeEmbankmentMaterial;
Soil soil = engineInterface.DamProjectData.Dike.SoilList.GetSoilByName(soilName);
// To be able to check the geometry, create it here.
- SoilProfile2D soilProfile2D = SoilProfile2DSurfaceLineHelper.CombineSurfaceLineWithSoilProfile2D(surfaceLine.Geometry,
- engineInterface.DamProjectData.Segments[segmentIndex].SoilProfileProbabilities[0].SoilProfile2D, soil);
+ SoilProfile2D soilProfile2D = MacroStabilityCommonHelper.CombineSoilProfileWithSurfaceLine(engineInterface.DamProjectData.Segments[segmentIndex].SoilProfileProbabilities[0], surfaceLine, soil);
// For debugging purposes
//geometry = soilProfile2D.Geometry;
//GeometryExporter.ExportToFile(geometry, GeometryExporter.VisualizationFolder + location + "GeometryEnd.txt");
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityOutwards/MacroStabilityOutwardsKernelWrapper.cs
===================================================================
diff -u -r6264 -r6291
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityOutwards/MacroStabilityOutwardsKernelWrapper.cs (.../MacroStabilityOutwardsKernelWrapper.cs) (revision 6264)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityOutwards/MacroStabilityOutwardsKernelWrapper.cs (.../MacroStabilityOutwardsKernelWrapper.cs) (revision 6291)
@@ -157,7 +157,7 @@
///
public int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages)
{
- return macroStabilityCommonHelper.Validate(kernelDataInput, kernelDataOutput, out messages);
+ return MacroStabilityCommonHelper.Validate(kernelDataInput, kernelDataOutput, out messages);
}
///
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs
===================================================================
diff -u -r6191 -r6291
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs (.../DesignCalculator.cs) (revision 6191)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs (.../DesignCalculator.cs) (revision 6291)
@@ -292,9 +292,8 @@
damKernelInput, calculationMessages, designResults);
break;
case AnalysisType.NoAdaption:
- DesignCalculatorSingle calculatorSingle = new DesignCalculatorSingle();
- calculatorSingle.PerformSingleCalculation(kernelWrapper, kernelDataInput, kernelDataOutput,
- damKernelInput, calculationMessages, designResults);
+ DesignCalculatorSingle.PerformSingleCalculation(kernelWrapper, kernelDataInput, kernelDataOutput,
+ damKernelInput, calculationMessages, designResults);
break;
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs
===================================================================
diff -u -r6264 -r6291
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 6264)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 6291)
@@ -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.KernelWrappers.Common;
using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces;
@@ -44,6 +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 Soil = Deltares.DamEngine.Data.Geotechnics.Soil;
namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon;
@@ -297,7 +299,7 @@
///
/// Zero when there are no errors, one when there are errors that prevent a calculation
///
- public int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages)
+ public static int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages)
{
var macroStabilityKernelDataInput = (MacroStabilityKernelDataInput) kernelDataInput;
messages = new List();
@@ -379,6 +381,8 @@
messages = new List();
try
{
+ //string helperFile = fileName.Replace(".skx", ".testIn.xml");
+ //calculator.FileName = helperFile;
MacroStability.CSharpWrapper.Output.MacroStabilityOutput macroStabilityOutputKernel = calculator.Calculate();
string outputAsXml = calculator.KernelOutputXml;
string outputFileName = fileName.Replace(".skx", ".out.xml");
@@ -463,8 +467,58 @@
ValidateForCombineSoilProfile2DWithSurfaceLine(subSoilScenario, surfaceLine2, dikeEmbankmentSoil);
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)
+ {
+ var 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
+ ///
+ private static void RemovePointsAtSameXLocation(SurfaceLine2 surfaceLine)
+ {
+ var pointsToDelete = new List();
+ CharacteristicPoint[] pointsAsArray = surfaceLine.CharacteristicPoints.ToArray();
+ for (var i = 0; i < pointsAsArray.Length; i++)
+ {
+ for (int j = i; j < pointsAsArray.Length; j++)
+ {
+ 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)
+ {
+ pointsToDelete.Add(pointsAsArray[j]);
+ }
+ else
+ {
+ if (pointsAsArray[i].CharacteristicPointType == CharacteristicPointType.None)
+ {
+ pointsToDelete.Add(pointsAsArray[i]);
+ }
+ }
+ }
+ }
+ }
+ foreach (CharacteristicPoint point in pointsToDelete)
+ {
+ surfaceLine.CharacteristicPoints.Remove(point);
+ }
+ }
+
private static void ValidateForCombineSoilProfile2DWithSurfaceLine(SoilGeometryProbability subSoilScenario, SurfaceLine2 surfaceLine2, Soil dikeEmbankmentSoil)
{
ThrowWhenSoilProfile2DIsNull(subSoilScenario);
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorSingle.cs
===================================================================
diff -u -r6191 -r6291
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorSingle.cs (.../DesignCalculatorSingle.cs) (revision 6191)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorSingle.cs (.../DesignCalculatorSingle.cs) (revision 6291)
@@ -47,7 +47,7 @@
/// The design scenario.
/// The calculation messages.
/// The design calculations.
- public void PerformSingleCalculation(IKernelWrapper kernelWrapper, IKernelDataInput kernelDataInput,
+ public static void PerformSingleCalculation(IKernelWrapper kernelWrapper, IKernelDataInput kernelDataInput,
IKernelDataOutput kernelDataOutput, DamKernelInput damKernelInput,
List calculationMessages, List designCalculations)
{
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs
===================================================================
diff -u -r6264 -r6291
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 6264)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 6291)
@@ -206,7 +206,7 @@
///
public int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages)
{
- return macroStabilityCommonHelper.Validate(kernelDataInput, kernelDataOutput, out messages);
+ return MacroStabilityCommonHelper.Validate(kernelDataInput, kernelDataOutput, out messages);
}
///