Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs =================================================================== diff -u -r5921 -r5930 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs (.../MacroStabilityInwardsTests.cs) (revision 5921) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs (.../MacroStabilityInwardsTests.cs) (revision 5930) @@ -946,7 +946,7 @@ [TestCase("DWP_2", InputStabilityModelType.Bishop, "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.5, 1.072, 17)] [TestCase("DWP_13", InputStabilityModelType.Bishop, "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.5, 0.943, 23, "The characteristic points of the surfaceline are not ascending in X-direction.")] [TestCase("DWP_10", InputStabilityModelType.Bishop, "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.5, 0.0, 7, "Location 'DWP_10', subsoil scenario 'DWP_10.stix', design scenario '3': The calculation failed with error message 'The design was not successful. The design was not successful. Stability calculation failed.'", "The design was not successful. Stability calculation failed.")] - [TestCase("DWP_1", InputStabilityModelType.BishopUpliftVan, "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.4, 1.456, 5)] + [TestCase("DWP_1", InputStabilityModelType.BishopUpliftVan, "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.4, 1.406, 7)] public void GivenTutorialDesign_WhenSpecifiedLocationRunWithGeometryAdaption_ThenGivesExpectedResults(string locationId, InputStabilityModelType stabilityModelType, string designMethod, CalculationResult calculationResult, double requiredSafetyFactor, double actualSafetyFactor, int iterationCount, string errorMessage = "", string firstStabilityMessage = "") { @@ -975,10 +975,10 @@ Output output = GeneralHelper.RunAfterInputValidation(inputString); Assert.Multiple(() => { - Assert.That(ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[0].CalculationResult), Is.EqualTo(calculationResult)); + Assert.That(ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults.Last().CalculationResult), Is.EqualTo(calculationResult)); if (calculationResult == CalculationResult.Succeeded) { - Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.GreaterThanOrEqualTo(requiredSafetyFactor)); + Assert.That(output.Results.CalculationResults.Last().StabilityDesignResults.SafetyFactor, Is.GreaterThanOrEqualTo(requiredSafetyFactor)); } else { @@ -988,12 +988,12 @@ } if (!firstStabilityMessage.Equals("")) { - Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.ResultMessage, Does.Contain(firstStabilityMessage)); + Assert.That(output.Results.CalculationResults.Last().StabilityDesignResults.ResultMessage, Does.Contain(firstStabilityMessage)); } } - Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.EqualTo(actualSafetyFactor).Within(tolerance)); - Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.NumberOfIterations, Is.EqualTo(iterationCount)); + Assert.That(output.Results.CalculationResults.Last().StabilityDesignResults.SafetyFactor, Is.EqualTo(actualSafetyFactor).Within(tolerance)); + Assert.That(output.Results.CalculationResults.Last().StabilityDesignResults.NumberOfIterations, Is.EqualTo(iterationCount)); }); } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs =================================================================== diff -u -r5920 -r5930 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 5920) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 5930) @@ -229,14 +229,16 @@ /// /// The macro stability output item. /// The design result. - public static void FillDesignResult(MacroStabilityOutputItem macroStabilityOutputItem, DesignResult designResult) + /// The last iteration index, to determine the total number of iterations + public static void FillDesignResult(MacroStabilityOutputItem macroStabilityOutputItem, DesignResult designResult, int lastIterationIndex = 0) { designResult.BaseFileName = Path.GetFileNameWithoutExtension(macroStabilityOutputItem.ProjectName); designResult.CalculationSubDir = macroStabilityOutputItem.CalculationPath; designResult.StabilityDesignResults.StabilityModelType = macroStabilityOutputItem.StabilityModelType; if (macroStabilityOutputItem.CalculationResult == CalculationResult.Succeeded) { designResult.StabilityDesignResults.SafetyFactor = macroStabilityOutputItem.SafetyFactor; + designResult.StabilityDesignResults.NumberOfIterations = lastIterationIndex + 1; designResult.StabilityDesignResults.ActiveCenterPoint = macroStabilityOutputItem.ActiveCenterPoint; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r5926 -r5930 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 5926) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 5930) @@ -272,7 +272,7 @@ macroStabilityOutputItem = ProperMacroStabilityResultsItem(macroStabilityOutput, 1); AddDesignResult(damKernelInput, designScenario, designResults, macroStabilityOutputItem, macroStabilityOutput); // If no uplift therefore no UpliftVan calculation was made. So add a fictive (empty) design result. - if(macroStabilityOutputItem == null && !macroStabilityOutput.UpliftSituation.IsUplift) + if(macroStabilityOutputItem == null && !macroStabilityOutput!.UpliftSituation.IsUplift) { AddDesignResultNoRun(damKernelInput, designScenario, designResults, macroStabilityOutput); } @@ -305,8 +305,8 @@ macroStabilityOutputItem = ProperMacroStabilityResultsItem(macroStabilityOutput, index); DesignResult overallResult = MacroStabilityCommonHelper.NewDesignResult(damKernelInput, designScenario); - MacroStabilityCommonHelper.FillDesignResult(macroStabilityOutputItem, overallResult); - overallResult.StabilityDesignResults.UpliftSituation = macroStabilityOutput.UpliftSituation; + MacroStabilityCommonHelper.FillDesignResult(macroStabilityOutputItem, overallResult, lastIterationIndex); + overallResult.StabilityDesignResults.UpliftSituation = macroStabilityOutput!.UpliftSituation; overallResult.StabilityDesignResults.StabilityModelType = MStabModelType.BishopUpliftVan; if (macroStabilityOutputItem.CalculationResult != CalculationResult.Succeeded) { @@ -344,7 +344,7 @@ if (macroStabilityOutputItem != null) { DesignResult designResult = MacroStabilityCommonHelper.NewDesignResult(damKernelInput, designScenario); - MacroStabilityCommonHelper.FillDesignResult(macroStabilityOutputItem, designResult); + MacroStabilityCommonHelper.FillDesignResult(macroStabilityOutputItem, designResult, lastIterationIndex); designResult.StabilityDesignResults.NumberOfIterations = lastIterationIndex; designResult.StabilityDesignResults.UpliftSituation = macroStabilityOutput.UpliftSituation; if (macroStabilityOutputItem.CalculationResult != CalculationResult.Succeeded) @@ -397,17 +397,18 @@ double fosRequired = damKernelInput.Location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope; if (macroStabilityOutput != null) { + MacroStabilityOutputItem leadingStabilityOutputItem = DetemineLeadingOutputItem(macroStabilityOutput.StabilityOutputItems); // Abort if calculation failed - if (macroStabilityOutput.StabilityOutputItems[0].CalculationResult != CalculationResult.Succeeded) + if ((leadingStabilityOutputItem == null) || (leadingStabilityOutputItem.CalculationResult != CalculationResult.Succeeded)) { designAdvise = DesignAdvise.Abort; evaluationMessage = "Stability calculation failed."; return true; } // Check if the factor of safety is achieved - double fosAchieved = macroStabilityOutput.StabilityOutputItems[0].SafetyFactor; - double exitPointXCoordinate = macroStabilityOutput.StabilityOutputItems[0].CircleSurfacePointRightXCoordinate; + double fosAchieved = leadingStabilityOutputItem.SafetyFactor; + double exitPointXCoordinate = leadingStabilityOutputItem.CircleSurfacePointRightXCoordinate; GeometryPoint limitPointForShoulderDesign = damKernelInput.Location.SurfaceLine.GetLimitPointForShoulderDesign(); evaluationMessage = string.Format(Resources.FactorAchievedVsFactorRequired, fosAchieved, fosRequired); if (exitPointXCoordinate > limitPointForShoulderDesign.X) @@ -433,6 +434,20 @@ return false; } + private MacroStabilityOutputItem DetemineLeadingOutputItem(List stabilityOutputItems) + { + if (stabilityOutputItems.Count == 1) + { + return stabilityOutputItems[0]; + } + if (stabilityOutputItems[0].CalculationResult == CalculationResult.Succeeded && stabilityOutputItems[1].CalculationResult == CalculationResult.Succeeded) + { + return stabilityOutputItems[0].SafetyFactor < stabilityOutputItems[1].SafetyFactor ? stabilityOutputItems[0] : stabilityOutputItems[1]; + } + return null; + + } + /// /// Prepares the design. ///