// Copyright (C) Stichting Deltares 2023. All rights reserved. // // This file is part of the Dam Engine. // // The Dam Engine is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using Deltares.DamEngine.Data.Design; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.TestHelpers { /// /// Factory which creates instances of Dam data which can be used for testing. /// public static class DamEngineDataTestFactory { /// /// Creates the scenario for testing. /// /// The location. /// public static DesignScenario CreateScenario(Location location) { DesignScenario scenario = new DesignScenario { Location = location, LocationScenarioID = "ScenarioID" }; return scenario; } /// /// Creates the location for testing. /// /// The surface line. /// public static Location CreateLocation(SurfaceLine2 surfaceLine) { Location location = new Location(); var scenario = new DesignScenario(); location.Scenarios.Add(scenario); location.Name = "LocationName"; location.DikeEmbankmentMaterial = "OB1"; location.ShoulderEmbankmentMaterial = "OB2"; location.SoilList = CreateSoilList(); var dikeToe = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtRiver); dikeToe.Z = dikeToe.Z - 0.01; location.SurfaceLine = surfaceLine; return location; } /// /// Creates the soil list for the tests. /// /// public static SoilList CreateSoilList() { var soilList = new SoilList(); var s1 = new Soil("DKN5") { AbovePhreaticLevel = 17.5, BelowPhreaticLevel = 17.50, ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s1); var s2 = new Soil("DKN4") { AbovePhreaticLevel = 17.16, BelowPhreaticLevel = 17.16, ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s2); var s3 = new Soil("OA") { AbovePhreaticLevel = 18.00, BelowPhreaticLevel = 20.00, ShearStrengthModel = ShearStrengthModel.CPhi, FrictionAngle = 30, Cohesion = 0 }; soilList.Soils.Add(s3); var s4 = new Soil("DKN3"); s4.ShearStrengthModel = ShearStrengthModel.CPhi; soilList.Soils.Add(s4); var s5 = new Soil("LM") { AbovePhreaticLevel = 17.00, BelowPhreaticLevel = 17.50, ShearStrengthModel = ShearStrengthModel.CPhi, FrictionAngle = 10, Cohesion = 5 }; soilList.Soils.Add(s5); var s6 = new Soil("OB1") { AbovePhreaticLevel = 18.10, BelowPhreaticLevel = 20.10, ShearStrengthModel = ShearStrengthModel.CPhi, FrictionAngle = 31, Cohesion = 0 }; soilList.Soils.Add(s6); var s7 = new Soil("OB2") { AbovePhreaticLevel = 17.50, BelowPhreaticLevel = 19.50, ShearStrengthModel = ShearStrengthModel.CPhi, FrictionAngle = 34, Cohesion = 0 }; soilList.Soils.Add(s7); var s8 = new Soil("veen") { AbovePhreaticLevel = 10.15, BelowPhreaticLevel = 10.20, ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s8); var s9 = new Soil("Del_Tfg") { AbovePhreaticLevel = 10.15, BelowPhreaticLevel = 10.20, ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s9); var s10 = new Soil("Del_Tss_1") { AbovePhreaticLevel = 14.46, BelowPhreaticLevel = 14.50, ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s10); var s11 = new Soil("Del_Ffg") { AbovePhreaticLevel = 12.65, BelowPhreaticLevel = 12.70, ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s11); var s12 = new Soil("Del_Kms") { AbovePhreaticLevel = 18, BelowPhreaticLevel = 20, ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s12); var s13 = new Soil("Del_Ssc") { AbovePhreaticLevel = 18, BelowPhreaticLevel = 20, ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s13); var s14 = new Soil("DeL_Tcs") { AbovePhreaticLevel = 16.05, BelowPhreaticLevel = 17.74, ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s14); var s15 = new Soil("Del_Ppp") { AbovePhreaticLevel = 18, BelowPhreaticLevel = 20, ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s15); soilList.AquiferDictionary.Add(s1.Name, false); soilList.AquiferDictionary.Add(s2.Name, false); soilList.AquiferDictionary.Add(s3.Name, true); soilList.AquiferDictionary.Add(s4.Name, false); soilList.AquiferDictionary.Add(s5.Name, true); soilList.AquiferDictionary.Add(s6.Name, false); soilList.AquiferDictionary.Add(s7.Name, false); soilList.AquiferDictionary.Add(s8.Name, false); soilList.AquiferDictionary.Add(s9.Name, false); soilList.AquiferDictionary.Add(s10.Name, false); soilList.AquiferDictionary.Add(s11.Name, false); soilList.AquiferDictionary.Add(s12.Name, false); soilList.AquiferDictionary.Add(s13.Name, true); soilList.AquiferDictionary.Add(s14.Name, false); soilList.AquiferDictionary.Add(s15.Name, false); return soilList; } /// /// Creates a 2D soil profile for the tests. /// /// public static SoilProfile2D CreateSoilProfile2D(SoilList soiList) { SoilProfile2D soilProfile2D = new SoilProfile2D(); var geometry = new GeometryData(); geometry.Left = 0; geometry.Right = 100; geometry.Bottom = -10; soilProfile2D.Geometry = geometry; var layer = new SoilLayer2D { Name = "Layer 1" }; layer.Soil = soiList != null ? soiList.GetSoilByName("OA") : new Soil("OA", 18, 17); layer.Soil.ShearStrengthModel = ShearStrengthModel.CPhi; var outerLoop = new GeometryLoop(); var point1 = new Point2D(0, 1); geometry.Points.Add(point1); var point2 = new Point2D(100, 1); geometry.Points.Add(point2); var point3 = new Point2D(100, -5); geometry.Points.Add(point3); var point4 = new Point2D(0, -5); geometry.Points.Add(point4); var curve1 = new GeometryCurve(point1, point2); geometry.Curves.Add(curve1); outerLoop.CurveList.Add(curve1); var curve2 = new GeometryCurve(point2, point3); geometry.Curves.Add(curve2); outerLoop.CurveList.Add(curve2); var curve3 = new GeometryCurve(point3, point4); geometry.Curves.Add(curve3); outerLoop.CurveList.Add(curve3); var curve4 = new GeometryCurve(point4, point1); geometry.Curves.Add(curve4); outerLoop.CurveList.Add(curve4); geometry.Loops.Add(outerLoop); var surface1 = new GeometrySurface(outerLoop); geometry.Surfaces.Add(surface1); layer.GeometrySurface = surface1; layer.GeometrySurface.OuterLoop = outerLoop; layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Hydrostatic; layer.IsAquifer = true; soilProfile2D.Surfaces.Add(layer); layer = new SoilLayer2D { Name = "Layer 2" }; layer.Soil = soiList != null ? soiList.GetSoilByName("LM") : new Soil("LM", 18, 17); layer.Soil.ShearStrengthModel = ShearStrengthModel.CPhi; outerLoop = new GeometryLoop(); var point5 = new Point2D(0, -10); geometry.Points.Add(point5); var point6 = new Point2D(100, -10); geometry.Points.Add(point6); var curve5 = new GeometryCurve(point3, point6); geometry.Curves.Add(curve5); var curve6 = new GeometryCurve(point6, point5); geometry.Curves.Add(curve6); var curve7 = new GeometryCurve(point5, point4); geometry.Curves.Add(curve7); outerLoop.CurveList.Add(curve3); outerLoop.CurveList.Add(curve5); outerLoop.CurveList.Add(curve6); outerLoop.CurveList.Add(curve7); geometry.Loops.Add(outerLoop); var surface2 = new GeometrySurface(outerLoop); geometry.Surfaces.Add(surface2); layer.GeometrySurface = surface2; layer.GeometrySurface.OuterLoop = outerLoop; layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Hydrostatic; layer.IsAquifer = true; soilProfile2D.Geometry = geometry; soilProfile2D.Surfaces.Add(layer); return soilProfile2D; } /// /// Creates a 1D soil profile for the tests. /// /// public static SoilProfile1D CreateSoilProfile1D(SoilList soiList) { SoilProfile1D soilProfile1D = new SoilProfile1D(); soilProfile1D.BottomLevel = -40; var layer = new SoilLayer1D { Name = "Layer 1", Soil = soiList.GetSoilByName("OA") }; layer.TopLevel = -3; layer.IsAquifer = true; soilProfile1D.Layers.Add(layer); layer = new SoilLayer1D { Name = "Layer 2", Soil = soiList.GetSoilByName("LM") }; layer.TopLevel = -5; layer.IsAquifer = true; soilProfile1D.Layers.Add(layer); layer = new SoilLayer1D { Name = "Layer 3", Soil = soiList.GetSoilByName("LM") }; layer.TopLevel = -10; layer.IsAquifer = true; soilProfile1D.Layers.Add(layer); return soilProfile1D; } } }