Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.Designer.cs
===================================================================
diff -u -r2041 -r2050
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 2041)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 2050)
@@ -425,6 +425,24 @@
}
///
+ /// Looks up a localized string similar to No pl-lines object defined.
+ ///
+ internal static string PlLinesToWaternetConverter_NoPlLinesDefined {
+ get {
+ return ResourceManager.GetString("PlLinesToWaternetConverter_NoPlLinesDefined", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to No 1D soil profile defined.
+ ///
+ internal static string PlLinesToWaternetConverter_NoSoilProfile1dDefined {
+ get {
+ return ResourceManager.GetString("PlLinesToWaternetConverter_NoSoilProfile1dDefined", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to Adapting the slope of the dike failed. Probably the slope is too steep or too shallow..
///
internal static string SlopeErrorNoIntersection {
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.nl-NL.resx
===================================================================
diff -u -r2041 -r2050
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.nl-NL.resx (.../Resources.nl-NL.resx) (revision 2041)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.nl-NL.resx (.../Resources.nl-NL.resx) (revision 2050)
@@ -297,4 +297,10 @@
Geen ondergrond profielen beschikbaar voor locatie '{0}'
+
+ Geen object voor pn-lijnen gedefinieerd
+
+
+ Geen 1D ondergrond profiel gedefinieerd
+
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/DamMacroStabilityTestHelper.cs
===================================================================
diff -u -r1970 -r2050
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/DamMacroStabilityTestHelper.cs (.../DamMacroStabilityTestHelper.cs) (revision 1970)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/DamMacroStabilityTestHelper.cs (.../DamMacroStabilityTestHelper.cs) (revision 2050)
@@ -224,5 +224,35 @@
return soilProfile2D;
}
+ ///
+ /// Creates a 1D soil profile for the tests.
+ ///
+ ///
+ public static SoilProfile1D CreateSoilProfile1D()
+ {
+ SoilProfile1D soilProfile1D = new SoilProfile1D();
+ soilProfile1D.BottomLevel = -10;
+
+ var layer = new SoilLayer1D
+ {
+ Name = "Layer 1",
+ Soil = new Soil("OA", 17.70, 17.70)
+ };
+ layer.TopLevel = 1;
+ layer.IsAquifer = true;
+ soilProfile1D.Layers.Add(layer);
+
+ layer = new SoilLayer1D
+ {
+ Name = "Layer 2",
+ Soil = new Soil("LM", 18.00, 18.00)
+ };
+ layer.TopLevel = -10;
+ layer.IsAquifer = true;
+ soilProfile1D.Layers.Add(layer);
+
+ return soilProfile1D;
+ }
+
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj
===================================================================
diff -u -r2044 -r2050
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 2044)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 2050)
@@ -87,6 +87,7 @@
+
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs
===================================================================
diff -u
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs (revision 0)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs (revision 2050)
@@ -0,0 +1,295 @@
+using System.Data;
+using Deltares.DamEngine.Data.General;
+using Deltares.DamEngine.Data.General.PlLines;
+using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon;
+using Deltares.DamEngine.Data.Geotechnics;
+using NUnit.Framework;
+
+namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.MacroStabilityCommon
+{
+ public class PlLinesToWaternetConverterTests
+ {
+ [Test]
+ public void TestConvertPlLinesToWaternet()
+ {
+ const double cDif = 0.0001;
+ var plLines = CreatePlLinesForTest();
+
+ var soilProfile1D = CreateSoilProfile1DForTest();
+ Assert.AreEqual(-2.111, soilProfile1D.InBetweenAquiferLayer.TopLevel, cDif);
+ Assert.AreEqual(-6.111, soilProfile1D.BottomAquiferLayer.TopLevel, cDif);
+
+ const double penetrationLength = 2.1;
+ const double left = 0;
+ const double right = 100;
+ var waternet = PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, soilProfile1D, penetrationLength, left, right);
+
+ // Pl 1 is only the phreatic line, a headline or waternetline does not have to be created
+ // Pl 2 gets waternetline to level of BottomAquiferLayer.TopLevel + penetrationLength
+ // Pl 3 gets waternetline to level of InBetweenAquiferLayer.TopLevel
+ // Pl 4 gets waternetline to level of BottomAquiferLayer.TopLevel
+
+ // ex[ected phreatic line from pl 1
+ Assert.AreEqual(3, waternet.PhreaticLine.Points.Count);
+ Assert.AreEqual(0, waternet.PhreaticLine.Points[0].X, cDif);
+ Assert.AreEqual(0, waternet.PhreaticLine.Points[0].Z, cDif);
+ Assert.AreEqual(50, waternet.PhreaticLine.Points[1].X, cDif);
+ Assert.AreEqual(1, waternet.PhreaticLine.Points[1].Z, cDif);
+ Assert.AreEqual(100, waternet.PhreaticLine.Points[2].X, cDif);
+ Assert.AreEqual(1, waternet.PhreaticLine.Points[2].Z, cDif);
+ // expected head lines from pl 2, 3 and 4
+ Assert.AreEqual(3, waternet.HeadLineList.Count);
+ Assert.AreEqual(2, waternet.HeadLineList[0].Points.Count);
+ Assert.AreEqual(3, waternet.HeadLineList[1].Points.Count);
+ Assert.AreEqual(2, waternet.HeadLineList[2].Points.Count);
+ // check the points of first head line that represents pl 2
+ Assert.AreEqual(0, waternet.HeadLineList[0].Points[0].X, cDif);
+ Assert.AreEqual(0, waternet.HeadLineList[0].Points[0].Z, cDif);
+ Assert.AreEqual(100, waternet.HeadLineList[0].Points[1].X, cDif);
+ Assert.AreEqual(-1, waternet.HeadLineList[0].Points[1].Z, cDif);
+ // expected waternet lines from pl 2, 3 and 4
+ Assert.AreEqual(3, waternet.WaternetLineList.Count);
+ // expected waternet line 0 is connected to pl2 with level -6.111 + 2.1 = -4.011
+ Assert.AreEqual(waternet.HeadLineList[0], waternet.WaternetLineList[0].HeadLine);
+ Assert.AreEqual(0, waternet.WaternetLineList[0].Points[0].X, cDif);
+ Assert.AreEqual(-4.011, waternet.WaternetLineList[0].Points[0].Z, cDif);
+ Assert.AreEqual(100, waternet.WaternetLineList[0].Points[1].X, cDif);
+ Assert.AreEqual(-4.011, waternet.WaternetLineList[0].Points[1].Z, cDif);
+ // expected waternet line 1 is connected to pl3 with level -2.111
+ Assert.AreEqual(waternet.HeadLineList[1], waternet.WaternetLineList[1].HeadLine);
+ Assert.AreEqual(-2.111, waternet.WaternetLineList[1].Points[0].Z, cDif);
+ // expected waternet line 2 is connected to pl4 with level -6.111
+ Assert.AreEqual(waternet.HeadLineList[2], waternet.WaternetLineList[2].HeadLine);
+ Assert.AreEqual(-6.111, waternet.WaternetLineList[2].Points[0].Z, cDif);
+ }
+
+ [Test]
+ public void TestConvertPlLinesToWaternetWhenNoHeadLinesExpected()
+ {
+ var plLines = CreatePlLinesForTest();
+ var soilProfile1D = CreateSoilProfile1DForTest();
+ var waternet = PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, soilProfile1D, 0, 0, 0);
+ // head lines
+ Assert.AreEqual(3, waternet.HeadLineList.Count);
+ Assert.AreEqual(2, waternet.HeadLineList[0].Points.Count);
+ Assert.AreEqual(3, waternet.HeadLineList[1].Points.Count);
+ Assert.AreEqual(2, waternet.HeadLineList[2].Points.Count);
+ // phreatic line
+ Assert.AreEqual(3, waternet.PhreaticLine.Points.Count);
+
+ // check that no headline are added when Pl2, Pl3 or Pl4 does not exist or has no points
+ plLines.Lines[PlLineType.Pl3] = null;
+ plLines.Lines[PlLineType.Pl4].Points.Clear();
+ waternet = PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, soilProfile1D, 0, 0, 0);
+ // head lines
+ Assert.AreEqual(1, waternet.HeadLineList.Count);
+ Assert.AreEqual(2, waternet.HeadLineList[0].Points.Count);
+ // phreatic line
+ Assert.AreEqual(3, waternet.PhreaticLine.Points.Count);
+ }
+
+ [Test]
+ public void TestConvertPlLinesToWaternetWhenNoWaternetLinesExpected()
+ {
+ const double cDif = 0.0001;
+ var plLines = CreatePlLinesForTest();
+ var soilProfile1D = CreateSoilProfile1DForTest();
+ const double penetrationLength = 2.1;
+ var waternet = PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, soilProfile1D, penetrationLength, 0, 0);
+ Assert.AreEqual(3, waternet.HeadLineList.Count);
+ Assert.AreEqual(3, waternet.WaternetLineList.Count);
+
+ // check that no waternetlines are added for pl3 when InBetweenAquiferLayer is null
+ soilProfile1D = CreateSoilProfile1DWith1AquiferForTest();
+ waternet = PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, soilProfile1D, penetrationLength, 0, 0);
+ Assert.AreEqual(3, waternet.HeadLineList.Count);
+ Assert.AreEqual(2, waternet.WaternetLineList.Count);
+ // expected waternet line 0 is connected to pl2 with level -6.111 + 2.1 = -4.011
+ Assert.AreEqual(waternet.HeadLineList[0], waternet.WaternetLineList[0].HeadLine);
+ Assert.AreEqual(-4.011, waternet.WaternetLineList[0].Points[0].Z, cDif);
+ // expected waternet line 1 is connected to pl4 with level -6.111
+ Assert.AreEqual(waternet.HeadLineList[2], waternet.WaternetLineList[1].HeadLine);
+ Assert.AreEqual(-6.111, waternet.WaternetLineList[1].Points[0].Z, cDif);
+
+ // check that no waternetlines are added for pl2, pl3 and pl4 when BottomAquiferLayer is null
+ soilProfile1D = CreateSoilProfile1DWithoutAquifersForTest();
+ waternet = PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, soilProfile1D, penetrationLength, 0, 0);
+ Assert.AreEqual(3, waternet.HeadLineList.Count);
+ Assert.AreEqual(0, waternet.WaternetLineList.Count);
+ }
+
+ [Test]
+ public void TestConvertLevelToWaternetLine()
+ {
+ const double cDif = 0.0001;
+
+ const double level = 1.234;
+ const double left = -50.111;
+ const double right = 50.123;
+ var waternetLine = PlLinesToWaternetConverter.ConvertLevelToWaternetLine(level, left, right);
+
+ Assert.AreEqual(2, waternetLine.Points.Count);
+ Assert.AreEqual(-50.111, waternetLine.Points[0].X, cDif);
+ Assert.AreEqual(1.234, waternetLine.Points[0].Z, cDif);
+ Assert.AreEqual(50.123, waternetLine.Points[1].X, cDif);
+ Assert.AreEqual(1.234, waternetLine.Points[1].Z, cDif);
+ }
+
+ [Test]
+ public void TestConvertPlLineToHeadLine()
+ {
+ const double cDif = 0.0001;
+
+ var plLines = new PlLines();
+ Assert.AreEqual(4, plLines.PlLineCount);
+ var plLine = plLines.Lines[PlLineType.Pl2];
+ plLine.Points.Add(new PlLinePoint(-1.234, 4.321));
+ plLine.Points.Add(new PlLinePoint(100, 1));
+ var headLine = PlLinesToWaternetConverter.ConvertPlLineToHeadLine(plLine);
+
+ Assert.AreEqual(2, headLine.Points.Count);
+ Assert.AreEqual(-1.234, headLine.Points[0].X, cDif);
+ Assert.AreEqual(4.321, headLine.Points[0].Z, cDif);
+ Assert.AreEqual(100, headLine.Points[1].X, cDif);
+ Assert.AreEqual(1, headLine.Points[1].Z, cDif);
+ }
+
+ [Test]
+ [ExpectedException(typeof(NoNullAllowedException), ExpectedMessage = "Geen 1D ondergrond profiel gedefinieerd")]
+ [SetUICulture("nl-NL")]
+ public void TestLanguageNLThrowsExceptionWhenSoilProfile1DIsNull()
+ {
+ var plLines = new PlLines();
+ PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, null, 0, 0, 0);
+ }
+
+ [Test]
+ [ExpectedException(typeof(NoNullAllowedException), ExpectedMessage = "Geen object voor pn-lijnen gedefinieerd")]
+ [SetUICulture("nl-NL")]
+ public void TestLanguageNLThrowsExceptionWhenPlLinesIsNull()
+ {
+ var soilProfile1D = new SoilProfile1D();
+ PlLinesToWaternetConverter.ConvertPlLineToWaternet(null, soilProfile1D, 0, 0, 0);
+ }
+
+ private PlLines CreatePlLinesForTest()
+ {
+ var plLines = new PlLines();
+ // pl 1 is phreatic line
+ var plLine = plLines.Lines[PlLineType.Pl1];
+ plLine.IsPhreatic = true;
+ plLine.Points.Add(new PlLinePoint(0, 0));
+ plLine.Points.Add(new PlLinePoint(50, 1));
+ plLine.Points.Add(new PlLinePoint(100, 1));
+ // pl 2 first equal to point of pl 1
+ plLine = plLines.Lines[PlLineType.Pl2];
+ plLine.Points.Add(new PlLinePoint(0, 0));
+ plLine.Points.Add(new PlLinePoint(100, -1));
+ // pl 3
+ plLine = plLines.Lines[PlLineType.Pl3];
+ plLine.Points.Add(new PlLinePoint(0, 1));
+ plLine.Points.Add(new PlLinePoint(50, 0));
+ plLine.Points.Add(new PlLinePoint(100, -1));
+ // pl 4
+ plLine = plLines.Lines[PlLineType.Pl4];
+ plLine.Points.Add(new PlLinePoint(0, -5));
+ plLine.Points.Add(new PlLinePoint(100, -5));
+
+ return plLines;
+ }
+
+ private SoilProfile1D CreateSoilProfile1DForTest()
+ {
+ var soilProfile1D = new SoilProfile1D();
+ soilProfile1D.BottomLevel = -30.0;
+
+ SoilLayer1D layer = new SoilLayer1D();
+ layer.Name = "L1a";
+ layer.TopLevel = 1.212;
+ layer.IsAquifer = true; // aquifer at top
+ soilProfile1D.Layers.Add(layer);
+ layer = new SoilLayer1D();
+ layer.Name = "L1b";
+ layer.TopLevel = 1.212;
+ layer.IsAquifer = false;
+ soilProfile1D.Layers.Add(layer);
+ layer = new SoilLayer1D();
+ layer.Name = "L2a";
+ layer.TopLevel = -2.111; // top of in-between aquifer
+ layer.IsAquifer = true;
+ soilProfile1D.Layers.Add(layer);
+ layer = new SoilLayer1D();
+ layer.Name = "L2b";
+ layer.TopLevel = -2.151;
+ layer.IsAquifer = true;
+ soilProfile1D.Layers.Add(layer);
+ layer = new SoilLayer1D();
+ layer.Name = "L3";
+ layer.TopLevel = -3.373;
+ layer.IsAquifer = false;
+ soilProfile1D.Layers.Add(layer);
+ layer = new SoilLayer1D();
+ layer.Name = "L4";
+ layer.TopLevel = -4.151;
+ layer.IsAquifer = true;
+ soilProfile1D.Layers.Add(layer);
+ layer = new SoilLayer1D();
+ layer.Name = "L5";
+ layer.TopLevel = -5.373;
+ layer.IsAquifer = false;
+ soilProfile1D.Layers.Add(layer);
+ layer = new SoilLayer1D();
+ layer.Name = "L6a";
+ layer.TopLevel = -6.111; // top of bottom aquifer
+ layer.IsAquifer = true;
+ soilProfile1D.Layers.Add(layer);
+ layer = new SoilLayer1D();
+ layer.Name = "L6b";
+ layer.TopLevel = -6.151;
+ layer.IsAquifer = true;
+ soilProfile1D.Layers.Add(layer);
+ layer = new SoilLayer1D();
+ layer.Name = "L7";
+ layer.TopLevel = -7.373;
+ layer.IsAquifer = false;
+ soilProfile1D.Layers.Add(layer);
+
+ return soilProfile1D;
+ }
+
+ private SoilProfile1D CreateSoilProfile1DWith1AquiferForTest()
+ {
+ var soilProfile1D = new SoilProfile1D();
+ soilProfile1D.BottomLevel = -30.0;
+
+ SoilLayer1D layer = new SoilLayer1D();
+ layer = new SoilLayer1D();
+ layer.Name = "L1b";
+ layer.TopLevel = 1.212;
+ layer.IsAquifer = false;
+ soilProfile1D.Layers.Add(layer);
+ layer = new SoilLayer1D();
+ layer.Name = "L6a";
+ layer.TopLevel = -6.111; // top of bottom aquifer
+ layer.IsAquifer = true;
+ soilProfile1D.Layers.Add(layer);
+
+ return soilProfile1D;
+ }
+
+ private SoilProfile1D CreateSoilProfile1DWithoutAquifersForTest()
+ {
+ var soilProfile1D = new SoilProfile1D();
+ soilProfile1D.BottomLevel = -30.0;
+
+ SoilLayer1D layer = new SoilLayer1D();
+ layer = new SoilLayer1D();
+ layer.Name = "L1b";
+ layer.TopLevel = 1.212;
+ layer.IsAquifer = false;
+ soilProfile1D.Layers.Add(layer);
+
+ return soilProfile1D;
+ }
+ }
+}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs
===================================================================
diff -u
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (revision 0)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (revision 2050)
@@ -0,0 +1,135 @@
+using System.Data;
+using Deltares.DamEngine.Calculators.Properties;
+using Deltares.DamEngine.Data.General;
+using Deltares.DamEngine.Data.General.PlLines;
+using Deltares.DamEngine.Data.Geometry;
+using Deltares.DamEngine.Data.Geotechnics;
+
+namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon
+{
+ public static class PlLinesToWaternetConverter
+ {
+ ///
+ /// Converts the pl lines to a waternet.
+ ///
+ /// The pl lines.
+ /// The 1D soil profile.
+ /// Length of the penetration.
+ /// Left side of the 2D profile.
+ /// Right side of the 2D profile.
+ ///
+ public static Waternet ConvertPlLineToWaternet(PlLines plLines, SoilProfile1D soilProfile1D, double penetrationLength, double xLeft, double xRight)
+ {
+ ThrowWhenPlLinesIsNull(plLines);
+ ThrowWhenSoilProfile1DIsNull(soilProfile1D);
+ var waternet = new Waternet
+ {
+ IsGenerated = false,
+ };
+
+ var plLine1 = plLines.Lines[PlLineType.Pl1];
+ waternet.PhreaticLine = new PhreaticLine();
+ foreach (var plLinePoint in plLine1.Points)
+ {
+ waternet.PhreaticLine.Points.Add(plLinePoint);
+ }
+
+ var plLine = plLines.Lines[PlLineType.Pl2];
+ var headLine = ConvertPlLineToHeadLine(plLine);
+ if (headLine != null)
+ {
+ waternet.HeadLineList.Add(headLine);
+ if (soilProfile1D.BottomAquiferLayer != null)
+ {
+ var level = soilProfile1D.BottomAquiferLayer.TopLevel + penetrationLength;
+ var waternetLine = ConvertLevelToWaternetLine(level, xLeft, xRight);
+ waternetLine.HeadLine = headLine;
+ waternet.WaternetLineList.Add(waternetLine);
+ }
+ }
+
+ plLine = plLines.Lines[PlLineType.Pl3];
+ headLine = ConvertPlLineToHeadLine(plLine);
+ if (headLine != null)
+ {
+ waternet.HeadLineList.Add(headLine);
+ if (soilProfile1D.InBetweenAquiferLayer != null)
+ {
+ var level = soilProfile1D.InBetweenAquiferLayer.TopLevel;
+ var waternetLine = ConvertLevelToWaternetLine(level, xLeft, xRight);
+ waternetLine.HeadLine = headLine;
+ waternet.WaternetLineList.Add(waternetLine);
+ }
+ }
+
+ plLine = plLines.Lines[PlLineType.Pl4];
+ headLine = ConvertPlLineToHeadLine(plLine);
+ if (headLine != null)
+ {
+ waternet.HeadLineList.Add(headLine);
+ if (soilProfile1D.BottomAquiferLayer != null)
+ {
+ var level = soilProfile1D.BottomAquiferLayer.TopLevel;
+ var waternetLine = ConvertLevelToWaternetLine(level, xLeft, xRight);
+ waternetLine.HeadLine = headLine;
+ waternet.WaternetLineList.Add(waternetLine);
+ }
+ }
+
+ return waternet;
+ }
+
+ internal static HeadLine ConvertPlLineToHeadLine(PlLine plLine)
+ {
+ HeadLine headLine = null;
+ if (plLine != null)
+ {
+ if (plLine.Points.Count > 0)
+ {
+ headLine = new HeadLine();
+ foreach (var plLinePoint in plLine.Points)
+ {
+ headLine.Points.Add(plLinePoint);
+ }
+ }
+ }
+ return headLine;
+ }
+
+ internal static WaternetLine ConvertLevelToWaternetLine(double level, double xLeft, double xRight)
+ {
+ WaternetLine waternetLine = new WaternetLine();
+ waternetLine.Points.Add(new GeometryPoint(xLeft, level));
+ waternetLine.Points.Add(new GeometryPoint(xRight, level));
+ return waternetLine;
+ }
+
+ ///
+ /// Throws when the 1D soil profile is not assigned.
+ ///
+ /// The 1D soil profile.
+ ///
+ public static void ThrowWhenSoilProfile1DIsNull(SoilProfile1D soilProfile1D)
+ {
+ if (soilProfile1D == null)
+ {
+ throw new NoNullAllowedException(Resources.PlLinesToWaternetConverter_NoSoilProfile1dDefined);
+ }
+ }
+
+ ///
+ /// Throws when the pl lines object is not assigned.
+ ///
+ /// The pl lines.
+ ///
+ public static void ThrowWhenPlLinesIsNull(PlLines plLines)
+ {
+ if (plLines == null)
+ {
+ throw new NoNullAllowedException(Resources.PlLinesToWaternetConverter_NoPlLinesDefined);
+ }
+ }
+
+
+ }
+}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.resx
===================================================================
diff -u -r2041 -r2050
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.resx (.../Resources.resx) (revision 2041)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.resx (.../Resources.resx) (revision 2050)
@@ -300,4 +300,10 @@
No soil profiles available for location '{0}'
+
+ No 1D soil profile defined
+
+
+ No pl-lines object defined
+
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs
===================================================================
diff -u -r2038 -r2050
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 2038)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 2050)
@@ -362,6 +362,8 @@
subSoilScenario.SoilProfile2D = DamMacroStabilityTestHelper.CreateSoilProfile2D();
subSoilScenario.SegmentFailureMechanismType = FailureMechanismSystemType.StabilityInside;
+ subSoilScenario.SoilProfile1D = DamMacroStabilityTestHelper.CreateSoilProfile1D();
+
var damKernelInput = new DamKernelInput();
damKernelInput.Location = location;
damKernelInput.SubSoilScenario = subSoilScenario;
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/Deltares.DamEngine.Calculators.csproj
===================================================================
diff -u -r2044 -r2050
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/Deltares.DamEngine.Calculators.csproj (.../Deltares.DamEngine.Calculators.csproj) (revision 2044)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/Deltares.DamEngine.Calculators.csproj (.../Deltares.DamEngine.Calculators.csproj) (revision 2050)
@@ -103,6 +103,7 @@
+
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs
===================================================================
diff -u -r2038 -r2050
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 2038)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 2050)
@@ -27,13 +27,15 @@
using Deltares.DamEngine.Calculators.KernelWrappers.Common;
using Deltares.DamEngine.Calculators.KernelWrappers.DamMacroStabilityCommon;
using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces;
+using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon;
using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo;
using Deltares.DamEngine.Calculators.Properties;
using Deltares.DamEngine.Data.Design;
using Deltares.DamEngine.Data.General;
using Deltares.DamEngine.Data.General.Results;
using Deltares.DamEngine.Data.Geotechnics;
using Deltares.DamEngine.Data.Standard.Calculation;
+using Deltares.MacroStability.Kernel;
using Deltares.WTIStability.Calculation.Wrapper;
using GeometryPoint = Deltares.DamEngine.Data.Geometry.GeometryPoint;
using LogMessage = Deltares.DamEngine.Data.Standard.Logging.LogMessage;
@@ -82,11 +84,36 @@
try
{
// Determine whether there is uplift
- var upliftSituation = UpliftHelper.DetermineStabilityUplift(damKernelInput, false);
+ UpliftSituation upliftSituation;
+ const bool useRivelLevelLow = false;
+ var plLines = UpliftHelper.DeterminePlLinesForStability(damKernelInput, useRivelLevelLow, out upliftSituation);
+ upliftSituation.IsUplift = UpliftHelper.DetermineIsUplift(plLines, damKernelInput.Location, damKernelInput.SubSoilScenario);
macroStabilityOutput.UpliftSituation = upliftSituation;
if (upliftSituation.IsUplift)
{
// ToDo MWDAM-1356: Not clear yet what parts are required for input.
+ var left = 0.0;// ToDo MWDAM-1356: first point of surfaceline
+ var right = 100.0;// ToDo MWDAM-1356: last point of surfaceline
+ var penetrationLength = damKernelInput.Location.ModelParametersForPlLines.PenetrationLength;
+ var waternet = PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, damKernelInput.SubSoilScenario.SoilProfile1D,
+ penetrationLength, left, right);
+
+ FillWtiKernelData fillWtiKernelData = new FillWtiKernelData()
+ {
+ SoilList = damKernelInput.Location.SoilList,
+ FailureMechanismParametersMStab = this.FailureMechanismParametersMStab,
+ Location = damKernelInput.Location,
+ // ToDo MWDAM-1373/1374: fill SoilProfile2D
+ // SoilProfile2D = expectedSoilProfile2D,
+ SurfaceLine2 = damKernelInput.Location.SurfaceLine,
+ Waternet = waternet,
+ // ToDo MWDAM-1399: add data for calculation grid Uplift Van
+ // UpliftVanCalculationGrid = expectedUpliftVanCalculationGrid
+ };
+
+ // ToDo MWDAM-1356: following line is not working yet, first all necessary input must be declared
+ //KernelModel expectedKernelModel = fillWtiKernelData.CreateKernelModel();
+
var xmlInput = CreateXmlInput(macroStabilityInput, FailureMechanismParametersMStab.EmbankmentDesignParameters);
return PrepareKernel(xmlInput);
}