Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/PlLinesCreator/PLLinesCreator.cs
===================================================================
diff -u -r578 -r630
--- dam engine/trunk/src/Deltares.DamEngine.Calculators/PlLinesCreator/PLLinesCreator.cs (.../PLLinesCreator.cs) (revision 578)
+++ dam engine/trunk/src/Deltares.DamEngine.Calculators/PlLinesCreator/PLLinesCreator.cs (.../PLLinesCreator.cs) (revision 630)
@@ -1677,176 +1677,176 @@
///
///
///
-// private void CreatePhreaticLineSegmentsInShoulderAndPolder(PLLine phreaticLine)
-// {
-// PLLinePoint intersectionPolderLevelWithDike = DetermineIntersectionBetweenPolderLevelAndDike(this.WaterLevelPolder);
-// GeometryPoint dikeToeAtPolderPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
-//
-// double maxXCoordinateSurface = surfaceLine.Geometry.Points.Max(x => x.X);
-// if (modelParametersForPLLines.PLLineCreationMethod != PLLineCreationMethod.ExpertKnowledgeLinearInDike)
-// {
-// // Points created below are points starting at shoulder point to the right
-// GeometryPoint shoulderBaseInsidePoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside);
-// if (shoulderBaseInsidePoint != null)
-// {
-// double zLevel = Math.Min(phreaticLine.Points.Last().Z,
-// shoulderBaseInsidePoint.Z -
-// Math.Max(cOffsetPhreaticLineBelowSurface, PlLineOffsetBelowShoulderBaseInside));
-// zLevel = Math.Max(zLevel, this.WaterLevelPolder);
-// // Add point if it lies left of intersection of polderlevel with dike)
-// if ((intersectionPolderLevelWithDike == null) ||
-// (intersectionPolderLevelWithDike.X > shoulderBaseInsidePoint.X))
-// {
-// phreaticLine.Points.Add(new PLLinePoint(shoulderBaseInsidePoint.X, zLevel));
-// }
-//
-// if (UsePlLineOffsetFactorBelowShoulderCrest.HasValue && UsePlLineOffsetFactorBelowShoulderCrest.Value &&
-// PlLineOffsetFactorBelowShoulderCrest != null && dikeToeAtPolderPoint != null)
-// {
-// GeometryPoint shoulderTopInsidePoint =
-// surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside);
-// if (shoulderTopInsidePoint != null)
-// {
-// zLevel = dikeToeAtPolderPoint.Z + (PlLineOffsetFactorBelowShoulderCrest.Value*
-// (shoulderTopInsidePoint.Z - dikeToeAtPolderPoint.Z));
-// zLevel = Math.Min(zLevel, shoulderTopInsidePoint.Z - cOffsetPhreaticLineBelowSurface);
-// zLevel = Math.Min(zLevel, phreaticLine.Points.Last().Z);
-// zLevel = Math.Max(zLevel, this.WaterLevelPolder);
-// phreaticLine.Points.Add(new PLLinePoint(shoulderTopInsidePoint.X, zLevel));
-// }
-// }
-// }
-// }
-//
-// GeometryPoint ditchDikeSidePoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide);
-// if (dikeToeAtPolderPoint != null)
-// {
-//
-// double zLevel = Math.Min(phreaticLine.Points.Last().Z, dikeToeAtPolderPoint.Z - Math.Max(cOffsetPhreaticLineBelowSurface, PlLineOffsetBelowDikeToeAtPolder));
-// if (ditchDikeSidePoint != null)
-// {
-// if (ditchDikeSidePoint.LocationEquals(dikeToeAtPolderPoint))
-// {
-// // If DikeToeAtPolder is same as DitchDikeSide pl1 should always go to polderlevel at this point
-// zLevel = this.WaterLevelPolder;
-// }
-// }
-// zLevel = Math.Max(zLevel, this.WaterLevelPolder);
-// // Add point if it lies left of intersection of polderlevel with dike
-// if ((intersectionPolderLevelWithDike == null) || (intersectionPolderLevelWithDike.X > dikeToeAtPolderPoint.X))
-// {
-// phreaticLine.Points.Add(new PLLinePoint(dikeToeAtPolderPoint.X, zLevel));
-// }
-// }
-//
-// if (intersectionPolderLevelWithDike != null)
-// {
-// phreaticLine.Points.Add(intersectionPolderLevelWithDike);
-// }
-//
-// var isDitchPresent = (ditchDikeSidePoint != null);
-// var isNonWaterRetainingOjectPresent = ((NWOPhreaticAdaption != null) && surfaceLine.HasAnnotation(CharacteristicPointType.NonWaterRetainingObjectPoint1));
-// var adjustDitch = false;
-// // Handle making the waterlevel horizontal in the NWO at the Polderside when needed (For Riverside see AdaptPL1ForNonWaterRetainingObject).
-// var nonWaterRetainingGeometryPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.NonWaterRetainingObjectPoint1);
-// if (isNonWaterRetainingOjectPresent && (NWOPhreaticAdaption != PhreaticAdaptionType.Fill) &&
-// (nonWaterRetainingGeometryPoint.X >= surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X))
-// {
-// // if there is a ditch and it is to the left of the NWO, then only the ditch needs to be adjusted and the NWO will be correct automatically.
-// // if there is a ditch but it is to the right of the NWO, the NWO needs adjusting and the Ditch will be correct automatically.
-// // if there is no ditch then the NWO needs adjusting.
-// if (isDitchPresent)
-// {
-// adjustDitch = (nonWaterRetainingGeometryPoint.X >= surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide).X);
-// }
-// if (!adjustDitch)
-// {
-// GeometryPoint nw1 = nonWaterRetainingGeometryPoint;
-// int surfacePointIndex = surfaceLine.Geometry.Points.IndexOf(nw1);
-// AdjustForDitchAndOrNonWaterRetainingObjectatPolderSide(phreaticLine, surfacePointIndex);
-// }
-// }
-// else
-// {
-// // No (relevant) NWO so enable handling of ditch.
-// // If there is a ditch but there is also a NWO to the right of it at polder side, then do not adjust the ditch. Do in all other cases.
-// // First see if there is a NWO.
-// adjustDitch = !isNonWaterRetainingOjectPresent;
-// if (!adjustDitch)
-// {
-// // there is a NWO, check the position
-// adjustDitch =
-// !((isDitchPresent) &&
-// (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.NonWaterRetainingObjectPoint1).X >=
-// surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X) &&
-// (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.NonWaterRetainingObjectPoint4).X <=
-// surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide).X));
-// }
-// }
-// // if the NWO is not there or irrelevant and there is a ditch, then adjust it.
-// if ((adjustDitch) && (isDitchPresent))
-// {
-// int surfacePointIndex = surfaceLine.Geometry.Points.IndexOf(ditchDikeSidePoint);
-// AdjustForDitchAndOrNonWaterRetainingObjectatPolderSide(phreaticLine, surfacePointIndex);
-// }
-// else
-// {
-// // if no ditch then the PL1 will continue horizontally until the end of the profile
-// // another choice could be to let the PL1 go to polderlevel at the end of the profile, but that could be too optimistic for uplift.
-// // Discussion about this was done between Vastenburg, Knoeff and The.
-// // After a renewed discussion with Vastenburg, Van der Zwan and Bka, it has been decided that the PL1 should follow the
-// // surfaceline (with offset) until either end of surface line or polder level. Note: this is only needed when the phreatic level
-// // at dike toe is above polder level.
-// if ((!isNonWaterRetainingOjectPresent) && (!isDitchPresent))
-// {
-// if (phreaticLine.Points[phreaticLine.Points.Count - 1].Z > WaterLevelPolder)
-// {
-// AddPhreaticLineAlongSurfaceLevel(phreaticLine);
-// }
-// }
-// }
-//
-// //Validate if endpoint surface has reached
-// if (phreaticLine.Points.Last().X != maxXCoordinateSurface)
-// {
-// PLLinePoint endPoint = new PLLinePoint(maxXCoordinateSurface, phreaticLine.Points.Last().Z);
-// phreaticLine.Points.Add(endPoint);
-// }
-// }
+ private void CreatePhreaticLineSegmentsInShoulderAndPolder(PLLine phreaticLine)
+ {
+ PLLinePoint intersectionPolderLevelWithDike = DetermineIntersectionBetweenPolderLevelAndDike(this.WaterLevelPolder);
+ GeometryPoint dikeToeAtPolderPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
-// private void AddPhreaticLineAlongSurfaceLevel(PLLine phreaticLine)
-// {
-// // Add phreatic point at offset below every surface line point as long as depth > polder level. Else determine the
-// // proper position of the point at polder level (intersection) and stop.
-// var surfacePointIndex = surfaceLine.Geometry.Points.IndexOf(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder)) + 1;
-// bool intersected = false;
-// for (int i = surfacePointIndex; i < surfaceLine.Geometry.Points.Count; i++)
-// {
-// double z = Math.Max(waterLevelPolder, surfaceLine.Geometry.Points[i].Z - PlLineOffsetBelowDikeToeAtPolder);
-// double x = surfaceLine.Geometry.Points[i].X;
-// if (waterLevelPolder > surfaceLine.Geometry.Points[i].Z - PlLineOffsetBelowDikeToeAtPolder)
-// {
-// // Determine intersection between would be phreatic segment and polderlevel. Add that as next point.
-// Line waterLevelPolderLine = new Line(new GeometryPoint(surfaceLine.Geometry.Points.First().X, WaterLevelPolder),
-// new GeometryPoint(surfaceLine.Geometry.Points.Last().X, 0, WaterLevelPolder));
-// Line slopeLine = new Line(new GeometryPoint(phreaticLine.Points[phreaticLine.Points.Count - 1].X, phreaticLine.Points[phreaticLine.Points.Count - 1].Z),
-// new GeometryPoint(surfaceLine.Geometry.Points[i].X, surfaceLine.Geometry.Points[i].Z - PlLineOffsetBelowDikeToeAtPolder));
-// GeometryPoint intersectionPoint = new GeometryPoint();
-// if (waterLevelPolderLine.IntersectsZ(slopeLine, out intersectionPoint))
-// {
-// x = intersectionPoint.X;
-// }
-// intersected = true;
-// }
-// PLLinePoint point = new PLLinePoint(x, z);
-// phreaticLine.Points.Add(point);
-// if (intersected)
-// {
-// break;
-// }
-// }
-// }
+ double maxXCoordinateSurface = surfaceLine.Geometry.Points.Max(x => x.X);
+ if (modelParametersForPLLines.PLLineCreationMethod != PLLineCreationMethod.ExpertKnowledgeLinearInDike)
+ {
+ // Points created below are points starting at shoulder point to the right
+ GeometryPoint shoulderBaseInsidePoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderBaseInside);
+ if (shoulderBaseInsidePoint != null)
+ {
+ double zLevel = Math.Min(phreaticLine.Points.Last().Z,
+ shoulderBaseInsidePoint.Z -
+ Math.Max(cOffsetPhreaticLineBelowSurface, PlLineOffsetBelowShoulderBaseInside));
+ zLevel = Math.Max(zLevel, this.WaterLevelPolder);
+ // Add point if it lies left of intersection of polderlevel with dike)
+ if ((intersectionPolderLevelWithDike == null) ||
+ (intersectionPolderLevelWithDike.X > shoulderBaseInsidePoint.X))
+ {
+ phreaticLine.Points.Add(new PLLinePoint(shoulderBaseInsidePoint.X, zLevel));
+ }
+ if (UsePlLineOffsetFactorBelowShoulderCrest.HasValue && UsePlLineOffsetFactorBelowShoulderCrest.Value &&
+ PlLineOffsetFactorBelowShoulderCrest != null && dikeToeAtPolderPoint != null)
+ {
+ GeometryPoint shoulderTopInsidePoint =
+ surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside);
+ if (shoulderTopInsidePoint != null)
+ {
+ zLevel = dikeToeAtPolderPoint.Z + (PlLineOffsetFactorBelowShoulderCrest.Value *
+ (shoulderTopInsidePoint.Z - dikeToeAtPolderPoint.Z));
+ zLevel = Math.Min(zLevel, shoulderTopInsidePoint.Z - cOffsetPhreaticLineBelowSurface);
+ zLevel = Math.Min(zLevel, phreaticLine.Points.Last().Z);
+ zLevel = Math.Max(zLevel, this.WaterLevelPolder);
+ phreaticLine.Points.Add(new PLLinePoint(shoulderTopInsidePoint.X, zLevel));
+ }
+ }
+ }
+ }
+
+ GeometryPoint ditchDikeSidePoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide);
+ if (dikeToeAtPolderPoint != null)
+ {
+
+ double zLevel = Math.Min(phreaticLine.Points.Last().Z, dikeToeAtPolderPoint.Z - Math.Max(cOffsetPhreaticLineBelowSurface, PlLineOffsetBelowDikeToeAtPolder));
+ if (ditchDikeSidePoint != null)
+ {
+ if (ditchDikeSidePoint.LocationEquals(dikeToeAtPolderPoint))
+ {
+ // If DikeToeAtPolder is same as DitchDikeSide pl1 should always go to polderlevel at this point
+ zLevel = this.WaterLevelPolder;
+ }
+ }
+ zLevel = Math.Max(zLevel, this.WaterLevelPolder);
+ // Add point if it lies left of intersection of polderlevel with dike
+ if ((intersectionPolderLevelWithDike == null) || (intersectionPolderLevelWithDike.X > dikeToeAtPolderPoint.X))
+ {
+ phreaticLine.Points.Add(new PLLinePoint(dikeToeAtPolderPoint.X, zLevel));
+ }
+ }
+
+ if (intersectionPolderLevelWithDike != null)
+ {
+ phreaticLine.Points.Add(intersectionPolderLevelWithDike);
+ }
+
+ var isDitchPresent = (ditchDikeSidePoint != null);
+ var isNonWaterRetainingOjectPresent = ((NWOPhreaticAdaption != null) && surfaceLine.HasAnnotation(CharacteristicPointType.NonWaterRetainingObjectPoint1));
+ var adjustDitch = false;
+ // Handle making the waterlevel horizontal in the NWO at the Polderside when needed (For Riverside see AdaptPL1ForNonWaterRetainingObject).
+ var nonWaterRetainingGeometryPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.NonWaterRetainingObjectPoint1);
+ if (isNonWaterRetainingOjectPresent && (NWOPhreaticAdaption != PhreaticAdaptionType.Fill) &&
+ (nonWaterRetainingGeometryPoint.X >= surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X))
+ {
+ // if there is a ditch and it is to the left of the NWO, then only the ditch needs to be adjusted and the NWO will be correct automatically.
+ // if there is a ditch but it is to the right of the NWO, the NWO needs adjusting and the Ditch will be correct automatically.
+ // if there is no ditch then the NWO needs adjusting.
+ if (isDitchPresent)
+ {
+ adjustDitch = (nonWaterRetainingGeometryPoint.X >= surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide).X);
+ }
+ if (!adjustDitch)
+ {
+ GeometryPoint nw1 = nonWaterRetainingGeometryPoint;
+ int surfacePointIndex = surfaceLine.Geometry.Points.IndexOf(nw1);
+ AdjustForDitchAndOrNonWaterRetainingObjectatPolderSide(phreaticLine, surfacePointIndex);
+ }
+ }
+ else
+ {
+ // No (relevant) NWO so enable handling of ditch.
+ // If there is a ditch but there is also a NWO to the right of it at polder side, then do not adjust the ditch. Do in all other cases.
+ // First see if there is a NWO.
+ adjustDitch = !isNonWaterRetainingOjectPresent;
+ if (!adjustDitch)
+ {
+ // there is a NWO, check the position
+ adjustDitch =
+ !((isDitchPresent) &&
+ (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.NonWaterRetainingObjectPoint1).X >=
+ surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X) &&
+ (surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.NonWaterRetainingObjectPoint4).X <=
+ surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide).X));
+ }
+ }
+ // if the NWO is not there or irrelevant and there is a ditch, then adjust it.
+ if ((adjustDitch) && (isDitchPresent))
+ {
+ int surfacePointIndex = surfaceLine.Geometry.Points.IndexOf(ditchDikeSidePoint);
+ AdjustForDitchAndOrNonWaterRetainingObjectatPolderSide(phreaticLine, surfacePointIndex);
+ }
+ else
+ {
+ // if no ditch then the PL1 will continue horizontally until the end of the profile
+ // another choice could be to let the PL1 go to polderlevel at the end of the profile, but that could be too optimistic for uplift.
+ // Discussion about this was done between Vastenburg, Knoeff and The.
+ // After a renewed discussion with Vastenburg, Van der Zwan and Bka, it has been decided that the PL1 should follow the
+ // surfaceline (with offset) until either end of surface line or polder level. Note: this is only needed when the phreatic level
+ // at dike toe is above polder level.
+ if ((!isNonWaterRetainingOjectPresent) && (!isDitchPresent))
+ {
+ if (phreaticLine.Points[phreaticLine.Points.Count - 1].Z > WaterLevelPolder)
+ {
+ AddPhreaticLineAlongSurfaceLevel(phreaticLine);
+ }
+ }
+ }
+
+ //Validate if endpoint surface has reached
+ if (phreaticLine.Points.Last().X != maxXCoordinateSurface)
+ {
+ PLLinePoint endPoint = new PLLinePoint(maxXCoordinateSurface, phreaticLine.Points.Last().Z);
+ phreaticLine.Points.Add(endPoint);
+ }
+ }
+
+ private void AddPhreaticLineAlongSurfaceLevel(PLLine phreaticLine)
+ {
+ // Add phreatic point at offset below every surface line point as long as depth > polder level. Else determine the
+ // proper position of the point at polder level (intersection) and stop.
+ var surfacePointIndex = surfaceLine.Geometry.Points.IndexOf(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder)) + 1;
+ bool intersected = false;
+ for (int i = surfacePointIndex; i < surfaceLine.Geometry.Points.Count; i++)
+ {
+ double z = Math.Max(waterLevelPolder, surfaceLine.Geometry.Points[i].Z - PlLineOffsetBelowDikeToeAtPolder);
+ double x = surfaceLine.Geometry.Points[i].X;
+ if (waterLevelPolder > surfaceLine.Geometry.Points[i].Z - PlLineOffsetBelowDikeToeAtPolder)
+ {
+ // Determine intersection between would be phreatic segment and polderlevel. Add that as next point.
+ Line waterLevelPolderLine = new Line(new Point2D(surfaceLine.Geometry.Points.First().X, WaterLevelPolder),
+ new Point2D(surfaceLine.Geometry.Points.Last().X, WaterLevelPolder));
+ Line slopeLine = new Line(new Point2D(phreaticLine.Points[phreaticLine.Points.Count - 1].X, phreaticLine.Points[phreaticLine.Points.Count - 1].Z),
+ new Point2D(surfaceLine.Geometry.Points[i].X, surfaceLine.Geometry.Points[i].Z - PlLineOffsetBelowDikeToeAtPolder));
+ Point2D intersectionPoint = new Point2D();
+ if (waterLevelPolderLine.IntersectsZ(slopeLine, out intersectionPoint))
+ {
+ x = intersectionPoint.X;
+ }
+ intersected = true;
+ }
+ PLLinePoint point = new PLLinePoint(x, z);
+ phreaticLine.Points.Add(point);
+ if (intersected)
+ {
+ break;
+ }
+ }
+ }
+
private void AdjustForDitchAndOrNonWaterRetainingObjectatPolderSide(PLLine phreaticLine, int surfacePointIndex)
{
const double maxDouble = 99999.999;
@@ -2116,7 +2116,7 @@
{
CreatePhreaticLineSegmentsInsideDikeForHighRiverLevel(phreaticLine);
}
- //CreatePhreaticLineSegmentsInShoulderAndPolder(phreaticLine); ##Bka
+ CreatePhreaticLineSegmentsInShoulderAndPolder(phreaticLine);
//Check if phreatic line is above
ValidatePhreaticAboveWaterLevelPolder(phreaticLine);
Index: dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/PipingBlighTests.cs
===================================================================
diff -u -r612 -r630
--- dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/PipingBlighTests.cs (.../PipingBlighTests.cs) (revision 612)
+++ dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/PipingBlighTests.cs (.../PipingBlighTests.cs) (revision 630)
@@ -21,13 +21,15 @@
using System;
using System.IO;
+using Deltares.DamEngine.Io;
using NUnit.Framework;
namespace Deltares.DamEngine.Interface.Tests
{
[TestFixture]
public class PipingBlighTests
{
+ private const double tolerance = 0.0005;
[Test]
public void CanPerformBlighDesignPipingVoorbeeld1()
{
@@ -36,7 +38,32 @@
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
+ // Factor piping = 0.521
+ // Kritische hoogte = 1.667
+ // Factor opdrijven = 0.351
+ // Kwelweglengte piping = 25.0
+ // Intredepunt x-lokaal = 10.0
+ // Uittredepunt x-lokaal = 35.0
+ // Opdrijven = true
+ // Profielnaam = soilprofile_01
+ // PL3 opdrijven = 0.582
+ // PL3 stijghoogte aangepast = 1.262
+ // PL3 locatie opdriven lokaal = 35.0
+ // PL4 opdrijven = 0.0
+ // PL4 stijghoogte aangepast = 0.0
+ // PL4 locatie opdrijven lokaal = 0.0
+ // Locatie naam = "profiel 1"
+ // ID locatie scenario = "1"
+ // Heave Factor = 90.0
Assert.IsNotNull(outputString);
+ var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
+ Assert.AreEqual(0.521, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.BlighFactor, tolerance);
+ Assert.AreEqual(1.667, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.BlighHcritical, tolerance);
+ //Assert.AreEqual(0.351, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftFactor, tolerance);
+ //Assert.AreEqual(true, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.IsUplift);
+ //Assert.AreEqual(1.262, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.Pl3HeadAdjusted, tolerance);
+ //Assert.AreEqual(35.0, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.Pl3LocationXMinUplift, tolerance);
+ //Assert.AreEqual(0.351, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.Pl3MinUplift, tolerance);
}
[Test, ExpectedException(typeof(NullReferenceException))]
Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs
===================================================================
diff -u -r624 -r630
--- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 624)
+++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 630)
@@ -18,6 +18,7 @@
///
public class DamPipingBlighKernelWrapper : IKernelWrapper
{
+ private const double factorMeterToMicroMeter = 1.0e6;
private const double defaultFluidisationGradient = 0.3;
public const double defaultMaxReturnValue = 90.0;
@@ -55,7 +56,7 @@
xExit = upliftLocationAndResult.X;
surfaceLevel = surfaceLine.Geometry.GetZatX(upliftLocationAndResult.X);
SoilLayer1D heaveLayer = soilProfile1D.GetLayerWithName(upliftLocationAndResult.LayerWhereUpliftOccuresId);
- d70 = heaveLayer.Soil.DiameterD70;
+ d70 = factorMeterToMicroMeter * heaveLayer.Soil.DiameterD70;
var topLevelAquifer = soilProfile1D.GetLayerWithName(upliftLocationAndResult.LayerWhereUpliftOccuresId).TopLevel;
dCoverLayer = DamPipingHelper.DetermineHeightCoverLayer(topLevelAquifer, surfaceLevel);
}
@@ -178,6 +179,11 @@
pipingDesignResults.BlighFactor = damPipingBlighOutput.FoSp;
pipingDesignResults.BlighHcritical = damPipingBlighOutput.Hc;
designResult.PipingDesignResults = pipingDesignResults;
+ // Location name
+ // LocationscenarioId
+ // Profilename
+ // Calculationresult
+
}
}