Index: DamEngine/trunk/src/Deltares.DamEngine.Interface.Tests/MacroStabilityTests.cs =================================================================== diff -u -r1105 -r1131 --- DamEngine/trunk/src/Deltares.DamEngine.Interface.Tests/MacroStabilityTests.cs (.../MacroStabilityTests.cs) (revision 1105) +++ DamEngine/trunk/src/Deltares.DamEngine.Interface.Tests/MacroStabilityTests.cs (.../MacroStabilityTests.cs) (revision 1131) @@ -593,8 +593,8 @@ Assert.AreEqual("6-4-3-A-1-C_2_s", result.ProfileName); // Calculation Result Assert.AreEqual(CalculationResult.UnexpectedError, ConversionHelper.ConvertToCalculationResult(result.CalculationResult)); - // SafetyFactor=null - Assert.AreEqual(null, result.StabilityDesignResults.SafetyFactor); + // SafetyFactor not specified + Assert.IsFalse(result.StabilityDesignResults.SafetyFactorSpecified); result = output.Results.CalculationResults.DesignResults[2]; Assert.AreEqual("6-4-3-B-1-D", result.LocationName); Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r1129 -r1131 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapper.cs (.../DamMacroStabilityInwardsKernelWrapper.cs) (revision 1129) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapper.cs (.../DamMacroStabilityInwardsKernelWrapper.cs) (revision 1131) @@ -211,7 +211,7 @@ } // start (first) calculation - var stabilityOutputItem = ExcecuteCalculation(kernelDataInput); + var stabilityOutputItem = ExcecuteCalculation(kernelDataInput, messages); if (stabilityOutputItem != null) { damMacroStabilityOutput.StabilityOutputItems.Add(stabilityOutputItem); @@ -231,7 +231,7 @@ input.FailureMechanismParametersMStab.MStabParameters.Model = MStabModelType.UpliftVan; try { - var stabilityOutputItemSecondModel = ExcecuteCalculation(kernelDataInput); + var stabilityOutputItemSecondModel = ExcecuteCalculation(kernelDataInput, messages); if (stabilityOutputItemSecondModel != null) { damMacroStabilityOutput.StabilityOutputItems.Add(stabilityOutputItemSecondModel); @@ -247,37 +247,48 @@ } } - private static DamMacroStabilityOutputItem ExcecuteCalculation(IKernelDataInput kernelDataInput) + private static DamMacroStabilityOutputItem ExcecuteCalculation(IKernelDataInput kernelDataInput, List messages) { var calculator = StabilityCalculator(kernelDataInput); - calculator.Calculate(); - - // get (first) results - var results = calculator.GetResults(); - if (results.Count > 0) + try { - var stabilityOutputItem = new DamMacroStabilityOutputItem(); - var zone1 = new DamMacroStabilityOutputItem.ResultsSingleZone + calculator.Calculate(); + + // get (first) results + var results = calculator.GetResults(); + if (results.Count > 0) { - SafetyFactor = results[0].Zone1.SafetyFactor, - CircleSurfacePointLeftXCoordinate = results[0].Zone1.CircleSurfacePointLeftXCoordinate, - CircleSurfacePointRightXCoordinate = results[0].Zone1.CircleSurfacePointRightXCoordinate, - }; - stabilityOutputItem.Zone1Results = zone1; - if (results[0].Zone2 != null) - { - var zone2Result = results[0].Zone2.Value; - var zone2 = new DamMacroStabilityOutputItem.ResultsSingleZone + var stabilityOutputItem = new DamMacroStabilityOutputItem(); + var zone1 = new DamMacroStabilityOutputItem.ResultsSingleZone { - SafetyFactor = zone2Result.SafetyFactor, - CircleSurfacePointLeftXCoordinate = zone2Result.CircleSurfacePointLeftXCoordinate, - CircleSurfacePointRightXCoordinate = zone2Result.CircleSurfacePointRightXCoordinate, + SafetyFactor = results[0].Zone1.SafetyFactor, + CircleSurfacePointLeftXCoordinate = results[0].Zone1.CircleSurfacePointLeftXCoordinate, + CircleSurfacePointRightXCoordinate = results[0].Zone1.CircleSurfacePointRightXCoordinate, }; - stabilityOutputItem.Zone2Results = zone2; + stabilityOutputItem.Zone1Results = zone1; + if (results[0].Zone2 != null) + { + var zone2Result = results[0].Zone2.Value; + var zone2 = new DamMacroStabilityOutputItem.ResultsSingleZone + { + SafetyFactor = zone2Result.SafetyFactor, + CircleSurfacePointLeftXCoordinate = zone2Result.CircleSurfacePointLeftXCoordinate, + CircleSurfacePointRightXCoordinate = zone2Result.CircleSurfacePointRightXCoordinate, + }; + stabilityOutputItem.Zone2Results = zone2; + } + return stabilityOutputItem; } + return null; + } + catch (Exception e) + { + var message = new LogMessage { MessageType = LogMessageType.Info, Message = e.Message }; + messages.Add(message); + var stabilityOutputItem = + new DamMacroStabilityOutputItem {CalculationResult = CalculationResult.UnexpectedError}; return stabilityOutputItem; } - return null; } internal XDocument CreateMstabDamXmlDocument(DamKernelInput damKernelInput, DamMacroStabilityInput kernelDataInput) @@ -348,15 +359,13 @@ } designResults = new List(); - var designResult = NewDesignResult(damKernelInput); - if (damMacroStabilityOutput.StabilityOutputItems.Count > 0) { var damMacroStabilityOutputItem = damMacroStabilityOutput.StabilityOutputItems[0]; if (damMacroStabilityOutputItem != null) { + var designResult = NewDesignResult(damKernelInput); FillDesignResult(damMacroStabilityOutputItem, designResult); - designResult.CalculationResult = damMacroStabilityOutputItem.CalculationResult; designResult.StabilityDesignResults.UpliftSituation = damMacroStabilityOutput.UpliftSituation; designResults.Add(designResult); } @@ -367,12 +376,11 @@ { if (damMacroStabilityOutput.StabilityOutputItems.Count > 1) // UpliftVan was calculated { - designResult = NewDesignResult(damKernelInput); + var designResult = NewDesignResult(damKernelInput); var damMacroStabilityOutputItem = damMacroStabilityOutput.StabilityOutputItems[1]; if (damMacroStabilityOutputItem != null) { FillDesignResult(damMacroStabilityOutputItem, designResult); - designResult.CalculationResult = damMacroStabilityOutputItem.CalculationResult; designResult.StabilityDesignResults.UpliftSituation = damMacroStabilityOutput.UpliftSituation; } designResults.Add(designResult); @@ -389,7 +397,7 @@ else { // add empty result for UpliftVan - designResult = NewDesignResult(damKernelInput); + var designResult = NewDesignResult(damKernelInput); designResult.DamFailureMechanismeCalculation.FailureMechanismParametersMStab.MStabParameters.Model = MStabModelType.UpliftVan; designResult.CalculationResult = CalculationResult.NoRun; @@ -452,20 +460,24 @@ private static void FillDesignResult(DamMacroStabilityOutputItem damMacroStabilityOutputItem, DesignResult designResult) { - designResult.StabilityDesignResults.Zone1SafetyFactor = - damMacroStabilityOutputItem.Zone1Results.SafetyFactor; - designResult.StabilityDesignResults.LocalZone1EntryPointX = - damMacroStabilityOutputItem.Zone1Results.CircleSurfacePointLeftXCoordinate; - designResult.StabilityDesignResults.LocalZone1ExitPointX = - damMacroStabilityOutputItem.Zone1Results.CircleSurfacePointRightXCoordinate; - - designResult.StabilityDesignResults.SafetyFactor = designResult.StabilityDesignResults.Zone1SafetyFactor; - if (damMacroStabilityOutputItem.Zone2Results != null) + designResult.CalculationResult = damMacroStabilityOutputItem.CalculationResult; + if (designResult.CalculationResult != CalculationResult.UnexpectedError) { - var zone2 = (DamMacroStabilityOutputItem.ResultsSingleZone) damMacroStabilityOutputItem.Zone2Results; - designResult.StabilityDesignResults.Zone2SafetyFactor = zone2.SafetyFactor; - designResult.StabilityDesignResults.LocalZone2EntryPointX = zone2.CircleSurfacePointLeftXCoordinate; - designResult.StabilityDesignResults.LocalZone2ExitPointX = zone2.CircleSurfacePointRightXCoordinate; + designResult.StabilityDesignResults.Zone1SafetyFactor = + damMacroStabilityOutputItem.Zone1Results.SafetyFactor; + designResult.StabilityDesignResults.LocalZone1EntryPointX = + damMacroStabilityOutputItem.Zone1Results.CircleSurfacePointLeftXCoordinate; + designResult.StabilityDesignResults.LocalZone1ExitPointX = + damMacroStabilityOutputItem.Zone1Results.CircleSurfacePointRightXCoordinate; + + designResult.StabilityDesignResults.SafetyFactor = designResult.StabilityDesignResults.Zone1SafetyFactor; + if (damMacroStabilityOutputItem.Zone2Results != null) + { + var zone2 = (DamMacroStabilityOutputItem.ResultsSingleZone)damMacroStabilityOutputItem.Zone2Results; + designResult.StabilityDesignResults.Zone2SafetyFactor = zone2.SafetyFactor; + designResult.StabilityDesignResults.LocalZone2EntryPointX = zone2.CircleSurfacePointLeftXCoordinate; + designResult.StabilityDesignResults.LocalZone2ExitPointX = zone2.CircleSurfacePointRightXCoordinate; + } } } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs =================================================================== diff -u -r1129 -r1131 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs (.../DesignCalculator.cs) (revision 1129) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs (.../DesignCalculator.cs) (revision 1131) @@ -32,6 +32,7 @@ using Deltares.DamEngine.Data.General.Results; using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; +using Deltares.DamEngine.Data.Standard.Calculation; using Deltares.DamEngine.Data.Standard.Logging; namespace Deltares.DamEngine.Calculators.DikesDesign @@ -198,38 +199,50 @@ List calculationMessages, List designCalculations) { // Perform validation + var designResults = new List(); List locationCalculationMessages = new List(); List validationMessages; - int errorCount = kernelWrapper.Validate(kernelDataInput, kernelDataOutput, out validationMessages); - if (errorCount > 0) + try { - locationCalculationMessages.Add(new LogMessage(LogMessageType.Error, null, - string.Format(Resources.DesignCalculatorValidationFailed, - damKernelInput.Location.Name, - damKernelInput.SubSoilScenario.ToString(), - damKernelInput.DesignScenario.LocationScenarioID))); - locationCalculationMessages.AddRange(validationMessages); + int errorCount = kernelWrapper.Validate(kernelDataInput, kernelDataOutput, out validationMessages); + if (errorCount > 0) + { + locationCalculationMessages.Add(new LogMessage(LogMessageType.Error, null, + string.Format(Resources.DesignCalculatorValidationFailed, + damKernelInput.Location.Name, + damKernelInput.SubSoilScenario.ToString(), + damKernelInput.DesignScenario.LocationScenarioID))); + locationCalculationMessages.AddRange(validationMessages); + } + else + { + // Perform calculation + kernelWrapper.Execute(kernelDataInput, kernelDataOutput, out locationCalculationMessages); + } + // Process output + calculationMessages.AddRange(locationCalculationMessages); + StringBuilder sb = new StringBuilder(); + foreach (var message in locationCalculationMessages) + { + sb.Append(message.Message + Environment.NewLine); + } + + string resultMessage = sb.ToString(); + kernelWrapper.PostProcess(damKernelInput, kernelDataOutput, resultMessage, out designResults); + } - else + catch (Exception exception) { - // Perform calculation - kernelWrapper.Execute(kernelDataInput, kernelDataOutput, out locationCalculationMessages); + string resultMessage = exception.Message; + kernelWrapper.PostProcess(damKernelInput, kernelDataOutput, resultMessage, out designResults); } - // Process output - calculationMessages.AddRange(locationCalculationMessages); - List designResults; - StringBuilder sb = new StringBuilder(); - foreach (var message in locationCalculationMessages) + finally { - sb.Append(message.Message + Environment.NewLine); + foreach (var designResult in designResults) + { + designCalculations.Add(designResult); + } } - string resultMessage = sb.ToString(); - - kernelWrapper.PostProcess(damKernelInput, kernelDataOutput, resultMessage, out designResults); - foreach (var designResult in designResults) - { - designCalculations.Add(designResult); - } } ///