Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs =================================================================== diff -u -r5404 -r5562 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs (.../PlLinesToWaternetConverterTests.cs) (revision 5404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs (.../PlLinesToWaternetConverterTests.cs) (revision 5562) @@ -171,8 +171,10 @@ [TestCase(IntrusionVerticalWaterPressureType.SemiTimeDependent, -2.110, 7)] public void WhenCreatingWaternetBasedOnPlLinesWithPhreaticLineInTopOfHighestAquitard_ThenReturnsValidWaternet(IntrusionVerticalWaterPressureType? pressureType, double levelWaternetPl1, int waternetLineCount) { - const double pL1Level = 0; - PlLines plLines = CreateAllPlLines(pL1Level); + const double pL1Level = 0.0; + const double xLeft = 0.0; + const double xRight = 100.0; + PlLines plLines = CreateAllPlLines(xLeft, xRight, pL1Level); Assert.Multiple(() => { @@ -197,9 +199,9 @@ { // phreatic line (PL 1) Assert.That(waternet.PhreaticLine.Points, Has.Count.EqualTo(2)); - Assert.That(waternet.PhreaticLine.Points[0].X, Is.EqualTo(leftCoordinate).Within(precision3Decimals)); + Assert.That(waternet.PhreaticLine.Points[0].X, Is.EqualTo(xLeft).Within(precision3Decimals)); Assert.That(waternet.PhreaticLine.Points[0].Z, Is.EqualTo(pL1Level).Within(precision3Decimals)); - Assert.That(waternet.PhreaticLine.Points[1].X, Is.EqualTo(rightCoordinate).Within(precision3Decimals)); + Assert.That(waternet.PhreaticLine.Points[1].X, Is.EqualTo(xRight).Within(precision3Decimals)); Assert.That(waternet.PhreaticLine.Points[1].Z, Is.EqualTo(pL1Level).Within(precision3Decimals)); WaternetLine waternetLinePl1 = waternet.WaternetLineList.Find(waternetLine => waternetLine.Name == "Waternet line phreatic line"); @@ -227,9 +229,9 @@ Assert.That(waternet.HeadLineList[0].Points, Has.Count.EqualTo(2)); Assert.That(waternet.HeadLineList[0].Name, Is.EqualTo("Head line 2 (PL 2)")); // check the points of first headline that represents pl 2 - Assert.That(waternet.HeadLineList[0].Points[0].X, Is.EqualTo(leftCoordinate).Within(precision3Decimals)); + Assert.That(waternet.HeadLineList[0].Points[0].X, Is.EqualTo(xLeft).Within(precision3Decimals)); Assert.That(waternet.HeadLineList[0].Points[0].Z, Is.EqualTo(-6).Within(precision3Decimals)); - Assert.That(waternet.HeadLineList[0].Points[1].X, Is.EqualTo(rightCoordinate).Within(precision3Decimals)); + Assert.That(waternet.HeadLineList[0].Points[1].X, Is.EqualTo(xRight).Within(precision3Decimals)); Assert.That(waternet.HeadLineList[0].Points[1].Z, Is.EqualTo(-6).Within(precision3Decimals)); // expected: waternet line connected to pl2 has level -6.111 + 2.1 = -4.011 Assert.That(waternetLinePl2.HeadLine, Is.EqualTo(waternet.HeadLineList[0])); @@ -319,7 +321,7 @@ [TestCase(IntrusionVerticalWaterPressureType.SemiTimeDependent, -6.110)] public void WhenCreatingWaternetBasedOnPlLinesWithPhreaticLineGoingThroughBottomAquifer_ThenExpectedWaternetLineForPl1Returned(IntrusionVerticalWaterPressureType? pressureType, double levelWaternetPl1) { - PlLines plLines = CreateAllPlLines(-29); + PlLines plLines = CreateAllPlLines(0.0, 100.0, -29.0); const double penetrateLength = 2.1; Waternet waternet = PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile1D, surfaceLine, penetrateLength, pressureType); @@ -915,26 +917,31 @@ private static PlLines CreateAllPlLines(double pl1Level = -5) { + return CreateAllPlLines(leftCoordinate, rightCoordinate, pl1Level); + } + + private static PlLines CreateAllPlLines(double xLeft, double xRight, double pl1Level = -5) + { var plLines = new PlLines(); PlLine plLine = plLines.Lines[PlLineType.Pl1]; plLine.Name = "Phreatic line"; - plLine.Points.Add(new PlLinePoint(leftCoordinate, pl1Level)); - plLine.Points.Add(new PlLinePoint(rightCoordinate, pl1Level)); + plLine.Points.Add(new PlLinePoint(xLeft, pl1Level)); + plLine.Points.Add(new PlLinePoint(xRight, pl1Level)); plLine = plLines.Lines[PlLineType.Pl2]; plLine.Name = "PL 2"; - plLine.Points.Add(new PlLinePoint(leftCoordinate, -6)); - plLine.Points.Add(new PlLinePoint(rightCoordinate, -6)); + plLine.Points.Add(new PlLinePoint(xLeft, -6)); + plLine.Points.Add(new PlLinePoint(xRight, -6)); plLine = plLines.Lines[PlLineType.Pl3]; plLine.Name = "PL 3"; - plLine.Points.Add(new PlLinePoint(leftCoordinate, -7)); - plLine.Points.Add(new PlLinePoint(rightCoordinate, -7)); + plLine.Points.Add(new PlLinePoint(xLeft, -7)); + plLine.Points.Add(new PlLinePoint(xRight, -7)); plLine = plLines.Lines[PlLineType.Pl4]; plLine.Name = "PL 4"; - plLine.Points.Add(new PlLinePoint(leftCoordinate, -8)); - plLine.Points.Add(new PlLinePoint(rightCoordinate, -8)); + plLine.Points.Add(new PlLinePoint(xLeft, -8)); + plLine.Points.Add(new PlLinePoint(xRight, -8)); return plLines; } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs =================================================================== diff -u -r5552 -r5562 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (.../PlLinesToWaternetConverter.cs) (revision 5552) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (.../PlLinesToWaternetConverter.cs) (revision 5562) @@ -77,7 +77,7 @@ if (plLine != null && !IsBelowSoilProfile(soilProfile1D, plLine)) { waternet.PhreaticLine = CreateLine(plLine, headLine1Name); - WaternetLine waternetLine = CreateWaternetLineForPhreaticLine(soilProfile1D, surfaceLine.Geometry, headLine, xLeft, xRight, pressureType); + WaternetLine waternetLine = CreateWaternetLineForPhreaticLine(soilProfile1D, surfaceLine, plLine, xLeft, xRight, pressureType); waternetLine.Name = waternetLine1Name; waternetLine.HeadLine = headLine; waternetLine.HeadLine.SyncCalcPoints(); @@ -304,20 +304,20 @@ /// /// /// - /// + /// /// /// /// /// - private static WaternetLine CreateWaternetLineForPhreaticLine(SoilProfile1D soilProfile1D, GeometryPointString surfaceLine, - HeadLine phreaticLine, double xLeft, double xRight, + private static WaternetLine CreateWaternetLineForPhreaticLine(SoilProfile1D soilProfile1D, SurfaceLine2 surfaceLine, + PlLine plLine, double xLeft, double xRight, IntrusionVerticalWaterPressureType? pressureType) { switch (pressureType) { case IntrusionVerticalWaterPressureType.Linear: { - List coordinates = surfaceLine.Points.Select(point => new Point2D(point.X, point.Z)).ToList(); + List coordinates = surfaceLine.Geometry.Points.Select(point => new Point2D(point.X, point.Z)).ToList(); return CreateWaternetLine(coordinates); } case IntrusionVerticalWaterPressureType.HydroStatic: @@ -333,11 +333,14 @@ case IntrusionVerticalWaterPressureType.Standard: case IntrusionVerticalWaterPressureType.SemiTimeDependent: { - double level = soilProfile1D.GetLayerAt(phreaticLine.GetMinZ()).BottomLevel; - // Make sure the waternet line for PL 1 is not below the one for PL 3 - double bottomAquiferLevel = soilProfile1D.BottomAquiferLayer.TopLevel; - level = Math.Max(level, bottomAquiferLevel); - return CreateWaternetLine(level, xLeft, xRight); + var soilSurfaceProfile = new SoilSurfaceProfile + { + SoilProfile = soilProfile1D, + SurfaceLine2 = surfaceLine, + DikeEmbankmentMaterial = new Soil("dummy", 0.0, 0.0) + }; + SoilProfile2D soilProfile2D = soilSurfaceProfile.ConvertToSoilProfile2D(); + return CreateWaternetLineForPhreaticLineForDamStandard(soilProfile2D, plLine); } case null: break;