Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapperTests.cs =================================================================== diff -u -r683 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapperTests.cs (.../DamMacroStabilityKernelWrapperTests.cs) (revision 683) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapperTests.cs (.../DamMacroStabilityKernelWrapperTests.cs) (revision 686) @@ -50,22 +50,24 @@ // Prepare the wrapper. Result is input for the calculation dll IKernelDataInput damStabilityInput; - kernelWrapper.Prepare(damKernelInput, out damStabilityInput); + IKernelDataOutput kernelOutput; + kernelWrapper.Prepare(damKernelInput, out damStabilityInput, out kernelOutput); // Validate the input List messages; kernelWrapper.Validate(damStabilityInput, out messages); Assert.AreEqual(0, messages.Count); // Run the dll - DamMacroStabilityOutput output = (DamMacroStabilityOutput)kernelWrapper.Execute(damStabilityInput, out messages); + kernelWrapper.Execute(damStabilityInput, kernelOutput, out messages); + DamMacroStabilityOutput damMacroStabilityOutput = (DamMacroStabilityOutput) kernelOutput; Assert.AreEqual(0, messages.Count); - Assert.AreEqual(1.71, output.Zone1.SafetyFactor, diff); - Assert.IsNull(output.Zone2); + Assert.AreEqual(1.71, damMacroStabilityOutput.Zone1.SafetyFactor, diff); + Assert.IsNull(damMacroStabilityOutput.Zone2); // Fill the design results DesignResult result; - kernelWrapper.PostProcess(damKernelInput, output, out result); + kernelWrapper.PostProcess(damKernelInput, damMacroStabilityOutput, out result); Assert.AreEqual(1.71, result.StabilityDesignResults.SafetyFactor, diff); } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs =================================================================== diff -u -r681 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs (.../PlLinesHelperTests.cs) (revision 681) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs (.../PlLinesHelperTests.cs) (revision 686) @@ -24,7 +24,8 @@ location.SurfaceLine = CreateSurfaceLineTutorial1(); var soilProfile1D = CreatePipingSellmeijerProfileWithOneSandlayer(); var riverLevel = 1.0; - var plLines = PlLinesHelper.CreatePlLines(location, soilProfile1D, riverLevel); + UpliftSituation upliftSituation; + var plLines = PlLinesHelper.CreatePlLines(location, soilProfile1D, riverLevel, out upliftSituation); Assert.AreEqual(4, plLines.PLLineCount); Assert.AreEqual(8, plLines.Lines[PLLineType.PL1].Points.Count); Assert.IsTrue(new PLLinePoint(0.000, 1.000).LocationEquals(plLines.Lines[PLLineType.PL1].Points[0])); Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/Dikes Design/DesignCalculator.cs =================================================================== diff -u -r675 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/Dikes Design/DesignCalculator.cs (.../DesignCalculator.cs) (revision 675) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/Dikes Design/DesignCalculator.cs (.../DesignCalculator.cs) (revision 686) @@ -46,7 +46,8 @@ damKernelInput.SubSoilScenario = soiProfileProbability; damKernelInput.DesignScenario = location.Scenarios[designScenarioIndex]; IKernelDataInput kernelDataInput; - PrepareResult prepareResult = kernelWrapper.Prepare(damKernelInput, out kernelDataInput); + IKernelDataOutput kernelDataOutput; + PrepareResult prepareResult = kernelWrapper.Prepare(damKernelInput, out kernelDataInput, out kernelDataOutput); // Sometimes the kernelDataInput is not created (p.e when soilprofileprobablility is meant for // stability where Piping calc is wanted). In that case, do nothing but just skip. @@ -68,7 +69,7 @@ { // Perform calculation List locationCalculationMessages; - IKernelDataOutput kernelDataOutput = kernelWrapper.Execute(kernelDataInput, out locationCalculationMessages); + kernelWrapper.Execute(kernelDataInput, kernelDataOutput, out locationCalculationMessages); calculationMessages.AddRange(locationCalculationMessages); // Process output Index: dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/PipingBlighTests.cs =================================================================== diff -u -r684 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/PipingBlighTests.cs (.../PipingBlighTests.cs) (revision 684) +++ dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/PipingBlighTests.cs (.../PipingBlighTests.cs) (revision 686) @@ -22,6 +22,7 @@ using System.IO; using Deltares.DamEngine.Io; using NUnit.Framework; +using NUnit.Framework.Constraints; namespace Deltares.DamEngine.Interface.Tests { @@ -39,13 +40,13 @@ 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 + // Factor opdrijven = 0.5825 + // Kwelweglengte piping = 25.0 + // Intredepunt x-lokaal = 10.0 // Uittredepunt x-lokaal = 35.0 // Opdrijven = true // Profielnaam = soilprofile_01 - // PL3 opdrijven = 0.582 + // PL3 opdrijven = 0.582 // PL3 stijghoogte aangepast = 1.262 // PL3 locatie opdrijven lokaal = 35.0 // PL4 opdrijven = 0.0 @@ -58,14 +59,21 @@ 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); - } + Assert.AreEqual(35.0, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.ExitPointX, tolerance); + // The following values are not the same as in the classic UI + // The upliftfactor there is 0.351, but that is the Wti Upliftfactor + // The adjusted PL3/PL4 values there are not 0.0, but those are the values for stability; for piping no adjustement has to be made + Assert.AreEqual(0.5825, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftFactor, tolerance); + Assert.AreEqual(true, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.IsUplift); + Assert.AreEqual(0.0, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.Pl3MinUplift, tolerance); + Assert.AreEqual(0.0, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.Pl3HeadAdjusted, tolerance); + Assert.AreEqual(0.0, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.Pl3LocationXMinUplift, tolerance); + Assert.AreEqual(0.0, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.Pl4MinUplift, tolerance); + Assert.AreEqual(0.0, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.Pl4HeadAdjusted, tolerance); + Assert.AreEqual(0.0, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.Pl4LocationXMinUplift, tolerance); + } - [Test] + [Test] public void CanPerformBlighDesignRechterDiezedijk() { const string fileName = @"TestFiles\Rechter Diezedijk_BlighInputFile.xml"; Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapper.cs =================================================================== diff -u -r683 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapper.cs (.../DamMacroStabilityKernelWrapper.cs) (revision 683) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapper.cs (.../DamMacroStabilityKernelWrapper.cs) (revision 686) @@ -27,8 +27,12 @@ /// Prepares the specified dam kernel input. /// /// The dam kernel input. - /// - public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput) + /// The kernel data input. + /// The kernel data output + /// + /// Result of the prepare + /// + public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) { // TODO: this is just fake data const string testFolder = @"..\..\Deltares.DamEngine.Calculators.Tests\Files\MacroStability"; @@ -40,6 +44,8 @@ DGeoStabilityExePath = Path.Combine(DamMacroStabilityFolder, DGeoStabilityExe), DGeoStabilityInputFileName = stiFileName }; + kernelDataOutput = new DamMacroStabilityOutput(); + return PrepareResult.Successful; } @@ -66,11 +72,11 @@ /// Executes the kernel. /// /// The kernel data input. + /// The kernel data output. /// The return messages. - /// - public IKernelDataOutput Execute(IKernelDataInput kernelDataInput, out List messages) + public void Execute(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { - var damMacroStabilityOutput = new DamMacroStabilityOutput(); + DamMacroStabilityOutput damMacroStabilityOutput = (DamMacroStabilityOutput) kernelDataOutput; messages = new List(); // ToDo zant Question: write sti file in prepare or in execute? @@ -107,7 +113,6 @@ damMacroStabilityOutput.Zone2 = zone2; } } - return damMacroStabilityOutput; } internal XDocument CreateMstabDamXmlDocument() Index: dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/PipingSellmeijer4ForcesTests.cs =================================================================== diff -u -r678 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/PipingSellmeijer4ForcesTests.cs (.../PipingSellmeijer4ForcesTests.cs) (revision 678) +++ dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/PipingSellmeijer4ForcesTests.cs (.../PipingSellmeijer4ForcesTests.cs) (revision 686) @@ -7,7 +7,7 @@ [TestFixture] public class PipingSellmeijer4ForcesTests { - private const double Tolerance = 0.0005; + private const double tolerance = 0.0005; [Test] public void CanPerformSellmeijer4ForcesDesignPipingVoorbeeld1() @@ -36,9 +36,11 @@ // Heave Factor = 90.0 Assert.IsNotNull(outputString); var output = DamXmlSerialization.LoadOutputFromXmlString(outputString); - Assert.AreEqual(0.506, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.Sellmeijer4ForcesFactor, Tolerance); - Assert.AreEqual(1.619, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.Sellmeijer4ForcesHcritical, Tolerance); - //Assert.AreEqual(0.351, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftFactor, tolerance); + Assert.AreEqual(0.506, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.Sellmeijer4ForcesFactor, tolerance); + Assert.AreEqual(1.619, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.Sellmeijer4ForcesHcritical, tolerance); + Assert.AreEqual(0.5825, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftFactor, tolerance); + Assert.AreEqual(true, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.UpliftSituation.IsUplift); + Assert.AreEqual(35.0, output.Results.CalculationResults.DesignResults[0].PipingDesignResults.ExitPointX, 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); Index: dam engine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlOutput.cs =================================================================== diff -u -r591 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlOutput.cs (.../FillDamFromXmlOutput.cs) (revision 591) +++ dam engine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlOutput.cs (.../FillDamFromXmlOutput.cs) (revision 686) @@ -118,7 +118,7 @@ if (designResult.PipingDesignResults.UpliftSituation != null) { var uplift = designResult.PipingDesignResults.UpliftSituation; - var situation = new Data.Design.UpliftSituation(); + var situation = new Data.General.UpliftSituation(); situation.IsUplift = uplift.IsUplift; situation.Pl3MinUplift = uplift.Pl3MinUplift; situation.Pl3HeadAdjusted = uplift.Pl3HeadAdjusted; Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs =================================================================== diff -u -r675 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs (.../IKernelWrapper.cs) (revision 675) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs (.../IKernelWrapper.cs) (revision 686) @@ -27,8 +27,11 @@ /// /// The dam kernel input. /// The kernel data input. - /// Result of the prepare - PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput); + /// The kernel data output. + /// + /// Result of the prepare + /// + PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput); /// /// Validates the kernel data input. /// @@ -40,9 +43,9 @@ /// Performs a failure mechanism calcualtion based on the input. /// /// The kernel data input. + /// The kernel data output. /// The messages. - /// Kernel output object - IKernelDataOutput Execute(IKernelDataInput kernelDataInput, out List messages); + void Execute(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages); /// /// Fills the dam result based on the kernel output. /// Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesOutput.cs =================================================================== diff -u -r653 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesOutput.cs (.../DamPipingSellmeijer4ForcesOutput.cs) (revision 653) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesOutput.cs (.../DamPipingSellmeijer4ForcesOutput.cs) (revision 686) @@ -1,4 +1,5 @@ using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces; +using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Standard.Calculation; namespace Deltares.DamEngine.Calculators.KernelWrappers.DamPipingSellmeijer4Forces @@ -7,7 +8,9 @@ { public double FoSp { get; set; } public double Hc { get; set; } - public CalculationResult CalculationResult { get; set; } + public double? UpliftFactor { get; set; } + public double ExitPointX { get; set; } + public UpliftSituation UpliftSituation { get; set; } } } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs =================================================================== diff -u -r680 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs (.../PlLinesHelper.cs) (revision 680) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs (.../PlLinesHelper.cs) (revision 686) @@ -21,10 +21,11 @@ /// The location. /// The soil profile. /// The water level. + /// The uplift situation. /// - public static PLLines CreatePlLines(Location location, SoilProfile1D soilProfile, double waterLevel) + public static PLLines CreatePlLines(Location location, SoilProfile1D soilProfile, double waterLevel, out UpliftSituation upliftSituation) { - var plLineCreator = new PLLinesCreator + var plLinesCreator = new PLLinesCreator { WaterLevelRiverHigh = waterLevel, SurfaceLine = location.SurfaceLine, @@ -43,7 +44,15 @@ IsHydraulicShortcut = false, // TODO: Regional XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin }; - return plLineCreator.CreateAllPLLines(location); + var plLines = plLinesCreator.CreateAllPLLines(location); + upliftSituation.Pl3HeadAdjusted = plLinesCreator.Pl3HeadAdjusted; + upliftSituation.Pl3LocationXMinUplift = plLinesCreator.Pl3LocationXMinUplift; + upliftSituation.Pl3MinUplift = plLinesCreator.Pl3MinUplift; + upliftSituation.Pl4HeadAdjusted = plLinesCreator.Pl4HeadAdjusted; + upliftSituation.Pl4LocationXMinUplift = plLinesCreator.Pl4LocationXMinUplift; + upliftSituation.Pl4MinUplift = plLinesCreator.Pl4MinUplift; + upliftSituation.IsUplift = false; // must be determined later on; just to avoid compiler error + return plLines; } } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighInput.cs =================================================================== diff -u -r587 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighInput.cs (.../DamPipingBlighInput.cs) (revision 587) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighInput.cs (.../DamPipingBlighInput.cs) (revision 686) @@ -50,12 +50,5 @@ /// The D70. /// public double D70 { get; set; } - /// - /// Gets or sets a value indicating whether uplift occurs. - /// - /// - /// true if this instance is uplift; otherwise, false. - /// - public bool IsUplift { get; set; } } } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs =================================================================== diff -u -r684 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 684) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 686) @@ -21,15 +21,25 @@ public class DamPipingBlighKernelWrapper : IKernelWrapper { private const double defaultFluidisationGradient = 0.3; - public const double DefaultMaxReturnValue = 90.0; + private const double defaultMaxReturnValue = 90.0; /// /// Create the kernel input. /// /// The dam kernel input. - /// - public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput) + /// The kernel data input. + /// The kernel data output. + /// + /// Result of the prepare + /// + public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) { + var damPipingBlighOutput = new DamPipingBlighOutput() + { + CalculationResult = CalculationResult.NoRun, + FoSp = defaultMaxReturnValue + }; + kernelDataOutput = damPipingBlighOutput; if (damKernelInput.SubSoilScenario.SegmentFailureMechanismType == FailureMechanismSystemType.Piping) { var damPipingBlighInput = new DamPipingBlighInput(); @@ -38,7 +48,8 @@ var surfaceLine = damKernelInput.Location.SurfaceLine; var location = damKernelInput.Location; double riverLevel = damKernelInput.DesignScenario.RiverLevel; - var plLines = PlLinesHelper.CreatePlLines(location, soilProfile1D, riverLevel); + UpliftSituation upliftSituation; + var plLines = PlLinesHelper.CreatePlLines(location, soilProfile1D, riverLevel, out upliftSituation); UpliftLocationDeterminator upliftLocationDeterminator = new UpliftLocationDeterminator { PLLines = plLines, @@ -48,12 +59,13 @@ XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin }; var upliftLocationAndResult = upliftLocationDeterminator.GetLocationAndResult(damKernelInput.DesignScenario.GetUpliftCriterionPiping(null)); - bool isUplift = (upliftLocationAndResult != null); + upliftSituation.IsUplift = (upliftLocationAndResult != null); double xEntry = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtRiver).X; double xExit = 0.0; double surfaceLevel = 0.0; double d70 = 0.0; double dCoverLayer = 0.0; + double? upliftFactor = null; if (upliftLocationAndResult != null) { xExit = upliftLocationAndResult.X; @@ -62,6 +74,7 @@ d70 = Physics.FactorMeterToMicroMeter * heaveLayer.Soil.DiameterD70; var topLevelAquifer = soilProfile1D.GetLayerWithName(upliftLocationAndResult.LayerWhereUpliftOccuresId).TopLevel; dCoverLayer = DamPipingHelper.DetermineHeightCoverLayer(topLevelAquifer, surfaceLevel); + upliftFactor = upliftLocationAndResult.UpliftFactor; } double seepageLength = xExit - xEntry; damPipingBlighInput.HRiver = riverLevel; @@ -79,8 +92,11 @@ DTotal = dCoverLayer, SeepageLength = seepageLength, D70 = d70, - IsUplift = isUplift + }; + damPipingBlighOutput.ExitPointX = xExit; + damPipingBlighOutput.UpliftFactor = upliftFactor; + damPipingBlighOutput.UpliftSituation = upliftSituation; return PrepareResult.Successful; } kernelDataInput = null; @@ -113,15 +129,14 @@ /// Executes the kernel. /// /// The kernel data input. + /// The kernel data output. /// The messages. - /// - public IKernelDataOutput Execute(IKernelDataInput kernelDataInput, out List messages) + /// No input object defined for Bligh + public void Execute(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { - var damPipingBlighOutput = new DamPipingBlighOutput() - { - CalculationResult = CalculationResult.NoRun, - FoSp = DefaultMaxReturnValue - }; + DamPipingBlighOutput damPipingBlighOutput = (DamPipingBlighOutput) kernelDataOutput; + damPipingBlighOutput.CalculationResult = CalculationResult.NoRun; + damPipingBlighOutput.FoSp = defaultMaxReturnValue; messages = new List(); try { @@ -131,7 +146,7 @@ { throw new NoNullAllowedException("No input object defined for Bligh"); } - if (damPipingBlighInput.IsUplift) + if (damPipingBlighOutput.UpliftSituation.IsUplift) { var calculatorBligh = CreatePipingCalculatorBligh(kernelDataInput); calculatorBligh.Calculate(); @@ -145,7 +160,6 @@ damPipingBlighOutput.CalculationResult = CalculationResult.UnexpectedError; messages.Add(new LogMessage(LogMessageType.Error, null, e.Message)); } - return damPipingBlighOutput; } /// @@ -188,7 +202,7 @@ throw new NoNullAllowedException("No output object defined for Bligh"); } - // TODO: for now this only works for 1D profiles and NoAdaption of geometry + // TODO: for now this only works for 1D profiles string soilProfile2DName = "soilProfile2DName"; var damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification() { @@ -209,7 +223,11 @@ pipingDesignResults.RedesignedSurfaceLine = damKernelInput.Location.SurfaceLine; designResult.PipingDesignResults = pipingDesignResults; designResult.CalculationResult = damPipingBlighOutput.CalculationResult; + pipingDesignResults.UpliftSituation = damPipingBlighOutput.UpliftSituation; + pipingDesignResults.LocalExitPointX = damPipingBlighOutput.ExitPointX; + pipingDesignResults.UpliftFactor = damPipingBlighOutput.UpliftFactor; + } } Index: dam engine/trunk/src/Deltares.DamEngine.Data/Design/DesignScenario.cs =================================================================== diff -u -r670 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Data/Design/DesignScenario.cs (.../DesignScenario.cs) (revision 670) +++ dam engine/trunk/src/Deltares.DamEngine.Data/Design/DesignScenario.cs (.../DesignScenario.cs) (revision 686) @@ -36,23 +36,13 @@ { /// - /// Does uplift occur or not + /// Exception class for DesignScenario /// - public struct UpliftSituation - { - public bool IsUplift; - public double Pl3MinUplift; - public double Pl3HeadAdjusted; - public double Pl3LocationXMinUplift; - public double Pl4MinUplift; - public double Pl4HeadAdjusted; - public double Pl4LocationXMinUplift; - } - + /// [Serializable] - public class ScenarioException : Exception + public class DesignScenarioException : Exception { - public ScenarioException(string message) : base(message) + public DesignScenarioException(string message) : base(message) { } } @@ -554,7 +544,7 @@ { if ((defaultUpliftCriterionStability == null) && (ModelFactors.UpliftCriterionStability == null)) { - throw new ScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoUpliftCriterionForStability"), Location.Name, ToString())); + throw new DesignScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoUpliftCriterionForStability"), Location.Name, ToString())); } return (ModelFactors.UpliftCriterionStability == null ? defaultUpliftCriterionStability.Value @@ -570,7 +560,7 @@ { if ((defaultUpliftCriterionPiping == null) && (ModelFactors.UpliftCriterionPiping == null)) { - throw new ScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoUpliftCriterionForPiping"), Location.Name, ToString())); + throw new DesignScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoUpliftCriterionForPiping"), Location.Name, ToString())); } return (ModelFactors.UpliftCriterionPiping == null ? defaultUpliftCriterionPiping.Value : ModelFactors.UpliftCriterionPiping.Value); } @@ -584,7 +574,7 @@ { if ((defaultRequiredSafetyFactorPiping == null) && (ModelFactors.RequiredSafetyFactorPiping == null)) { - throw new ScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoRequiredSafetyFactorPiping"), Location.Name, ToString())); + throw new DesignScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoRequiredSafetyFactorPiping"), Location.Name, ToString())); } return (ModelFactors.RequiredSafetyFactorPiping == null ? defaultRequiredSafetyFactorPiping.Value : ModelFactors.RequiredSafetyFactorPiping.Value); } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs =================================================================== diff -u -r680 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs (.../DamPipingSellmeijer4ForcesKernelWrapper.cs) (revision 680) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs (.../DamPipingSellmeijer4ForcesKernelWrapper.cs) (revision 686) @@ -17,16 +17,25 @@ public class DamPipingSellmeijer4ForcesKernelWrapper : IKernelWrapper { - private const double DefaultFluidisationGradient = 0.3; - public const double DefaultMaxReturnValue = 90.0; + private const double defaultFluidisationGradient = 0.3; + private const double defaultMaxReturnValue = 90.0; /// /// Prepares the specified dam kernel input. /// /// The dam kernel input. - /// - public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput) + /// The kernel data input. + /// The krenel data output + /// + /// Result of the prepare + /// + public PrepareResult Prepare(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput) { + var damOutput = new DamPipingSellmeijer4ForcesOutput() + { + FoSp = defaultMaxReturnValue + }; + kernelDataOutput = damOutput; if (damKernelInput.SubSoilScenario.SegmentFailureMechanismType == FailureMechanismSystemType.Piping) { const double cDefaultWaterViscosity = 1.33E-06; @@ -36,7 +45,8 @@ var surfaceLine = damKernelInput.Location.SurfaceLine; var location = damKernelInput.Location; var riverLevel = damKernelInput.DesignScenario.RiverLevel; - var plLines = PlLinesHelper.CreatePlLines(location, soilProfile1D, riverLevel); + UpliftSituation upliftSituation; + var plLines = PlLinesHelper.CreatePlLines(location, soilProfile1D, riverLevel, out upliftSituation); var upliftLocationDeterminator = new UpliftLocationDeterminator { PLLines = plLines, @@ -46,14 +56,15 @@ XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin }; var upliftLocationAndResult = upliftLocationDeterminator.GetLocationAndResult(damKernelInput.DesignScenario.GetUpliftCriterionPiping(null)); - var isUplift = (upliftLocationAndResult != null); + upliftSituation.IsUplift = (upliftLocationAndResult != null); var xEntry = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtRiver).X; var xExit = 0.0; var surfaceLevel = 0.0; var dCoverLayer = 0.0; var d70 = 0.0; var aquiferHeight = 0.0; var permeabilityKx = 0.0; + double? upliftFactor = null; if (upliftLocationAndResult != null) { xExit = upliftLocationAndResult.X; @@ -66,6 +77,7 @@ aquiferHeight = aquiferLayer.Height; permeabilityKx = aquiferLayer.PermeabilityKx; + upliftFactor = upliftLocationAndResult.UpliftFactor; } var seepageLength = xExit - xEntry; @@ -86,10 +98,9 @@ { HRiver = riverLevel, HExit = referenceLevel, - Rc = DefaultFluidisationGradient, + Rc = defaultFluidisationGradient, DTotal = dCoverLayer, SeepageLength = seepageLength, - IsUplift = isUplift, // specific Sellmeijer 4 Forces WaterViscosity = cDefaultWaterViscosity, WhitesConstant = inBetweenAquiferlayerSoil.WhitesConstant, @@ -98,6 +109,9 @@ AquiferHeight = aquiferHeight, PermeabilityKx = permeabilityKx, }; + damOutput.ExitPointX = xExit; + damOutput.UpliftFactor = upliftFactor; + damOutput.UpliftSituation = upliftSituation; return PrepareResult.Successful; } kernelDataInput = null; @@ -126,30 +140,27 @@ /// Executes the kernel. /// /// The kernel data input. + /// The kernel data input. /// The return messages. /// No input object defined - /// - public IKernelDataOutput Execute(IKernelDataInput kernelDataInput, out List messages) + public void Execute(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { + DamPipingSellmeijer4ForcesOutput damPipingOutput = (DamPipingSellmeijer4ForcesOutput) kernelDataOutput; + damPipingOutput.FoSp = defaultMaxReturnValue; DamPipingSellmeijer4ForcesInput damPipingInput = kernelDataInput as DamPipingSellmeijer4ForcesInput; if (damPipingInput == null) { throw new NoNullAllowedException(Resources.DamPipingSellmeijer4ForcesKernelWrapper_NoInputObjectDefinedForSellmeijer4Forces); } messages = new List(); - var damPipingOutput = new DamPipingSellmeijer4ForcesOutput() + if (damPipingOutput.UpliftSituation.IsUplift) { - FoSp = DefaultMaxReturnValue - }; - if (damPipingInput.IsUplift) - { var calculator = CreatePipingCalculatorSellmeijer4Forces(kernelDataInput); calculator.Calculate(); damPipingOutput.FoSp = calculator.FoSp; damPipingOutput.Hc = calculator.Hc; damPipingOutput.CalculationResult = CalculationResult.Succeeded; } - return damPipingOutput; } private static PipingCalculatorSellmeijer4Forces CreatePipingCalculatorSellmeijer4Forces(IKernelDataInput kernelDataInput) @@ -206,6 +217,9 @@ pipingDesignResults.Sellmeijer4ForcesHcritical = damPipingOutput.Hc; designResult.CalculationResult = damPipingOutput.CalculationResult; designResult.PipingDesignResults = pipingDesignResults; + pipingDesignResults.LocalExitPointX = damPipingOutput.ExitPointX; + pipingDesignResults.UpliftFactor = damPipingOutput.UpliftFactor; + pipingDesignResults.UpliftSituation = damPipingOutput.UpliftSituation; } } Index: dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/FillXmlOutputFromDamTests.cs =================================================================== diff -u -r591 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/FillXmlOutputFromDamTests.cs (.../FillXmlOutputFromDamTests.cs) (revision 591) +++ dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/FillXmlOutputFromDamTests.cs (.../FillXmlOutputFromDamTests.cs) (revision 686) @@ -30,7 +30,7 @@ using KellermanSoftware.CompareNetObjects; using NUnit.Framework; using DesignResult = Deltares.DamEngine.Data.General.Results.DesignResult; -using UpliftSituation = Deltares.DamEngine.Data.Design.UpliftSituation; +using UpliftSituation = Deltares.DamEngine.Data.General.UpliftSituation; namespace Deltares.DamEngine.Interface.Tests { Index: dam engine/trunk/src/Deltares.DamEngine.Data/General/UpliftSituation.cs =================================================================== diff -u --- dam engine/trunk/src/Deltares.DamEngine.Data/General/UpliftSituation.cs (revision 0) +++ dam engine/trunk/src/Deltares.DamEngine.Data/General/UpliftSituation.cs (revision 686) @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Deltares.DamEngine.Data.General +{ + /// + /// Results of the uplift calculation + /// + public struct UpliftSituation + { + public bool IsUplift; + public double Pl3MinUplift; + public double Pl3HeadAdjusted; + public double Pl3LocationXMinUplift; + public double Pl4MinUplift; + public double Pl4HeadAdjusted; + public double Pl4LocationXMinUplift; + } + +} Index: dam engine/trunk/src/Deltares.DamEngine.Interface/FillXmlOutputFromDam.cs =================================================================== diff -u -r591 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Interface/FillXmlOutputFromDam.cs (.../FillXmlOutputFromDam.cs) (revision 591) +++ dam engine/trunk/src/Deltares.DamEngine.Interface/FillXmlOutputFromDam.cs (.../FillXmlOutputFromDam.cs) (revision 686) @@ -237,7 +237,7 @@ if (designResult.PipingDesignResults.UpliftSituation.HasValue) { var uplift = designResult.PipingDesignResults.UpliftSituation.Value; - desResult.PipingDesignResults.UpliftSituation = new UpliftSituation(); + desResult.PipingDesignResults.UpliftSituation = new Io.XmlOutput.UpliftSituation(); desResult.PipingDesignResults.UpliftSituation.IsUplift = uplift.IsUplift; desResult.PipingDesignResults.UpliftSituation.Pl3MinUplift = uplift.Pl3MinUplift; desResult.PipingDesignResults.UpliftSituation.Pl3HeadAdjusted = uplift.Pl3HeadAdjusted; Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighOutput.cs =================================================================== diff -u -r672 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighOutput.cs (.../DamPipingBlighOutput.cs) (revision 672) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighOutput.cs (.../DamPipingBlighOutput.cs) (revision 686) @@ -1,4 +1,5 @@ using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces; +using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Standard.Calculation; namespace Deltares.DamEngine.Calculators.KernelWrappers.DamPipingBligh @@ -30,5 +31,26 @@ /// The hc. /// public double Hc { get; set; } + /// + /// Gets or sets the uplift factor. + /// + /// + /// The uplift factor. + /// + public double? UpliftFactor { get; set; } + /// + /// Gets or sets the x-coordinate of the exit point. + /// + /// + /// The exit point x. + /// + public double ExitPointX { get; set; } + /// + /// Gets or sets the uplift situation. + /// + /// + /// The uplift situation. + /// + public UpliftSituation UpliftSituation { get; set; } } } Index: dam engine/trunk/src/Deltares.DamEngine.Data/Deltares.DamEngine.Data.csproj =================================================================== diff -u -r677 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Data/Deltares.DamEngine.Data.csproj (.../Deltares.DamEngine.Data.csproj) (revision 677) +++ dam engine/trunk/src/Deltares.DamEngine.Data/Deltares.DamEngine.Data.csproj (.../Deltares.DamEngine.Data.csproj) (revision 686) @@ -104,6 +104,7 @@ + Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapperTests.cs =================================================================== diff -u -r677 -r686 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapperTests.cs (.../DamPipingSellmeijer4ForcesKernelWrapperTests.cs) (revision 677) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapperTests.cs (.../DamPipingSellmeijer4ForcesKernelWrapperTests.cs) (revision 686) @@ -72,22 +72,24 @@ // Prepare the wrapper. Result is input for the calculation dll IKernelDataInput damPipingInput; - kernelWrapper.Prepare(damKernelInput, out damPipingInput); + IKernelDataOutput kernelDataOutput; + kernelWrapper.Prepare(damKernelInput, out damPipingInput, out kernelDataOutput); // Validate the input List messages; kernelWrapper.Validate(damPipingInput, out messages); Assert.AreEqual(0, messages.Count); // Run the dll - DamPipingSellmeijer4ForcesOutput output = (DamPipingSellmeijer4ForcesOutput) kernelWrapper.Execute(damPipingInput, out messages); + kernelWrapper.Execute(damPipingInput, kernelDataOutput, out messages); + DamPipingSellmeijer4ForcesOutput damPipingOutput = (DamPipingSellmeijer4ForcesOutput) kernelDataOutput; Assert.AreEqual(0, messages.Count); - Assert.AreEqual(11.899117458988471, output.FoSp, diff); - Assert.AreEqual(4.7596469835953883, output.Hc, diff); + Assert.AreEqual(11.899117458988471, damPipingOutput.FoSp, diff); + Assert.AreEqual(4.7596469835953883, damPipingOutput.Hc, diff); // Fill the design results DesignResult result; - kernelWrapper.PostProcess(damKernelInput, output, out result); + kernelWrapper.PostProcess(damKernelInput, damPipingOutput, out result); Assert.AreEqual(11.899117458988471, result.PipingDesignResults.Sellmeijer4ForcesFactor, diff); Assert.AreEqual(4.7596469835953883, result.PipingDesignResults.Sellmeijer4ForcesHcritical, diff); } @@ -117,7 +119,8 @@ }; var kernelWrapper = new DamPipingSellmeijer4ForcesKernelWrapper(); IKernelDataInput kernelDataInput; - kernelWrapper.Prepare(damKernelInput, out kernelDataInput); + IKernelDataOutput kernelDataOutput; + kernelWrapper.Prepare(damKernelInput, out kernelDataInput, out kernelDataOutput); DamPipingSellmeijer4ForcesInput damPipingInput = (DamPipingSellmeijer4ForcesInput) kernelDataInput; Assert.AreEqual(1.0, damPipingInput.HRiver, diff); Assert.AreEqual(0.0, damPipingInput.HExit, diff); @@ -195,7 +198,7 @@ { var kernelWrapper = new DamPipingSellmeijer4ForcesKernelWrapper(); List messages; - kernelWrapper.Execute(null, out messages); + kernelWrapper.Execute(null, null, out messages); } [Test] @@ -205,7 +208,7 @@ { var kernelWrapper = new DamPipingSellmeijer4ForcesKernelWrapper(); List messages; - kernelWrapper.Execute(null, out messages); + kernelWrapper.Execute(null, null, out messages); } [Test]