Index: Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoDikeAssessmentSectionCommand.cs =================================================================== diff -u -r16fef01c5d2d8ef8d15c652585efa85125ba7b25 -rb4ce929ce35e4770f3d8c12d14174de79cc5bee8 --- Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoDikeAssessmentSectionCommand.cs (.../AddNewDemoDikeAssessmentSectionCommand.cs) (revision 16fef01c5d2d8ef8d15c652585efa85125ba7b25) +++ Demo/Ringtoets/src/Demo.Ringtoets/Commands/AddNewDemoDikeAssessmentSectionCommand.cs (.../AddNewDemoDikeAssessmentSectionCommand.cs) (revision b4ce929ce35e4770f3d8c12d14174de79cc5bee8) @@ -101,6 +101,7 @@ var calculation = pipingFailureMechanism.CalculationsGroup.GetPipingCalculations().First(); calculation.InputParameters.SurfaceLine = pipingFailureMechanism.SurfaceLines.First(sl => sl.Name == "PK001_0001"); calculation.InputParameters.SoilProfile = pipingFailureMechanism.SoilProfiles.First(sl => sl.Name == "AD640M00_Segment_36005_1D2"); + calculation.InputParameters.PhreaticLevelExit.Mean = 3; } } } \ No newline at end of file Index: Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/AddNewDemoDikeAssessmentSectionCommandTest.cs =================================================================== diff -u -rb588090d11df233f6913bb2f49e8aa3bf29ebc27 -rb4ce929ce35e4770f3d8c12d14174de79cc5bee8 --- Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/AddNewDemoDikeAssessmentSectionCommandTest.cs (.../AddNewDemoDikeAssessmentSectionCommandTest.cs) (revision b588090d11df233f6913bb2f49e8aa3bf29ebc27) +++ Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/AddNewDemoDikeAssessmentSectionCommandTest.cs (.../AddNewDemoDikeAssessmentSectionCommandTest.cs) (revision b4ce929ce35e4770f3d8c12d14174de79cc5bee8) @@ -129,12 +129,12 @@ Assert.IsTrue(PipingCalculationService.Validate(calculation)); PipingCalculationService.Calculate(calculation); Assert.IsTrue(calculation.HasOutput); - Assert.AreEqual(0.0021, calculation.Output.HeaveFactorOfSafety, 1e-3); - Assert.AreEqual(-143.3235, calculation.Output.HeaveZValue, 1e-3); - Assert.AreEqual(4.4072, calculation.Output.UpliftFactorOfSafety, 1e-3); - Assert.AreEqual(5.6044, calculation.Output.UpliftZValue, 1e-3); - Assert.AreEqual(0.0016, calculation.Output.SellmeijerFactorOfSafety, 1e-3); - Assert.AreEqual(-1.6387, calculation.Output.SellmeijerZValue, 1e-3); + Assert.AreEqual(99.0, calculation.Output.HeaveFactorOfSafety, 1e-3); + Assert.AreEqual(118.627, calculation.Output.HeaveZValue, 1e-3); + Assert.AreEqual(99.0, calculation.Output.UpliftFactorOfSafety, 1e-3); + Assert.AreEqual(3.655, calculation.Output.UpliftZValue, 1e-3); + Assert.AreEqual(-1.56, calculation.Output.SellmeijerFactorOfSafety, 1e-3); + Assert.AreEqual(3.478, calculation.Output.SellmeijerZValue, 1e-3); } private static void AssertExpectedPipingInput(PipingInput inputParameters) @@ -158,9 +158,9 @@ Assert.AreEqual("AD640M00_Segment_36005_1D2", inputParameters.SoilProfile.Name); Assert.AreEqual(3.666, PipingSemiProbabilisticDesignValueFactory.GetDampingFactorExit(inputParameters).GetDesignValue(), 1e-3); - Assert.AreEqual(-1.645, PipingSemiProbabilisticDesignValueFactory.GetPhreaticLevelExit(inputParameters).GetDesignValue(), 1e-3); + Assert.AreEqual(1.355, PipingSemiProbabilisticDesignValueFactory.GetPhreaticLevelExit(inputParameters).GetDesignValue(), 1e-3); Assert.AreEqual(0.011, PipingSemiProbabilisticDesignValueFactory.GetThicknessCoverageLayer(inputParameters).GetDesignValue(), 1e-3); - Assert.AreEqual(0.011, PipingSemiProbabilisticDesignValueFactory.GetSeepageLength(inputParameters).GetDesignValue(), 1e-3); + Assert.AreEqual(0.011, PipingSemiProbabilisticDesignValueFactory.GetSeepageLength(inputParameters).GetDesignValue(), 92.614006456265088); Assert.AreEqual(0.011, PipingSemiProbabilisticDesignValueFactory.GetDiameter70(inputParameters).GetDesignValue(), 1e-3); Assert.AreEqual(2.345, PipingSemiProbabilisticDesignValueFactory.GetDarcyPermeability(inputParameters).GetDesignValue(), 1e-3); Assert.AreEqual(2.345, PipingSemiProbabilisticDesignValueFactory.GetThicknessAquiferLayer(inputParameters).GetDesignValue(), 1e-3); Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingInput.cs =================================================================== diff -u -r94417e55fa4f44b35c8b9876c6423a94631df967 -rb4ce929ce35e4770f3d8c12d14174de79cc5bee8 --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingInput.cs (.../PipingInput.cs) (revision 94417e55fa4f44b35c8b9876c6423a94631df967) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingInput.cs (.../PipingInput.cs) (revision b4ce929ce35e4770f3d8c12d14174de79cc5bee8) @@ -19,6 +19,8 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; +using System.Linq; using Core.Common.Base; using Ringtoets.Piping.Data.Probabilistics; @@ -30,6 +32,8 @@ /// public class PipingInput : Observable { + private RingtoetsPipingSurfaceLine surfaceLine; + /// /// Initializes a new instance of the class. /// @@ -194,8 +198,35 @@ /// /// Gets or sets the surface line. /// - public RingtoetsPipingSurfaceLine SurfaceLine { get; set; } + public RingtoetsPipingSurfaceLine SurfaceLine + { + get + { + return surfaceLine; + } + set + { + surfaceLine = value; + UpdateValuesBasedOnSurfaceLine(); + } + } + private void UpdateValuesBasedOnSurfaceLine() + { + var entryPointIndex = Array.IndexOf(surfaceLine.Points.ToArray(), surfaceLine.DikeToeAtRiver); + var exitPointIndex = Array.IndexOf(surfaceLine.Points.ToArray(), surfaceLine.DikeToeAtPolder); + + if (entryPointIndex > -1 && exitPointIndex > -1) + { + var localGeometry = surfaceLine.ProjectGeometryToLZ().ToArray(); + var entryPointL = localGeometry.ElementAt(entryPointIndex).X; + var exitPointL = localGeometry.ElementAt(exitPointIndex).X; + + ExitPointL = exitPointL; + SeepageLength.Mean = exitPointL - entryPointL; + } + } + /// /// Gets or sets the profile which contains a 1 dimensional definition of soil layers with properties. /// Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/RingtoetsPipingSurfaceLine.cs =================================================================== diff -u -r9d1ffc9bd1a9c392c6b832422649a0ad2f5ff59c -rb4ce929ce35e4770f3d8c12d14174de79cc5bee8 --- Ringtoets/Piping/src/Ringtoets.Piping.Data/RingtoetsPipingSurfaceLine.cs (.../RingtoetsPipingSurfaceLine.cs) (revision 9d1ffc9bd1a9c392c6b832422649a0ad2f5ff59c) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/RingtoetsPipingSurfaceLine.cs (.../RingtoetsPipingSurfaceLine.cs) (revision b4ce929ce35e4770f3d8c12d14174de79cc5bee8) @@ -182,7 +182,7 @@ /// Thrown when doesn't contain a at /// . /// is null. - public void SetDikeToeAtRiver(Point3D point) + public void SetDikeToeAtRiverAt(Point3D point) { DikeToeAtRiver = GetPointFromGeometry(point); } @@ -194,7 +194,7 @@ /// Thrown when doesn't contain a at /// . /// is null. - public void SetDikeToeAtPolder(Point3D point) + public void SetDikeToeAtPolderAt(Point3D point) { DikeToeAtPolder = GetPointFromGeometry(point); } Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/FileImporter/PipingSurfaceLinesCsvImporter.cs =================================================================== diff -u -reff889238a2ecfab9aacabe9b99a35c6989006d9 -rb4ce929ce35e4770f3d8c12d14174de79cc5bee8 --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/FileImporter/PipingSurfaceLinesCsvImporter.cs (.../PipingSurfaceLinesCsvImporter.cs) (revision eff889238a2ecfab9aacabe9b99a35c6989006d9) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/FileImporter/PipingSurfaceLinesCsvImporter.cs (.../PipingSurfaceLinesCsvImporter.cs) (revision b4ce929ce35e4770f3d8c12d14174de79cc5bee8) @@ -375,13 +375,13 @@ TrySetCharacteristicPoint( characteristicPointsLocation.DikeToeAtRiver, - readSurfaceLine.SetDikeToeAtRiver, + readSurfaceLine.SetDikeToeAtRiverAt, readSurfaceLine.Name, RingtoetsPluginResources.CharacteristicPoint_DikeToeAtRiver); TrySetCharacteristicPoint( characteristicPointsLocation.DikeToeAtPolder, - readSurfaceLine.SetDikeToeAtPolder, + readSurfaceLine.SetDikeToeAtPolderAt, readSurfaceLine.Name, RingtoetsPluginResources.CharacteristicPoint_DikeToeAtPolder); } Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingInputTest.cs =================================================================== diff -u -r79e69f1b4b303862f3572d0f6cb60acf63a957e9 -rb4ce929ce35e4770f3d8c12d14174de79cc5bee8 --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingInputTest.cs (.../PipingInputTest.cs) (revision 79e69f1b4b303862f3572d0f6cb60acf63a957e9) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingInputTest.cs (.../PipingInputTest.cs) (revision b4ce929ce35e4770f3d8c12d14174de79cc5bee8) @@ -1,7 +1,7 @@ using System; using Core.Common.Base; - +using Core.Common.Base.Geometry; using NUnit.Framework; using Ringtoets.Piping.Data.Probabilistics; @@ -63,5 +63,46 @@ Assert.AreEqual(37, inputParameters.BeddingAngle); Assert.AreEqual(2.08e-4, inputParameters.MeanDiameter70); } + + [Test] + public void SurfaceLine_WithDikeToeDikeSideAndDikeToeRiverSide_SetsExitPointLAndSeePageLength() + { + // Setup + var inputParameters = new PipingInput(); + RingtoetsPipingSurfaceLine surfaceLine = new RingtoetsPipingSurfaceLine(); + var firstPointX = 1.0; + var secondPointX = 4.0; + var point1 = new Point3D { X = firstPointX, Y = 0.0, Z = 2.0 }; + var point2 = new Point3D { X = secondPointX, Y = 0.0, Z = 1.8 }; + surfaceLine.SetGeometry(new [] + { + point1, + point2, + }); + surfaceLine.SetDikeToeAtRiverAt(point1); + surfaceLine.SetDikeToeAtPolderAt(point2); + + // Call + inputParameters.SurfaceLine = surfaceLine; + + // Assert + Assert.AreEqual(secondPointX - firstPointX, inputParameters.SeepageLength.Mean); + Assert.AreEqual(secondPointX - firstPointX, inputParameters.ExitPointL); + } + + [Test] + public void SurfaceLine_WithoutDikeToeDikeSideAndDikeToeRiverSide_NoChangeForExitPointLAndSeePageLength() + { + // Setup + var inputParameters = new PipingInput(); + RingtoetsPipingSurfaceLine surfaceLine = new RingtoetsPipingSurfaceLine(); + + // Call + inputParameters.SurfaceLine = surfaceLine; + + // Assert + Assert.AreEqual(Math.Exp(-0.5), inputParameters.SeepageLength.Mean); + Assert.AreEqual(0, inputParameters.ExitPointL); + } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/RingtoetsPipingSurfaceLineTest.cs =================================================================== diff -u -r9d1ffc9bd1a9c392c6b832422649a0ad2f5ff59c -rb4ce929ce35e4770f3d8c12d14174de79cc5bee8 --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/RingtoetsPipingSurfaceLineTest.cs (.../RingtoetsPipingSurfaceLineTest.cs) (revision 9d1ffc9bd1a9c392c6b832422649a0ad2f5ff59c) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/RingtoetsPipingSurfaceLineTest.cs (.../RingtoetsPipingSurfaceLineTest.cs) (revision b4ce929ce35e4770f3d8c12d14174de79cc5bee8) @@ -542,7 +542,7 @@ } [Test] - public void SetDikeToeAtRiver_PointInGeometry_PointSetFromGeometry() + public void SetDikeToeAtRiverAt_PointInGeometry_PointSetFromGeometry() { // Setup var testX = 1.0; @@ -558,15 +558,15 @@ CreateTestGeometry(testPoint, surfaceLine); // Call - surfaceLine.SetDikeToeAtRiver(testPoint); + surfaceLine.SetDikeToeAtRiverAt(testPoint); // Assert Assert.AreEqual(testPoint, surfaceLine.DikeToeAtRiver); Assert.AreNotSame(testPoint, surfaceLine.DikeToeAtRiver); } [Test] - public void SetDikeToeAtRiver_GeometryEmpty_ThrowsInvalidOperationException() + public void SetDikeToeAtRiverAt_GeometryEmpty_ThrowsInvalidOperationException() { // Setup var random = new Random(21); @@ -582,7 +582,7 @@ var surfaceLine = new RingtoetsPipingSurfaceLine(); // Call - TestDelegate test = () => surfaceLine.SetDikeToeAtRiver(testPoint); + TestDelegate test = () => surfaceLine.SetDikeToeAtRiverAt(testPoint); // Assert var message = string.Format(Resources.RingtoetsPipingSurfaceLine_SetCharacteristicPointAt_Geometry_does_not_contain_point_at_0_1_2_to_assign_as_characteristic_point, @@ -591,20 +591,20 @@ } [Test] - public void SetDikeToeAtRiver_Null_ThrowsArgumentNullException() + public void SetDikeToeAtRiverAt_Null_ThrowsArgumentNullException() { // Setup var surfaceLine = new RingtoetsPipingSurfaceLine(); // Call - TestDelegate test = () => surfaceLine.SetDikeToeAtRiver(null); + TestDelegate test = () => surfaceLine.SetDikeToeAtRiverAt(null); // Assert TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "Cannot find a point in geometry using a null point."); } [Test] - public void SetDikeToeAtPolder_PointInGeometry_PointSetFromGeometry() + public void SetDikeToeAtPolderAt_PointInGeometry_PointSetFromGeometry() { // Setup var testX = 1.0; @@ -620,15 +620,15 @@ CreateTestGeometry(testPoint, surfaceLine); // Call - surfaceLine.SetDikeToeAtPolder(testPoint); + surfaceLine.SetDikeToeAtPolderAt(testPoint); // Assert Assert.AreEqual(testPoint, surfaceLine.DikeToeAtPolder); Assert.AreNotSame(testPoint, surfaceLine.DikeToeAtPolder); } [Test] - public void SetDikeToeAtPolder_GeometryEmpty_ThrowsInvalidOperationException() + public void SetDikeToeAtPolderAt_GeometryEmpty_ThrowsInvalidOperationException() { // Setup var random = new Random(21); @@ -644,7 +644,7 @@ var surfaceLine = new RingtoetsPipingSurfaceLine(); // Call - TestDelegate test = () => surfaceLine.SetDikeToeAtPolder(testPoint); + TestDelegate test = () => surfaceLine.SetDikeToeAtPolderAt(testPoint); // Assert var message = string.Format(Resources.RingtoetsPipingSurfaceLine_SetCharacteristicPointAt_Geometry_does_not_contain_point_at_0_1_2_to_assign_as_characteristic_point, @@ -653,13 +653,13 @@ } [Test] - public void SetDikeToeAtPolder_Null_ThrowsArgumentNullException() + public void SetDikeToeAtPolderAt_Null_ThrowsArgumentNullException() { // Setup var surfaceLine = new RingtoetsPipingSurfaceLine(); // Call - TestDelegate test = () => surfaceLine.SetDikeToeAtPolder(null); + TestDelegate test = () => surfaceLine.SetDikeToeAtPolderAt(null); // Assert TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "Cannot find a point in geometry using a null point."); Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/RingtoetsPipingSurfaceLinePropertiesTest.cs =================================================================== diff -u -r9d1ffc9bd1a9c392c6b832422649a0ad2f5ff59c -rb4ce929ce35e4770f3d8c12d14174de79cc5bee8 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/RingtoetsPipingSurfaceLinePropertiesTest.cs (.../RingtoetsPipingSurfaceLinePropertiesTest.cs) (revision 9d1ffc9bd1a9c392c6b832422649a0ad2f5ff59c) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/RingtoetsPipingSurfaceLinePropertiesTest.cs (.../RingtoetsPipingSurfaceLinePropertiesTest.cs) (revision b4ce929ce35e4770f3d8c12d14174de79cc5bee8) @@ -50,8 +50,8 @@ point1, point2 }); - surfaceLine.SetDikeToeAtRiver(point1); - surfaceLine.SetDikeToeAtPolder(point2); + surfaceLine.SetDikeToeAtRiverAt(point1); + surfaceLine.SetDikeToeAtPolderAt(point2); surfaceLine.SetDitchDikeSideAt(point1); surfaceLine.SetBottomDitchDikeSideAt(point1); surfaceLine.SetBottomDitchPolderSideAt(point2);