Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSurfaceLines.cs
===================================================================
diff -u -r5053 -r5238
--- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSurfaceLines.cs (.../FactoryForSurfaceLines.cs) (revision 5053)
+++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSurfaceLines.cs (.../FactoryForSurfaceLines.cs) (revision 5238)
@@ -310,18 +310,18 @@
}
///
- /// Creates a horizontal surface line for benchmark 1.
+ /// Creates a horizontal surface line.
///
/// surface line
- public static SurfaceLine2 CreateHorizontalSurfaceLineForBenchmark1()
+ public static SurfaceLine2 CreateHorizontalSurfaceLine(double level)
{
var surfaceLine = new SurfaceLine2
{
Name = "HorizontalLine"
};
- surfaceLine.EnsurePointOfType(30, -0.2, CharacteristicPointType.DikeToeAtPolder);
- surfaceLine.EnsurePointOfType(70, -0.2, CharacteristicPointType.SurfaceLevelInside);
+ surfaceLine.EnsurePointOfType(-10, level, CharacteristicPointType.SurfaceLevelOutside);
+ surfaceLine.EnsurePointOfType(10, level, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
return surfaceLine;
Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfileHelperTests.cs
===================================================================
diff -u
--- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfileHelperTests.cs (revision 0)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfileHelperTests.cs (revision 5238)
@@ -0,0 +1,108 @@
+// Copyright (C) Stichting Deltares 2024. All rights reserved.
+//
+// This file is part of the Dam Engine.
+//
+// The Dam Engine is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using Deltares.DamEngine.Data.Geotechnics;
+using Deltares.DamEngine.TestHelpers.Factories;
+using NUnit.Framework;
+
+namespace Deltares.DamEngine.Data.Tests.Geotechnics;
+
+[TestFixture]
+public class SoilProfileHelperTests
+{
+ public class GivenSurfaceLineInside1DProfile
+ {
+ private readonly SoilProfile1D soilProfile1D = CreateSoilProfile1D();
+ private readonly SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineTutorial1();
+
+ [Test]
+ public void WhenDetermining1DProfileAtDikeToeAtRiver_ThenExpectedLayersAboveAreRemoved()
+ {
+ SoilProfile1D soilProfile1D2 = SoilProfileHelper.DetermineForSurfaceLineCorrected1DProfileAtX(soilProfile1D, surfaceLine, 10, null);
+
+ Assert.That(soilProfile1D2.Layers, Has.Count.EqualTo(2));
+ Assert.Multiple(() =>
+ {
+ Assert.That(soilProfile1D2.Layers[0].TopLevel, Is.EqualTo(0));
+ Assert.That(soilProfile1D2.Layers[0].SoilName, Is.EqualTo("Layer 4"));
+ Assert.That(soilProfile1D2.Layers[1].TopLevel, Is.EqualTo(-3));
+ Assert.That(soilProfile1D2.Layers[1].SoilName, Is.EqualTo("Layer 5"));
+ });
+ }
+
+ [Test]
+ public void WhenDetermining1DProfileAtDikeTopAtPolder_ThenExpectedLayersAboveAreRemoved()
+ {
+ SoilProfile1D soilProfile1D2 = SoilProfileHelper.DetermineForSurfaceLineCorrected1DProfileAtX(soilProfile1D, surfaceLine, 40.5, null);
+
+ Assert.That(soilProfile1D2.Layers, Has.Count.EqualTo(4));
+ Assert.Multiple(() =>
+ {
+ Assert.That(soilProfile1D2.Layers[0].TopLevel, Is.EqualTo(5));
+ Assert.That(soilProfile1D2.Layers[0].SoilName, Is.EqualTo("Layer 2"));
+ Assert.That(soilProfile1D2.Layers[1].TopLevel, Is.EqualTo(4));
+ Assert.That(soilProfile1D2.Layers[1].SoilName, Is.EqualTo("Layer 3"));
+ Assert.That(soilProfile1D2.Layers[2].TopLevel, Is.EqualTo(2));
+ Assert.That(soilProfile1D2.Layers[2].SoilName, Is.EqualTo("Layer 4"));
+ Assert.That(soilProfile1D2.Layers[3].TopLevel, Is.EqualTo(-3));
+ Assert.That(soilProfile1D2.Layers[3].SoilName, Is.EqualTo("Layer 5"));
+ });
+ }
+ }
+
+ [Test]
+ public void GivenHorizontalSurfaceLineAbove1DProfile_WhenDetermining1DProfileAtMiddle_ThenExpectedLayerAddedAbove()
+ {
+ SoilProfile1D soilProfile1D = CreateSoilProfile1D();
+ SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateHorizontalSurfaceLine(20);
+
+ SoilProfile1D soilProfile1D2 = SoilProfileHelper.DetermineForSurfaceLineCorrected1DProfileAtX(soilProfile1D, surfaceLine, 0, new Soil("Embankment"));
+
+ Assert.That(soilProfile1D2.Layers, Has.Count.EqualTo(6));
+ Assert.Multiple(() =>
+ {
+ Assert.That(soilProfile1D2.Layers[0].TopLevel, Is.EqualTo(20));
+ Assert.That(soilProfile1D2.Layers[0].SoilName, Is.EqualTo("Embankment"));
+ Assert.That(soilProfile1D2.Layers[1].TopLevel, Is.EqualTo(10));
+ Assert.That(soilProfile1D2.Layers[1].SoilName, Is.EqualTo("Layer 1"));
+ Assert.That(soilProfile1D2.Layers[2].TopLevel, Is.EqualTo(6));
+ Assert.That(soilProfile1D2.Layers[2].SoilName, Is.EqualTo("Layer 2"));
+ Assert.That(soilProfile1D2.Layers[3].TopLevel, Is.EqualTo(4));
+ Assert.That(soilProfile1D2.Layers[3].SoilName, Is.EqualTo("Layer 3"));
+ Assert.That(soilProfile1D2.Layers[4].TopLevel, Is.EqualTo(2));
+ Assert.That(soilProfile1D2.Layers[4].SoilName, Is.EqualTo("Layer 4"));
+ Assert.That(soilProfile1D2.Layers[5].TopLevel, Is.EqualTo(-3));
+ Assert.That(soilProfile1D2.Layers[5].SoilName, Is.EqualTo("Layer 5"));
+ });
+ }
+
+ private static SoilProfile1D CreateSoilProfile1D()
+ {
+ var soilProfile1D = new SoilProfile1D();
+ soilProfile1D.Layers.Add(new SoilLayer1D(new Soil("Layer 1"), 10));
+ soilProfile1D.Layers.Add(new SoilLayer1D(new Soil("Layer 2"), 6));
+ soilProfile1D.Layers.Add(new SoilLayer1D(new Soil("Layer 3"), 4));
+ soilProfile1D.Layers.Add(new SoilLayer1D(new Soil("Layer 4"), 2));
+ soilProfile1D.Layers.Add(new SoilLayer1D(new Soil("Layer 5"), -3));
+
+ return soilProfile1D;
+ }
+}
\ No newline at end of file