Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs
===================================================================
diff -u -r5932 -r5941
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 5932)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 5941)
@@ -432,14 +432,14 @@
ThrowWhenSoilProfile2DIsNull(damKernelInput.SubSoilScenario);
- if (damKernelInput.SubSoilScenario.SoilProfile1D != null)
- {
- SurfaceLine2 surfaceLine = damKernelInput.Location.SurfaceLine;
+ SurfaceLine2 surfaceLine = damKernelInput.Location.SurfaceLine;
+ if (damKernelInput.SubSoilScenario.SoilProfile1D != null) {
+
return PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, damKernelInput.SubSoilScenario.SoilProfile1D, surfaceLine, penetrationLength, pressureType);
}
SoilProfile2D soilProfile2D = damKernelInput.SubSoilScenario.SoilProfile2D;
- return PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile2D, penetrationLength, pressureType);
+ return PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile2D, surfaceLine, penetrationLength, pressureType);
}
///
Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs
===================================================================
diff -u -r5760 -r5941
--- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs (.../FactoryForSoilProfiles.cs) (revision 5760)
+++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs (.../FactoryForSoilProfiles.cs) (revision 5941)
@@ -120,7 +120,7 @@
Name = GetNewUniqueLayerId(soilProfile)
};
layer.TopLevel = topLevelSandLayer;
- layer.Soil = new Soil("Alg-zand (0-30)", 22.0, 20.0);
+ layer.Soil = soil2;
layer.IsAquifer = true;
soilProfile.Layers.Add(layer);
soilProfile.BottomLevel = -10.0;
@@ -288,65 +288,46 @@
}
///
- /// Create five layer soil profile with 1 aquifer
+ /// Create 4 layers soil profile with 1 aquifer at the bottom
///
/// soil profile
- public static SoilProfile1D Create5LayerProfileWith1Aquifer()
+ public static SoilProfile1D Create4LayersProfileWith1BottomAquifer(double level1 = 0.0, double level2= -5.0, double level3 = -10.0, double level4 = -15.0, double bottomLevel5 = -20.0, bool isInBetweenAquiferPresent = false)
{
var soilProfile = new SoilProfile1D();
var layer = new SoilLayer1D
{
- Name = GetNewUniqueLayerId(soilProfile)
+ Name = GetNewUniqueLayerId(soilProfile),
+ TopLevel = level1,
+ IsAquifer = false
};
- layer.TopLevel = 10.0;
- layer.Soil = new Soil("HW-OBO", 12.0, 10.0);
- layer.Soil.DryUnitWeight = 0.01;
- layer.IsAquifer = false;
soilProfile.Layers.Add(layer);
layer = new SoilLayer1D
{
- Name = GetNewUniqueLayerId(soilProfile)
+ Name = GetNewUniqueLayerId(soilProfile),
+ TopLevel = level2,
+ IsAquifer = isInBetweenAquiferPresent
};
- layer.TopLevel = 1.0;
- layer.Soil = new Soil("Alg-zand (0-30)", 10.0, 20.0);
- layer.Soil.DryUnitWeight = 0.01;
- layer.IsAquifer = false;
soilProfile.Layers.Add(layer);
layer = new SoilLayer1D
{
- Name = GetNewUniqueLayerId(soilProfile)
+ Name = GetNewUniqueLayerId(soilProfile),
+ TopLevel = level3,
+ IsAquifer = false
};
- layer.TopLevel = -1.5;
- layer.Soil = new Soil("HW-DUN", 16.8, 15.8);
- layer.Soil.DryUnitWeight = 0.01;
- layer.IsAquifer = false;
soilProfile.Layers.Add(layer);
layer = new SoilLayer1D
{
- Name = GetNewUniqueLayerId(soilProfile)
+ Name = GetNewUniqueLayerId(soilProfile),
+ TopLevel = level4,
+ IsAquifer = true
};
- layer.TopLevel = -5.0;
- layer.Soil = new Soil("Alg-zand (0-30)", 22.0, 20.0);
- layer.Soil.DryUnitWeight = 0.01;
- layer.IsAquifer = true;
soilProfile.Layers.Add(layer);
+ soilProfile.BottomLevel = bottomLevel5;
- layer = new SoilLayer1D
- {
- Name = GetNewUniqueLayerId(soilProfile)
- };
- layer.TopLevel = -7.0;
- layer.Soil = new Soil("HW-DUN", 16.8, 15.8);
- layer.Soil.DryUnitWeight = 0.01;
- layer.IsAquifer = false;
- soilProfile.Layers.Add(layer);
-
- soilProfile.BottomLevel = -10.0;
-
return soilProfile;
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs
===================================================================
diff -u -r5923 -r5941
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (.../PlLinesToWaternetConverter.cs) (revision 5923)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (.../PlLinesToWaternetConverter.cs) (revision 5941)
@@ -126,12 +126,13 @@
///
/// The to convert.
/// The to convert the with.
+ /// The surface line.
/// The penetration length.
/// The type of distribution of the vertical water pressures.
/// A .
/// Thrown when or
/// is null.
- public static Waternet CreateWaternetBasedOnPlLines(PlLines plLines, SoilProfile2D soilProfile, double penetrationLength, IntrusionVerticalWaterPressureType? pressureType)
+ public static Waternet CreateWaternetBasedOnPlLines(PlLines plLines, SoilProfile2D soilProfile, SurfaceLine2 surfaceLine, double penetrationLength, IntrusionVerticalWaterPressureType? pressureType)
{
// The validation of the soil profile was already performed in the Pl-lines creator.
// Here we only have to check that the PL-lines were indeed created.
@@ -174,7 +175,7 @@
waternet.WaternetLineList.Add(waternetLine);
}
- CreateWaternetLinesForInBetweenAquifers(waternet, soilProfile, plLines.Lines[PlLineType.Pl4], pressureType);
+ CreateWaternetLinesForInBetweenAquifers(waternet, soilProfile, surfaceLine, plLines.Lines[PlLineType.Pl4], pressureType);
AdjustWaternetLineOfPhreaticLineWhenCoincidingWithOtherWaternetLines(waternet);
@@ -222,7 +223,7 @@
}
}
- private static void CreateWaternetLinesForInBetweenAquifers(Waternet waternet, SoilProfile2D soilProfile, PlLine plLine4,
+ private static void CreateWaternetLinesForInBetweenAquifers(Waternet waternet, SoilProfile2D soilProfile, SurfaceLine2 surfaceLine, PlLine plLine4,
IntrusionVerticalWaterPressureType? pressureType)
{
if (plLine4 == null)
@@ -245,19 +246,23 @@
var headLine = CreateLine(plLine4, headLine4Name);
waternet.HeadLineList.Add(headLine);
- for (var i = 0; i < inBetweenAquiferUpperCoordinates.Count; i++)
+ var count = 0;
+ foreach (GeometryPointString topLine in inBetweenAquiferUpperCoordinates.Where(topLine => IsLineEndingInPolderSide(topLine, surfaceLine)))
{
- WaternetLine waternetLineTop = CreateWaternetLine(inBetweenAquiferUpperCoordinates[i].CalcPoints);
+ count += 1;
+ WaternetLine waternetLineTop = CreateWaternetLine(topLine.CalcPoints);
waternetLineTop.HeadLine = headLine;
- waternetLineTop.Name = waternetLine4TopName + " (" + (i + 1) + ")";
+ waternetLineTop.Name = waternetLine4TopName + " (" + count + ")";
waternet.WaternetLineList.Add(waternetLineTop);
}
- for (var i = 0; i < inBetweenAquiferLowerCoordinates.Count; i++)
+ count = 0;
+ foreach (GeometryPointString bottomLine in inBetweenAquiferLowerCoordinates.Where(bottomLine => IsLineEndingInPolderSide(bottomLine, surfaceLine)))
{
- WaternetLine waternetLineBottom = CreateWaternetLine(inBetweenAquiferLowerCoordinates[i].CalcPoints);
+ count += 1;
+ WaternetLine waternetLineBottom = CreateWaternetLine(bottomLine.CalcPoints);
waternetLineBottom.HeadLine = headLine;
- waternetLineBottom.Name = waternetLine4BottomName + " (" + (i + 1) + ")";
+ waternetLineBottom.Name = waternetLine4BottomName + " (" + count + ")";
waternet.WaternetLineList.Add(waternetLineBottom);
}
}
@@ -600,4 +605,10 @@
}
}
}
+
+ private static bool IsLineEndingInPolderSide(GeometryPointString line, SurfaceLine2 surfaceLine)
+ {
+ GeometryPoint dikeToeAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ return dikeToeAtPolder.X.IsLessThan(line.CalcPoints.Last().X, toleranceAlmostEqual);
+ }
}
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs
===================================================================
diff -u -r5923 -r5941
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs (.../PlLinesToWaternetConverterTests.cs) (revision 5923)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs (.../PlLinesToWaternetConverterTests.cs) (revision 5941)
@@ -378,7 +378,8 @@
public class Given2DSoilProfileWithTwoClustersOfInBetweenAquifersAndVerticalLayerSeparations
{
- private readonly SoilProfile2D soilProfile = Create2DSoilProfileWithTwoClustersOfInBetweenAquifersAndVerticalLayerSeparations();
+ private static readonly SoilProfile2D soilProfile = Create2DSoilProfileWithTwoClustersOfInBetweenAquifersAndVerticalLayerSeparations();
+ private readonly SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateHorizontalSurfaceLine(20, leftCoordinate, rightCoordinate);
[TestCase(IntrusionVerticalWaterPressureType.Standard, -9.999, 6, 2)]
[TestCase(IntrusionVerticalWaterPressureType.Linear, 20.000, 6, 2)]
@@ -391,7 +392,7 @@
PlLines plLines = CreateAllPlLines();
// Call
- Waternet waternet = PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile, penetrationZone, pressureType);
+ Waternet waternet = PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile, surfaceLine, penetrationZone, pressureType);
// Assert
AssertGeometry(plLines.Lines[PlLineType.Pl1].Points, waternet.PhreaticLine.Points);
@@ -488,7 +489,7 @@
PlLines plLines = CreateAllPlLines(-32);
// Call
- Waternet waternet = PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile, 0, pressureType);
+ Waternet waternet = PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile, surfaceLine, 0, pressureType);
// Assert
AssertGeometry(plLines.Lines[PlLineType.Pl1].Points, waternet.PhreaticLine.Points);
@@ -751,11 +752,11 @@
///
/// PL 1
- /// ==========================================\\
+ /// ==========================================\\ Level 2 m
/// B /------------------\ C \\ Level 0 m
/// | / Dike \ \\ E J
/// |--------------/----------------------\------\\----\ /-------| Level -5 m
- /// | A Layer 1 D \\====\==========/========|
+ /// | A Layer 1 D \\====\==========/========| Level -6 m
/// | \ / |
/// |-----------------------------------------------------\ F I /----------| Level -10 m
/// | Layer 2 G \----/ H | Level -12.5 m
@@ -767,73 +768,25 @@
public void Given2DProfileWithPl1AboveTheDikeAndCuttingTheDitch_WhenCreatingTheWaternetLineForPL1ForDAMStandardOption_ThenExpectedWaternetLineReturned()
{
// Setup
- const double xLeft = -100;
- const double xPointA = -70;
- const double xPointB = -60;
- const double xPointC = -50;
- const double xPointD = -40;
- const double xPointE = -10;
- const double xPointF = -0;
- const double xPointG = 5;
- const double xPointH = 15;
- const double xPointI = 20;
- const double xPointJ = 30;
- const double xPl1A = -30;
- const double xPl1B = -20;
- const double xRight = 40;
-
-
- SoilLayer2D soilDike = FactoryForSoilProfiles.CreateQuadrilateralSoilLayer2D(new Point2D(xPointA, -5), new Point2D(xPointB, 0), new Point2D(xPointC, 0), new Point2D(xPointD, -5));
- SoilLayer2D soilLayer1A = FactoryForSoilProfiles.CreateHexagonSoilLayer2D(new Point2D(xLeft, -5), new Point2D(xPointA, -5), new Point2D(xPointD, -5), new Point2D(xPointE, -5), new Point2D(xPointF, -10), new Point2D(xLeft, -10));
- SoilLayer2D soilLayer1B = FactoryForSoilProfiles.CreateQuadrilateralSoilLayer2D(new Point2D(xPointJ, -5), new Point2D(xRight, -5), new Point2D(xRight, -10), new Point2D(xPointI, -10));
- SoilLayer2D soilLayer2 = FactoryForSoilProfiles.CreatePolygoneSoilLayer2D([
- ..new[]
- {
- new Point2D(xLeft, -10),
- new Point2D(xPointF, -10),
- new Point2D(xPointG, -12.5),
- new Point2D(xPointH, -12.5),
- new Point2D(xPointI, -10),
- new Point2D(xRight, -10),
- new Point2D(xRight, -15),
- new Point2D(xLeft, -15)
- }
- ], null);
- SoilLayer2D soilBottomAquifer = FactoryForSoilProfiles.CreateRectangularSoilLayer2D(-15, -20, xLeft, xRight, null, null, true);
- var soilProfile = new SoilProfile2D
+ SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineWithDikeAndDitch(0, -12.5);
+ SoilProfile1D soilProfile1D = FactoryForSoilProfiles.Create4LayersProfileWith1BottomAquifer();
+ var soilSurfaceProfile = new SoilSurfaceProfile
{
- Geometry = new GeometryData
- {
- Left = xLeft,
- Right = xRight,
- Bottom = -20
- },
- Name = "SoilProfileTest"
+ SoilProfile = soilProfile1D,
+ SurfaceLine2 = surfaceLine,
+ DikeEmbankmentMaterial = new Soil(),
+ Name = "Test"
};
- soilProfile.Surfaces.Add(soilDike);
- soilProfile.Surfaces.Add(soilLayer1A);
- soilProfile.Surfaces.Add(soilLayer1B);
- soilProfile.Surfaces.Add(soilLayer2);
- soilProfile.Surfaces.Add(soilBottomAquifer);
- soilProfile.Geometry.Surfaces.Add(soilDike.GeometrySurface);
- soilProfile.Geometry.Surfaces.Add(soilLayer1A.GeometrySurface);
- soilProfile.Geometry.Surfaces.Add(soilLayer1B.GeometrySurface);
- soilProfile.Geometry.Surfaces.Add(soilLayer2.GeometrySurface);
- soilProfile.Geometry.Surfaces.Add(soilBottomAquifer.GeometrySurface);
+ SoilProfile2D soilProfile2D = soilSurfaceProfile.ConvertToSoilProfile2D();
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xLeft, -5));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xPointA, -5));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xPointB, 0));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xPointC, 0));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xPointD, -5));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xPointE, -5));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xPointF, -10));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xPointG, -12.5));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xPointH, -12.5));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xPointI, -10));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xPointJ, -5));
- soilProfile.Geometry.SurfaceLine.Points.Add(new GeometryPoint(xRight, -5));
- soilProfile.Geometry.SurfaceLine.SyncCalcPoints();
+ const double xLeft = 0;
+ const double xPointF = 59.3;
+ const double xPointG = 59.5;
+ const double xPointH = 61.5;
+ const double xPointI = 61.7;
+ const double xPl1A = -30;
+ const double xPl1B = -20;
+ const double xRight = 75;
var plLine = new PlLine
{
@@ -845,7 +798,7 @@
plLine.Points.Add(new PlLinePoint(xRight, -6));
// Call
- WaternetLine waternetLine = PlLinesToWaternetConverter.CreateWaternetLineForPhreaticLineForDamStandard(soilProfile, plLine);
+ WaternetLine waternetLine = PlLinesToWaternetConverter.CreateWaternetLineForPhreaticLineForDamStandard(soilProfile2D, plLine);
// Assert
Assert.That(waternetLine, Has.Count.EqualTo(6));
@@ -865,7 +818,125 @@
Assert.That(waternetLine.Points[5].Z, Is.EqualTo(-10).Within(precision3Decimals));
});
}
+
+
+ ///
+ /// _______ Level 10 m
+ /// / Clay \
+ /// /---------\ Level 6 m
+ /// / Aquifer \
+ /// /-------------\ X=58.5 X=62.5 Level 2 m
+ /// -----------/ Clay \------\ /-------- Level 0 m
+ /// -----------------------------------\ /--------- Level -2 m
+ /// In between aquifer \ /
+ /// -------------------------------------\ /----------- Level -4 m
+ /// Clay \ /
+ /// ---------------------------------------\ /------------- Level -6 m
+ /// \_____/ Level -8 m
+ /// Bottom aquifer X=59.5 X=61.5
+ /// ------------------------------------------------------------- Level -10 m
+ ///
+ [Test]
+ public void GivenSoilProfile2DWithAquiferInDikeBodyAndAquifersCuttingTheDitch_WhenCreatingWaternetLine_ThenExpectedWaternetLineReturned()
+ {
+ SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineWithDikeAndDitch(10, -8);
+ SoilProfile1D soilProfile1D = FactoryForSoilProfiles.CreateClaySandClaySandClaySandProfile(10, 6, 2, 0 -2, -4, -6);
+ soilProfile1D.BottomLevel = -10;
+ var soilSurfaceProfile = new SoilSurfaceProfile
+ {
+ SoilProfile = soilProfile1D,
+ SurfaceLine2 = surfaceLine,
+ DikeEmbankmentMaterial = new Soil(),
+ Name = "Test"
+ };
+ SoilProfile2D soilProfile2D = soilSurfaceProfile.ConvertToSoilProfile2D();
+ const double pL1Level = 0;
+
+ PlLines plLines = CreateAllPlLines(pL1Level);
+
+ // Call
+ Waternet waternet = PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile2D, surfaceLine, 0, IntrusionVerticalWaterPressureType.Standard);
+ // Assert
+ Assert.That(waternet.WaternetLineList, Has.Count.EqualTo(6));
+ // phreatic line (PL 1)
+ Assert.Multiple(() =>
+ {
+
+ Assert.That(waternet.PhreaticLine.Points, Has.Count.EqualTo(2));
+ WaternetLine waternetLinePl1 = waternet.WaternetLineList.Find(waternetLine => waternetLine.Name == "Waternet line phreatic line");
+ Assert.That(waternetLinePl1.HeadLine.Points, Is.EqualTo(waternet.PhreaticLine.Points));
+ Assert.That(waternetLinePl1.HeadLine.Name, Is.EqualTo(waternet.PhreaticLine.Name));
+ Assert.That(waternetLinePl1.Points, Has.Count.EqualTo(10));
+ });
+ // no PL 2
+ WaternetLine waternetLinePl2 = waternet.WaternetLineList.Find(waternetLine => waternetLine.Name == "Penetration zone lower aquifer");
+ Assert.That(waternetLinePl2, Is.Null);
+ // PL 3
+ WaternetLine waternetLinePl3 = waternet.WaternetLineList.Find(waternetLine => waternetLine.Name == "Waternet line lower aquifer");
+ Assert.Multiple(() =>
+ {
+ Assert.That(waternetLinePl3.HeadLine.Name, Is.EqualTo("Head line 3 (PL 3)"));
+ Assert.That(waternetLinePl3.Points, Has.Count.EqualTo(6));
+ Assert.That(waternetLinePl3.Points[0].X, Is.EqualTo(0));
+ Assert.That(waternetLinePl3.Points[0].Z, Is.EqualTo(-6));
+ Assert.That(waternetLinePl3.Points[1].X, Is.EqualTo(59.25));
+ Assert.That(waternetLinePl3.Points[1].Z, Is.EqualTo(-6));
+ Assert.That(waternetLinePl3.Points[2].X, Is.EqualTo(59.5));
+ Assert.That(waternetLinePl3.Points[2].Z, Is.EqualTo(-8));
+ Assert.That(waternetLinePl3.Points[3].X, Is.EqualTo(61.5));
+ Assert.That(waternetLinePl3.Points[3].Z, Is.EqualTo(-8));
+ Assert.That(waternetLinePl3.Points[4].X, Is.EqualTo(61.75));
+ Assert.That(waternetLinePl3.Points[4].Z, Is.EqualTo(-6));
+ Assert.That(waternetLinePl3.Points[5].X, Is.EqualTo(75));
+ Assert.That(waternetLinePl3.Points[5].Z, Is.EqualTo(-6));
+ });
+ // PL 4: 4 waternet lines expected at top and bottom and at both sides of the ditch
+ // No waternet line expected for the in-between aquifer in the dike body
+ WaternetLine waternetLinePl4LeftDitchTop = waternet.WaternetLineList.Find(waternetLine => waternetLine.Name == "Waternet line in-between aquifer top (1)");
+ WaternetLine waternetLinePl4LeftDitchBottom = waternet.WaternetLineList.Find(waternetLine => waternetLine.Name == "Waternet line in-between aquifer bottom (1)");
+ WaternetLine waternetLinePl4RightDitchTop = waternet.WaternetLineList.Find(waternetLine => waternetLine.Name == "Waternet line in-between aquifer top (2)");
+ WaternetLine waternetLinePl4RightDitchBottom = waternet.WaternetLineList.Find(waternetLine => waternetLine.Name == "Waternet line in-between aquifer bottom (2)");
+ Assert.Multiple(() =>
+ {
+ Assert.That(waternetLinePl4LeftDitchTop.HeadLine.Name, Is.EqualTo("Head line 4 (PL 4)"));
+ Assert.That(waternetLinePl4LeftDitchTop.Points, Has.Count.EqualTo(3));
+ Assert.That(waternetLinePl4LeftDitchBottom.HeadLine.Name, Is.EqualTo("Head line 4 (PL 4)"));
+ Assert.That(waternetLinePl4LeftDitchBottom.Points, Has.Count.EqualTo(2));
+ Assert.That(waternetLinePl4RightDitchTop.HeadLine.Name, Is.EqualTo("Head line 4 (PL 4)"));
+ Assert.That(waternetLinePl4RightDitchTop.Points, Has.Count.EqualTo(3));
+ Assert.That(waternetLinePl4RightDitchBottom.HeadLine.Name, Is.EqualTo("Head line 4 (PL 4)"));
+ Assert.That(waternetLinePl4RightDitchBottom.Points, Has.Count.EqualTo(2));
+
+ });
+ Assert.Multiple(() =>
+ {
+ Assert.That(waternetLinePl4LeftDitchTop.Points[0].X, Is.EqualTo(0).Within(precision3Decimals));
+ Assert.That(waternetLinePl4LeftDitchTop.Points[0].Z, Is.EqualTo(-2).Within(precision3Decimals));
+ Assert.That(waternetLinePl4LeftDitchTop.Points[1].X, Is.EqualTo(58.75).Within(precision3Decimals));
+ Assert.That(waternetLinePl4LeftDitchTop.Points[1].Z, Is.EqualTo(-2).Within(precision3Decimals));
+ Assert.That(waternetLinePl4LeftDitchTop.Points[2].X, Is.EqualTo(59).Within(precision3Decimals));
+ Assert.That(waternetLinePl4LeftDitchTop.Points[2].Z, Is.EqualTo(-4).Within(precision3Decimals));
+
+ Assert.That(waternetLinePl4LeftDitchBottom.Points[0].X, Is.EqualTo(0).Within(precision3Decimals));
+ Assert.That(waternetLinePl4LeftDitchBottom.Points[0].Z, Is.EqualTo(-4).Within(precision3Decimals));
+ Assert.That(waternetLinePl4LeftDitchBottom.Points[1].X, Is.EqualTo(59).Within(precision3Decimals));
+ Assert.That(waternetLinePl4LeftDitchBottom.Points[1].Z, Is.EqualTo(-4).Within(precision3Decimals));
+
+ Assert.That(waternetLinePl4RightDitchTop.Points[0].X, Is.EqualTo(62).Within(precision3Decimals));
+ Assert.That(waternetLinePl4RightDitchTop.Points[0].Z, Is.EqualTo(-4).Within(precision3Decimals));
+ Assert.That(waternetLinePl4RightDitchTop.Points[1].X, Is.EqualTo(62.25).Within(precision3Decimals));
+ Assert.That(waternetLinePl4RightDitchTop.Points[1].Z, Is.EqualTo(-2).Within(precision3Decimals));
+ Assert.That(waternetLinePl4RightDitchTop.Points[2].X, Is.EqualTo(75).Within(precision3Decimals));
+ Assert.That(waternetLinePl4RightDitchTop.Points[2].Z, Is.EqualTo(-2).Within(precision3Decimals));
+
+ Assert.That(waternetLinePl4RightDitchBottom.Points[0].X, Is.EqualTo(62).Within(precision3Decimals));
+ Assert.That(waternetLinePl4RightDitchBottom.Points[0].Z, Is.EqualTo(-4).Within(precision3Decimals));
+ Assert.That(waternetLinePl4RightDitchBottom.Points[1].X, Is.EqualTo(75).Within(precision3Decimals));
+ Assert.That(waternetLinePl4RightDitchBottom.Points[1].Z, Is.EqualTo(-4).Within(precision3Decimals));
+ });
+ }
+
private static SoilLayer2D CreateSoilLayer2D(Point2D topLeftCoordinate, Point2D topRightCoordinate,
Point2D bottomRightCoordinate, Point2D bottomLeftCoordinate, bool isAquifer)
{