Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs =================================================================== diff -u -r687 -r694 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs (.../DamPipingSellmeijer4ForcesKernelWrapper.cs) (revision 687) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs (.../DamPipingSellmeijer4ForcesKernelWrapper.cs) (revision 694) @@ -122,17 +122,25 @@ /// Validates the specified kernel data input. /// /// The kernel data input. + /// The kernel data output. /// The return messages. - /// - public int Validate(IKernelDataInput kernelDataInput, out List messages) + /// + /// Number of errors that prevent a calculation + /// + public int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { + DamPipingSellmeijer4ForcesOutput damPipingOutput = (DamPipingSellmeijer4ForcesOutput)kernelDataOutput; var calculator = CreatePipingCalculatorSellmeijer4Forces(kernelDataInput); List kernelMessages = calculator.Validate(); messages = new List(); foreach (string stringMessage in kernelMessages) { messages.Add(new LogMessage() { Message = stringMessage, MessageType = LogMessageType.Error }); } + if (messages.Count > 0) + { + damPipingOutput.CalculationResult = CalculationResult.InvalidInputData; + } return messages.Count; } @@ -196,9 +204,10 @@ /// /// The dam kernel input. /// The kernel data output. + /// The result message. /// The design result. /// No input or output object defined - public void PostProcess(DamKernelInput damKernelInput, IKernelDataOutput kernelDataOutput, out DesignResult designResult) + public void PostProcess(DamKernelInput damKernelInput, IKernelDataOutput kernelDataOutput, string resultMessage, out DesignResult designResult) { DamPipingSellmeijer4ForcesOutput damPipingOutput = kernelDataOutput as DamPipingSellmeijer4ForcesOutput; if (damPipingOutput == null) @@ -216,14 +225,18 @@ var soilProfile1D = damKernelInput.SubSoilScenario.SoilProfile1D; designResult = new DesignResult(d, designScenario, soilProfile1D, soilProfile2DName, AnalysisType.NoAdaption); - var pipingDesignResults = new PipingDesignResults(PipingModelType.Sellmeijer4Forces); - pipingDesignResults.Sellmeijer4ForcesFactor = damPipingOutput.FoSp; - pipingDesignResults.Sellmeijer4ForcesHcritical = damPipingOutput.Hc; designResult.CalculationResult = damPipingOutput.CalculationResult; - designResult.PipingDesignResults = pipingDesignResults; - pipingDesignResults.LocalExitPointX = damPipingOutput.ExitPointX; - pipingDesignResults.UpliftFactor = damPipingOutput.UpliftFactor; - pipingDesignResults.UpliftSituation = damPipingOutput.UpliftSituation; + var pipingDesignResults = new PipingDesignResults(PipingModelType.Sellmeijer4Forces); + pipingDesignResults.ResultMessage = resultMessage; + if (designResult.CalculationResult == CalculationResult.Succeeded) + { + pipingDesignResults.Sellmeijer4ForcesFactor = damPipingOutput.FoSp; + pipingDesignResults.Sellmeijer4ForcesHcritical = damPipingOutput.Hc; + designResult.PipingDesignResults = pipingDesignResults; + pipingDesignResults.LocalExitPointX = damPipingOutput.ExitPointX; + pipingDesignResults.UpliftFactor = damPipingOutput.UpliftFactor; + pipingDesignResults.UpliftSituation = damPipingOutput.UpliftSituation; + } } } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapperTests.cs =================================================================== diff -u -r686 -r694 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapperTests.cs (.../DamPipingSellmeijer4ForcesKernelWrapperTests.cs) (revision 686) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapperTests.cs (.../DamPipingSellmeijer4ForcesKernelWrapperTests.cs) (revision 694) @@ -77,7 +77,7 @@ // Validate the input List messages; - kernelWrapper.Validate(damPipingInput, out messages); + kernelWrapper.Validate(damPipingInput, kernelDataOutput, out messages); Assert.AreEqual(0, messages.Count); // Run the dll @@ -89,7 +89,7 @@ // Fill the design results DesignResult result; - kernelWrapper.PostProcess(damKernelInput, damPipingOutput, out result); + kernelWrapper.PostProcess(damKernelInput, damPipingOutput, "", out result); Assert.AreEqual(11.899117458988471, result.PipingDesignResults.Sellmeijer4ForcesFactor, diff); Assert.AreEqual(4.7596469835953883, result.PipingDesignResults.Sellmeijer4ForcesHcritical, diff); } @@ -142,8 +142,9 @@ // Validate without setting values. Expected error messages. var damPipingInput = new DamPipingSellmeijer4ForcesInput(); + var damPipingOutput = new DamPipingSellmeijer4ForcesOutput(); List messages; - kernelWrapper.Validate(damPipingInput, out messages); + kernelWrapper.Validate(damPipingInput, damPipingOutput, out messages); Assert.IsTrue(messages.Count > 0); // Validate the input when valid input is provided. Expected no messages. @@ -162,7 +163,7 @@ PermeabilityKx = 0.0001 }; messages.Clear(); - kernelWrapper.Validate(damPipingInput, out messages); + kernelWrapper.Validate(damPipingInput, damPipingOutput, out messages); Assert.AreEqual(0, messages.Count); } @@ -186,7 +187,7 @@ }; DesignResult result; - kernelWrapper.PostProcess(input, output, out result); + kernelWrapper.PostProcess(input, output, "", out result); Assert.AreEqual(output.FoSp, result.PipingDesignResults.Sellmeijer4ForcesFactor); Assert.AreEqual(output.Hc, result.PipingDesignResults.Sellmeijer4ForcesHcritical); } @@ -218,7 +219,7 @@ { var kernelWrapper = new DamPipingSellmeijer4ForcesKernelWrapper(); DesignResult result; - kernelWrapper.PostProcess(new DamKernelInput(), null, out result); + kernelWrapper.PostProcess(new DamKernelInput(), null, "", out result); } [Test] @@ -228,7 +229,7 @@ { var kernelWrapper = new DamPipingSellmeijer4ForcesKernelWrapper(); DesignResult result; - kernelWrapper.PostProcess(null, new DamPipingSellmeijer4ForcesOutput(), out result); + kernelWrapper.PostProcess(null, new DamPipingSellmeijer4ForcesOutput(), "", out result); } private static SoilProfile1D CreatePipingSellmeijerProfileWithOneSandlayer() Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs =================================================================== diff -u -r686 -r694 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs (.../IKernelWrapper.cs) (revision 686) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs (.../IKernelWrapper.cs) (revision 694) @@ -36,11 +36,14 @@ /// Validates the kernel data input. /// /// The kernel data input. + /// The kernel data output. /// The messages. - /// Number of errors that prevent a calculation - int Validate(IKernelDataInput kernelDataInput, out List messages); + /// + /// Number of errors that prevent a calculation + /// + int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages); /// - /// Performs a failure mechanism calcualtion based on the input. + /// Performs a failure mechanism calculation based on the input. /// /// The kernel data input. /// The kernel data output. @@ -51,7 +54,8 @@ /// /// The dam kernel input. /// The kernel data output. + /// The result message. /// The design result. - void PostProcess(DamKernelInput damKernelInput, IKernelDataOutput kernelDataOutput, out DesignResult designResult); + void PostProcess(DamKernelInput damKernelInput, IKernelDataOutput kernelDataOutput, string resultMessage, out DesignResult designResult); } } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapperTests.cs =================================================================== diff -u -r686 -r694 --- dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapperTests.cs (.../DamMacroStabilityKernelWrapperTests.cs) (revision 686) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapperTests.cs (.../DamMacroStabilityKernelWrapperTests.cs) (revision 694) @@ -55,7 +55,7 @@ // Validate the input List messages; - kernelWrapper.Validate(damStabilityInput, out messages); + kernelWrapper.Validate(damStabilityInput, kernelOutput, out messages); Assert.AreEqual(0, messages.Count); // Run the dll @@ -67,7 +67,7 @@ // Fill the design results DesignResult result; - kernelWrapper.PostProcess(damKernelInput, damMacroStabilityOutput, out result); + kernelWrapper.PostProcess(damKernelInput, damMacroStabilityOutput, "", out result); Assert.AreEqual(1.71, result.StabilityDesignResults.SafetyFactor, diff); } @@ -159,7 +159,7 @@ // ToDo zant Fill input }; // messages.Clear(); - kernelWrapper.Validate(damStabilityInput, out messages); + kernelWrapper.Validate(damStabilityInput, null, out messages); Assert.AreEqual(0, messages.Count); } @@ -181,7 +181,7 @@ output.Zone2 = zone2; DesignResult result; - kernelWrapper.PostProcess(null, output, out result); + kernelWrapper.PostProcess(null, output, "", out result); Assert.AreEqual(0.9, result.StabilityDesignResults.SafetyFactor); Assert.AreEqual(1.1, result.StabilityDesignResults.Zone1SafetyFactor); Assert.AreEqual(1.2, result.StabilityDesignResults.LocalZone1EntryPointX); @@ -214,7 +214,7 @@ { var kernelWrapper = new DamMacroStabilityKernelWrapper(); DesignResult result; - kernelWrapper.PostProcess(null, null, out result); + kernelWrapper.PostProcess(null, null, "", out result); } } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapper.cs =================================================================== diff -u -r686 -r694 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapper.cs (.../DamMacroStabilityKernelWrapper.cs) (revision 686) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/DamMacroStabilityKernelWrapper.cs (.../DamMacroStabilityKernelWrapper.cs) (revision 694) @@ -53,9 +53,12 @@ /// Validates the specified kernel data input. /// /// The kernel data input. + /// The kernel data output. /// The return messages. - /// - public int Validate(IKernelDataInput kernelDataInput, out List messages) + /// + /// Number of errors that prevent a calculation + /// + public int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { var calculator = StabilityCalculator(kernelDataInput); //ToDo zant calculator has no Validate. @@ -193,11 +196,11 @@ /// Fills the design results with the kernel output. /// /// The dam kernel input. - /// The . /// The kernel data output. + /// The result message. /// The design result. /// - public void PostProcess(DamKernelInput damKernelInput, IKernelDataOutput kernelDataOutput, out DesignResult designResult) + public void PostProcess(DamKernelInput damKernelInput, IKernelDataOutput kernelDataOutput, string resultMessage, out DesignResult designResult) { DamMacroStabilityOutput damPipingOutput = kernelDataOutput as DamMacroStabilityOutput; if (damPipingOutput == null) Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs =================================================================== diff -u -r686 -r694 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 686) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 694) @@ -107,10 +107,14 @@ /// Validates the kernel data input. /// /// The kernel data input. + /// The kernel data output. /// The messages. - /// - public int Validate(IKernelDataInput kernelDataInput, out List messages) + /// + /// Number of errors that prevent a calculation + /// + public int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { + DamPipingBlighOutput damPipingBlighOutput = (DamPipingBlighOutput) kernelDataOutput; var calculatorBligh = CreatePipingCalculatorBligh(kernelDataInput); List kernelMessages = calculatorBligh.Validate(); messages = new List(); @@ -122,6 +126,10 @@ MessageType = LogMessageType.Error }); } + if (messages.Count > 0) + { + damPipingBlighOutput.CalculationResult = CalculationResult.InvalidInputData; + } return messages.Count; } @@ -192,9 +200,10 @@ /// /// The dam kernel input. /// The kernel data output. + /// The result message. /// The design result. /// No output object defined for Bligh - public void PostProcess(DamKernelInput damKernelInput, IKernelDataOutput kernelDataOutput, out DesignResult designResult) + public void PostProcess(DamKernelInput damKernelInput, IKernelDataOutput kernelDataOutput, string resultMessage, out DesignResult designResult) { DamPipingBlighOutput damPipingBlighOutput = kernelDataOutput as DamPipingBlighOutput; if (damPipingBlighOutput == null) @@ -217,17 +226,18 @@ DamProjectCalculationSpecification.SelectedAnalysisType); designResult.CalculationResult = damPipingBlighOutput.CalculationResult; var pipingDesignResults = new PipingDesignResults(PipingModelType.Bligh); - pipingDesignResults.BlighFactor = damPipingBlighOutput.FoSp; - pipingDesignResults.BlighHcritical = damPipingBlighOutput.Hc; - // TODO: for now this only works for NoAdaption of geometry; if adaption is enabled, the real redesigned surfaceline has to be assigned - pipingDesignResults.RedesignedSurfaceLine = damKernelInput.Location.SurfaceLine; - designResult.PipingDesignResults = pipingDesignResults; - designResult.CalculationResult = damPipingBlighOutput.CalculationResult; - pipingDesignResults.UpliftSituation = damPipingBlighOutput.UpliftSituation; - pipingDesignResults.LocalExitPointX = damPipingBlighOutput.ExitPointX; - pipingDesignResults.UpliftFactor = damPipingBlighOutput.UpliftFactor; - - + pipingDesignResults.ResultMessage = resultMessage; + if (designResult.CalculationResult == CalculationResult.Succeeded) + { + pipingDesignResults.BlighFactor = damPipingBlighOutput.FoSp; + pipingDesignResults.BlighHcritical = damPipingBlighOutput.Hc; + // TODO: for now this only works for NoAdaption of geometry; if adaption is enabled, the real redesigned surfaceline has to be assigned + pipingDesignResults.RedesignedSurfaceLine = damKernelInput.Location.SurfaceLine; + designResult.PipingDesignResults = pipingDesignResults; + pipingDesignResults.UpliftSituation = damPipingBlighOutput.UpliftSituation; + pipingDesignResults.LocalExitPointX = damPipingBlighOutput.ExitPointX; + pipingDesignResults.UpliftFactor = damPipingBlighOutput.UpliftFactor; + } } } Index: dam engine/trunk/src/Deltares.DamEngine.Interface/EngineInterface.cs =================================================================== diff -u -r669 -r694 --- dam engine/trunk/src/Deltares.DamEngine.Interface/EngineInterface.cs (.../EngineInterface.cs) (revision 669) +++ dam engine/trunk/src/Deltares.DamEngine.Interface/EngineInterface.cs (.../EngineInterface.cs) (revision 694) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Collections.Generic; using Deltares.DamEngine.Calculators.Dikes_Design; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Standard; @@ -159,6 +160,7 @@ string outputXml; SendMessage(new LogMessage() { MessageType = LogMessageType.Info, Message = "Start calculation" }); + List calculationMessages; switch (DamProjectData.DamProjectType) { case DamProjectType.Assessment: @@ -168,7 +170,7 @@ case DamProjectType.Design: DesignCalculator designCalculator = new DesignCalculator(); - designCalculator.Execute(DamProjectData); + calculationMessages = designCalculator.Execute(DamProjectData); break; } Output output = FillXmlOutputFromDam.CreateOutput(DamProjectData); Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/Dikes Design/DesignCalculator.cs =================================================================== diff -u -r690 -r694 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/Dikes Design/DesignCalculator.cs (.../DesignCalculator.cs) (revision 690) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/Dikes Design/DesignCalculator.cs (.../DesignCalculator.cs) (revision 694) @@ -53,29 +53,29 @@ if (prepareResult == PrepareResult.Successful) { // Perform validation + List locationCalculationMessages = new List(); List validationMessages; - int errorCount = kernelWrapper.Validate(kernelDataInput, out validationMessages); + int errorCount = kernelWrapper.Validate(kernelDataInput, kernelDataOutput, out validationMessages); if (errorCount > 0) { - calculationMessages.Add(new LogMessage(LogMessageType.Error, null, + locationCalculationMessages.Add(new LogMessage(LogMessageType.Error, null, string.Format("Validation failed for location '{0}', subsoil scenario '{1}', design scenario '{2}'", location.Name, soiProfileProbability.ToString(), damKernelInput.DesignScenario.LocationScenarioID))); - calculationMessages.AddRange(validationMessages); + locationCalculationMessages.AddRange(validationMessages); } else { // Perform calculation - List locationCalculationMessages; kernelWrapper.Execute(kernelDataInput, kernelDataOutput, out locationCalculationMessages); - calculationMessages.AddRange(locationCalculationMessages); - - // Process output - DesignResult designResult; - kernelWrapper.PostProcess(damKernelInput, kernelDataOutput, out designResult); - damProjectData.DesignCalculations.Add(designResult); } + // Process output + calculationMessages.AddRange(locationCalculationMessages); + DesignResult designResult; + string resultMessage = locationCalculationMessages.ToString(); + kernelWrapper.PostProcess(damKernelInput, kernelDataOutput, resultMessage, out designResult); + damProjectData.DesignCalculations.Add(designResult); } } }