Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.nl-NL.resx =================================================================== diff -u -r6752 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.nl-NL.resx (.../Resources.nl-NL.resx) (revision 6752) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.nl-NL.resx (.../Resources.nl-NL.resx) (revision 6851) @@ -291,6 +291,9 @@ Er is een onverwachte fout opgetreden bij het bepalen van het snijpunt tussen de sloot en PL 1. + + De door de gebruiker gedefinieerde penetratiezone overlapt gedeeltelijk of strekt zich uit boven het tussenliggende watervoerende pakket. Daarom wordt PL 2 gelijkgesteld aan PL 4. + Er is een onverwachte fout opgetreden bij het bepalen van de boven- en ondergrenzen van de tussenliggende watervoerende laag. Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedOutput.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedOutput.cs (.../WtiPipingSellmeijerRevisedOutput.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedOutput.cs (.../WtiPipingSellmeijerRevisedOutput.cs) (revision 6851) @@ -22,6 +22,7 @@ using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Standard.Calculation; +using Deltares.DamEngine.Data.Standard.Logging; namespace Deltares.DamEngine.Calculators.KernelWrappers.WtiPipingSellmeijerRevised; @@ -158,4 +159,12 @@ /// The length of the seepage. /// public double SeepageLength { get; set; } + + /// + /// Gets or sets the message for the log. + /// + /// + /// The message for the log (in case of an error or a warning). + /// + public LogMessage Message { get; set; } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculator.cs =================================================================== diff -u -r6752 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculator.cs (.../OperationalCalculator.cs) (revision 6752) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculator.cs (.../OperationalCalculator.cs) (revision 6851) @@ -29,7 +29,6 @@ using Deltares.DamEngine.Calculators.General; using Deltares.DamEngine.Calculators.KernelWrappers.Common; using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces; -using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards; using Deltares.DamEngine.Calculators.Properties; using Deltares.DamEngine.Data.Design; using Deltares.DamEngine.Data.General; @@ -99,7 +98,7 @@ } damProjectData.CalculationMessages.Add(new LogMessage(LogMessageType.Info, null, - $"There are {locationCount} locations with sensor data")); + $"There are {locationCount} locations with sensor data")); if (!locations.Any()) { @@ -279,14 +278,9 @@ { return; } - - var mo = (MacroStabilityOutput) kernelDataOutput; - if (mo != null) - { - calculationMessages.Add(mo.Message); - } } } + kernelWrapper.AddMessageToCalculationMessages(kernelDataOutput, calculationMessages); } catch (Exception e) { Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityOutwards/MacroStabilityOutwardsKernelWrapper.cs =================================================================== diff -u -r6506 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityOutwards/MacroStabilityOutwardsKernelWrapper.cs (.../MacroStabilityOutwardsKernelWrapper.cs) (revision 6506) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityOutwards/MacroStabilityOutwardsKernelWrapper.cs (.../MacroStabilityOutwardsKernelWrapper.cs) (revision 6851) @@ -101,8 +101,16 @@ const bool useRiverLevelLow = true; // Determine PL-lines and create waternet var upliftHelper = new UpliftHelper(); - PlLines plLines = upliftHelper.DeterminePlLinesForStability(damKernelInput, useRiverLevelLow, out _); + PlLines plLines = upliftHelper.DeterminePlLinesForStability(damKernelInput, useRiverLevelLow, out _, out string warningMessage); Waternet waterNet = MacroStabilityCommonHelper.CreateWaternet(damKernelInput, plLines); + if (warningMessage != null) + { + macroStabilityOutput.Message = new LogMessage + { + Message = warningMessage, + MessageType = LogMessageType.Warning + }; + } FailureMechanismParametersMStab.MStabParameters.GridPosition = StabilityGridPosition.Left; damKernelInput.DamFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab @@ -246,4 +254,14 @@ { return DesignStrategy.NoDesignPossible; } + + public void AddMessageToCalculationMessages(IKernelDataOutput kernelDataOutput, List logMessages) + { + var dataOutput = (MacroStabilityOutput) kernelDataOutput; + LogMessage message = dataOutput.Message; + if (message != null) + { + logMessages.Add(message); + } + } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.resx =================================================================== diff -u -r6752 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.resx (.../Resources.resx) (revision 6752) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.resx (.../Resources.resx) (revision 6851) @@ -295,6 +295,9 @@ An unexpected error occurs during the determination of the intersection point between the ditch and PL 1. + + The user-defined penetration zone partially overlaps or extends above the in-between aquifer. Therefore, PL 2 is set equal to PL 4. + An unexpected error occured during the determination of the top and bottom boundaries of the in-between aquifer layer. @@ -305,9 +308,9 @@ Location {0} Profile {1} Scenario {2} is not relevant (different calculator or no uplift at using piping). - Location {0} Profile {1} Scenario {2} is not calculated because there is no uplift at using stability UpliftVan. - + Location {0} Profile {1} Scenario {2} is not calculated because there is no uplift at using stability UpliftVan. + - No uplift - + No uplift + \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Uplift/UpliftLocationDeterminatorTest.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Uplift/UpliftLocationDeterminatorTest.cs (.../UpliftLocationDeterminatorTest.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Uplift/UpliftLocationDeterminatorTest.cs (.../UpliftLocationDeterminatorTest.cs) (revision 6851) @@ -176,6 +176,6 @@ IsAdjustPL3AndPL4SoNoUpliftWillOccurEnabled = false // for piping this must be set to false }; var location = new Location(); - return plLineCreator.CreateAllPlLines(location); + return plLineCreator.CreateAllPlLines(location, out _); } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/PlLinesCreator/PlLinesCreator.cs =================================================================== diff -u -r6747 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/PlLinesCreator/PlLinesCreator.cs (.../PlLinesCreator.cs) (revision 6747) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/PlLinesCreator/PlLinesCreator.cs (.../PlLinesCreator.cs) (revision 6851) @@ -31,6 +31,7 @@ using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.Data.Standard; +using Deltares.DamEngine.Data.Standard.Logging; namespace Deltares.DamEngine.Calculators.PlLinesCreator; @@ -136,9 +137,10 @@ /// Create all PlLines /// /// - public PlLines CreateAllPlLines(Location location) + public PlLines CreateAllPlLines(Location location, out string warningMessage) { var plLines = new PlLines(); + warningMessage = null; switch (ModelParametersForPlLines.PlLineCreationMethod) { case PlLineCreationMethod.ExpertKnowledgeLinearInDike: @@ -154,13 +156,17 @@ if (!plLines.Lines[PlLineType.Pl2].Exists()) { plLines.Lines[PlLineType.Pl2] = plLines.Lines[PlLineType.Pl4].Clone(); + if (!Pl2ShouldNotBeCreated() && plLines.Lines[PlLineType.Pl4].Exists()) + { + warningMessage = Resources.PlLinesCreator_WarningPl2SetEqualToPl4; + } } if (!plLines.Lines[PlLineType.Pl1].IsXAscending()) { throw new PlLinesCreatorException("PlLine 1 not an X-ascending polyline"); } - + return plLines; } @@ -414,7 +420,7 @@ throw new PlLinesCreatorException("Negative penetration length."); } - if (penetrationLength.AlmostEquals(0.0) || (headInPlLine2 == null)) + if (Pl2ShouldNotBeCreated()) { return plLine; } @@ -1799,4 +1805,9 @@ validator.ValidateSoilProfileForPlLinesCreator(); } + + private bool Pl2ShouldNotBeCreated() + { + return ModelParametersForPlLines.PenetrationLength.AlmostEquals(0.0) || (HeadInPlLine2 == null); + } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r6738 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 6738) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 6851) @@ -115,9 +115,18 @@ const bool useRiverLevelLow = false; // Determine whether there is uplift var upliftHelper = new UpliftHelper(); - PlLines plLines = upliftHelper.DeterminePlLinesForStability(damKernelInput, useRiverLevelLow, out UpliftSituation upliftSituation); + PlLines plLines = upliftHelper.DeterminePlLinesForStability(damKernelInput, useRiverLevelLow, out UpliftSituation upliftSituation, out string warningMessage); macroStabilityOutput.UpliftSituation = upliftSituation; + if (warningMessage != null) + { + macroStabilityOutput.Message = new LogMessage + { + Message = warningMessage, + MessageType = LogMessageType.Warning + }; + } + Waternet waterNet = MacroStabilityCommonHelper.CreateWaternet(damKernelInput, plLines); if (FailureMechanismParametersMStab.MStabParameters.Model == StabilityModelType.UpliftVan @@ -558,4 +567,14 @@ return macroStabilityOutputItem; } + + public void AddMessageToCalculationMessages(IKernelDataOutput kernelDataOutput, List logMessages) + { + var dataOutput = (MacroStabilityOutput) kernelDataOutput; + LogMessage message = dataOutput.Message; + if (message != null) + { + logMessages.Add(message); + } + } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingBligh/WtiPipingBlighOutput.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingBligh/WtiPipingBlighOutput.cs (.../WtiPipingBlighOutput.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingBligh/WtiPipingBlighOutput.cs (.../WtiPipingBlighOutput.cs) (revision 6851) @@ -22,6 +22,7 @@ using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Standard.Calculation; +using Deltares.DamEngine.Data.Standard.Logging; namespace Deltares.DamEngine.Calculators.KernelWrappers.WtiPipingBligh; @@ -78,4 +79,12 @@ /// The uplift situation. /// public UpliftSituation UpliftSituation { get; set; } + + /// + /// Gets or sets the message for the log. + /// + /// + /// The message for the log (in case of an error or a warning). + /// + public LogMessage Message { get; set; } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs =================================================================== diff -u -r6698 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs (.../DesignCalculator.cs) (revision 6698) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs (.../DesignCalculator.cs) (revision 6851) @@ -26,7 +26,6 @@ using Deltares.DamEngine.Calculators.General; using Deltares.DamEngine.Calculators.KernelWrappers.Common; using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces; -using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards; using Deltares.DamEngine.Calculators.Properties; using Deltares.DamEngine.Data.Design; using Deltares.DamEngine.Data.General; @@ -286,6 +285,7 @@ { case PrepareResult.Successful: PerformCalculation(designResults, calculationMessages, analysisType, kernelWrapper, kernelDataInput, kernelDataOutput, damKernelInput); + kernelWrapper.AddMessageToCalculationMessages(kernelDataOutput, calculationMessages); break; case PrepareResult.NotRelevant: calculationMessages.Add(new LogMessage(LogMessageType.Info, null, @@ -309,12 +309,7 @@ location.Name, soiProfileProbability, designScenario.LocationScenarioID))); - - var mo = (MacroStabilityOutput) kernelDataOutput; - if (mo != null) - { - calculationMessages.Add(mo.Message); - } + kernelWrapper.AddMessageToCalculationMessages(kernelDataOutput, calculationMessages); break; } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/WtiPipingHelper.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/WtiPipingHelper.cs (.../WtiPipingHelper.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/WtiPipingHelper.cs (.../WtiPipingHelper.cs) (revision 6851) @@ -59,7 +59,8 @@ /// The point. /// The pl lines. /// The uplift location and result. - public static void DeterminePlLinesAndUpliftLocation(DamKernelInput damKernelInput, Point2D point, out PlLines plLines, out UpliftLocationAndResult upliftLocationAndResult) + /// + public static void DeterminePlLinesAndUpliftLocation(DamKernelInput damKernelInput, Point2D point, out PlLines plLines, out UpliftLocationAndResult upliftLocationAndResult, out string warningMessage) { Location location = damKernelInput.Location; SoilProfile1D soilProfile = damKernelInput.SubSoilScenario.SoilProfile1D; @@ -71,7 +72,7 @@ ThrowHelper.ThrowIfArgumentNull(entryPoint, string.Format(Resources.NoDikeToeDefinedForLocation, location.Name)); plLines = PlLinesHelper.CreatePlLinesForPiping(damKernelInput.TimeStepDateTime, damKernelInput.Location, damKernelInput.SubSoilScenario.SoilProfile1D, - damKernelInput.RiverLevelHigh); + damKernelInput.RiverLevelHigh, out warningMessage); var upliftLocationDeterminator = new UpliftLocationDeterminator { Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs =================================================================== diff -u -r6679 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs (.../IKernelWrapper.cs) (revision 6679) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs (.../IKernelWrapper.cs) (revision 6851) @@ -97,7 +97,7 @@ /// The kernel data input. /// The kernel data output. /// - /// Result of the prepare + /// Result of the preparation /// PrepareResult Prepare(DamKernelInput damKernelInput, int iterationIndex, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput); @@ -172,4 +172,11 @@ /// /// DesignStrategy GetDesignStrategy(DamKernelInput damKernelInput); + + /// + /// Add the message from the to the . + /// + /// The kernel data output + /// The log messages. + void AddMessageToCalculationMessages(IKernelDataOutput kernelDataOutput, List logMessages); } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapper.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapper.cs (.../WtiPipingSellmeijerRevisedKernelWrapper.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapper.cs (.../WtiPipingSellmeijerRevisedKernelWrapper.cs) (revision 6851) @@ -58,7 +58,7 @@ /// The kernel data input. /// The kernel data output. /// - /// Result of the prepare + /// Result of the preparation /// public PrepareResult Prepare(DamKernelInput damKernelInput, int iterationIndex, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) { @@ -69,10 +69,10 @@ FoSh = defaultMaxReturnValue }; kernelDataOutput = pipingOutput; - if (damKernelInput.SubSoilScenario != null) + if (damKernelInput.SubSoilScenario is { SegmentFailureMechanismType: not null } && damKernelInput.SubSoilScenario.SegmentFailureMechanismType.Value.In( + SegmentFailureMechanismType.Piping, SegmentFailureMechanismType.All)) { - if (damKernelInput.SubSoilScenario.SegmentFailureMechanismType.Value.In( - SegmentFailureMechanismType.Piping, SegmentFailureMechanismType.All)) + try { SoilProfile1D soilProfile1D = damKernelInput.SubSoilScenario.SoilProfile1D; Location location = damKernelInput.Location; @@ -83,12 +83,32 @@ } PlLines plLines = - PlLinesHelper.CreatePlLinesForPiping(damKernelInput.TimeStepDateTime, location, soilProfile1D, waterLevel); + PlLinesHelper.CreatePlLinesForPiping(damKernelInput.TimeStepDateTime, location, soilProfile1D, waterLevel, out string warningMessage); + if (warningMessage != null) + { + pipingOutput.Message = new LogMessage + { + MessageType = LogMessageType.FatalError, + Message = warningMessage + }; + } + if (EvaluateUpliftSituation(damKernelInput, out kernelDataInput, plLines, waterLevel, pipingOutput)) { return PrepareResult.Successful; } } + catch (Exception e) + { + pipingOutput.Message = new LogMessage + { + MessageType = LogMessageType.FatalError, + Message = e.Message + }; + kernelDataOutput = pipingOutput; + kernelDataInput = null; + return PrepareResult.Failed; + } } kernelDataInput = null; @@ -309,7 +329,7 @@ PlLines plLines; UpliftLocationAndResult upliftLocationAndResult; - WtiPipingHelper.DeterminePlLinesAndUpliftLocation(damKernelInput, point, out plLines, out upliftLocationAndResult); + WtiPipingHelper.DeterminePlLinesAndUpliftLocation(damKernelInput, point, out plLines, out upliftLocationAndResult, out _); double requiredFoS = location.CurrentScenario.RequiredSafetyFactorPiping; double upliftCriterion = location.CurrentScenario.UpliftCriterionPiping; @@ -793,4 +813,14 @@ throw new NoNullAllowedException(Resources.WtiPipingSellmeijerRevisedKernelWrapper_NoInputObjectDefined); } } + + public void AddMessageToCalculationMessages(IKernelDataOutput kernelDataOutput, List logMessages) + { + var dataOutput = (WtiPipingSellmeijerRevisedOutput) kernelDataOutput; + LogMessage message = dataOutput.Message; + if (message != null) + { + logMessages.Add(message); + } + } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingBligh/WtiPipingBlighKernelWrapperTests.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingBligh/WtiPipingBlighKernelWrapperTests.cs (.../WtiPipingBlighKernelWrapperTests.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingBligh/WtiPipingBlighKernelWrapperTests.cs (.../WtiPipingBlighKernelWrapperTests.cs) (revision 6851) @@ -261,6 +261,25 @@ } [Test] + public void TestAddMessageToCalculationMessages() + { + var kernelDataOutput = new WtiPipingBlighOutput(); + var message = new LogMessage + { + Message = "Warning during calculation", + MessageType = LogMessageType.Warning + }; + kernelDataOutput.Message = message; + var logMessages = new List(); + IKernelWrapper kernelWrapper = new WtiPipingBlighKernelWrapper(); + + kernelWrapper.AddMessageToCalculationMessages(kernelDataOutput, logMessages); + + Assert.That(logMessages, Has.Count.EqualTo(1)); + Assert.That(logMessages[0], Is.EqualTo(message)); + } + + [Test] [SetUICulture("nl-NL")] public void TestLanguageNLThrowsExceptionInExecuteWhenInputIsNull() { Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityOutput.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityOutput.cs (.../MacroStabilityOutput.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityOutput.cs (.../MacroStabilityOutput.cs) (revision 6851) @@ -57,7 +57,7 @@ /// Gets or sets the message for the log. /// /// - /// The message for the log (in case of an error). + /// The message for the log (in case of an error or a warning). /// public LogMessage Message { get; set; } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs (.../PlLinesHelper.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs (.../PlLinesHelper.cs) (revision 6851) @@ -44,10 +44,11 @@ /// The water level river low. /// The sensor pl line creator settings. /// The uplift situation. + /// The warning message. /// The created Pl-lines public static PlLines CreatePlLinesForStability(Location location, SoilGeometryProbability subSoilScenario, double waterLevel, double? waterLevelRiverLow, SensorPlLineCreatorSettings sensorPlLineCreatorSettings, - out UpliftSituation upliftSituation) + out UpliftSituation upliftSituation, out string warningMessage) { PlLines plLines = null; upliftSituation = new UpliftSituation(); @@ -56,7 +57,7 @@ case PlLineCreationMethod.ExpertKnowledgeLinearInDike: case PlLineCreationMethod.ExpertKnowledgeRRD: plLines = CreatePlLinesForStabilityExpertKnowledge(location, subSoilScenario, - waterLevel, waterLevelRiverLow, out upliftSituation); + waterLevel, waterLevelRiverLow, out upliftSituation, out warningMessage); break; case PlLineCreationMethod.Sensors: plLines = CreatePlLinesForStabilitySensors(location, sensorPlLineCreatorSettings); @@ -65,6 +66,7 @@ throw new NotImplementedException($@"Pl-line creation method '{location.ModelParametersForPlLines.PlLineCreationMethod}' is not implemented"); } + warningMessage = null; return plLines; } @@ -101,9 +103,11 @@ /// The location. /// The soil profile. /// The water level. + /// The warning message. /// - public static PlLines CreatePlLinesForPiping(DateTime timeStepDateTime, Location location, SoilProfile1D soilProfile, double waterLevel) + public static PlLines CreatePlLinesForPiping(DateTime timeStepDateTime, Location location, SoilProfile1D soilProfile, double waterLevel, out string warningMessage) { + warningMessage = null; var plLinesCreator = new PlLinesCreator.PlLinesCreator { WaterLevelRiverHigh = waterLevel, @@ -131,7 +135,7 @@ } else { - plLines = plLinesCreator.CreateAllPlLines(location); + plLines = plLinesCreator.CreateAllPlLines(location, out warningMessage); } return plLines; @@ -145,10 +149,13 @@ /// The water level. /// The water level river low. /// The uplift situation. + /// The warning message. /// The created Pl-lines private static PlLines CreatePlLinesForStabilityExpertKnowledge(Location location, SoilGeometryProbability subSoilScenario, - double waterLevel, double? waterLevelRiverLow, out UpliftSituation upliftSituation) + double waterLevel, double? waterLevelRiverLow, out UpliftSituation upliftSituation, + out string warningMessage) { + warningMessage = null; var plLinesCreator = new PlLinesCreator.PlLinesCreator { WaterLevelRiverLow = waterLevelRiverLow, @@ -176,7 +183,7 @@ SoilList = location.SoilList }; - PlLines plLines = plLinesCreator.CreateAllPlLines(location); + PlLines plLines = plLinesCreator.CreateAllPlLines(location, out warningMessage); upliftSituation = new UpliftSituation { Pl3HeadAdjusted = plLinesCreator.Pl3HeadAdjusted, @@ -187,6 +194,7 @@ Pl4MinUplift = plLinesCreator.Pl4MinUplift, IsUplift = false // must be determined later on; just to avoid compiler error }; + return plLines; } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/PlLinesCreatorTest.cs =================================================================== diff -u -r6747 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/PlLinesCreatorTest.cs (.../PlLinesCreatorTest.cs) (revision 6747) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/PlLinesCreatorTest.cs (.../PlLinesCreatorTest.cs) (revision 6851) @@ -979,7 +979,7 @@ SoilProfileType = SoilProfileType.ProfileType1D, SoilProfile = null }; - Assert.That(() => plLineCreator.CreateAllPlLines(new Location()), + Assert.That(() => plLineCreator.CreateAllPlLines(new Location(), out _), Throws.InstanceOf().With.Message.EqualTo ("Voor dit scenario wordt geen berekening uitgevoerd omdat het ondergrondprofiel niet voldoet aan " + "de eisen die aan de aanleg van het waternet worden gesteld: Er is niet voldoende informatie over het " + @@ -1147,6 +1147,7 @@ /// Test if PL2 and PL4 are created correctly if in-between aquifer present and penetration length ending in that aquifer /// [Test] + [SetUICulture("nl-NL")] public void CreatePL2andPL4For1DGeometryWithExpertKnowledgeRRDWithSandLayerInBetweenAndPenetrationLengthInThisAquiferLayer() { const double cPenetrationLength = 4.0; @@ -1170,7 +1171,7 @@ }; var location = new Location(); - PlLines plLines = plLineCreator.CreateAllPlLines(location); + PlLines plLines = plLineCreator.CreateAllPlLines(location, out string warningMessage); PlLine plLine2 = plLines.Lines[PlLineType.Pl2]; PlLine plLine4 = plLines.Lines[PlLineType.Pl4]; @@ -1185,6 +1186,8 @@ { Assert.That(plLine2.Points[pointIndex].LocationEquals(plLine4.Points[pointIndex]), Is.True); } + Assert.That(warningMessage, Is.EqualTo("De door de gebruiker gedefinieerde penetratiezone overlapt " + + "gedeeltelijk of strekt zich uit boven het tussenliggende watervoerende pakket. Daarom wordt PL 2 gelijkgesteld aan PL 4.")); } [Test] @@ -1648,7 +1651,7 @@ SlopeDampingPiezometricHeightPolderSide = 0.02 }; - PlLines plLines = plLineCreator.CreateAllPlLines(location); + PlLines plLines = plLineCreator.CreateAllPlLines(location, out _); CheckPl4LowFor1DGeometryWithExpertKnowledgeRrd(plLines.Lines[PlLineType.Pl4]); } @@ -1719,7 +1722,7 @@ plLineCreator.GaugePlLines = gaugePlLines; plLineCreator.Gauges = gauges; plLineCreator.ModelParametersForPlLines.PlLineCreationMethod = PlLineCreationMethod.GaugesWithFallbackToExpertKnowledgeRRD; - Assert.That(() => plLineCreator.CreateAllPlLines(locations[0]), Throws.InstanceOf()); + Assert.That(() => plLineCreator.CreateAllPlLines(locations[0], out _), Throws.InstanceOf()); } [Test] @@ -1796,7 +1799,7 @@ plLineCreator.GaugePlLines = gaugePlLines; plLineCreator.Gauges = gauges; - PlLines plLines = plLineCreator.CreateAllPlLines(locations[0]); + PlLines plLines = plLineCreator.CreateAllPlLines(locations[0], out _); Assert.That(plLines.Lines[PlLineType.Pl1].Points, Has.Count.EqualTo(4)); Assert.Multiple(() => @@ -1903,7 +1906,7 @@ plLineCreator.GaugePlLines = gaugePlLines; plLineCreator.Gauges = gauges; - PlLines plLines = plLineCreator.CreateAllPlLines(locations[0]); + PlLines plLines = plLineCreator.CreateAllPlLines(locations[0], out _); Assert.That(plLines.Lines[PlLineType.Pl1].Points, Has.Count.EqualTo(4)); Assert.Multiple(() => @@ -2009,7 +2012,7 @@ plLineCreator.GaugePlLines = gaugePlLines; plLineCreator.Gauges = gauges; - PlLines plLines = plLineCreator.CreateAllPlLines(locations[0]); + PlLines plLines = plLineCreator.CreateAllPlLines(locations[0], out _); Assert.That(plLines.Lines[PlLineType.Pl1].Points, Has.Count.EqualTo(2)); Assert.Multiple(() => @@ -2243,7 +2246,7 @@ var location = new Location(); // Call - PlLines plLines = plLineCreator.CreateAllPlLines(location); + PlLines plLines = plLineCreator.CreateAllPlLines(location, out _); // Assert Assert.That(plLines.Lines, Has.Count.EqualTo(4)); @@ -2339,7 +2342,7 @@ }; // Call - PlLines plLines = plLineCreator.CreateAllPlLines(location); + PlLines plLines = plLineCreator.CreateAllPlLines(location, out _); // Assert Assert.That(plLines.Lines[PlLineType.Pl4].Points, Has.Count.EqualTo(4)); @@ -2429,6 +2432,7 @@ } [Test] + [SetUICulture("nl-NL")] [TestCase(1, false)] // top level penetration zone (-5m) in bottom aquitard [TestCase(2.5, true)] // top level penetration zone (-3.5m) half in bottom aquitard, half in in-between aquifer [TestCase(4.5, true)] // top level penetration zone (-2.5m) in middle aquitard @@ -2457,7 +2461,7 @@ var location = new Location(); // Call - PlLines plLines = plLineCreator.CreateAllPlLines(location); + PlLines plLines = plLineCreator.CreateAllPlLines(location, out string warningMessage); // Assert Assert.That(plLines.Lines[PlLineType.Pl4], Is.Not.Null); @@ -2483,6 +2487,9 @@ { Assert.That(plLines.Lines[PlLineType.Pl2].Points[0].Z, Is.EqualTo(headPl4).Within(tolerance4Decimals)); Assert.That(plLines.Lines[PlLineType.Pl2].Points[1].Z, Is.EqualTo(headPl4).Within(tolerance4Decimals)); + Assert.That(warningMessage, Is.EqualTo("De door de gebruiker gedefinieerde penetratiezone overlapt " + + "gedeeltelijk of strekt zich uit boven het tussenliggende watervoerende pakket. " + + "Daarom wordt PL 2 gelijkgesteld aan PL 4.")); }); } else @@ -2491,6 +2498,7 @@ { Assert.That(plLines.Lines[PlLineType.Pl2].Points[0].Z, Is.EqualTo(headPl2).Within(tolerance4Decimals)); Assert.That(plLines.Lines[PlLineType.Pl2].Points[1].Z, Is.EqualTo(headPl2).Within(tolerance4Decimals)); + Assert.That(warningMessage, Is.Null); }); } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/UpliftHelperTests.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/UpliftHelperTests.cs (.../UpliftHelperTests.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/UpliftHelperTests.cs (.../UpliftHelperTests.cs) (revision 6851) @@ -43,11 +43,11 @@ damKernelInput.Location.CurrentScenario.UpliftCriterionStability = 1.2; var upliftHelper = new UpliftHelper(); - upliftHelper.DeterminePlLinesForStability(damKernelInput, false, out UpliftSituation upliftSituation); + upliftHelper.DeterminePlLinesForStability(damKernelInput, false, out UpliftSituation upliftSituation, out _); Assert.That(upliftSituation.IsUplift, Is.True); damKernelInput.Location.CurrentScenario.UpliftCriterionStability = 0.8; - upliftHelper.DeterminePlLinesForStability(damKernelInput, false, out upliftSituation); + upliftHelper.DeterminePlLinesForStability(damKernelInput, false, out upliftSituation, out _); Assert.That(upliftSituation.IsUplift, Is.False); } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs =================================================================== diff -u -r6688 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 6688) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 6851) @@ -55,7 +55,7 @@ [TestCase(1.4, true, false, PrepareResult.NotRelevant, false)] [TestCase(1.4, true, true, PrepareResult.Successful)] [TestCase(1.2, false, false, PrepareResult.Failed)] - public void TestPrepare(double upliftCriterionStability, bool isInputValid, bool expectedIsUplift, + public void TestPrepare(double upliftCriterionStability, bool isInputValid, bool expectedIsUplift, PrepareResult expectedPrepareResult, bool isStability = true) { // Setup @@ -65,6 +65,7 @@ { kernelInput.SubSoilScenario.SegmentFailureMechanismType = SegmentFailureMechanismType.Piping; } + var kernelWrapper = new MacroStabilityInwardsKernelWrapper { FailureMechanismParametersMStab = new FailureMechanismParametersMStab @@ -582,13 +583,32 @@ Assert.That(engineInterface.DamProjectData, Is.Not.Null); engineInterface.DamProjectData.DamProjectCalculationSpecification.CurrentSpecification.StabilityModelType = StabilityModelType.UpliftVan; - + Output output = GeneralHelper.RunAfterInputValidation(engineInterface); Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.EqualTo(1.6099).Within(tolerance4Decimals)); } [Test] + public void TestAddMessageToCalculationMessages() + { + var kernelDataOutput = new MacroStabilityOutput(); + var message = new LogMessage + { + Message = "Warning during calculation", + MessageType = LogMessageType.Warning + }; + kernelDataOutput.Message = message; + var logMessages = new List(); + IKernelWrapper kernelWrapper = new MacroStabilityInwardsKernelWrapper(); + + kernelWrapper.AddMessageToCalculationMessages(kernelDataOutput, logMessages); + + Assert.That(logMessages, Has.Count.EqualTo(1)); + Assert.That(logMessages[0], Is.EqualTo(message)); + } + + [Test] [SetUICulture("nl-NL")] public void TestLanguageNLThrowsExceptionWhenInputIsNull() { Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs (.../PlLinesHelperTests.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs (.../PlLinesHelperTests.cs) (revision 6851) @@ -50,7 +50,7 @@ var riverLevel = 1.0; var timeStepDateTime = new DateTime(); - PlLines plLines = PlLinesHelper.CreatePlLinesForPiping(timeStepDateTime, location, soilProfile1D, riverLevel); + PlLines plLines = PlLinesHelper.CreatePlLinesForPiping(timeStepDateTime, location, soilProfile1D, riverLevel, out _); Assert.Multiple(() => { Assert.That(plLines.PlLineCount, Is.EqualTo(4)); @@ -90,7 +90,7 @@ var riverLevel = 1.0; var timeStepDateTime = new DateTime(); - PlLines plLines = PlLinesHelper.CreatePlLinesForPiping(timeStepDateTime, location, soilProfile1D, riverLevel); + PlLines plLines = PlLinesHelper.CreatePlLinesForPiping(timeStepDateTime, location, soilProfile1D, riverLevel, out _); Assert.Multiple(() => { Assert.That(plLines.PlLineCount, Is.EqualTo(4)); @@ -141,7 +141,7 @@ var riverLevel = 0.5; var timeStepDateTime = new DateTime(); - PlLines plLines = PlLinesHelper.CreatePlLinesForPiping(timeStepDateTime, location, soilProfile1D, riverLevel); + PlLines plLines = PlLinesHelper.CreatePlLinesForPiping(timeStepDateTime, location, soilProfile1D, riverLevel, out _); Assert.Multiple(() => { Assert.That(plLines.PlLineCount, Is.EqualTo(4)); Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingBligh/WtiPipingBlighKernelWrapper.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingBligh/WtiPipingBlighKernelWrapper.cs (.../WtiPipingBlighKernelWrapper.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingBligh/WtiPipingBlighKernelWrapper.cs (.../WtiPipingBlighKernelWrapper.cs) (revision 6851) @@ -69,17 +69,43 @@ FoSp = defaultMaxReturnValue }; kernelDataOutput = wtiPipingBlighOutput; - if (damKernelInput.SubSoilScenario.SegmentFailureMechanismType.Value.In(SegmentFailureMechanismType.Piping, SegmentFailureMechanismType.All)) + if (damKernelInput.SubSoilScenario.SegmentFailureMechanismType != null && + damKernelInput.SubSoilScenario.SegmentFailureMechanismType.Value.In(SegmentFailureMechanismType.Piping, SegmentFailureMechanismType.All)) { - var wtiPipingBlighInput = new WtiPipingBlighInput(); + try + { - SoilProfile1D soilProfile1D = damKernelInput.SubSoilScenario.SoilProfile1D; - Location location = damKernelInput.Location; - double waterLevel = damKernelInput.RiverLevelHigh; - PlLines plLines = PlLinesHelper.CreatePlLinesForPiping(damKernelInput.TimeStepDateTime, location, soilProfile1D, waterLevel); - if (EvaluateUpliftSituation(damKernelInput, out kernelDataInput, plLines, wtiPipingBlighInput, waterLevel, wtiPipingBlighOutput)) + var wtiPipingBlighInput = new WtiPipingBlighInput(); + + SoilProfile1D soilProfile1D = damKernelInput.SubSoilScenario.SoilProfile1D; + Location location = damKernelInput.Location; + double waterLevel = damKernelInput.RiverLevelHigh; + PlLines plLines = PlLinesHelper.CreatePlLinesForPiping(damKernelInput.TimeStepDateTime, location, soilProfile1D, waterLevel, out string warningMessage); + + if (warningMessage != null) + { + wtiPipingBlighOutput.Message = new LogMessage + { + MessageType = LogMessageType.FatalError, + Message = warningMessage + }; + } + + if (EvaluateUpliftSituation(damKernelInput, out kernelDataInput, plLines, wtiPipingBlighInput, waterLevel, wtiPipingBlighOutput)) + { + return PrepareResult.Successful; + } + } + catch (Exception e) { - return PrepareResult.Successful; + wtiPipingBlighOutput.Message = new LogMessage + { + MessageType = LogMessageType.FatalError, + Message = e.Message + }; + kernelDataOutput = wtiPipingBlighOutput; + kernelDataInput = null; + return PrepareResult.Failed; } } @@ -192,7 +218,7 @@ PlLines plLines; UpliftLocationAndResult upliftLocationAndResult; - WtiPipingHelper.DeterminePlLinesAndUpliftLocation(damKernelInput, point, out plLines, out upliftLocationAndResult); + WtiPipingHelper.DeterminePlLinesAndUpliftLocation(damKernelInput, point, out plLines, out upliftLocationAndResult, out _); double requiredFoS = location.CurrentScenario.RequiredSafetyFactorPiping; double upliftCriterion = location.CurrentScenario.UpliftCriterionPiping; @@ -402,4 +428,14 @@ throw new NoNullAllowedException(Resources.WtiPipingBlighKernelWrapper_NoDamInputObjectDefinedForBligh); } } + + public void AddMessageToCalculationMessages(IKernelDataOutput kernelDataOutput, List logMessages) + { + var dataOutput = (WtiPipingBlighOutput) kernelDataOutput; + LogMessage message = dataOutput.Message; + if (message != null) + { + logMessages.Add(message); + } + } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapperTests.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapperTests.cs (.../WtiPipingSellmeijerRevisedKernelWrapperTests.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapperTests.cs (.../WtiPipingSellmeijerRevisedKernelWrapperTests.cs) (revision 6851) @@ -352,6 +352,25 @@ }); } + [Test] + public void TestAddMessageToCalculationMessages() + { + var kernelDataOutput = new WtiPipingSellmeijerRevisedOutput(); + var message = new LogMessage + { + Message = "Warning during calculation", + MessageType = LogMessageType.Warning + }; + kernelDataOutput.Message = message; + var logMessages = new List(); + IKernelWrapper kernelWrapper = new WtiPipingSellmeijerRevisedKernelWrapper(); + + kernelWrapper.AddMessageToCalculationMessages(kernelDataOutput, logMessages); + + Assert.That(logMessages, Has.Count.EqualTo(1)); + Assert.That(logMessages[0], Is.EqualTo(message)); + } + [TestCase(0, 49.5, 1860.9050036726026, 1302.9335025708217, 1302.6335025708217, 0.037999943884683543)] [TestCase(10, 59.5, 2196.3999536424808, 1537.7799675497363, 1537.4799675497363, 0.038699691219277771)] [TestCase(-10, 39.5, 1519.6869237263827, 1064.0808466084677, 1063.7808466084678, 0.037131708214086942)] Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.Designer.cs =================================================================== diff -u -r6752 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 6752) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 6851) @@ -366,6 +366,12 @@ } } + internal static string PlLinesCreator_WarningPl2SetEqualToPl4 { + get { + return ResourceManager.GetString("PlLinesCreator_WarningPl2SetEqualToPl4", resourceCulture); + } + } + /// /// Looks up a localized string similar to No pl-lines object defined. /// Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/UpliftHelper.cs =================================================================== diff -u -r6404 -r6851 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/UpliftHelper.cs (.../UpliftHelper.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/UpliftHelper.cs (.../UpliftHelper.cs) (revision 6851) @@ -36,15 +36,16 @@ /// Determines the pl lines for stability. /// /// The dam kernel input. - /// if set to true [use rivel level low]. + /// if set to true [use river level low]. /// The uplift situation. + /// The warning message. /// pl lines - public PlLines DeterminePlLinesForStability(DamKernelInput damKernelInput, bool useRivelLevelLow, - out UpliftSituation upliftSituation) + public PlLines DeterminePlLinesForStability(DamKernelInput damKernelInput, bool useRiverLevelLow, + out UpliftSituation upliftSituation, out string warningMessage) { double riverLevel = damKernelInput.RiverLevelHigh; double? riverLevelLow = null; - if (useRivelLevelLow) + if (useRiverLevelLow) { riverLevelLow = damKernelInput.RiverLevelLow; } @@ -55,7 +56,7 @@ DateTime = damKernelInput.TimeStepDateTime }; PlLines plLines = PlLinesHelper.CreatePlLinesForStability(damKernelInput.Location, damKernelInput.SubSoilScenario, riverLevel, - riverLevelLow, sensorPlLineCreatorSettings, out upliftSituation); + riverLevelLow, sensorPlLineCreatorSettings, out upliftSituation, out warningMessage); upliftSituation.IsUplift = DetermineIsUplift(plLines, damKernelInput.Location, damKernelInput.SubSoilScenario, out double xCoordLowestUpliftFactor); upliftSituation.XCoordinateLowestUpliftFactorPoint = xCoordLowestUpliftFactor;