// Copyright (C) Stichting Deltares 2024. All rights reserved. // // This file is part of the Dam Engine. // // The Dam Engine is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Geotechnics; namespace Deltares.DamEngine.TestHelpers.Factories; public class FactoryForSoilProfiles { /// /// 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 two layer 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 (SoilLayer1D 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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = 10.0; layer.Soil = new Soil("HW-OBO", 12.0, 10.0); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; 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 /// /// soil profile public static SoilProfile1D CreateClaySandClaySandProfileForPipingBligh() { SoilProfile1D soilProfile = CreateClaySandClaySandProfile(); foreach (SoilLayer1D layer in soilProfile.Layers) { layer.Soil.BelowPhreaticLevel = 1; layer.Soil.AbovePhreaticLevel = 1; layer.Soil.DiameterD70 = 0.00018; } return soilProfile; } /// /// Creates the clay sand profile for piping bligh. /// /// soil profile public static SoilProfile1D CreateClaySandProfileForPipingBligh() { SoilProfile1D soilProfile = CreateClaySandProfile(); foreach (SoilLayer1D 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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = 10.0; layer.Soil = new Soil("HW-OBO", 12.0, 10.0); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; layer.Soil.DryUnitWeight = layer.Soil.AbovePhreaticLevel - 1.0; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; 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.DryUnitWeight = layer.Soil.AbovePhreaticLevel - 1.0; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = -1.5; layer.Soil = new Soil("HW-DUN", 16.8, 15.8); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; layer.Soil.DryUnitWeight = layer.Soil.AbovePhreaticLevel - 1.0; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; 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.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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = 10.0; layer.Soil = new Soil("HW-OBO", 12.0, 10.0); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = -1.5; layer.Soil = new Soil("HW-DUN", 16.8, 15.8); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = -7.0; layer.Soil = new Soil("HW-DUN", 16.8, 15.8); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = 10.0; layer.Soil = new Soil("HW-OBO", 12.0, 10.0); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = 1.0; layer.Soil = new Soil("Alg-zand (0-30)", 10.0, 20.0); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = -1.5; layer.Soil = new Soil("HW-DUN", 16.8, 15.8); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = -7.0; layer.Soil = new Soil("HW-DUN", 16.8, 15.8); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); soilProfile.BottomLevel = -10.0; return soilProfile; } /// /// 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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = 10.0; layer.Soil = new Soil("HW-OBO", 12.0, 10.0); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = -1.5; layer.Soil = new Soil("HW-DUN", 16.8, 15.8); layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; 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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = 10.0; layer.Soil = new Soil("Topmaterial", 1.0, 1.0); layer.Soil.PermeabKx = 0.0003; layer.Soil.DiameterD70 = 0.0003; layer.Soil.WhitesConstant = 0.5; layer.Soil.BeddingAngle = 57.0; layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = -2.0; layer.Soil = new Soil("Sand upper", 22.0, 20.0); layer.Soil.PermeabKx = 0.0001; layer.Soil.DiameterD70 = 0.0002; layer.Soil.WhitesConstant = 0.25; layer.Soil.BeddingAngle = 37.0; layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = true; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = -3.99; layer.Soil = new Soil("Clay", 22.0, 20.0); layer.Soil.PermeabKx = 0.0001; layer.Soil.DiameterD70 = 0.0002; layer.Soil.WhitesConstant = 0.25; layer.Soil.BeddingAngle = 37.0; layer.Soil.DryUnitWeight = 0.01; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = -4.0; layer.Soil = new Soil("Sand lower", 22.0, 20.0); layer.Soil.PermeabKx = 0.0002; layer.Soil.DiameterD70 = 0.0003; layer.Soil.WhitesConstant = 0.35; layer.Soil.BeddingAngle = 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 { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = 10.0; layer.Soil = new Soil("Topmaterial", 14, 11) { PermeabKx = 0.0003, DiameterD70 = Physics.FactorMicroMeterToMeter * 300.0, WhitesConstant = 0.5, BeddingAngle = 57.0 }; layer.IsAquifer = false; soilProfile.Layers.Add(layer); layer = new SoilLayer1D { Name = GetNewUniqueLayerId(soilProfile) }; layer.TopLevel = -2.0; layer.Soil = new Soil("Sand", 22.0, 20.0) { PermeabKx = 0.0001, DiameterD70 = Physics.FactorMicroMeterToMeter * 200.0, WhitesConstant = 0.25, BeddingAngle = 37.0 }; layer.IsAquifer = true; soilProfile.Layers.Add(layer); soilProfile.BottomLevel = -10.0; return soilProfile; } /// /// Creates a test profile. /// /// soil profile public static SoilProfile1D CreateTestProfile() { var sand = new Soil(); sand.Name = "zand"; sand.AbovePhreaticLevel = 15; sand.BelowPhreaticLevel = 17; var clay = new Soil(); clay.Name = "klei"; clay.AbovePhreaticLevel = 18; clay.BelowPhreaticLevel = 20; var clay2 = new Soil(); clay2.Name = "klei2"; clay2.AbovePhreaticLevel = 20; clay2.BelowPhreaticLevel = 22; 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; } /// /// Creates a simple test profile. /// /// soil profile public static SoilProfile1D CreateSimpleTestProfile() { var sand = new Soil(); sand.Name = "zand"; sand.AbovePhreaticLevel = 15; sand.BelowPhreaticLevel = 17; var clay = new Soil(); clay.Name = "klei"; clay.AbovePhreaticLevel = 18; clay.BelowPhreaticLevel = 20; 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; } /// /// Creates a test profile with two aquifers. /// /// soil profile public static SoilProfile1D CreateTestProfileTwoAquifers() { var sandTop = new Soil(); sandTop.Name = "zandtop"; sandTop.AbovePhreaticLevel = 18; sandTop.BelowPhreaticLevel = 20; var clay = new Soil(); clay.Name = "klei"; clay.AbovePhreaticLevel = 18; clay.BelowPhreaticLevel = 20; var sandBottom = new Soil(); sandBottom.Name = "zandbottom"; sandBottom.AbovePhreaticLevel = 15; sandBottom.BelowPhreaticLevel = 17; var peat = new Soil(); peat.Name = "veen"; peat.AbovePhreaticLevel = 5; peat.BelowPhreaticLevel = 10.5; 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; } /// /// Creates a test profile with three cover sublayers and one aquifer. /// /// soil profile public static SoilProfile1D CreateTestProfileThreeCoverSublayersOneAquifer() { var coverSublayer1 = new Soil(); coverSublayer1.Name = "cover sublayer 1"; coverSublayer1.AbovePhreaticLevel = 15; coverSublayer1.BelowPhreaticLevel = 17; var coverSublayer2 = new Soil(); coverSublayer2.Name = "cover sublayer 2"; coverSublayer2.AbovePhreaticLevel = 12; coverSublayer2.BelowPhreaticLevel = 14; var coverSublayer3 = new Soil(); coverSublayer3.Name = "cover sublayer 3"; coverSublayer3.AbovePhreaticLevel = 10; coverSublayer3.BelowPhreaticLevel = 10.5; var pleistocene = new Soil(); pleistocene.Name = "pleistocene"; pleistocene.AbovePhreaticLevel = 18; pleistocene.BelowPhreaticLevel = 20; 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; } /// /// Creates a test profile with two cover sublayers and two aquifers. /// /// soil profile public static SoilProfile1D CreateTestProfileTwoCoverSublayersTwoAquifers() { var coverSublayer1 = new Soil(); coverSublayer1.Name = "cover sublayer 1"; coverSublayer1.AbovePhreaticLevel = 15; coverSublayer1.BelowPhreaticLevel = 17; var coverSublayer2 = new Soil(); coverSublayer2.Name = "cover sublayer 2"; coverSublayer2.AbovePhreaticLevel = 12; coverSublayer2.BelowPhreaticLevel = 14; var aquifer1 = new Soil(); aquifer1.Name = "aquifer 1"; aquifer1.AbovePhreaticLevel = 10; aquifer1.BelowPhreaticLevel = 10.5; var aquifer2 = new Soil(); aquifer2.Name = "aquifer 2"; aquifer2.AbovePhreaticLevel = 18; aquifer2.BelowPhreaticLevel = 20; 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; } /// /// Creates a test profile with one cover layer and one in-between aquifer. /// /// soil profile public static SoilProfile1D CreateTestProfileOneCoverLayerOneInBetweenAquifer() { var coverLayer = new Soil(); coverLayer.Name = "cover layer"; coverLayer.AbovePhreaticLevel = 15; coverLayer.BelowPhreaticLevel = 17; var inBetweenAquifer = new Soil(); inBetweenAquifer.Name = "in between aquifer"; inBetweenAquifer.AbovePhreaticLevel = 12; inBetweenAquifer.BelowPhreaticLevel = 14; var deepAquitard = new Soil(); deepAquitard.Name = "deep aquitard"; deepAquitard.AbovePhreaticLevel = 10; deepAquitard.BelowPhreaticLevel = 10.5; var deepAquifer = new Soil(); deepAquifer.Name = "deep aquifer"; deepAquifer.AbovePhreaticLevel = 18; deepAquifer.BelowPhreaticLevel = 20; 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; } private static string GetNewUniqueLayerId(SoilProfile1D soilProfile1D) { var num = 0; string id; do { id = "L" + num++; } while (soilProfile1D.GetLayerWithName(id) != null); return id; } }