Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Deltares.DamUplift.csproj =================================================================== diff -u -r328 -r332 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Deltares.DamUplift.csproj (.../Deltares.DamUplift.csproj) (revision 328) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Deltares.DamUplift.csproj (.../Deltares.DamUplift.csproj) (revision 332) @@ -44,6 +44,7 @@ Properties\GlobalAssemblyInfo.cs + Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Geo/PipingLayer.cs =================================================================== diff -u -r328 -r332 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Geo/PipingLayer.cs (.../PipingLayer.cs) (revision 328) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Geo/PipingLayer.cs (.../PipingLayer.cs) (revision 332) @@ -1,4 +1,4 @@ -namespace Deltares.DamUplift +namespace Deltares.DamUplift.Geo { /// /// Class to hold layers (1D) for the Piping kernel Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Geo/PipingConstants.cs =================================================================== diff -u -r328 -r332 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Geo/PipingConstants.cs (.../PipingConstants.cs) (revision 328) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Geo/PipingConstants.cs (.../PipingConstants.cs) (revision 332) @@ -1,4 +1,4 @@ -namespace Deltares.DamUplift +namespace Deltares.DamUplift.Geo { /// /// Class holding all constant default values specific to the WTI Piping kernel Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/UpliftCalculator.cs =================================================================== diff -u -r329 -r332 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/UpliftCalculator.cs (.../UpliftCalculator.cs) (revision 329) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/UpliftCalculator.cs (.../UpliftCalculator.cs) (revision 332) @@ -1,5 +1,6 @@ using System; using System.Runtime.Serialization; +using Deltares.DamUplift.Geo; namespace Deltares.DamUplift { Index: dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamUpliftTests/Geo/PipingProfileTests.cs =================================================================== diff -u --- dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamUpliftTests/Geo/PipingProfileTests.cs (revision 0) +++ dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamUpliftTests/Geo/PipingProfileTests.cs (revision 332) @@ -0,0 +1,130 @@ +using Deltares.DamUplift; +using Deltares.DamUplift.Geo; +using NUnit.Framework; + +namespace Deltares.DamUpliftTests.Geo +{ + [TestFixture] + public class PipingProfileTests + { + private const double cDiff = 1e-5; + + [Test] + public void TestGetLayerHeight() + { + var profile = FactoryForSoilProfileTests.CreateTestProfile(); + var topAquifer = profile.TopAquiferLayer; + var height = profile.GetLayerHeight(topAquifer); + Assert.AreEqual(20, height, cDiff); + + height = profile.GetLayerHeight(profile.Layers[0]); + Assert.AreEqual(3, height, cDiff); + } + + [Test] + public void TestAquiferDetermination() + { + // First only 1 aquifer layer at -10 so -10 expected for top and bottom aquifer. + var profile = FactoryForSoilProfileTests.CreateTestProfile(); + var topAquifer = profile.TopAquiferLayer; + Assert.AreEqual(true, topAquifer.IsAquifer); + Assert.AreEqual(-10, topAquifer.TopLevel, cDiff); + + var bottomAquifer = profile.BottomAquiferLayer; + Assert.AreEqual(true, bottomAquifer.IsAquifer); + Assert.AreEqual(-10, bottomAquifer.TopLevel, cDiff); + + // Now 2 consecutive aquifer layers at -2.5 and -3.1 so -2.5 expected for top and bottom aquifer. + profile = FactoryForSoilProfileTests.CreateTestProfileTwoCoverSublayersTwoAquifers(); + topAquifer = profile.TopAquiferLayer; + Assert.AreEqual(true, topAquifer.IsAquifer); + Assert.AreEqual(-2.5, topAquifer.TopLevel, cDiff); + + bottomAquifer = profile.BottomAquiferLayer; + Assert.AreEqual(true, bottomAquifer.IsAquifer); + Assert.AreEqual(-2.5, bottomAquifer.TopLevel, cDiff); + + // Now 2 non consecutive aquifer layers at -1.9 and -3.1 so -1.9 expected for top and -3.1 for bottom aquifer. + profile = FactoryForSoilProfileTests.CreateTestProfileOneCoverLayerOneInBetweenAquifer(); + topAquifer = profile.TopAquiferLayer; + Assert.AreEqual(true, topAquifer.IsAquifer); + Assert.AreEqual(-1.9, topAquifer.TopLevel, cDiff); + + bottomAquifer = profile.BottomAquiferLayer; + Assert.AreEqual(true, bottomAquifer.IsAquifer); + Assert.AreEqual(-3.1, bottomAquifer.TopLevel, cDiff); + } + + [Test] + [SetUICulture("en-US")] + public void ValidateThrowsExceptionIfSoilProfileHasNoLayersEn() + { + var expectedMessage = "The profile has no layers, it must have at least 1 layer."; + var profile = new PipingProfile + { + BottomLevel = -1 + }; + TestDelegate test = () => profile.Validate(); + var message = Assert.Throws(test).Message; + Assert.AreEqual(expectedMessage, message); + } + + [Test] + [SetUICulture("nl-NL")] + public void ValidateThrowsExceptionIfSoilProfileHasNoLayersNl() + { + var expectedMessage = "Het ondergrondprofiel heeft geen lagen, er moet tenminste 1 laag zijn."; + var profile = new PipingProfile + { + BottomLevel = -1 + }; + TestDelegate test = () => profile.Validate(); + var message = Assert.Throws(test).Message; + Assert.AreEqual(expectedMessage, message); + } + + [Test] + [SetUICulture("en-US")] + public void ValidateThrowsExceptionIfSoilProfileHasNonOrderedLayers() + { + var expectedMessage = "The layers are not ordered from top to bottom."; + var profile = new PipingProfile + { + BottomLevel = -1 + }; + var layer = new PipingLayer + { + TopLevel = 0 + }; + profile.Layers.Add(layer); + profile.Layers.Add(layer); + TestDelegate test = () => profile.Validate(); + var message = Assert.Throws(test).Message; + Assert.AreEqual(expectedMessage, message); + } + + [Test] + [SetUICulture("en-US")] + public void ValidateThrowsExceptionIfSoilProfileBottomIsNotDeepEnough() + { + var expectedMessage = "The bottomlevel ({0}) of the profile is not deep enough. It must be at least {1} m below the toplevel of the deepest layer ({2})."; + var profile = new PipingProfile + { + BottomLevel = -1 + }; + var layer = new PipingLayer + { + TopLevel = 0 + }; + profile.Layers.Add(layer); + var layer2 = new PipingLayer + { + TopLevel = -1 + }; + profile.Layers.Add(layer2); + TestDelegate test = () => profile.Validate(); + var message = Assert.Throws(test).Message; + Assert.AreEqual(string.Format(expectedMessage, -1, 0.001, -1), message); + } + } +} Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Geo/PipingProfile.cs =================================================================== diff -u -r328 -r332 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Geo/PipingProfile.cs (.../PipingProfile.cs) (revision 328) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamUplift/Geo/PipingProfile.cs (.../PipingProfile.cs) (revision 332) @@ -3,7 +3,7 @@ using System.Linq; using Deltares.DamUplift.Properties; -namespace Deltares.DamUplift +namespace Deltares.DamUplift.Geo { /// /// PipingProfile Exception class Index: dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamUpliftTests/FactoryForSoilProfileTests.cs =================================================================== diff -u -r328 -r332 --- dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamUpliftTests/FactoryForSoilProfileTests.cs (.../FactoryForSoilProfileTests.cs) (revision 328) +++ dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamUpliftTests/FactoryForSoilProfileTests.cs (.../FactoryForSoilProfileTests.cs) (revision 332) @@ -1,4 +1,5 @@ using Deltares.DamUplift; +using Deltares.DamUplift.Geo; namespace Deltares.DamUpliftTests { @@ -129,15 +130,19 @@ public static PipingProfile CreateTestProfile() { - PipingProfile soilProfile = new PipingProfile(); - soilProfile.Name = "TestProf"; + var soilProfile = new PipingProfile + { + Name = "TestProf", + BottomLevel = -30 + }; PipingLayer layer1 = new PipingLayer { Name = "klei", TopLevel = 0, AbovePhreaticLevel = 18, - BelowPhreaticLevel = 20 + BelowPhreaticLevel = 20, + IsAquifer = false }; soilProfile.Layers.Add(layer1); @@ -146,7 +151,8 @@ Name = "klei2", TopLevel = -3, AbovePhreaticLevel = 20, - BelowPhreaticLevel = 22 + BelowPhreaticLevel = 22, + IsAquifer = false }; soilProfile.Layers.Add(layer2); @@ -155,16 +161,156 @@ Name = "klei2", TopLevel = -10, AbovePhreaticLevel = 20, - BelowPhreaticLevel = 22 + BelowPhreaticLevel = 22, + IsAquifer = true }; soilProfile.Layers.Add(layer3); - soilProfile.BottomLevel = -30.0; return soilProfile; } + public static PipingProfile CreateTestProfileWTI() + { + var soilProfile = new PipingProfile + { + Name = "TestProf", + BottomLevel = -30 + }; + var layer1 = new PipingLayer + { + Name = "layer1 - klei", + AbovePhreaticLevel = 18, + BelowPhreaticLevel = 20, + TopLevel = 10, + IsAquifer = false + }; + soilProfile.Layers.Add(layer1); + var layer2 = new PipingLayer + { + Name = "layer2 - klei2", + AbovePhreaticLevel = 20, + BelowPhreaticLevel = 22, + TopLevel = -3, + IsAquifer = false + }; + soilProfile.Layers.Add(layer2); + var layer3 = new PipingLayer + { + Name = "layer3 - zand", + AbovePhreaticLevel = 15, + BelowPhreaticLevel = 17, + TopLevel = -10, + IsAquifer = true + }; + soilProfile.Layers.Add(layer3); + + return soilProfile; + } + + public static PipingProfile CreateTestProfileTwoCoverSublayersTwoAquifers() + { + var soilProfile = new PipingProfile + { + Name = "TestProfileWithTwoCoverSublayersTwoAquifers", + BottomLevel = -30 + }; + + var layer1 = new PipingLayer + { + Name = "layer1 - coverSublayer1", + AbovePhreaticLevel = 15, + BelowPhreaticLevel = 17, + TopLevel = 100, + IsAquifer = false + }; + soilProfile.Layers.Add(layer1); + + var layer2 = new PipingLayer + { + Name = "layer2 - coverSublayer2", + AbovePhreaticLevel = 12, + BelowPhreaticLevel = 14, + TopLevel = -1.9, + IsAquifer = false + }; + soilProfile.Layers.Add(layer2); + + var layer3 = new PipingLayer + { + Name = "layer3 - aquifer1", + AbovePhreaticLevel = 10, + BelowPhreaticLevel = 10.5, + TopLevel = -2.5, + IsAquifer = true + }; + soilProfile.Layers.Add(layer3); + + var layer4 = new PipingLayer + { + Name = "layer4 - aquifer2", + AbovePhreaticLevel = 18, + BelowPhreaticLevel = 20, + TopLevel = -3.1, + IsAquifer = true + }; + soilProfile.Layers.Add(layer4); + + return soilProfile; + } + + public static PipingProfile CreateTestProfileOneCoverLayerOneInBetweenAquifer() + { + var soilProfile = new PipingProfile + { + Name = "TestProfileWithOneCoverLayerOneInBetweenAquifer", + BottomLevel = -30 + }; + + var layer1 = new PipingLayer + { + Name = "layer1 - coverLayer", + AbovePhreaticLevel = 15, + BelowPhreaticLevel = 17, + TopLevel = 100, + IsAquifer = false + }; + soilProfile.Layers.Add(layer1); + + var layer2 = new PipingLayer + { + Name = "layer2 - inBetweenAquifer", + AbovePhreaticLevel = 12, + BelowPhreaticLevel = 14, + TopLevel = -1.9, + IsAquifer = true + }; + soilProfile.Layers.Add(layer2); + + var layer3 = new PipingLayer + { + Name = "layer3 - deepAquitard", + AbovePhreaticLevel = 10, + BelowPhreaticLevel = 10.5, + TopLevel = -2.5, + IsAquifer = false + }; + soilProfile.Layers.Add(layer3); + + var layer4 = new PipingLayer + { + Name = "layer4 - deepAquifer", + AbovePhreaticLevel = 18, + BelowPhreaticLevel = 20, + TopLevel = -3.1, + IsAquifer = true + }; + soilProfile.Layers.Add(layer4); + + return soilProfile; + } + } } \ No newline at end of file Index: dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamUpliftTests/Deltares.DamUpliftTests.csproj =================================================================== diff -u -r328 -r332 --- dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamUpliftTests/Deltares.DamUpliftTests.csproj (.../Deltares.DamUpliftTests.csproj) (revision 328) +++ dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamUpliftTests/Deltares.DamUpliftTests.csproj (.../Deltares.DamUpliftTests.csproj) (revision 332) @@ -46,6 +46,7 @@ + @@ -57,6 +58,7 @@ Deltares.DamUplift +