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
+