Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj =================================================================== diff -u -r1255 -r1256 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 1255) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 1256) @@ -70,6 +70,7 @@ + Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Uplift/SoilVolumeMassCalculatorEffectiveStressTest.cs =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Uplift/SoilVolumeMassCalculatorEffectiveStressTest.cs (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Uplift/SoilVolumeMassCalculatorEffectiveStressTest.cs (revision 1256) @@ -0,0 +1,222 @@ +using Deltares.DamEngine.Calculators.Uplift; +using Deltares.DamEngine.Data.Geotechnics; +using NUnit.Framework; + +namespace Deltares.Uplift.Tests +{ + [TestFixture] + internal class SoilVolumeMassCalculatorEffectiveStressTest + { + [Test] + public void CalculateWithExceedingMinimumThicknessCoverLayerAndLowSurfaceLevelFullySubmerged() + { + const double expectedResult = 109.000; + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 9.5; + soilVolumeMassCalculator.PhreaticLevel = 0; + soilVolumeMassCalculator.SurfaceLevel = -1.5; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -10; + soilVolumeMassCalculator.VolumicWeightOfWater = 10; + soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); + var result = soilVolumeMassCalculator.CalculateEffectiveStress(); + Assert.AreEqual(expectedResult, result, 0.001); + } + + [Test] + public void CalculateWithExceedingMinimumThicknessCoverLayerAndLowSurfaceLevelPartlySubmerged() + { + const double expectedResult = 121.000; + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 9.5; + soilVolumeMassCalculator.PhreaticLevel = -2; + soilVolumeMassCalculator.SurfaceLevel = -1.5; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -10; + soilVolumeMassCalculator.VolumicWeightOfWater = 10; + soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); + var result = soilVolumeMassCalculator.CalculateEffectiveStress(); + Assert.AreEqual(expectedResult, result, 0.001); + } + + [Test] + public void CalculateWithExceedingMinimumThicknessCoverLayerFullySubmerged() + { + const double expectedResult = 134.000; + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 12; + soilVolumeMassCalculator.PhreaticLevel = 5; + soilVolumeMassCalculator.SurfaceLevel = 0; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -10; + soilVolumeMassCalculator.VolumicWeightOfWater = 10; + soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); + var result = soilVolumeMassCalculator.CalculateEffectiveStress(); + Assert.AreEqual(expectedResult, result, 0.001); + } + + [Test] + public void CalculateWithExceedingMinimumThicknessCoverLayerPartlySubmerged() + { + const double expectedResult = 166.000; + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 12; + soilVolumeMassCalculator.PhreaticLevel = -2; + soilVolumeMassCalculator.SurfaceLevel = 0; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -10; + soilVolumeMassCalculator.VolumicWeightOfWater = 10; + soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); + var result = soilVolumeMassCalculator.CalculateEffectiveStress(); + Assert.AreEqual(expectedResult, result, 0.001); + } + + [Test] + public void CalculateWithoutExceedingMinimumThicknessCoverLayerAndLowSurfaceLevelFullySubmerged() + { + const double expectedResult = 99.000; + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 5; + soilVolumeMassCalculator.PhreaticLevel = 0; + soilVolumeMassCalculator.SurfaceLevel = -1.5; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -10; + soilVolumeMassCalculator.VolumicWeightOfWater = 10; + soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); + var result = soilVolumeMassCalculator.CalculateEffectiveStress(); + Assert.AreEqual(expectedResult, result, 0.001); + } + + [Test] + public void CalculateWithoutExceedingMinimumThicknessCoverLayerAndLowSurfaceLevelPartlySubmerged() + { + const double expectedResult = 103.000; + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 5; + soilVolumeMassCalculator.PhreaticLevel = -2; + soilVolumeMassCalculator.SurfaceLevel = -1.5; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -10; + soilVolumeMassCalculator.VolumicWeightOfWater = 10; + soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); + var result = soilVolumeMassCalculator.CalculateEffectiveStress(); + Assert.AreEqual(expectedResult, result, 0.001); + } + + [Test] + public void CalculateWithoutExceedingMinimumThicknessCoverLayerFullySubmerged() + { + const double expectedResult = 114.000; + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 10; + soilVolumeMassCalculator.SurfaceLevel = 0; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -10; + soilVolumeMassCalculator.VolumicWeightOfWater = 10; + soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); + var result = soilVolumeMassCalculator.CalculateEffectiveStress(); + Assert.AreEqual(expectedResult, result, 0.001); + } + + [Test] + public void CalculateWithoutExceedingMinimumThicknessCoverLayerPartlySubmerged() + { + const double expectedResult = 130.000; + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 10; + soilVolumeMassCalculator.PhreaticLevel = -2; + soilVolumeMassCalculator.SurfaceLevel = 0; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -10; + soilVolumeMassCalculator.VolumicWeightOfWater = 10; + soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); + var result = soilVolumeMassCalculator.CalculateEffectiveStress(); + Assert.AreEqual(expectedResult, result, 0.001); + } + + [Test] + [ExpectedException(typeof(SoilVolumicMassCalculatorException))] + public void ThrowsExceptionIfSoilProfileHasNoLayers() + { + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 10; + soilVolumeMassCalculator.SurfaceLevel = 2; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -1; + soilVolumeMassCalculator.SoilProfile = new SoilProfile1D(); + soilVolumeMassCalculator.CalculateEffectiveStress(); + } + + [Test] + [ExpectedException(typeof(SoilVolumicMassCalculatorException))] + public void ThrowsExceptionIfSoilProfileNotAssignedInSoilVolumeMassCalculator() + { + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 10; + soilVolumeMassCalculator.SurfaceLevel = 2; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -1; + soilVolumeMassCalculator.CalculateEffectiveStress(); + } + + [Test] + [ExpectedException(typeof(SoilVolumicMassCalculatorException))] + public void ThrowsExceptionIfSurfaceLevelNotInsideProfile() + { + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 10; + soilVolumeMassCalculator.PhreaticLevel = 0; + soilVolumeMassCalculator.SurfaceLevel = 2; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -1; + soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); + soilVolumeMassCalculator.CalculateEffectiveStress(); + } + + [Test] + [ExpectedException(typeof(SoilVolumicMassCalculatorException))] + public void ThrowsExceptionIfTopLayerToBeEvaluatedNotInsideProfile() + { + var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); + soilVolumeMassCalculator.MinimumThicknessCoverLayer = 10; + soilVolumeMassCalculator.PhreaticLevel = 0; + soilVolumeMassCalculator.SurfaceLevel = 0; + soilVolumeMassCalculator.TopOfLayerToBeEvaluated = 10; + soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); + soilVolumeMassCalculator.CalculateEffectiveStress(); + } + + public 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 = 0; + layer1.Soil = clay; + soilProfile.Layers.Add(layer1); + + var layer2 = new SoilLayer1D(); + layer2.Name = "layer2"; + layer2.TopLevel = -3; + layer2.Soil = clay2; + soilProfile.Layers.Add(layer2); + + var layer3 = new SoilLayer1D(); + layer3.Name = "layer3"; + layer3.TopLevel = -10; + layer3.Soil = clay2; + soilProfile.Layers.Add(layer3); + + return soilProfile; + } + } +} \ No newline at end of file