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();