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.
///