Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r3768 -r3772 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3768) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3772) @@ -495,10 +495,10 @@ string resultMessage, out List designResults) { ThrowWhenMacroStabilityDamKernelInputNull(damKernelInput); - MacroStabilityOutput macroStabilityOutput = kernelDataOutput as MacroStabilityOutput; + var macroStabilityOutput = kernelDataOutput as MacroStabilityOutput; ThrowWhenMacroStabilityKernelOutputNull(macroStabilityOutput); designResults = new List(); - if (macroStabilityOutput != null && macroStabilityOutput.StabilityOutputItems != null && macroStabilityOutput.StabilityOutputItems.Count > 0) + if (macroStabilityOutput?.StabilityOutputItems != null && macroStabilityOutput.StabilityOutputItems.Count > 0) { var macroStabilityOutputItem = macroStabilityOutput.StabilityOutputItems[0]; if (macroStabilityOutputItem != null) @@ -507,25 +507,64 @@ FillDesignResult(macroStabilityOutputItem, designResult); designResult.StabilityDesignResults.NumberOfIterations = lastIterationIndex; designResult.StabilityDesignResults.UpliftSituation = macroStabilityOutput.UpliftSituation; - if ((macroStabilityOutputItem.StabilityModelType == MStabModelType.Bishop) || (macroStabilityOutputItem.StabilityModelType == MStabModelType.UpliftVan)) + designResults.Add(designResult); + } + } + + var bishopUpliftVan = FailureMechanismParametersMStab.MStabParameters.Model == MStabModelType.BishopUpliftVan; + if (bishopUpliftVan) + { + MacroStabilityOutputItem macroStabilityOutputItem; + if (macroStabilityOutput.StabilityOutputItems.Count > 1) + { + macroStabilityOutputItem = macroStabilityOutput.StabilityOutputItems[1]; + if (macroStabilityOutputItem != null) { - designResult.StabilityDesignResults.ActiveCenterPoint = - macroStabilityOutputItem.ActiveCenterPoint; - designResult.StabilityDesignResults.ActiveCenterPointRadius = - macroStabilityOutputItem.ActiveCenterPointRadius; - designResult.StabilityDesignResults.ResultSlices = macroStabilityOutputItem.ResultSlices; + var designResult = NewDesignResult(damKernelInput, designScenario); + FillDesignResult(macroStabilityOutputItem, designResult); + designResult.StabilityDesignResults.NumberOfIterations = lastIterationIndex; + designResult.StabilityDesignResults.UpliftSituation = macroStabilityOutput.UpliftSituation; + designResults.Add(designResult); } - - if (macroStabilityOutputItem.StabilityModelType == MStabModelType.UpliftVan) + } + int index; + // add worst result from Bishop/UpliftVan, but only if both succeeded. + if (designResults[0].CalculationResult == CalculationResult.Succeeded && + designResults[1].CalculationResult == CalculationResult.Succeeded) + { + if (designResults[0].StabilityDesignResults.SafetyFactor <= designResults[1].StabilityDesignResults.SafetyFactor) { - designResult.StabilityDesignResults.PassiveCenterPoint = - macroStabilityOutputItem.PassiveCenterPoint; - designResult.StabilityDesignResults.PassiveCenterPointRadius = - macroStabilityOutputItem.PassiveCenterPointRadius; + index = 0; } - - designResults.Add(designResult); + else + { + index = 1; + } } + else if (designResults[0].CalculationResult != CalculationResult.Succeeded) + { + // There is no reason why Bishop should not have succeeded therefore no end results can be given + index = 0; + } + else if (designResults[1].CalculationResult == CalculationResult.NoRun) + { + // No uplift therefore no UpliftVan calculation was made. Present Bishop result. + index = 0; + } + else + { + // UpliftVan calculation failed. No end results can be given + index = 1; + } + macroStabilityOutputItem = macroStabilityOutput.StabilityOutputItems[index]; + if (macroStabilityOutputItem != null) + { + var overallResult = NewDesignResult(damKernelInput, designScenario); + FillDesignResult(macroStabilityOutputItem, overallResult); + overallResult.StabilityDesignResults.UpliftSituation = macroStabilityOutput.UpliftSituation; + overallResult.StabilityDesignResults.StabilityModelType = MStabModelType.BishopUpliftVan; + designResults.Add(overallResult); + } } } @@ -559,6 +598,19 @@ { designResult.StabilityDesignResults.SafetyFactor = macroStabilityOutputItem.SafetyFactor; } + designResult.StabilityDesignResults.ActiveCenterPoint = + macroStabilityOutputItem.ActiveCenterPoint; + designResult.StabilityDesignResults.ActiveCenterPointRadius = + macroStabilityOutputItem.ActiveCenterPointRadius; + designResult.StabilityDesignResults.ResultSlices = macroStabilityOutputItem.ResultSlices; + + if (macroStabilityOutputItem.StabilityModelType != MStabModelType.Bishop) + { + designResult.StabilityDesignResults.PassiveCenterPoint = + macroStabilityOutputItem.PassiveCenterPoint; + designResult.StabilityDesignResults.PassiveCenterPointRadius = + macroStabilityOutputItem.PassiveCenterPointRadius; + } } /// Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs =================================================================== diff -u -r3764 -r3772 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 3764) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 3772) @@ -125,10 +125,22 @@ } [Test] - public void TestPostProcess() + [TestCase(MStabModelType.Bishop)] + [TestCase(MStabModelType.UpliftVan)] + [TestCase(MStabModelType.BishopUpliftVan)] + public void TestPostProcess(MStabModelType modelType) { const double diff = 0.0001; - var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); + var kernelWrapper = new MacroStabilityInwardsKernelWrapper + { + FailureMechanismParametersMStab = new FailureMechanismParametersMStab + { + MStabParameters = + { + Model = modelType + } + } + }; var kernelInput = CreateDamKernelInputForTest(); MacroStabilityOutput macroStabilityOutput = new MacroStabilityOutput(); DesignScenario designScenario = new DesignScenario @@ -138,18 +150,30 @@ macroStabilityOutput.CalculationResult = CalculationResult.Succeeded; var macroStabilityOutputItem = new MacroStabilityOutputItem { - StabilityModelType = MStabModelType.UpliftVan, + StabilityModelType = modelType, CalculationResult = CalculationResult.Succeeded }; macroStabilityOutput.UpliftSituation = new UpliftSituation { IsUplift = true }; macroStabilityOutputItem.SafetyFactor = 2.34; macroStabilityOutputItem.CalculationPath = TestFolder + "@\testpath"; macroStabilityOutputItem.ProjectName = Path.GetFileNameWithoutExtension(inputXmlForDamEngine); - macroStabilityOutput.StabilityOutputItems = new List {macroStabilityOutputItem}; - macroStabilityOutput.StabilityOutputItems[0].ActiveCenterPoint = new Point2D(10,10); + macroStabilityOutput.StabilityOutputItems = new List { macroStabilityOutputItem }; + if (modelType == MStabModelType.BishopUpliftVan) + { + macroStabilityOutput.StabilityOutputItems.Add(macroStabilityOutputItem); + } + macroStabilityOutput.StabilityOutputItems[0].ActiveCenterPoint = new Point2D(10, 10); macroStabilityOutput.StabilityOutputItems[0].ActiveCenterPointRadius = 8; - macroStabilityOutput.StabilityOutputItems[0].PassiveCenterPoint = new Point2D(22,11); + macroStabilityOutput.StabilityOutputItems[0].PassiveCenterPoint = new Point2D(22, 11); macroStabilityOutput.StabilityOutputItems[0].PassiveCenterPointRadius = 7; + if (modelType == MStabModelType.BishopUpliftVan) + { + macroStabilityOutput.StabilityOutputItems[1].ActiveCenterPoint = new Point2D(10, 10); + macroStabilityOutput.StabilityOutputItems[1].ActiveCenterPointRadius = 8; + macroStabilityOutput.StabilityOutputItems[1].PassiveCenterPoint = new Point2D(22, 11); + macroStabilityOutput.StabilityOutputItems[1].PassiveCenterPointRadius = 7; + macroStabilityOutput.StabilityOutputItems[1].SafetyFactor = 2.01; + } var resultSlice = new StabilityResultSlice { TopLeftPoint = new Point2D(9, 3), @@ -210,24 +234,49 @@ macroStabilityOutput.StabilityOutputItems[0].ResultSlices = new List { resultSlice }; kernelWrapper.PostProcess(kernelInput, macroStabilityOutput, designScenario, "", out var results); - Assert.IsTrue(results.Count > 0); + switch (modelType) + { + case MStabModelType.Bishop: + case MStabModelType.UpliftVan: + Assert.AreEqual(1, results.Count); + break; + case MStabModelType.BishopUpliftVan: + Assert.AreEqual(3, results.Count); + break; + } + + var counter = 0; foreach (var result in results) { Assert.AreEqual(Path.GetFileNameWithoutExtension(inputXmlForDamEngine), result.BaseFileName); Assert.AreEqual(TestFolder + "@\testpath", result.CalculationSubDir); Assert.AreEqual(CalculationResult.Succeeded, result.CalculationResult); Assert.AreEqual(true, ((UpliftSituation)result.StabilityDesignResults.UpliftSituation).IsUplift); - Assert.AreEqual(0, result.StabilityDesignResults.NumberOfIterations); //NumberOfIterations can not be set for this test, so always zero here - Assert.AreEqual(2.34, result.StabilityDesignResults.SafetyFactor, diff); + if (counter != 2) + { + Assert.AreEqual(0, result.StabilityDesignResults.NumberOfIterations); //NumberOfIterations can not be set for this test, so always zero here + } + if (modelType == MStabModelType.BishopUpliftVan) + { + Assert.AreEqual(2.01, result.StabilityDesignResults.SafetyFactor, diff); + } + else + { + Assert.AreEqual(2.34, result.StabilityDesignResults.SafetyFactor, diff); + } + Assert.AreEqual(kernelInput.Location.SurfaceLine, result.StabilityDesignResults.RedesignedSurfaceLine); Assert.AreEqual(kernelInput.SubSoilScenario.ToString(), result.ProfileName); - Assert.AreEqual(MStabModelType.UpliftVan, result.StabilityDesignResults.StabilityModelType); + Assert.AreEqual(modelType, result.StabilityDesignResults.StabilityModelType); Assert.AreEqual(10, result.StabilityDesignResults.ActiveCenterPoint.X); Assert.AreEqual(10, result.StabilityDesignResults.ActiveCenterPoint.Z); Assert.AreEqual(8, result.StabilityDesignResults.ActiveCenterPointRadius); - Assert.AreEqual(22, result.StabilityDesignResults.PassiveCenterPoint.X); - Assert.AreEqual(11, result.StabilityDesignResults.PassiveCenterPoint.Z); - Assert.AreEqual(7, result.StabilityDesignResults.PassiveCenterPointRadius); + if (modelType != MStabModelType.Bishop) + { + Assert.AreEqual(22, result.StabilityDesignResults.PassiveCenterPoint.X); + Assert.AreEqual(11, result.StabilityDesignResults.PassiveCenterPoint.Z); + Assert.AreEqual(7, result.StabilityDesignResults.PassiveCenterPointRadius); + } Assert.AreEqual(9, result.StabilityDesignResults.ResultSlices[0].TopLeftPoint.X); Assert.AreEqual(3, result.StabilityDesignResults.ResultSlices[0].TopLeftPoint.Z); @@ -289,6 +338,8 @@ Assert.AreEqual(60, result.StabilityDesignResults.ResultSlices[0].ResultantAngle); Assert.AreEqual(ShearStrengthModel.CPhi, result.StabilityDesignResults.ResultSlices[0].ShearStrengthModel); + + counter++; } }