Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs
===================================================================
diff -u -r4927 -r4928
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (.../PlLinesToWaternetConverter.cs) (revision 4927)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (.../PlLinesToWaternetConverter.cs) (revision 4928)
@@ -56,11 +56,14 @@
///
/// The pl lines.
/// The 1D soil profile.
+ /// The points of the surface line.
/// Length of the penetration.
/// Left side of the 2D profile.
/// Right side of the 2D profile.
+ /// The type of distribution of the vertical water pressures.
///
- public static Waternet CreateWaternetBasedOnPlLines(PlLines plLines, SoilProfile1D soilProfile1D, double penetrationLength, double xLeft, double xRight)
+ public static Waternet CreateWaternetBasedOnPlLines(PlLines plLines, SoilProfile1D soilProfile1D, GeometryPointString surfaceLine,
+ double penetrationLength, double xLeft, double xRight, IntrusionVerticalWaterPressureType? pressureType)
{
ThrowWhenPlLinesIsNull(plLines);
ThrowWhenSoilProfileIsNull(soilProfile1D);
@@ -71,8 +74,17 @@
if (plLine != null && !IsBelowSoilProfile(soilProfile1D, plLine))
{
waternet.PhreaticLine = CreateLine(plLine, headLine1Name);
- double level = soilProfile1D.GetLayerAt(headLine.GetMinZ()).BottomLevel;
- WaternetLine waternetLine = CreateWaternetLine(level, xLeft, xRight);
+ WaternetLine waternetLine;
+ if (pressureType == IntrusionVerticalWaterPressureType.Linear)
+ {
+ List coordinates = surfaceLine.Points.Select(point => new Point2D(point.X, point.Z)).ToList();
+ waternetLine = CreateWaternetLine(coordinates);
+ }
+ else
+ {
+ double level = soilProfile1D.GetLayerAt(headLine.GetMinZ()).BottomLevel;
+ waternetLine = CreateWaternetLine(level, xLeft, xRight);
+ }
waternetLine.Name = waternetLine1Name;
waternetLine.HeadLine = headLine;
waternetLine.HeadLine.SyncCalcPoints();
@@ -124,7 +136,7 @@
/// A .
/// Thrown when or
/// is null.
- public static Waternet CreateWaternetBasedOnPlLines(PlLines plLines, SoilProfile2D soilProfile, double penetrationLength)
+ public static Waternet CreateWaternetBasedOnPlLines(PlLines plLines, SoilProfile2D soilProfile, double penetrationLength, IntrusionVerticalWaterPressureType? pressureType)
{
ThrowWhenPlLinesIsNull(plLines);
ThrowWhenSoilProfileIsNull(soilProfile);
@@ -138,7 +150,7 @@
{
var headLine = CreateLine(plLine, headLine1Name);
waternet.PhreaticLine = CreateLine(plLine, headLine1Name);
- WaternetLine waternetLine = CreateWaternetLineForPhreaticLine(soilProfile, plLine);
+ WaternetLine waternetLine = CreateWaternetLineForPhreaticLine(soilProfile, plLine, pressureType);
waternetLine.Name = waternetLine1Name;
waternetLine.HeadLine = headLine;
waternet.WaternetLineList.Add(waternetLine);
@@ -302,13 +314,8 @@
return waternetLine;
}
- private static WaternetLine CreateWaternetLine(IEnumerable coordinates)
+ private static WaternetLine CreateWaternetLine(IEnumerable coordinates, double zOffSet = 0)
{
- return CreateWaternetLine(coordinates, 0);
- }
-
- private static WaternetLine CreateWaternetLine(IEnumerable coordinates, double zOffSet)
- {
var line = new WaternetLine();
foreach (Point2D coordinate in coordinates)
{
@@ -423,6 +430,17 @@
return null;
}
+ private static WaternetLine CreateWaternetLineForPhreaticLine(SoilProfile2D soilProfile2D, PlLine plLine, IntrusionVerticalWaterPressureType? pressureType)
+ {
+ if (pressureType != IntrusionVerticalWaterPressureType.Linear)
+ {
+ return CreateWaternetLineForPhreaticLineForDamStandard(soilProfile2D, plLine);
+ }
+
+ List coordinates = soilProfile2D.Geometry.SurfaceLine.Points.Select(point => new Point2D(point.X, point.Z)).ToList();
+ return CreateWaternetLine(coordinates);
+ }
+
///
/// Create the waternet line associated to the phreatic line (PL1).
/// For the waternet type "Dam Standard", this line lies on the bottom of the soil layers “in which the phreatic plane lies”.
@@ -432,7 +450,7 @@
///
///
///
- private static WaternetLine CreateWaternetLineForPhreaticLine(SoilProfile2D soilProfile2D, PlLine plLine)
+ private static WaternetLine CreateWaternetLineForPhreaticLineForDamStandard(SoilProfile2D soilProfile2D, PlLine plLine)
{
var waternetLine = new WaternetLine();
var curves = new List();