using Deltares.Geotechnics; using Deltares.Geotechnics.Soils; 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; } } }