// Copyright (C) Stichting Deltares 2021. 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.Calculators.Uplift; using Deltares.DamEngine.Data.Geotechnics; using NUnit.Framework; namespace Deltares.DamEngine.Calculators.Tests.Uplift { [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] public void ThrowsExceptionIfSoilProfileHasNoLayers() { var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); soilVolumeMassCalculator.MinimumThicknessCoverLayer = 10; soilVolumeMassCalculator.SurfaceLevel = 2; soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -1; soilVolumeMassCalculator.SoilProfile = new SoilProfile1D(); Assert.That(() => soilVolumeMassCalculator.CalculateEffectiveStress(), Throws.InstanceOf()); } [Test] public void ThrowsExceptionIfSoilProfileNotAssignedInSoilVolumeMassCalculator() { var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); soilVolumeMassCalculator.MinimumThicknessCoverLayer = 10; soilVolumeMassCalculator.SurfaceLevel = 2; soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -1; Assert.That(() => soilVolumeMassCalculator.CalculateEffectiveStress(), Throws.InstanceOf()); } [Test] public void ThrowsExceptionIfSurfaceLevelNotInsideProfile() { var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); soilVolumeMassCalculator.MinimumThicknessCoverLayer = 10; soilVolumeMassCalculator.PhreaticLevel = 0; soilVolumeMassCalculator.SurfaceLevel = 2; soilVolumeMassCalculator.TopOfLayerToBeEvaluated = -1; soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); Assert.That(() => soilVolumeMassCalculator.CalculateEffectiveStress(), Throws.InstanceOf()); } [Test] public void ThrowsExceptionIfTopLayerToBeEvaluatedNotInsideProfile() { var soilVolumeMassCalculator = new SoilVolumicMassCalculator(); soilVolumeMassCalculator.MinimumThicknessCoverLayer = 10; soilVolumeMassCalculator.PhreaticLevel = 0; soilVolumeMassCalculator.SurfaceLevel = 0; soilVolumeMassCalculator.TopOfLayerToBeEvaluated = 10; soilVolumeMassCalculator.SoilProfile = CreateTestProfile(); Assert.That(() => soilVolumeMassCalculator.CalculateEffectiveStress(), Throws.InstanceOf()); } public 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 = 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; } } }