Index: DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/Deltares.Dam.TestHelper.csproj =================================================================== diff -u -r3450 -r3823 --- DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/Deltares.Dam.TestHelper.csproj (.../Deltares.Dam.TestHelper.csproj) (revision 3450) +++ DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/Deltares.Dam.TestHelper.csproj (.../Deltares.Dam.TestHelper.csproj) (revision 3823) @@ -71,6 +71,9 @@ False ..\..\..\..\lib\DSL-Core\Deltares.Standard.dll + + ..\..\..\packages\NUnit.2.6.2\lib\nunit.framework.dll + @@ -81,6 +84,11 @@ + + + + + Index: DamClients/DamUI/trunk/src/Dam/Tests/Deltares.Dam.Tests.csproj =================================================================== diff -u -r3822 -r3823 --- DamClients/DamUI/trunk/src/Dam/Tests/Deltares.Dam.Tests.csproj (.../Deltares.Dam.Tests.csproj) (revision 3822) +++ DamClients/DamUI/trunk/src/Dam/Tests/Deltares.Dam.Tests.csproj (.../Deltares.Dam.Tests.csproj) (revision 3823) @@ -154,9 +154,6 @@ - - - Index: DamClients/DamUI/trunk/src/Dam/Tests/CsvExportSurfaceLineTest.cs =================================================================== diff -u -r3527 -r3823 --- DamClients/DamUI/trunk/src/Dam/Tests/CsvExportSurfaceLineTest.cs (.../CsvExportSurfaceLineTest.cs) (revision 3527) +++ DamClients/DamUI/trunk/src/Dam/Tests/CsvExportSurfaceLineTest.cs (.../CsvExportSurfaceLineTest.cs) (revision 3823) @@ -20,15 +20,13 @@ // All rights reserved. using Deltares.Dam.Data.CsvImporters; -using Deltares.Geotechnics; using Deltares.Geotechnics.GeotechnicalGeometry; using System.Collections.Generic; using System.IO; - using NUnit.Framework; using Deltares.Dam.Data; +using Deltares.Dam.TestHelper.TestUtils; using Deltares.Geotechnics.SurfaceLines; -using Deltares.Geotechnics.TestUtils; namespace Deltares.Dam.Tests { Index: DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/MemoryLeakTestBase.cs =================================================================== diff -u --- DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/MemoryLeakTestBase.cs (revision 0) +++ DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/MemoryLeakTestBase.cs (revision 3823) @@ -0,0 +1,134 @@ +// Copyright (C) Stichting Deltares 2019. All rights reserved. +// +// This file is part of the Delta Shell Light Library. +// +// The Delta Shell Light Library is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU 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 System; +using System.Collections.Generic; +using System.Linq; +using Deltares.Dam.Tests.TestUtils; +using NUnit.Framework; + +namespace Deltares.Dam.TestHelper.TestUtils +{ + /// + /// A base class providing template methods to be used for performing + /// memory leak tests. + /// + /// This class is working purely on non-GUI level. + [TestFixture] + public abstract class MemoryLeakTestBase + { + [TearDown] + public void TearDown() + { + objectLeakMonitor = null; + directCompositeChildrenLeakMonitors = null; + } + + private ObjectLeakMonitor objectLeakMonitor; + private ObjectLeakMonitor[] directCompositeChildrenLeakMonitors; + + /// + /// Clear all static caches that should be cleared at end of application + /// + protected virtual void ClearStaticCaches() + { + // Clear all static, non-GUI caches here + } + + protected void MonitorMemoryLeakage(Func createMonitoredObject, Func> getMonitoredChildren) where T : class, IDisposable + { + PerformMemoryMeasurements(createMonitoredObject, getMonitoredChildren); + + string report; + var isLeaking = CreateMemoryLeakReport(objectLeakMonitor, directCompositeChildrenLeakMonitors, out report); + if (!isLeaking) + { + Console.WriteLine(report); + } + Assert.IsFalse(isLeaking, report); + } + + protected void MonitorMemoryLeakage(Func> getMonitoredChildren) where T : class, IDisposable, new() + { + PerformMemoryMeasurements(() => new T(), getMonitoredChildren); + + string report; + var isLeaking = CreateMemoryLeakReport(objectLeakMonitor, directCompositeChildrenLeakMonitors, out report); + if (!isLeaking) + { + Console.WriteLine(report); + } + Assert.IsFalse(isLeaking, report); + } + + /// + /// Performs the memory measurements. + /// + /// The object type to be monitored. It's default constructor will be used. + /// The object creation method. + /// The get monitored children. + /// + ///

The creation is performed in a separate method than where the are checked to ensure the objects will be garbage collected.

+ ///
+ private void PerformMemoryMeasurements(Func createMonitoredObject, Func> getMonitoredChildren) where T : class, IDisposable + { + using (var objectToMonitor = createMonitoredObject()) + { + objectLeakMonitor = new ObjectLeakMonitor(objectToMonitor); + directCompositeChildrenLeakMonitors = getMonitoredChildren != null + ? getMonitoredChildren(objectToMonitor) + .Select(mc => new ObjectLeakMonitor(mc)) + .ToArray() + : null; + } + + ClearStaticCaches(); + } + + /// + /// Creates the memory leak report. + /// + /// The monitor for the object under test. + /// The composite children leak monitors. + /// Output: The memory leak report. + /// True if a memory or object leak has been detected; False otherwise. + private bool CreateMemoryLeakReport(ObjectLeakMonitor monitor, ObjectLeakMonitor[] compositeChildrenLeakMonitors, out string report) + { + report = Environment.NewLine + "=================================================================" + Environment.NewLine; + report += "Memory leak report for " + monitor.MonitoredObjectType + Environment.NewLine; + report += "Object garbage collected: " + !monitor.ObjectIsAlive() + Environment.NewLine; + + if (compositeChildrenLeakMonitors != null && compositeChildrenLeakMonitors.Any()) + { + report += "All monitored composite children garbage collected: " + compositeChildrenLeakMonitors.All(c => !c.ObjectIsAlive()) + Environment.NewLine; + + foreach (var compositeChildrenLeakMonitor in compositeChildrenLeakMonitors) + { + report += "\tChild (" + compositeChildrenLeakMonitor.MonitoredObjectType + ") garbage collected: " + !compositeChildrenLeakMonitor.ObjectIsAlive() + Environment.NewLine; + } + } + + report += "================================================================="; + + return monitor.ObjectIsAlive() || (compositeChildrenLeakMonitors != null && compositeChildrenLeakMonitors.Any(c => c.ObjectIsAlive())); + } + } +} \ No newline at end of file Index: DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/FactoryForStabilityTests.cs =================================================================== diff -u -r3527 -r3823 --- DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/FactoryForStabilityTests.cs (.../FactoryForStabilityTests.cs) (revision 3527) +++ DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/FactoryForStabilityTests.cs (.../FactoryForStabilityTests.cs) (revision 3823) @@ -20,13 +20,11 @@ // All rights reserved. using Deltares.Geometry; -using Deltares.Geotechnics; using System.IO; using Deltares.Dam.Data; +using Deltares.Dam.TestHelper.TestUtils; using Deltares.Geotechnics.Soils; using Deltares.Geotechnics.SurfaceLines; -using Deltares.Geotechnics.TestUtils; -using Segment = Deltares.Dam.Data.Segment; namespace Deltares.Dam.TestHelper { @@ -66,7 +64,7 @@ /// /// The instance to be set on . /// - public static Location CreateLocation(SurfaceLine2 surfaceLine) + private static Location CreateLocation(SurfaceLine2 surfaceLine) { Location location = new Location(); location.Name = "LocationName"; @@ -108,7 +106,7 @@ /// Create standard 4 layer soilprofile for tests /// /// - public static SoilProfile1D CreateSoilProfile() + private static SoilProfile1D CreateSoilProfile() { SoilProfile1D soilProfile = FactoryForSoilProfileTests.CreateClaySandClaySandProfile(); Index: DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/ObjectLeakMonitorTest.cs =================================================================== diff -u --- DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/ObjectLeakMonitorTest.cs (revision 0) +++ DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/ObjectLeakMonitorTest.cs (revision 3823) @@ -0,0 +1,78 @@ +// Copyright (C) Stichting Deltares 2019. All rights reserved. +// +// This file is part of the Delta Shell Light Library. +// +// The Delta Shell Light Library is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU 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.Dam.Tests.TestUtils; +using NUnit.Framework; + +namespace Deltares.Dam.TestHelper.TestUtils +{ + [TestFixture] + public class ObjectLeakMonitorTest + { + [Test] + public void IsAlive_ObjectStillInScope_True() + { + // setup + var objectToMonitor = new object(); + var monitor = new ObjectLeakMonitor(objectToMonitor); + + // call + var isAlive = monitor.ObjectIsAlive(); + + // assert + var text = objectToMonitor.ToString(); // To ensure it stays in scope + Assert.IsTrue(isAlive, text); + } + + [Test] + public void MonitoredObjectType_ShouldBeTypeOfMonitoredObject() + { + // setup + var objectToMonitor = new object(); + var monitor = new ObjectLeakMonitor(objectToMonitor); + + // call + var type = monitor.MonitoredObjectType; + + // assert + Assert.AreEqual(objectToMonitor.GetType(), type); + } + + [Test] + public void ObjectIsAlive_ObjectOutOfScope_False() + { + // setup + var monitor = CreateObjectAndAssignToObjectLeakMonitor(); + + // call + var isAlive = monitor.ObjectIsAlive(); + + // assert + Assert.IsFalse(isAlive); + } + + private ObjectLeakMonitor CreateObjectAndAssignToObjectLeakMonitor() + { + var objectToMonitor = new object(); // This object goes out of scope when the method returns, and will be garbage collectable + return new ObjectLeakMonitor(objectToMonitor); + } + } +} \ No newline at end of file Index: DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/ObjectLeakMonitor.cs =================================================================== diff -u --- DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/ObjectLeakMonitor.cs (revision 0) +++ DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/ObjectLeakMonitor.cs (revision 3823) @@ -0,0 +1,66 @@ +// Copyright (C) Stichting Deltares 2019. All rights reserved. +// +// This file is part of the Delta Shell Light Library. +// +// The Delta Shell Light Library is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU 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 System; + +namespace Deltares.Dam.Tests.TestUtils +{ + /// + /// Class used to detecting if an object is alive or not. + /// Used to prevent keeping the object + /// from being garbage collected. + /// + /// http://geekswithblogs.net/HouseOfBilz/archive/2008/11/11/writing-tests-to-catch-memory-leaks-in-.net.aspx + /// + public class ObjectLeakMonitor + { + private readonly WeakReference refereceToObject; + private readonly Type referencedObjectType; + + /// + /// Initializes a new instance of the class, + /// creating a to the monitored object. + /// + /// The object to monitor. + public ObjectLeakMonitor(object objectToMonitor) + { + refereceToObject = new WeakReference(objectToMonitor); + referencedObjectType = objectToMonitor.GetType(); + } + + /// + /// Gets the of the monitored object. + /// + public Type MonitoredObjectType => referencedObjectType; + + /// + /// Performs garbage collection and checks if the object still exists. + /// + /// True if the monitored object exists, false otherwise. + public bool ObjectIsAlive() + { + GC.Collect(); + GC.WaitForPendingFinalizers(); + + return refereceToObject.IsAlive; + } + } +} \ No newline at end of file Index: DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/FactoryForSoilProfileTests.cs =================================================================== diff -u --- DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/FactoryForSoilProfileTests.cs (revision 0) +++ DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/FactoryForSoilProfileTests.cs (revision 3823) @@ -0,0 +1,2332 @@ +// Copyright (C) Stichting Deltares 2019. All rights reserved. +// +// This file is part of the Delta Shell Light Library. +// +// The Delta Shell Light Library is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU 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.Geometry; +using Deltares.Geotechnics.GeotechnicalGeometry; +using Deltares.Geotechnics.Soils; +using Deltares.Geotechnics.SurfaceLines; +using Deltares.Standard; + +namespace Deltares.Dam.TestHelper.TestUtils +{ + public class FactoryForSoilProfileTests + { + /// + /// Create simple soil profile + /// + /// soil profile + public static SoilProfile1D CreateSimpleProfile() + { + var soilProfile = new SoilProfile1D(); + + var layer = new SoilLayer1D(); + layer.TopLevel = 10.0; + layer.Soil = new Soil("Clay", 16.0, 12.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + soilProfile.Layers.Add(layer); + + soilProfile.BottomLevel = -20.0; + + return soilProfile; + } + + /// + /// Create twolayer soilprofile + /// + /// soil profile + public static SoilProfile1D CreateTwoLayerProfile() + { + var soilProfile = new SoilProfile1D(); + + var layer = new SoilLayer1D(); + layer.TopLevel = 10.0; + layer.Soil = new Soil("HW-OBO", 12.0, 10.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Automatic; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D(); + layer.TopLevel = 2.0; + layer.Soil = new Soil("Alg-zand (0-30)", 22.0, 20.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = true; + layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Hydrostatic; + soilProfile.Layers.Add(layer); + + soilProfile.BottomLevel = -10.0; + + return soilProfile; + } + + /// + /// Create two layer soil profile with pleistocene sand layer only + /// + /// soil profile + public static SoilProfile1D CreateHeavyClaySandProfileForHydraulicShortcutEvaluator() + { + SoilProfile1D soilProfile = CreateClaySandProfile(); + soilProfile.Layers[0].Soil.BelowPhreaticLevel = 22.0; + soilProfile.Layers[0].Soil.AbovePhreaticLevel = 20.0; + foreach (var layer in soilProfile.Layers) + { + layer.Soil.DryUnitWeight = layer.Soil.AbovePhreaticLevel - 2; + } + return soilProfile; + } + + /// + /// Create two layer soil profile with pleistocene sand layer only + /// + /// soil profile + public static SoilProfile1D CreateClaySandProfile() + { + var soilProfile = new SoilProfile1D(); + + var layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = 10.0; + layer.Soil = new Soil("HW-OBO", 12.0, 10.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + layer.Soil.SoilType = SoilType.Clay; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + 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 = -10.0; + + return soilProfile; + } + + /// + /// Gammadry and Gammywet are both set to 1 for testing purposes + /// + /// + public static SoilProfile1D CreateClaySandClaySandProfileForPipingBligh() + { + SoilProfile1D soilProfile = CreateClaySandClaySandProfile(); + foreach (var layer in soilProfile.Layers) + { + layer.Soil.BelowPhreaticLevel = 1; + layer.Soil.AbovePhreaticLevel = 1; + layer.Soil.DiameterD70 = 0.00018; + } + return soilProfile; + } + + public static SoilProfile1D CreateClaySandProfileForPipingBligh() + { + SoilProfile1D soilProfile = CreateClaySandProfile(); + foreach (var layer in soilProfile.Layers) + { + layer.Soil.BelowPhreaticLevel = 1; + layer.Soil.AbovePhreaticLevel = 1; + layer.Soil.DiameterD70 = 0.00018; + } + return soilProfile; + } + + /// + /// Create four layer soil profile with pleistocene and intermediate sand layer + /// + /// soil profile + public static SoilProfile1D CreateClaySandClaySandProfile() + { + var soilProfile = new SoilProfile1D(); + + var layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = 10.0; + layer.Soil = new Soil("HW-OBO", 12.0, 10.0); + layer.Soil.DryUnitWeight = 0.01; + + layer.IsAquifer = false; + layer.Soil.SoilType = SoilType.Clay; + layer.Soil.DryUnitWeight = layer.Soil.AbovePhreaticLevel - 1.0; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = 1.0; + layer.Soil = new Soil("Alg-zand (0-30)", 22.0, 20.0); + layer.Soil.DryUnitWeight = 0.01; + + layer.IsAquifer = true; + layer.Soil.SoilType = SoilType.Sand; + layer.Soil.DryUnitWeight = layer.Soil.AbovePhreaticLevel - 1.0; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -1.5; + layer.Soil = new Soil("HW-DUN", 16.8, 15.8); + layer.Soil.DryUnitWeight = 0.01; + + layer.IsAquifer = false; + layer.Soil.SoilType = SoilType.Clay; + layer.Soil.DryUnitWeight = layer.Soil.AbovePhreaticLevel - 1.0; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -5.0; + layer.Soil = new Soil("Alg-zand (0-30)", 22.0, 20.0); + layer.Soil.DryUnitWeight = 0.01; + + layer.IsAquifer = true; + layer.Soil.SoilType = SoilType.Sand; + layer.Soil.DryUnitWeight = layer.Soil.AbovePhreaticLevel - 1.0; + soilProfile.Layers.Add(layer); + soilProfile.BottomLevel = -10.0; + return soilProfile; + } + + /// + /// Create six layer soil profile with 3 aquifers + /// + /// soil profile + public static SoilProfile1D CreateClaySandClaySandClaySandProfile() + { + var soilProfile = new SoilProfile1D(); + + var layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + 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() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = 1.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); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + 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() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + 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); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + 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); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -9.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 = -10.0; + + return soilProfile; + } + + /// + /// Create five layer soil profile with 1 aquifer + /// + /// soil profile + public static SoilProfile1D Create5LayerProfileWith1Aquifer() + { + var soilProfile = new SoilProfile1D(); + + var layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = 10.0; + layer.Soil = new Soil("HW-OBO", 12.0, 10.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + layer.Soil.SoilType = SoilType.Clay; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = 1.0; + layer.Soil = new Soil("Alg-zand (0-30)", 10.0, 20.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + layer.Soil.SoilType = SoilType.Clay; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -1.5; + layer.Soil = new Soil("HW-DUN", 16.8, 15.8); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + layer.Soil.SoilType = SoilType.Clay; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -5.0; + layer.Soil = new Soil("Alg-zand (0-30)", 22.0, 20.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = true; + layer.Soil.SoilType = SoilType.Clay; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -7.0; + layer.Soil = new Soil("HW-DUN", 16.8, 15.8); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + layer.Soil.SoilType = SoilType.Clay; + soilProfile.Layers.Add(layer); + + soilProfile.BottomLevel = -10.0; + + return soilProfile; + } + + /// + /// Create four layer soil profile with pleistocene and intermediate sand layer with multiple infiltration layers + /// + /// soil profile + public static SoilProfile1D CreateMultiInfiltrationLayerProfile() + { + var soilProfile = new SoilProfile1D(); + + var layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + 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() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = 1.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); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + 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() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -2.3; + 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() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -3.2; + 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() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -4.1; + 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() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + 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 = -10.0; + + return soilProfile; + } + + /// + /// Create complex soilprofile + /// + /// soil profile + public static SoilProfile1D CreateComplexProfile() + { + var soilProfile = new SoilProfile1D(); + + var layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = 10.0; + layer.Soil = new Soil("HW-OBO", 16.8, 15.8); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -0.6; + 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() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -1.8; + layer.Soil = new Soil("HW-DUOzand", 18.7, 17.7); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = true; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -2.8; + layer.Soil = new Soil("HW-HVN", 11.4, 10.4); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -4.0; + layer.Soil = new Soil("HW-HVN", 11.40, 10.40); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -5.0; + layer.Soil = new Soil("Alg-zand (0-30)", 19.0, 18.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = true; + soilProfile.Layers.Add(layer); + + soilProfile.BottomLevel = -10.0; + return soilProfile; + } + + /// + /// Create three layer soil profile with pleistocene and intermediate sand layer + /// + /// soil profile + public static SoilProfile1D CreatePipingSellmeijerProfileWithTwoSandlayers() + { + var soilProfile = new SoilProfile1D(); + + var layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = 10.0; + layer.Soil = new Soil("Topmaterial", 1.0, 1.0, 0.0003, Physics.FactorMicroMeterToMeter*300.0, 0.5, 57.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -2.0; + layer.Soil = new Soil("Sand upper", 22.0, 20.0, 0.0001, Physics.FactorMicroMeterToMeter*200.0, 0.25, 37.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = true; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -3.99; + layer.Soil = new Soil("Clay", 22.0, 20.0, 0.0001, Physics.FactorMicroMeterToMeter*200.0, 0.25, 37.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = false; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -4.0; + layer.Soil = new Soil("Sand lower", 22.0, 20.0, 0.0002, Physics.FactorMicroMeterToMeter*300.0, 0.35, 47.0); + layer.Soil.DryUnitWeight = 0.01; + layer.IsAquifer = true; + soilProfile.Layers.Add(layer); + + soilProfile.BottomLevel = -10.0; + + return soilProfile; + } + + /// + /// Create two layer soil profile with pleistocene sand layer (no intermediate layer + /// + /// soil profile + public static SoilProfile1D CreatePipingSellmeijerProfileWithOneSandlayer() + { + var soilProfile = new SoilProfile1D(); + + var layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = 10.0; + layer.Soil = new Soil("Topmaterial", 1.0, 1.0, 0.0003, Physics.FactorMicroMeterToMeter*300.0, 0.5, 57.0); + layer.IsAquifer = false; + soilProfile.Layers.Add(layer); + + layer = new SoilLayer1D() + { + Id = soilProfile.GetNewUniqueLayerId() + }; + layer.TopLevel = -2.0; + layer.Soil = new Soil("Sand", 22.0, 20.0, 0.0001, Physics.FactorMicroMeterToMeter*200.0, 0.25, 37.0); + layer.IsAquifer = true; + soilProfile.Layers.Add(layer); + + soilProfile.BottomLevel = -10.0; + + return soilProfile; + } + + /// + /// Gammadry and Gammywet are both set to 10.0 for testing purposes + /// + /// + public static SoilProfile1D CreatePipingDesignSellmeijerDesign() + { + SoilProfile1D soilProfile = CreatePipingSellmeijerProfileWithTwoSandlayers(); + foreach (var layer in soilProfile.Layers) + { + layer.Soil.BelowPhreaticLevel = 5.0; + layer.Soil.AbovePhreaticLevel = 5.0; + } + return soilProfile; + } + + /// + /// Create a soil profile containing 5 layers with pleistocene and intermediate sand layer + /// (2 top aquitards + 1 in between aquifer + 1 aquitard + 1 deep aquifer) + /// + /// soil profile + public static SoilProfile2D Create2DProfileBenchmark4_01a() + { + var newProfile = new SoilProfile2D(); + var geometryModel = new GeometryData(); + newProfile.Geometry.Right = 45; + newProfile.Geometry.Left = 0; + + var layer2DPleistocene = new SoilLayer2D(); + layer2DPleistocene.Soil = new Soil() + { + Name = "Pleistocene", SoilType = SoilType.Sand, BelowPhreaticLevel = 20, AbovePhreaticLevel = 18 + }; + layer2DPleistocene.IsAquifer = true; + CreateGeometryCurves0ForBm4_01(layer2DPleistocene, geometryModel); + newProfile.Surfaces.Add(layer2DPleistocene); + + var layer2DPeat = new SoilLayer2D(); + layer2DPeat.Soil = new Soil() + { + Name = "Peat", SoilType = SoilType.Peat, BelowPhreaticLevel = 12, AbovePhreaticLevel = 12 + }; + layer2DPeat.IsAquifer = false; + CreateGeometryCurves1ForBm4_01(layer2DPeat, geometryModel); + newProfile.Surfaces.Add(layer2DPeat); + + var layer2DSand = new SoilLayer2D(); + layer2DSand.Soil = new Soil() + { + Name = "Sand", SoilType = SoilType.Sand, BelowPhreaticLevel = 17, AbovePhreaticLevel = 17 + }; + layer2DSand.IsAquifer = true; + CreateGeometryCurves2ForBm4_01(layer2DSand, geometryModel); + newProfile.Surfaces.Add(layer2DSand); + + var layer2DClay = new SoilLayer2D(); + layer2DClay.Soil = new Soil() + { + Name = "Clay", SoilType = SoilType.Clay, BelowPhreaticLevel = 15, AbovePhreaticLevel = 15 + }; + layer2DClay.IsAquifer = false; + CreateGeometryCurves3ForBm4_01(layer2DClay, geometryModel); + newProfile.Surfaces.Add(layer2DClay); + + var layer2DClayDike = new SoilLayer2D(); + layer2DClayDike.Soil = new Soil() + { + Name = "Clay dike", SoilType = SoilType.Clay, BelowPhreaticLevel = 15, AbovePhreaticLevel = 15 + }; + layer2DClayDike.IsAquifer = false; + CreateGeometryCurves4ForBm4_01(layer2DClayDike, geometryModel); + newProfile.Surfaces.Add(layer2DClayDike); + + return newProfile; + } + + /// + /// Create a soil profile containing 5 layers with 2 deep aquifers + /// (1 top aquifer + 2 aquitards + 2 deep aquifers) + /// + /// soil profile + public static SoilProfile2D Create2DProfileBenchmark4_01b() + { + var newProfile = new SoilProfile2D(); + var geometryModel = new GeometryData(); + + var layer2DPleistocene = new SoilLayer2D(); + layer2DPleistocene.Soil = new Soil() + { + Name = "Pleistocene", SoilType = SoilType.Sand, BelowPhreaticLevel = 20, AbovePhreaticLevel = 18 + }; + layer2DPleistocene.IsAquifer = true; + CreateGeometryCurves0ForBm4_01(layer2DPleistocene, geometryModel); + newProfile.Surfaces.Add(layer2DPleistocene); + + var layer2DSand = new SoilLayer2D(); + layer2DSand.Soil = new Soil() + { + Name = "Sand", SoilType = SoilType.Sand, BelowPhreaticLevel = 17, AbovePhreaticLevel = 17 + }; + layer2DSand.IsAquifer = true; + CreateGeometryCurves1ForBm4_01(layer2DSand, geometryModel); + newProfile.Surfaces.Add(layer2DSand); + + var layer2DPeat = new SoilLayer2D(); + layer2DPeat.Soil = new Soil() + { + Name = "Peat", SoilType = SoilType.Peat, BelowPhreaticLevel = 12, AbovePhreaticLevel = 12 + }; + layer2DPeat.IsAquifer = false; + CreateGeometryCurves2ForBm4_01(layer2DPeat, geometryModel); + newProfile.Surfaces.Add(layer2DPeat); + + var layer2DClay = new SoilLayer2D(); + layer2DClay.Soil = new Soil() + { + Name = "Clay", SoilType = SoilType.Clay, BelowPhreaticLevel = 15, AbovePhreaticLevel = 15 + }; + layer2DClay.IsAquifer = false; + CreateGeometryCurves3ForBm4_01(layer2DClay, geometryModel); + newProfile.Surfaces.Add(layer2DClay); + + var layer2DSandDike = new SoilLayer2D(); + layer2DSandDike.Soil = new Soil() + { + Name = "Sand dike", SoilType = SoilType.Sand, BelowPhreaticLevel = 17, AbovePhreaticLevel = 17 + }; + layer2DSandDike.IsAquifer = true; + CreateGeometryCurves1ForBm4_01(layer2DSandDike, geometryModel); + newProfile.Surfaces.Add(layer2DSandDike); + + return newProfile; + } + + /// + /// Create a soil profile containing 5 layers with 2 consecutive intermediate sand layers + /// (1 top aquitard + 2 in between aquifers + 1 aquitard + 1 deep aquifer) + /// + /// soil profile + public static SoilProfile2D Create2DProfileBenchmark4_01c() + { + var newProfile = new SoilProfile2D(); + var geometryModel = new GeometryData(); + + var layer2DPleistocene = new SoilLayer2D(); + layer2DPleistocene.Soil = new Soil() + { + Name = "Pleistocene", SoilType = SoilType.Sand, BelowPhreaticLevel = 20, AbovePhreaticLevel = 18, Cohesion = 30, FrictionAngle = 35 + }; + layer2DPleistocene.IsAquifer = true; + CreateGeometryCurves0ForBm4_01(layer2DPleistocene, geometryModel); + newProfile.Surfaces.Add(layer2DPleistocene); + + var layer2DPeat = new SoilLayer2D(); + layer2DPeat.Soil = new Soil() + { + Name = "Peat", SoilType = SoilType.Peat, BelowPhreaticLevel = 12, AbovePhreaticLevel = 12, Cohesion = 0, FrictionAngle = 15 + }; + layer2DPeat.IsAquifer = false; + CreateGeometryCurves1ForBm4_01(layer2DPeat, geometryModel); + newProfile.Surfaces.Add(layer2DPeat); + + var layer2DSand1 = new SoilLayer2D(); + layer2DSand1.Soil = new Soil() + { + Name = "Sand 1", SoilType = SoilType.Sand, BelowPhreaticLevel = 17, AbovePhreaticLevel = 17, Cohesion = 20, FrictionAngle = 30 + }; + layer2DSand1.IsAquifer = true; + CreateGeometryCurves2ForBm4_01(layer2DSand1, geometryModel); + newProfile.Surfaces.Add(layer2DSand1); + + var layer2DSand2 = new SoilLayer2D(); + layer2DSand2.Soil = new Soil() + { + Name = "Sand 2", SoilType = SoilType.Sand, BelowPhreaticLevel = 17, AbovePhreaticLevel = 17, Cohesion = 20, FrictionAngle = 30 + }; + layer2DSand2.IsAquifer = true; + CreateGeometryCurves3ForBm4_01(layer2DSand2, geometryModel); + newProfile.Surfaces.Add(layer2DSand2); + + var layer2DClayDike = new SoilLayer2D(); + layer2DClayDike.Soil = new Soil() + { + Name = "Clay dike", SoilType = SoilType.Clay, BelowPhreaticLevel = 15, AbovePhreaticLevel = 15, Cohesion = 2, FrictionAngle = 25 + }; + layer2DClayDike.IsAquifer = false; + CreateGeometryCurves4ForBm4_01(layer2DClayDike, geometryModel); + newProfile.Surfaces.Add(layer2DClayDike); + + return newProfile; + } + + public static SoilProfile2D Create2DProfileBenchMark4_02() + { + var newProfile = new SoilProfile2D(); + var geometryModel = new GeometryData(); + var layer2DPleistoceneForBm402 = new SoilLayer2D(); + layer2DPleistoceneForBm402.Soil = new Soil() + { + Name = "Pleistocene", SoilType = SoilType.Sand + }; + layer2DPleistoceneForBm402.IsAquifer = true; + CreateGeometryCurves0ForBm402(layer2DPleistoceneForBm402, geometryModel); + newProfile.Surfaces.Add(layer2DPleistoceneForBm402); + + var layer2DPeatForBm401a = new SoilLayer2D(); + layer2DPeatForBm401a.Soil = new Soil() + { + Name = "Peat", SoilType = SoilType.Peat + }; + layer2DPeatForBm401a.IsAquifer = false; + CreateGeometryCurves1ForBm402(layer2DPeatForBm401a, geometryModel); + newProfile.Surfaces.Add(layer2DPeatForBm401a); + + var layer2DSandForBm401a = new SoilLayer2D(); + layer2DSandForBm401a.Soil = new Soil() + { + Name = "Sand", SoilType = SoilType.Sand + }; + layer2DSandForBm401a.IsAquifer = true; + CreateGeometryCurves2ForBm402(layer2DSandForBm401a, geometryModel); + newProfile.Surfaces.Add(layer2DSandForBm401a); + + var layer2DClayForBm401a = new SoilLayer2D(); + layer2DClayForBm401a.Soil = new Soil() + { + Name = "Clay", SoilType = SoilType.Clay + }; + layer2DClayForBm401a.IsAquifer = false; + CreateGeometryCurves3ForBm402(layer2DClayForBm401a, geometryModel); + newProfile.Surfaces.Add(layer2DClayForBm401a); + geometryModel.Rebox(); + newProfile.Geometry = geometryModel; + return newProfile; + //return geometryModel; + } + + public static SoilProfile2D CreateSoilProfile2DBenchMark2_4() + { + var newProfile = new SoilProfile2D(); + var geometryModel = new GeometryData(); + + var layer2Dklei = new SoilLayer2D(); + layer2Dklei.Soil = new Soil() + { + Name = "klei", SoilType = SoilType.Clay, FrictionAngle = 10.0, Cohesion = 0.0 + }; + layer2Dklei.IsAquifer = false; + CreateGeometryCurves0(layer2Dklei, geometryModel); + newProfile.Surfaces.Add(layer2Dklei); + + var layer2Dzand = new SoilLayer2D(); + layer2Dzand.Soil = new Soil() + { + Name = "zand 2", SoilType = SoilType.Sand + }; + layer2Dzand.IsAquifer = true; + CreateGeometryCurves1(layer2Dzand, geometryModel); + newProfile.Surfaces.Add(layer2Dzand); + + var layer2Dkzand3 = new SoilLayer2D(); + layer2Dkzand3.Soil = new Soil() + { + Name = "zand 3", SoilType = SoilType.Sand + }; + layer2Dkzand3.IsAquifer = true; + CreateGeometryCurves2(layer2Dkzand3, geometryModel); + newProfile.Surfaces.Add(layer2Dkzand3); + + return newProfile; + } + + public static SurfaceLine2 CreateSurfacelineSimpleDike() + { + var surfaceLine = new SurfaceLine2 + { + CharacteristicPoints = + { + GeometryMustContainPoint = true + }, + Geometry = new LocalizedGeometryPointString() + }; + surfaceLine.EnsurePointOfType(0.0, 2.0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(1.0, 2.0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(4.0, 5.0, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(7.0, 5.0, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(10.0, 1.0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(12.0, 1.0, CharacteristicPointType.SurfaceLevelInside); + return surfaceLine; + } + + public static SurfaceLine2 CreateSchematizedSurfaceLineSimpleDike() + { + var schematizedSurfaceLine = new SurfaceLine2 + { + CharacteristicPoints = + { + GeometryMustContainPoint = false + }, + Geometry = new LocalizedGeometryPointString() + }; + + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(0.0, 0.0, 2.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(1.0, 0.0, 2.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(4.0, 0.0, 5.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(7.0, 0.0, 5.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(10.0, 0.0, 1.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(12.0, 0.0, 1.0)); + + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(0.0, 0.0, 2.0), CharacteristicPointType.SurfaceLevelOutside); + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(1.0, 0.0, 2.0), CharacteristicPointType.DikeToeAtRiver); + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(4.0, 0.0, 5.0), CharacteristicPointType.DikeTopAtRiver); + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(7.0, 0.0, 5.0), CharacteristicPointType.DikeTopAtPolder); + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(10.0, 0.0, 1.0), CharacteristicPointType.DikeToeAtPolder); + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(12.0, 0.0, 1.0), CharacteristicPointType.SurfaceLevelInside); + return schematizedSurfaceLine; + } + + public static SurfaceLine2 CreateSchematizedSurfaceLineWithDepressions() + { + var schematizedSurfaceLine = new SurfaceLine2 + { + CharacteristicPoints = + { + GeometryMustContainPoint = false + }, + Geometry = new LocalizedGeometryPointString() + }; + + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(0.0, 0.0, 2.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(1.0, 0.0, 2.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(4.0, 0.0, 5.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(7.0, 0.0, 5.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(8.0, 0.0, 3.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(9.0, 0.0, 1.5)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(10.0, 0.0, 1.0)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(10.5, 0.0, 0.72)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(12.0, 0.0, 0.7)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(13, 0.0, 0.2)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(14, 0.0, 0.2)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(15, 0.0, 0.7)); + schematizedSurfaceLine.Geometry.Points.Add(new GeometryPoint(20, 0.0, 1.0)); + + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(0.0, 0.0, 2.0), CharacteristicPointType.SurfaceLevelOutside); + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(1.0, 0.0, 2.0), CharacteristicPointType.DikeToeAtRiver); + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(4.0, 0.0, 5.0), CharacteristicPointType.DikeTopAtRiver); + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(7.0, 0.0, 5.0), CharacteristicPointType.DikeTopAtPolder); + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(10.0, 0.0, 1.0), CharacteristicPointType.DikeToeAtPolder); + schematizedSurfaceLine.AddCharacteristicPoint(new GeometryPoint(20.0, 0.0, 1), CharacteristicPointType.SurfaceLevelInside); + return schematizedSurfaceLine; + } + + public static SurfaceLine2 CreateSurfacelineBenchMark1_05() + { + var surfaceLine = new SurfaceLine2 + { + CharacteristicPoints = + { + GeometryMustContainPoint = true + }, + Geometry = new LocalizedGeometryPointString() + }; + surfaceLine.EnsurePointOfType(0.0, 0.0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(40.0, 0.0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(55.0, 12.0, CharacteristicPointType.ShoulderTopOutside); + surfaceLine.EnsurePointOfType(56.0, 12.0, CharacteristicPointType.ShoulderBaseOutside); + surfaceLine.EnsurePointOfType(80.0, 30.0, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(85.0, 30.0, CharacteristicPointType.TrafficLoadOutside); + surfaceLine.EnsurePointOfType(85.001, 30.0, CharacteristicPointType.TrafficLoadInside); + surfaceLine.EnsurePointOfType(130.0, 30.0, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(145.0, 12.0, CharacteristicPointType.ShoulderBaseInside); + surfaceLine.EnsurePointOfType(158.0, 12.0, CharacteristicPointType.ShoulderTopInside); + surfaceLine.EnsurePointOfType(170.0, 0.0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(185.0, 0.0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(195.0, -5.0, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(205.0, -5.0, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(215.0, 0.0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(250.0, 0.0, CharacteristicPointType.SurfaceLevelInside); + return surfaceLine; + } + + public static SoilProfile2D CreateSoilProfile2D() + { + var newProfile = new SoilProfile2D(); + var geometryModel = newProfile.Geometry; + + var layer2Dklei = new SoilLayer2D(); + layer2Dklei.Soil = new Soil() + { + Name = "klei", SoilType = SoilType.Clay, FrictionAngle = 10.0, Cohesion = 0.0 + }; + layer2Dklei.IsAquifer = false; + CreateGeometryCurves0(layer2Dklei, geometryModel); + + var layer2Dzand = new SoilLayer2D(); + layer2Dzand.Soil = new Soil() + { + Name = "zand 2", SoilType = SoilType.Sand + }; + layer2Dzand.IsAquifer = true; + CreateGeometryCurves1(layer2Dzand, geometryModel); + + var layer2Dkzand3 = new SoilLayer2D(); + layer2Dkzand3.Soil = new Soil() + { + Name = "zand 3", SoilType = SoilType.Sand + }; + layer2Dkzand3.IsAquifer = true; + CreateGeometryCurves2(layer2Dkzand3, geometryModel); + + newProfile.Surfaces.Clear(); + newProfile.Surfaces.Add(layer2Dklei); + newProfile.Surfaces.Add(layer2Dzand); + newProfile.Surfaces.Add(layer2Dkzand3); + + newProfile.Geometry.Rebox(); + + return newProfile; + } + + public static SoilProfile2D CreateSoilProfile2DClayDikeOnSand() + { + var newProfile = new SoilProfile2D(); + var geometryModel = newProfile.Geometry; + + var point1 = new GeometryPoint(0, 0, 1); + var point2 = new GeometryPoint(1, 0, 1); + var point3 = new GeometryPoint(4, 0, 5); + var point4 = new GeometryPoint(7, 0, 5); + var point5 = new GeometryPoint(10, 0, 2); + var point6 = new GeometryPoint(12, 0, 2); + var point7 = new GeometryPoint(0, 0, 0); + var point8 = new GeometryPoint(12, 0, 0); + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(point5); + geometryModel.Create(point6); + geometryModel.Create(point7); + geometryModel.Create(point8); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point4, point5); + var curve5 = new GeometryCurve(point5, point6); + var curve6 = new GeometryCurve(point2, point5); + var curve7= new GeometryCurve(point6, point8); + var curve8 = new GeometryCurve(point7, point8); + var curve9 = new GeometryCurve(point1, point7); + + + var layer2Dklei = new SoilLayer2D(); + layer2Dklei.Soil = new Soil() + { + Name = "Clay dike", + SoilType = SoilType.Clay + }; + layer2Dklei.IsAquifer = false; + + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + geometryModel.Create(curve6); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2Dklei, geometryModel); + + var layer2Dzand = new SoilLayer2D(); + layer2Dzand.Soil = new Soil() + { + Name = "Sand", + SoilType = SoilType.Sand + }; + layer2Dzand.IsAquifer = true; + + geometryModel.Create(curve1); + geometryModel.Create(curve6); + geometryModel.Create(curve5); + geometryModel.Create(curve7); + geometryModel.Create(curve8); + geometryModel.Create(curve9); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2Dzand, geometryModel); + + newProfile.Surfaces.Clear(); + newProfile.Surfaces.Add(layer2Dklei); + newProfile.Surfaces.Add(layer2Dzand); + + newProfile.Geometry.Rebox(); + + return newProfile; + } + + public static SurfaceLine2 CreateSurfaceLineBm2_7() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + CharacteristicPoints = + { + GeometryMustContainPoint = true + }, + Geometry = new LocalizedGeometryPointString(), + Name = "bench mark 2_7" + }; + + // Next point adjusted so create PL line can be tested better + surfaceLine.EnsurePointOfType(0.0, 0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(20.0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(35.0, 7.5, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(45.0, 7.5, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(67.5, 0.0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(75.5, 0.0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(78.0, -1.5, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(88.0, -1.5, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(91.0, 0.0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(120.0, 0.0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + /*private static void CreateGeometryCurves0(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, 6); + var point2 = new GeometryPoint(20, 0, 8); + var point3 = new GeometryPoint(20, 0, 0); + var point4 = new GeometryPoint(0, 0, 0); + GeometryCurve curve1 = new GeometryCurve(point1, point2); + GeometryCurve curve2 = new GeometryCurve(point2, point3); + GeometryCurve curve3 = new GeometryCurve(point4, point3); + GeometryCurve curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves1(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, 9); + var point2 = new GeometryPoint(10, 0, 9); + var point3 = new GeometryPoint(20, 0, 9); + var point4 = new GeometryPoint(20, 0, 8); + var point5 = new GeometryPoint(0, 0, 6); + GeometryCurve curve1 = new GeometryCurve(point1, point2); + GeometryCurve curve2 = new GeometryCurve(point2, point3); + GeometryCurve curve3 = new GeometryCurve(point3, point4); + GeometryCurve curve4 = new GeometryCurve(point5, point4); + GeometryCurve curve5 = new GeometryCurve(point5, point1); + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(point5); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + geometryModel.Create(curve5); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves2(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(10, 0, 9); + var point2 = new GeometryPoint(13, 0, 11); + var point3 = new GeometryPoint(20, 0, 11); + var point4 = new GeometryPoint(20, 0, 9); + GeometryCurve curve1 = new GeometryCurve(point1, point2); + GeometryCurve curve2 = new GeometryCurve(point2, point3); + GeometryCurve curve3 = new GeometryCurve(point3, point4); + GeometryCurve curve4 = new GeometryCurve(point1, point4); + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void AddCurvesToLayer2DGeometrySurface(SoilLayer2D layer2D, GeometryData geometryModel) + { + int index = geometryModel.Surfaces.Count - 1; + layer2D.GeometrySurface = geometryModel.Surfaces[index]; + layer2D.GeometrySurface.Name = "surface " + index; + }*/ + + public static SoilProfile2D CreateSoilProfile2Dbm2_7() + { + var newProfile = new SoilProfile2D(); + var geometryModel = new GeometryData(); + + // + // Layer "zand1": SoilCohesion=3.00, SoilPhi=33.00 + // + var layer2DZand1 = new SoilLayer2D(); + layer2DZand1.Soil = new Soil() + { + Name = "zand1", + SoilType = SoilType.Sand, + FrictionAngle = 33.0, + Cohesion = 3.0 + }; + layer2DZand1.IsAquifer = true; + CreateGeometryCurvesZand1(layer2DZand1, geometryModel); + newProfile.Surfaces.Add(layer2DZand1); + + // + // Layer "klei2": SoilCohesion=9.00, SoilPhi=22.00 + // + var layer2DKlei2 = new SoilLayer2D(); + layer2DKlei2.Soil = new Soil() + { + Name = "klei2", + SoilType = SoilType.Clay, + FrictionAngle = 22.0, + Cohesion = 9.0 + }; + layer2DKlei2.IsAquifer = false; + CreateGeometryCurvesKlei2(layer2DKlei2, geometryModel); + newProfile.Surfaces.Add(layer2DKlei2); + + // + // Layer "veen3": SoilCohesion=10.00, SoilPhi=25.00 + // + var layer2DVeen3 = new SoilLayer2D(); + layer2DVeen3.Soil = new Soil() + { + Name = "veen3", + SoilType = SoilType.Peat, + FrictionAngle = 25.00, + Cohesion = 10.00 + }; + layer2DVeen3.IsAquifer = true; //for testing purposes sake + CreateGeometryCurvesVeen3(layer2DVeen3, geometryModel); + newProfile.Surfaces.Add(layer2DVeen3); + + // + // Layer "klei4": SoilCohesion=9.00, SoilPhi=22.00 + // + var layer2DKlei4 = new SoilLayer2D(); + layer2DKlei4.Soil = new Soil() + { + Name = "klei4", + SoilType = SoilType.Clay, + FrictionAngle = 22.00, + Cohesion = 9.00 + }; + layer2DKlei4.IsAquifer = false; + CreateGeometryCurvesKlei4(layer2DKlei4, geometryModel); + newProfile.Surfaces.Add(layer2DKlei4); + + // + // Layer "klei5": SoilCohesion=9.00, SoilPhi=22.00 + // + var layer2DKlei5 = new SoilLayer2D(); + layer2DKlei5.Soil = new Soil() + { + Name = "klei5", + SoilType = SoilType.Clay, + FrictionAngle = 22.00, + Cohesion = 9.00 + }; + layer2DKlei5.IsAquifer = false; + CreateGeometryCurvesKlei5(layer2DKlei5, geometryModel); + //GeometryRegenerator generator = new GeometryRegenerator(geometryModel); + //generator.SetUpGeometryLoopDirections(); + newProfile.Surfaces.Add(layer2DKlei5); + return newProfile; + } + + public static SoilProfile2D CreateTwoLayerProfile2D() + { + var profile2D = new SoilProfile2D(); + var geometryModel = new GeometryData(); + + var pleistSand = new SoilLayer2D(); + pleistSand.Soil = new Soil() + { + Name = "Pleistocene", + SoilType = SoilType.Sand, + ShearStrengthModel = ShearStrengthModel.CPhi, + UseDefaultShearStrengthInput = true + }; + pleistSand.IsAquifer = true; + //CreateGeometryCurves0ForBm401a(layer2DPleistoceneForBm401a, geometryModel); + profile2D.Surfaces.Add(pleistSand); + var clay = new SoilLayer2D(); + clay.Soil = new Soil() + { + Name = "Clay", + SoilType = SoilType.Clay, + ShearStrengthModel = ShearStrengthModel.CuGradient, + UseDefaultShearStrengthInput = true + }; + pleistSand.IsAquifer = false; + //CreateGeometryCurves0ForBm401a(layer2DPleistoceneForBm401a, geometryModel); + profile2D.Surfaces.Add(clay); + + return profile2D; + } + + public static SoilProfile2D CreateSoilProfile2DNew2DProfileTest() + { + var newProfile = new SoilProfile2D(); + var geometryModel = newProfile.Geometry; + + var point1 = new GeometryPoint(0, 0, -10); + var point2 = new GeometryPoint(50, 0, -10); + var point3 = new GeometryPoint(50, 0, -6); + var point4 = new GeometryPoint(30, 0, -6); + var point5 = new GeometryPoint(27, 0, -9); + var point6 = new GeometryPoint(15, 0, -9); + var point7 = new GeometryPoint(12, 0, -6); + var point8 = new GeometryPoint(0, 0, -6); + var point9 = new GeometryPoint(0, 0, 0); + var point10 = new GeometryPoint(12, 0, 0); + var point11= new GeometryPoint(18, 0, 6); + var point12 = new GeometryPoint(24, 0, 6); + var point13 = new GeometryPoint(30, 0, 0); + var point14 = new GeometryPoint(33, 0, 0); + var point15 = new GeometryPoint(36, 0, -3); + var point16 = new GeometryPoint(39, 0, -3); + var point17 = new GeometryPoint(42, 0, 0); + var point18 = new GeometryPoint(50, 0, 0); + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(point5); + geometryModel.Create(point6); + geometryModel.Create(point7); + geometryModel.Create(point8); + geometryModel.Create(point9); + geometryModel.Create(point10); + geometryModel.Create(point11); + geometryModel.Create(point12); + geometryModel.Create(point13); + geometryModel.Create(point14); + geometryModel.Create(point15); + geometryModel.Create(point16); + geometryModel.Create(point17); + geometryModel.Create(point18); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point4, point5); + var curve5 = new GeometryCurve(point5, point6); + var curve6 = new GeometryCurve(point6, point7); + var curve7 = new GeometryCurve(point7, point8); + var curve8 = new GeometryCurve(point8, point1); + + var curve9 = new GeometryCurve(point8, point9); + var curve10 = new GeometryCurve(point9, point10); + var curve11 = new GeometryCurve(point10, point11); + var curve12 = new GeometryCurve(point11, point12); + var curve13 = new GeometryCurve(point12, point13); + var curve14 = new GeometryCurve(point13, point14); + var curve15 = new GeometryCurve(point14, point15); + var curve16 = new GeometryCurve(point15, point16); + var curve17 = new GeometryCurve(point16, point17); + var curve18 = new GeometryCurve(point17, point18); + var curve19 = new GeometryCurve(point18, point3); + + var layer2Dklei = new SoilLayer2D(); + layer2Dklei.Soil = new Soil() + { + Name = "mat2", + SoilType = SoilType.Peat + }; + layer2Dklei.IsAquifer = false; + + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + geometryModel.Create(curve5); + geometryModel.Create(curve6); + geometryModel.Create(curve7); + geometryModel.Create(curve8); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2Dklei, geometryModel); + + var layer2Dzand = new SoilLayer2D(); + layer2Dzand.Soil = new Soil() + { + Name = "mat1", + SoilType = SoilType.Sand + }; + layer2Dzand.IsAquifer = true; + + geometryModel.Create(curve9); + geometryModel.Create(curve10); + geometryModel.Create(curve11); + geometryModel.Create(curve12); + geometryModel.Create(curve13); + geometryModel.Create(curve14); + geometryModel.Create(curve15); + geometryModel.Create(curve16); + geometryModel.Create(curve17); + geometryModel.Create(curve18); + geometryModel.Create(curve19); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2Dzand, geometryModel); + + newProfile.Surfaces.Clear(); + newProfile.Surfaces.Add(layer2Dklei); + newProfile.Surfaces.Add(layer2Dzand); + + newProfile.Geometry.Rebox(); + + var preConsPoint = new PreConsolidationStress + { + X = 10, + Y = 5, + StressValue = 15 + }; + newProfile.PreconsolidationStresses.Add(preConsPoint); + return newProfile; + } + + public static SurfaceLine2 CreateSurfaceLineForNew2DProfileTest() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + CharacteristicPoints = + { + GeometryMustContainPoint = true + }, + Geometry = new LocalizedGeometryPointString(), + Name = "SurfaceLineAt3m" + }; + + // Next point adjusted so create PL line can be tested better + surfaceLine.EnsurePointOfType(80.0, 3.0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(87.0, 3.0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(95.0, 3.0, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(107.0, 3.0, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(170.0, 3.0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(250.0, 3.0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + private static void CreateGeometryCurves0(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, 6); + var point2 = new GeometryPoint(20, 0, 8); + var point3 = new GeometryPoint(20, 0, 0); + var point4 = new GeometryPoint(0, 0, 0); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point4, point3); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves1(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, 9); + var point2 = new GeometryPoint(10, 0, 9); + var point3 = new GeometryPoint(20, 0, 9); + var point4 = new GeometryPoint(20, 0, 8); + var point5 = new GeometryPoint(0, 0, 6); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point5, point4); + var curve5 = new GeometryCurve(point5, point1); + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(point5); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + geometryModel.Create(curve5); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves2(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(10, 0, 9); + var point2 = new GeometryPoint(13, 0, 11); + var point3 = new GeometryPoint(20, 0, 11); + var point4 = new GeometryPoint(20, 0, 9); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point1, point4); + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves0ForBm4_01(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, -3.7); + var point2 = new GeometryPoint(45, 0, -4.0); + var point3 = new GeometryPoint(45, 0, -8); + var point4 = new GeometryPoint(0, 0, -8); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point4, point3); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves1ForBm4_01(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, -2.5); + var point2 = new GeometryPoint(45, 0, -2.4); + var point3 = new GeometryPoint(45, 0, -4.0); + var point4 = new GeometryPoint(0, 0, -3.7); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point4, point3); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves2ForBm4_01(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, -0.9); + var point2 = new GeometryPoint(45, 0, -1.5); + var point3 = new GeometryPoint(45, 0, -2.4); + var point4 = new GeometryPoint(0, 0, -2.5); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point4, point3); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves3ForBm4_01(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, 0.1); + var point2 = new GeometryPoint(4, 0, 0); + var point3 = new GeometryPoint(18.6, 0, 0.2); + var point4 = new GeometryPoint(23, 0, 0.1); + var point5 = new GeometryPoint(26, 0, -0.45); + var point6 = new GeometryPoint(28.5, 0, -0.48); + var point7 = new GeometryPoint(31, 0, 0); + var point8 = new GeometryPoint(45, 0, 0.1); + var point9 = new GeometryPoint(45, 0, -1.5); + var point10 = new GeometryPoint(0, 0, -0.9); + + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point4, point5); + var curve5 = new GeometryCurve(point5, point6); + var curve6 = new GeometryCurve(point6, point7); + var curve7 = new GeometryCurve(point7, point8); + var curve8 = new GeometryCurve(point8, point9); + var curve9 = new GeometryCurve(point9, point10); + var curve10 = new GeometryCurve(point10, point1); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(point5); + geometryModel.Create(point6); + geometryModel.Create(point7); + geometryModel.Create(point8); + geometryModel.Create(point9); + geometryModel.Create(point10); + + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + geometryModel.Create(curve5); + geometryModel.Create(curve6); + geometryModel.Create(curve7); + geometryModel.Create(curve8); + geometryModel.Create(curve9); + geometryModel.Create(curve10); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves4ForBm4_01(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point0 = new GeometryPoint(0, 0, 0.1); + var point1 = new GeometryPoint(4, 0, 0); + var point2 = new GeometryPoint(6.4, 0, 1.3); + var point3 = new GeometryPoint(7.9, 0, 1.5); + var point4 = new GeometryPoint(10, 0, 3); + var point5 = new GeometryPoint(13, 0, 3.2); + var point6 = new GeometryPoint(15.6, 0, 1.2); + var point7 = new GeometryPoint(17, 0, 1); + var point8 = new GeometryPoint(18.6, 0, 0.2); + var point9 = new GeometryPoint(23, 0, 0.1); + var point10 = new GeometryPoint(26, 0, -0.45); + var point11 = new GeometryPoint(28.5, 0, -0.48); + var point12 = new GeometryPoint(31, 0, 0); + var point13 = new GeometryPoint(45, 0, 0.1); + var point14 = new GeometryPoint(45, 0, -1.5); + var point15 = new GeometryPoint(0, 0, -0.9); + + var curve0 = new GeometryCurve(point0, point1); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point4, point5); + var curve5 = new GeometryCurve(point5, point6); + var curve6 = new GeometryCurve(point6, point7); + var curve7 = new GeometryCurve(point7, point8); + var curve8 = new GeometryCurve(point8, point9); + var curve9 = new GeometryCurve(point9, point10); + var curve10 = new GeometryCurve(point10, point11); + var curve11 = new GeometryCurve(point11, point12); + var curve12 = new GeometryCurve(point12, point13); + var curve13 = new GeometryCurve(point13, point14); + var curve14 = new GeometryCurve(point14, point15); + var curve15 = new GeometryCurve(point15, point0); + + geometryModel.Create(point0); + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(point5); + geometryModel.Create(point6); + geometryModel.Create(point7); + geometryModel.Create(point8); + geometryModel.Create(point9); + geometryModel.Create(point10); + geometryModel.Create(point11); + geometryModel.Create(point12); + geometryModel.Create(point13); + geometryModel.Create(point14); + geometryModel.Create(point15); + + geometryModel.Create(curve0); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + geometryModel.Create(curve5); + geometryModel.Create(curve6); + geometryModel.Create(curve7); + geometryModel.Create(curve8); + geometryModel.Create(curve9); + geometryModel.Create(curve10); + geometryModel.Create(curve11); + geometryModel.Create(curve12); + geometryModel.Create(curve13); + geometryModel.Create(curve14); + geometryModel.Create(curve15); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves0ForBm402(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, -13); + var point2 = new GeometryPoint(220, 0, -15); + var point3 = new GeometryPoint(220, 0, -20); + var point4 = new GeometryPoint(0, 0, -20); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point4, point3); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves1ForBm402(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, -10); + var point2 = new GeometryPoint(220, 0, -9); + var point3 = new GeometryPoint(220, 0, -13); + var point4 = new GeometryPoint(0, 0, -15); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point4, point3); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves2ForBm402(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, -6); + var point2 = new GeometryPoint(250, 0, -8); + var point3 = new GeometryPoint(250, 0, -9); + var point4 = new GeometryPoint(0, 0, -10); + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point4, point3); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurves3ForBm402(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0, 0, 50); + var point2 = new GeometryPoint(250, 0, 50); + var point3 = new GeometryPoint(250, 0, -8); + var point4 = new GeometryPoint(0, 0, -6); + + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point4, point3); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void AddCurvesToLayer2DGeometrySurface(SoilLayer2D layer2D, GeometryData geometryModel) + { + int index = geometryModel.Surfaces.Count - 1; + layer2D.GeometrySurface = geometryModel.Surfaces[index]; + layer2D.GeometrySurface.Name = "surface " + index; + } + + private static void CreateGeometryCurvesZand1(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0.000, 0, -14.000); + var point2 = new GeometryPoint(120.000, 0, -14.000); + var point3 = new GeometryPoint(120.000, 0, -20.000); + var point4 = new GeometryPoint(0.000, 0, -20.000); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurvesKlei2(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0.000, 0, -8.000); + var point2 = new GeometryPoint(120.000, 0, -8.000); + var point3 = new GeometryPoint(120.000, 0, -14.000); + var point4 = new GeometryPoint(0.000, 0, -14.000); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurvesVeen3(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0.000, 0, -5.000); + var point2 = new GeometryPoint(120.000, 0, -5.000); + var point3 = new GeometryPoint(120.000, 0, -8.000); + var point4 = new GeometryPoint(0.000, 0, -8.000); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurvesKlei4(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(0.000, 0, 0.000); + var point2 = new GeometryPoint(20.000, 0, 0.000); + var point3 = new GeometryPoint(67.500, 0, 0.000); + var point4 = new GeometryPoint(75.000, 0, 0.000); + var point5 = new GeometryPoint(78.000, 0, -1.500); + var point6 = new GeometryPoint(88.000, 0, -1.500); + var point7 = new GeometryPoint(91.000, 0, 0.000); + var point8 = new GeometryPoint(120.000, 0, 0.000); + var point9 = new GeometryPoint(120.000, 0, -5.000); + var point10 = new GeometryPoint(0.000, 0, -5.000); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + geometryModel.Create(point5); + geometryModel.Create(point6); + geometryModel.Create(point7); + geometryModel.Create(point8); + geometryModel.Create(point9); + geometryModel.Create(point10); + + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point4, point5); + var curve5 = new GeometryCurve(point5, point6); + var curve6 = new GeometryCurve(point6, point7); + var curve7 = new GeometryCurve(point7, point8); + var curve8 = new GeometryCurve(point8, point9); + var curve9 = new GeometryCurve(point9, point10); + var curve10 = new GeometryCurve(point10, point1); + + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + geometryModel.Create(curve5); + geometryModel.Create(curve6); + geometryModel.Create(curve7); + geometryModel.Create(curve8); + geometryModel.Create(curve9); + geometryModel.Create(curve10); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + private static void CreateGeometryCurvesKlei5(SoilLayer2D layer2D, GeometryData geometryModel) + { + var point1 = new GeometryPoint(20.000, 0, 0.000); + var point2 = new GeometryPoint(35.000, 0, 7.500); + var point3 = new GeometryPoint(45.000, 0, 7.500); + var point4 = new GeometryPoint(67.500, 0, 0.000); + + geometryModel.Create(point1); + geometryModel.Create(point2); + geometryModel.Create(point3); + geometryModel.Create(point4); + + var curve1 = new GeometryCurve(point1, point2); + var curve2 = new GeometryCurve(point2, point3); + var curve3 = new GeometryCurve(point3, point4); + var curve4 = new GeometryCurve(point4, point1); + + geometryModel.Create(curve1); + geometryModel.Create(curve2); + geometryModel.Create(curve3); + geometryModel.Create(curve4); + + geometryModel.RegenerateGeometry(); + AddCurvesToLayer2DGeometrySurface(layer2D, geometryModel); + } + + public static SoilProfile1D CreateTestProfile() + { + var sand = new Soil(); + sand.Name = "zand"; + sand.AbovePhreaticLevel = 15; + sand.BelowPhreaticLevel = 17; + sand.SoilType = SoilType.Sand; + + var clay = new Soil(); + clay.Name = "klei"; + clay.AbovePhreaticLevel = 18; + clay.BelowPhreaticLevel = 20; + clay.SoilType = SoilType.Clay; + + var clay2 = new Soil(); + clay2.Name = "klei2"; + clay2.AbovePhreaticLevel = 20; + clay2.BelowPhreaticLevel = 22; + clay2.SoilType = SoilType.Clay; + + var soilProfile = new SoilProfile1D(); + soilProfile.Name = "TestProf"; + + var layer1 = new SoilLayer1D(); + layer1.Name = "layer1"; + layer1.TopLevel = 10; + layer1.Soil = clay; + layer1.IsAquifer = false; + soilProfile.Layers.Add(layer1); + + var layer2 = new SoilLayer1D(); + layer2.Name = "layer2"; + layer2.TopLevel = -3; + layer2.Soil = clay2; + layer2.IsAquifer = false; + soilProfile.Layers.Add(layer2); + + var layer3 = new SoilLayer1D(); + layer3.Name = "layer3"; + layer3.TopLevel = -10; + layer3.Soil = sand; + layer3.IsAquifer = true; + soilProfile.Layers.Add(layer3); + + return soilProfile; + } + + public static SoilProfile1D CreateSimpleTestProfile() + { + var sand = new Soil(); + sand.Name = "zand"; + sand.AbovePhreaticLevel = 15; + sand.BelowPhreaticLevel = 17; + sand.SoilType = SoilType.Sand; + + var clay = new Soil(); + clay.Name = "klei"; + clay.AbovePhreaticLevel = 18; + clay.BelowPhreaticLevel = 20; + clay.SoilType = SoilType.Clay; + + var soilProfile = new SoilProfile1D(); + soilProfile.Name = "TestProf"; + + var layer1 = new SoilLayer1D(); + layer1.Name = "layer1"; + layer1.TopLevel = 10; + layer1.Soil = clay; + layer1.IsAquifer = false; + soilProfile.Layers.Add(layer1); + + var layer2 = new SoilLayer1D(); + layer2.Name = "layer2"; + layer2.TopLevel = -3; + layer2.Soil = sand; + layer2.IsAquifer = true; + soilProfile.Layers.Add(layer2); + + return soilProfile; + } + + public static SoilProfile1D CreateTestProfileTwoAquifers() + { + var sandTop = new Soil(); + sandTop.Name = "zandtop"; + sandTop.AbovePhreaticLevel = 18; + sandTop.BelowPhreaticLevel = 20; + sandTop.SoilType = SoilType.Sand; + + var clay = new Soil(); + clay.Name = "klei"; + clay.AbovePhreaticLevel = 18; + clay.BelowPhreaticLevel = 20; + clay.SoilType = SoilType.Clay; + + var sandBottom = new Soil(); + sandBottom.Name = "zandbottom"; + sandBottom.AbovePhreaticLevel = 15; + sandBottom.BelowPhreaticLevel = 17; + sandBottom.SoilType = SoilType.Sand; + + var peat = new Soil(); + peat.Name = "veen"; + peat.AbovePhreaticLevel = 5; + peat.BelowPhreaticLevel = 10.5; + peat.SoilType = SoilType.Peat; + + var soilProfile = new SoilProfile1D(); + soilProfile.Name = "TestProf"; + + var layer1 = new SoilLayer1D(); + layer1.Name = "layer1"; + layer1.TopLevel = 10; + layer1.Soil = clay; + layer1.IsAquifer = false; + soilProfile.Layers.Add(layer1); + + var layer2 = new SoilLayer1D(); + layer2.Name = "layer2"; + layer2.TopLevel = -5; + layer2.Soil = sandTop; + layer2.IsAquifer = true; + soilProfile.Layers.Add(layer2); + + var layer3 = new SoilLayer1D(); + layer3.Name = "layer3"; + layer3.TopLevel = -6; + layer3.Soil = peat; + layer3.IsAquifer = false; + soilProfile.Layers.Add(layer3); + + var layer4 = new SoilLayer1D(); + layer4.Name = "layer4"; + layer4.TopLevel = -10; + layer4.Soil = sandBottom; + layer4.IsAquifer = true; + soilProfile.Layers.Add(layer4); + + var layer5 = new SoilLayer1D(); + layer5.Name = "layer5"; + layer5.TopLevel = -13; + layer5.Soil = clay; + layer5.IsAquifer = false; + soilProfile.Layers.Add(layer5); + + return soilProfile; + } + + public static SoilProfile1D CreateTestProfileThreeCoverSublayersOneAquifer() + { + var coverSublayer1 = new Soil(); + coverSublayer1.Name = "cover sublayer 1"; + coverSublayer1.AbovePhreaticLevel = 15; + coverSublayer1.BelowPhreaticLevel = 17; + coverSublayer1.SoilType = SoilType.Clay; + + var coverSublayer2 = new Soil(); + coverSublayer2.Name = "cover sublayer 2"; + coverSublayer2.AbovePhreaticLevel = 12; + coverSublayer2.BelowPhreaticLevel = 14; + coverSublayer2.SoilType = SoilType.Clay; + + var coverSublayer3 = new Soil(); + coverSublayer3.Name = "cover sublayer 3"; + coverSublayer3.AbovePhreaticLevel = 10; + coverSublayer3.BelowPhreaticLevel = 10.5; + coverSublayer3.SoilType = SoilType.Peat; + + var pleistocene = new Soil(); + pleistocene.Name = "pleistocene"; + pleistocene.AbovePhreaticLevel = 18; + pleistocene.BelowPhreaticLevel = 20; + pleistocene.SoilType = SoilType.Sand; + + var soilProfile = new SoilProfile1D(); + soilProfile.Name = "TestProfileWithThreeCoverSublayersOneAquifer"; + + var layer1 = new SoilLayer1D(); + layer1.Name = "layer1"; + layer1.TopLevel = 100; + layer1.Soil = coverSublayer1; + layer1.IsAquifer = false; + soilProfile.Layers.Add(layer1); + + var layer2 = new SoilLayer1D(); + layer2.Name = "layer2"; + layer2.TopLevel = -1.9; + layer2.Soil = coverSublayer2; + layer2.IsAquifer = false; + soilProfile.Layers.Add(layer2); + + var layer3 = new SoilLayer1D(); + layer3.Name = "layer3"; + layer3.TopLevel = -2.5; + layer3.Soil = coverSublayer3; + layer3.IsAquifer = false; + soilProfile.Layers.Add(layer3); + + var layer4 = new SoilLayer1D(); + layer4.Name = "layer4"; + layer4.TopLevel = -3.1; + layer4.Soil = pleistocene; + layer4.IsAquifer = true; + soilProfile.Layers.Add(layer4); + + return soilProfile; + } + + public static SoilProfile1D CreateTestProfileTwoCoverSublayersTwoAquifers() + { + var coverSublayer1 = new Soil(); + coverSublayer1.Name = "cover sublayer 1"; + coverSublayer1.AbovePhreaticLevel = 15; + coverSublayer1.BelowPhreaticLevel = 17; + coverSublayer1.SoilType = SoilType.Clay; + + var coverSublayer2 = new Soil(); + coverSublayer2.Name = "cover sublayer 2"; + coverSublayer2.AbovePhreaticLevel = 12; + coverSublayer2.BelowPhreaticLevel = 14; + coverSublayer2.SoilType = SoilType.Clay; + + var aquifer1 = new Soil(); + aquifer1.Name = "aquifer 1"; + aquifer1.AbovePhreaticLevel = 10; + aquifer1.BelowPhreaticLevel = 10.5; + aquifer1.SoilType = SoilType.Peat; + + var aquifer2 = new Soil(); + aquifer2.Name = "aquifer 2"; + aquifer2.AbovePhreaticLevel = 18; + aquifer2.BelowPhreaticLevel = 20; + aquifer2.SoilType = SoilType.Sand; + + var soilProfile = new SoilProfile1D(); + soilProfile.Name = "TestProfileWithTwoCoverSublayersTwoAquifers"; + + var layer1 = new SoilLayer1D(); + layer1.Name = "layer1"; + layer1.TopLevel = 100; + layer1.Soil = coverSublayer1; + layer1.IsAquifer = false; + soilProfile.Layers.Add(layer1); + + var layer2 = new SoilLayer1D(); + layer2.Name = "layer2"; + layer2.TopLevel = -1.9; + layer2.Soil = coverSublayer2; + layer2.IsAquifer = false; + soilProfile.Layers.Add(layer2); + + var layer3 = new SoilLayer1D(); + layer3.Name = "layer3"; + layer3.TopLevel = -2.5; + layer3.Soil = aquifer1; + layer3.IsAquifer = true; + soilProfile.Layers.Add(layer3); + + var layer4 = new SoilLayer1D(); + layer4.Name = "layer4"; + layer4.TopLevel = -3.1; + layer4.Soil = aquifer2; + layer4.IsAquifer = true; + soilProfile.Layers.Add(layer4); + + return soilProfile; + } + + public static SoilProfile1D CreateTestProfileOneCoverLayerOneInBetweenAquifer() + { + var coverLayer = new Soil(); + coverLayer.Name = "cover layer"; + coverLayer.AbovePhreaticLevel = 15; + coverLayer.BelowPhreaticLevel = 17; + coverLayer.SoilType = SoilType.Clay; + + var inBetweenAquifer = new Soil(); + inBetweenAquifer.Name = "in between aquifer"; + inBetweenAquifer.AbovePhreaticLevel = 12; + inBetweenAquifer.BelowPhreaticLevel = 14; + inBetweenAquifer.SoilType = SoilType.Clay; + + var deepAquitard = new Soil(); + deepAquitard.Name = "deep aquitard"; + deepAquitard.AbovePhreaticLevel = 10; + deepAquitard.BelowPhreaticLevel = 10.5; + deepAquitard.SoilType = SoilType.Peat; + + var deepAquifer = new Soil(); + deepAquifer.Name = "deep aquifer"; + deepAquifer.AbovePhreaticLevel = 18; + deepAquifer.BelowPhreaticLevel = 20; + deepAquifer.SoilType = SoilType.Sand; + + var soilProfile = new SoilProfile1D(); + soilProfile.Name = "TestProfileWithOneCoverLayerOneInBetweenAquifer"; + + var layer1 = new SoilLayer1D(); + layer1.Name = "layer1"; + layer1.TopLevel = 100; + layer1.Soil = coverLayer; + layer1.IsAquifer = false; + soilProfile.Layers.Add(layer1); + + var layer2 = new SoilLayer1D(); + layer2.Name = "layer2"; + layer2.TopLevel = -1.9; + layer2.Soil = inBetweenAquifer; + layer2.IsAquifer = true; + soilProfile.Layers.Add(layer2); + + var layer3 = new SoilLayer1D(); + layer3.Name = "layer3"; + layer3.TopLevel = -2.5; + layer3.Soil = deepAquitard; + layer3.IsAquifer = false; + soilProfile.Layers.Add(layer3); + + var layer4 = new SoilLayer1D(); + layer4.Name = "layer4"; + layer4.TopLevel = -3.1; + layer4.Soil = deepAquifer; + layer4.IsAquifer = true; + soilProfile.Layers.Add(layer4); + + return soilProfile; + } + } +} \ No newline at end of file Index: DamClients/DamUI/trunk/src/Dam/Tests/CsvExportCharacteristicPointsTest.cs =================================================================== diff -u -r3527 -r3823 --- DamClients/DamUI/trunk/src/Dam/Tests/CsvExportCharacteristicPointsTest.cs (.../CsvExportCharacteristicPointsTest.cs) (revision 3527) +++ DamClients/DamUI/trunk/src/Dam/Tests/CsvExportCharacteristicPointsTest.cs (.../CsvExportCharacteristicPointsTest.cs) (revision 3823) @@ -19,25 +19,19 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; +using System.Collections.Generic; +using System.IO; +using NUnit.Framework; +using Deltares.Dam.Data; using Deltares.Dam.Data.CsvImporters; -using Deltares.Dam.TestHelper; +using Deltares.Dam.TestHelper.TestUtils; +using Deltares.Dam.Tests.TestUtils; using Deltares.Geometry; -using Deltares.Geotechnics; using Deltares.Geotechnics.SurfaceLines; -using Deltares.Geotechnics.TestUtils; namespace Deltares.Dam.Tests { - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Text; - using NUnit.Framework; - using Deltares.Dam.Data; - using Deltares.Dam.Data.Importers; - - [TestFixture] public class CsvExportCharacteristicPointsTest { Index: DamClients/DamUI/trunk/src/Dam/Tests/Memoryleaks/DamMemoryLeakTests.cs =================================================================== diff -u -r3822 -r3823 --- DamClients/DamUI/trunk/src/Dam/Tests/Memoryleaks/DamMemoryLeakTests.cs (.../DamMemoryLeakTests.cs) (revision 3822) +++ DamClients/DamUI/trunk/src/Dam/Tests/Memoryleaks/DamMemoryLeakTests.cs (.../DamMemoryLeakTests.cs) (revision 3823) @@ -21,6 +21,7 @@ using System.Collections.Generic; using Deltares.Dam.Data; +using Deltares.Dam.TestHelper.TestUtils; using Deltares.Dam.Tests.TestUtils; using Deltares.Geometry; using Deltares.Geotechnics.GeotechnicalGeometry; Index: DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/FactoryForSurfaceLineTests.cs =================================================================== diff -u --- DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/FactoryForSurfaceLineTests.cs (revision 0) +++ DamClients/DamUI/trunk/src/Dam/Tests/TestHelper/TestUtils/FactoryForSurfaceLineTests.cs (revision 3823) @@ -0,0 +1,535 @@ +// Copyright (C) Stichting Deltares 2019. All rights reserved. +// +// This file is part of the Delta Shell Light Library. +// +// The Delta Shell Light Library is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU 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.Geometry; +using Deltares.Geotechnics.GeotechnicalGeometry; +using Deltares.Geotechnics.SurfaceLines; + +namespace Deltares.Dam.TestHelper.TestUtils +{ + public class FactoryForSurfaceLineTests + { + /// + /// Create simple soil profile, that is almost the same as Tutorial 1 + /// + /// soil profile + public static SurfaceLine2 CreateSurfaceLineTutorial1(bool includingTraffic = false) + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + Name = "Tutorial1", + Geometry = new LocalizedGeometryPointString(), + CharacteristicPoints = + { + GeometryMustContainPoint = true + } + }; + + // Next point adjusted so create PL line can be tested better + surfaceLine.EnsurePointOfType(0.0, 0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(10.0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); + if (includingTraffic) + { + surfaceLine.EnsurePointOfType(35.0, 5, CharacteristicPointType.TrafficLoadOutside); + surfaceLine.EnsurePointOfType(38.5, 5, CharacteristicPointType.TrafficLoadInside); + } + surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(61.5, -2, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine CreateSurfaceLineTutorial2() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine + { + Name = "Tutorial1" + }; + + // Next point adjusted so create PL line can be tested better + surfaceLine.EnsurePointOfType(0.0, 0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(10.0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(61.5, -2, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine2 CreateSurfaceLineTutorial1WithOutsideShoulder() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + Name = "Tutorial1", + Geometry = new LocalizedGeometryPointString(), + CharacteristicPoints = + { + GeometryMustContainPoint = true + } + }; + + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(10, 0, CharacteristicPointType.DikeToeAtRiver); + //Berm + surfaceLine.EnsurePointOfType(10, 2, CharacteristicPointType.ShoulderTopOutside); + surfaceLine.EnsurePointOfType(27.5, 3, CharacteristicPointType.ShoulderBaseInside); + //End Berm + surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(61.5, -2, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(75.00, 0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine2 CreateSurfaceLineTutorial1MissingCharacteristicPointDikeTopAtRiver() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + Geometry = new LocalizedGeometryPointString(), + CharacteristicPoints = + { + GeometryMustContainPoint = true + } + }; + + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeToeAtPolder); + return surfaceLine; + } + + public static SurfaceLine2 CreateSurfaceLineTutorial1MissingCharacteristicPointDikeTopAtPolder() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + Geometry = new LocalizedGeometryPointString(), + CharacteristicPoints = + { + GeometryMustContainPoint = true + } + }; + + surfaceLine.EnsurePoint(0, 0); + surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeToeAtPolder); + return surfaceLine; + } + + public static SurfaceLine2 CreateSurfaceLineTutorial1MissingCharacteristicPointDikeToeAtPolder() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + Geometry = new LocalizedGeometryPointString(), + CharacteristicPoints = + { + GeometryMustContainPoint = true + } + }; + + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtPolder); + return surfaceLine; + } + + public static SurfaceLine2 CreateSurfaceLineTutorial1PhreaticLowerPolderWaterLevel() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + Geometry = new LocalizedGeometryPointString(), + CharacteristicPoints = + { + GeometryMustContainPoint = true + } + }; + + surfaceLine.EnsurePointOfType(0, -1, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(17, -1, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(61.5, -2, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine2 CreateSurfaceLineTutorial1PhreaticAboveSurface() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + Geometry = new LocalizedGeometryPointString(), + CharacteristicPoints = + { + GeometryMustContainPoint = true + } + }; + + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); + //Evil point (phreatic above surface) + surfaceLine.EnsurePoint(46, 0.250); + surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(60.5, -2, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine2 CreateSurfaceLineTutorial1WithShoulder() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + Geometry = new LocalizedGeometryPointString(), + CharacteristicPoints = + { + GeometryMustContainPoint = true + } + }; + + surfaceLine.EnsurePointOfType(0, 0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(17, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(48.25, 1.25, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(52.25, 1.25, CharacteristicPointType.ShoulderTopInside); + surfaceLine.EnsurePointOfType(54.75, 0.0, CharacteristicPointType.ShoulderBaseInside); + surfaceLine.EnsurePointOfType(58.5, 0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(59.5, -2, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(61.5, -2, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(61.5, 0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine2 CreateSurfaceLineForPipingBligh() + { + //Surface line tutorial 1 + var surfaceLine = new SurfaceLine2 + { + Geometry = new LocalizedGeometryPointString(), + CharacteristicPoints = + { + GeometryMustContainPoint = true + } + }; + + surfaceLine.EnsurePoint(0, 2.5); + surfaceLine.EnsurePoint(2, 2.5); + surfaceLine.EnsurePointOfType(3.5, 4, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePoint(5.5, 4); + surfaceLine.EnsurePointOfType(7.5, 2, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePoint(9.5, 2); + surfaceLine.EnsurePoint(10, 1.5); + surfaceLine.EnsurePoint(11, 2); + surfaceLine.EnsurePoint(13, 2); + + return surfaceLine; + } + + public static SurfaceLine2 CreateRealisticSurfaceLineForHeightAdapter() + { + var surfaceLine = new SurfaceLine2 + { + Geometry = new LocalizedGeometryPointString(), + CharacteristicPoints = + { + GeometryMustContainPoint = true + } + }; + var pointSurfaceLevelOutside = new GeometryPoint + { + X = -27.0, Z = 12.4 + }; + var pointDikeToeAtRiver = new GeometryPoint + { + X = -17.4, Z = 12.4 + }; + var pointDikeTopAtRiver = new GeometryPoint + { + X = 0, Z = 18.2 + }; + var pointTrafficLoadOutside = new GeometryPoint + { + X = 1.0, Z = 18.2 + }; + var pointTrafficLoadInside = new GeometryPoint + { + X = 6.0, Z = 18.2 + }; + var pointDikeTopAtPolder = new GeometryPoint + { + X = 7.0, Z = 18.2 + }; + var pointInsteekShoulderInside = new GeometryPoint + { + X = 26.520, Z = 12.10 + }; + var pointTopShoulderInside = new GeometryPoint + { + X = 26.620, Z = 12.10 + }; + var pointDikeToeAtPolder = new GeometryPoint + { + X = 26.840, Z = 12.0 + }; + var pointDitchDikeSide = new GeometryPoint + { + X = 29.840, Z = 12.0 + }; + var pointBottomDitchDikeSide = new GeometryPoint + { + X = 30.840, Z = 11.0 + }; + var pointBottomDitchPolderSide = new GeometryPoint + { + X = 38.840, Z = 11.0 + }; + var pointDitchPolderSide = new GeometryPoint + { + X = 39.840, Z = 12 + }; + var pointSurfaceLevelInside = new GeometryPoint + { + X = 140, Z = 12 + }; + + surfaceLine.EnsurePointOfType(pointSurfaceLevelOutside.X, pointSurfaceLevelOutside.Z, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(pointDikeToeAtRiver.X, pointDikeToeAtRiver.Z, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(pointDikeTopAtRiver.X, pointDikeTopAtRiver.Z, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(pointTrafficLoadOutside.X, pointTrafficLoadOutside.Z, CharacteristicPointType.TrafficLoadOutside); + surfaceLine.EnsurePointOfType(pointTrafficLoadInside.X, pointTrafficLoadInside.Z, CharacteristicPointType.TrafficLoadInside); + surfaceLine.EnsurePointOfType(pointDikeTopAtPolder.X, pointDikeTopAtPolder.Z, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(pointInsteekShoulderInside.X, pointInsteekShoulderInside.Z, CharacteristicPointType.ShoulderBaseInside); + surfaceLine.EnsurePointOfType(pointTopShoulderInside.X, pointTopShoulderInside.Z, CharacteristicPointType.ShoulderTopInside); + surfaceLine.EnsurePointOfType(pointDikeToeAtPolder.X, pointDikeToeAtPolder.Z, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(pointDitchDikeSide.X, pointDitchDikeSide.Z, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchDikeSide.X, pointBottomDitchDikeSide.Z, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(pointBottomDitchPolderSide.X, pointBottomDitchPolderSide.Z, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(pointDitchPolderSide.X, pointDitchPolderSide.Z, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(pointSurfaceLevelInside.X, pointSurfaceLevelInside.Z, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine2 CreateSurfaceLineBm4_01() + { + var surfaceLine = new SurfaceLine2 + { + CharacteristicPoints = + { + GeometryMustContainPoint = true + }, + Geometry = new LocalizedGeometryPointString() + }; + surfaceLine.EnsurePointOfType(0.0, 0.1, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(4.0, 0.0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(6.4, 1.3, CharacteristicPointType.ShoulderTopOutside); + surfaceLine.EnsurePointOfType(7.9, 1.5, CharacteristicPointType.ShoulderBaseOutside); + surfaceLine.EnsurePointOfType(10.0, 3.0, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(13, 3.2, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(15.6, 1.2, CharacteristicPointType.ShoulderBaseInside); + surfaceLine.EnsurePointOfType(17, 1.0, CharacteristicPointType.ShoulderTopInside); + surfaceLine.EnsurePointOfType(18.6, 0.2, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(23, 0.1, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(26, -0.45, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(28.5, -0.48, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(31, 0.0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(45, 0.1, CharacteristicPointType.SurfaceLevelInside); + return surfaceLine; + } + + public static SurfaceLine2 CreateSurfaceLineBm4_02() + { + var surfaceLine = new SurfaceLine2 + { + CharacteristicPoints = + { + GeometryMustContainPoint = true + }, + Geometry = new LocalizedGeometryPointString() + }; + surfaceLine.EnsurePointOfType(0.0, 1.0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(30.0, 0.0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(45.0, 6.0, CharacteristicPointType.ShoulderTopOutside); + surfaceLine.EnsurePointOfType(55.0, 7.0, CharacteristicPointType.ShoulderBaseOutside); + surfaceLine.EnsurePointOfType(80.0, 16.0, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(85.0, 16.3, CharacteristicPointType.TrafficLoadOutside); + surfaceLine.EnsurePointOfType(90.0, 16.6, CharacteristicPointType.TrafficLoadInside); + surfaceLine.EnsurePointOfType(95.0, 16.9, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(120.0, 5.5, CharacteristicPointType.ShoulderBaseInside); + surfaceLine.EnsurePointOfType(127.0, 4.8, CharacteristicPointType.ShoulderTopInside); + surfaceLine.EnsurePointOfType(140.0, 0.5, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(165.0, 0.0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(175.0, -3.4, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(188.0, -3.0, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(200.0, 0.0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(220.0, -0.5, CharacteristicPointType.SurfaceLevelInside); + return surfaceLine; + } + + public static SurfaceLine CreateSimpleSurfaceLineForExitPointTest() + { + var surfaceLine = new SurfaceLine + { + Name = "SimpleExitPoint" + }; + + surfaceLine.EnsurePointOfType(0.0, 0, CharacteristicPointType.SurfaceLevelOutside); + surfaceLine.EnsurePointOfType(10.0, 0, CharacteristicPointType.DikeToeAtRiver); + surfaceLine.EnsurePointOfType(34.5, 5, CharacteristicPointType.DikeTopAtRiver); + surfaceLine.EnsurePointOfType(40.5, 5, CharacteristicPointType.DikeTopAtPolder); + surfaceLine.EnsurePointOfType(50.5, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePoint(60.5, -1); + surfaceLine.EnsurePointOfType(75.0, 0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine CreateHorizontalSurfaceLineForBenchmark1() + { + var surfaceLine = new SurfaceLine + { + Name = "HorizontalLine" + }; + + surfaceLine.EnsurePointOfType(30, -0.2, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(70, -0.2, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine CreateDescendingSurfaceLineForBenchmark2() + { + var surfaceLine = new SurfaceLine + { + Name = "NonHorizontalLine" + }; + + surfaceLine.EnsurePointOfType(30, -0.2, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(70, -1.8, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine CreateHorizontalSurfaceLineWithSymmetricalDitchForBenchmark5() + { + var surfaceLine = new SurfaceLine + { + Name = "HorizontalLineWithSymmetricalDitch" + }; + + surfaceLine.EnsurePointOfType(30, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(35, 0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(36, -1.2, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(37, -1.2, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(38, 0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(70, 0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine CreateNonHorizontalLineWithAsymmetricalDitchForBenchmark6() + { + var surfaceLine = new SurfaceLine + { + Name = "NonHorizontalLineWithAsymmetricalDitch" + }; + + surfaceLine.EnsurePointOfType(30, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(35.2, -0.208, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(36, -1.2, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(37, -1.3, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(38, -0.5, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(70, -0.8, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine CreateSurfaceLineWithAsymmetricalDitchHighPolderSide() + { + var surfaceLine = new SurfaceLine + { + Name = "AsymmetricalDitchHighPolderSide" + }; + + surfaceLine.EnsurePointOfType(30, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(35, 0, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(36, -1, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(37, -1, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(38, 1, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(70, 0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + + public static SurfaceLine CreateSurfaceLineWithAsymmetricalDitchHighDikeSide() + { + var surfaceLine = new SurfaceLine + { + Name = "AsymmetricalDitchHighPolderSide" + }; + + surfaceLine.EnsurePointOfType(30, 0, CharacteristicPointType.DikeToeAtPolder); + surfaceLine.EnsurePointOfType(35, 3, CharacteristicPointType.DitchDikeSide); + surfaceLine.EnsurePointOfType(36, -1, CharacteristicPointType.BottomDitchDikeSide); + surfaceLine.EnsurePointOfType(37, -1, CharacteristicPointType.BottomDitchPolderSide); + surfaceLine.EnsurePointOfType(38, 0, CharacteristicPointType.DitchPolderSide); + surfaceLine.EnsurePointOfType(70, 0, CharacteristicPointType.SurfaceLevelInside); + + return surfaceLine; + } + } +} \ No newline at end of file Index: DamClients/DamUI/trunk/src/Dam/Tests/EntityFactoryTest.cs =================================================================== diff -u -r3527 -r3823 --- DamClients/DamUI/trunk/src/Dam/Tests/EntityFactoryTest.cs (.../EntityFactoryTest.cs) (revision 3527) +++ DamClients/DamUI/trunk/src/Dam/Tests/EntityFactoryTest.cs (.../EntityFactoryTest.cs) (revision 3823) @@ -19,15 +19,15 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using Deltares.Geometry; -using Deltares.Geotechnics.GeotechnicalGeometry; using System; using System.Collections.Generic; using System.Linq; using Deltares.Dam.Data; +using Deltares.Dam.TestHelper.TestUtils; +using Deltares.Geometry; +using Deltares.Geotechnics.GeotechnicalGeometry; using Deltares.Geotechnics.Soils; using Deltares.Geotechnics.SurfaceLines; -using Deltares.Geotechnics.TestUtils; using NUnit.Framework; namespace Deltares.Dam.Tests @@ -41,8 +41,8 @@ [TestFixtureSetUp] public void FixtureSetup() { - this.soilProfile = FactoryForSoilProfileTests.CreateSimpleProfile(); - this.soilProfile.Name = "1"; + soilProfile = FactoryForSoilProfileTests.CreateSimpleProfile(); + soilProfile.Name = "1"; } [SetUp] @@ -82,50 +82,50 @@ [Test] public void DoesntThrowExceptionWhenCollectionsAreEmpty() { - factory = new EntityFactory(new List { }, new List { soilProfile }, new List { }); + factory = new EntityFactory(new List(), new List { soilProfile }, new List()); var segment = factory.CreateSegment("1", "1", 0, FailureMechanismSystemType.StabilityInside, null); Assert.IsNotNull(segment); } [Test] public void DoesntThrowExceptionWhenSegmentCollectionIsNull() { - factory = new EntityFactory(new List { }, new List { soilProfile }, null); + factory = new EntityFactory(new List(), new List { soilProfile }, null); var segment = factory.CreateSegment("1", "1", 0, FailureMechanismSystemType.StabilityInside, null); Assert.IsNotNull(segment); } [Test] public void DoesntThrowExceptionWhenSegmentCollectionsContainsNullItems() { - factory = new EntityFactory(new List { }, new List { soilProfile }, new List { null }); + factory = new EntityFactory(new List(), new List { soilProfile }, new List { null }); var segment = factory.CreateSegment("1", "1", 0, FailureMechanismSystemType.StabilityInside, null); Assert.IsNotNull(segment); } [Test] public void DoesntThrowExceptionWhenLocationCollectionIsNull() { - factory = new EntityFactory(null, new List { soilProfile }, new List { }); + factory = new EntityFactory(null, new List { soilProfile }, new List()); var segment = factory.CreateSegment("1", "1", 0, FailureMechanismSystemType.StabilityInside, null); Assert.IsNotNull(segment); } [Test] public void DoesntThrowExceptionWhenLocationCollectionContainsNullItems() { - factory = new EntityFactory(new List { null }, new List { soilProfile }, new List { }); + factory = new EntityFactory(new List { null }, new List { soilProfile }, new List()); var segment = factory.CreateSegment("1", "1", 0, FailureMechanismSystemType.StabilityInside, null); Assert.IsNotNull(segment); } [Test] public void CanCreateSegment() { - factory = new EntityFactory(new List { }, new List { soilProfile }, new List { }); + factory = new EntityFactory(new List(), new List { soilProfile }, new List()); var segment = factory.CreateSegment("1", "1", 20, FailureMechanismSystemType.StabilityInside, null); Assert.AreEqual("1", segment.Name); - Assert.AreEqual(20, segment.GetSoilProfileProbability(this.soilProfile, FailureMechanismSystemType.StabilityInside)); + Assert.AreEqual(20, segment.GetSoilProfileProbability(soilProfile, FailureMechanismSystemType.StabilityInside)); Assert.AreEqual("1", segment.GetMostProbableProfile(FailureMechanismSystemType.StabilityInside).Name); Assert.AreEqual(1, factory.SoilProfiles.Count()); } @@ -217,15 +217,15 @@ public void DoesntThrowExceptionWhenSegmentAlreadyExist() { const string segmentId = "1"; - var segment = new Dam.Data.Segment() - { + var segment = new Segment + { Name = segmentId }; factory = new EntityFactory( null, new List { soilProfile }, - new List + new List { segment }); @@ -239,7 +239,7 @@ const string exptectedLocationName = "SomeLocation"; using (var location = new Location { - Segment = new Dam.Data.Segment { Name = "1" }, + Segment = new Segment { Name = "1" }, Name = exptectedLocationName }) { @@ -251,7 +251,7 @@ Assert.AreEqual("1", segment.Name); Assert.AreEqual(1, factory.Locations.Count()); Assert.AreEqual(exptectedLocationName, factory.Locations[0].Name); - Assert.AreEqual(20, segment.GetSoilProfileProbability(this.soilProfile, FailureMechanismSystemType.StabilityInside)); + Assert.AreEqual(20, segment.GetSoilProfileProbability(soilProfile, FailureMechanismSystemType.StabilityInside)); Assert.AreEqual("1", segment.GetMostProbableProfile(FailureMechanismSystemType.StabilityInside).Name); } } @@ -264,8 +264,8 @@ null, new List { - new SoilProfile1D() - { + new SoilProfile1D + { Name = exptectedName } },