// 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;
}
}