Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r6539 -r6659 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 6539) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 6659) @@ -120,15 +120,6 @@ Waternet waterNet = MacroStabilityCommonHelper.CreateWaternet(damKernelInput, plLines); - if (FailureMechanismParametersMStab.MStabParameters.Model == StabilityModelType.UpliftVan || - FailureMechanismParametersMStab.MStabParameters.Model == StabilityModelType.BishopUpliftVan) - { - if (!upliftSituation.IsUplift && !isBishopUpliftVan) - { - return PrepareResult.NotRelevant; - } - } - FailureMechanismParametersMStab.MStabParameters.Model = model; macroStabilityInput.WaterNet = waterNet; @@ -207,22 +198,32 @@ /// The return messages. public void Execute(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { + messages = null; var macroStabilityKernelDataInput = (MacroStabilityKernelDataInput) kernelDataInput; var macroStabilityOutput = (MacroStabilityOutput) kernelDataOutput; MacroStabilityCommonHelper.ThrowWhenMacroStabilityKernelInputNull(macroStabilityKernelDataInput); MacroStabilityCommonHelper.ThrowWhenMacroStabilityKernelOutputNull(macroStabilityOutput); + bool isBishop = FailureMechanismParametersMStab.MStabParameters.Model == StabilityModelType.Bishop; bool isBishopUpliftVan = FailureMechanismParametersMStab.MStabParameters.Model == StabilityModelType.BishopUpliftVan; + bool isUpliftVan = FailureMechanismParametersMStab.MStabParameters.Model == StabilityModelType.UpliftVan; if (isBishopUpliftVan) { macroStabilityKernelDataInput.Input.StabilityModel.ModelOption = StabilityModelOption.Bishop; macroStabilityKernelDataInput.MStabParameters.Model = StabilityModelType.Bishop; } - MacroStabilityCommonHelper.PerformStabilityCalculation(macroStabilityKernelDataInput, - macroStabilityOutput, fileNameForCalculation, - stabilityCalculator, out messages); - AddFileNameToLogMessages(messages, fileNameForCalculation); + if (isBishop || isBishopUpliftVan || (isUpliftVan && macroStabilityOutput.UpliftSituation.IsUplift)) + { + MacroStabilityCommonHelper.PerformStabilityCalculation(macroStabilityKernelDataInput, + macroStabilityOutput, fileNameForCalculation, + stabilityCalculator, out messages); + AddFileNameToLogMessages(messages, fileNameForCalculation); + } + else + { + messages = []; + } if (isBishopUpliftVan && macroStabilityOutput.UpliftSituation.IsUplift) { @@ -261,21 +262,31 @@ AddDesignResult(damKernelInput, designScenario, designResults, macroStabilityOutputItem, macroStabilityOutput); bool isBishopUpliftVan = FailureMechanismParametersMStab.MStabParameters.Model == StabilityModelType.BishopUpliftVan; - if (isBishopUpliftVan) + bool isUpliftVan = FailureMechanismParametersMStab.MStabParameters.Model == StabilityModelType.UpliftVan; + if (isBishopUpliftVan || isUpliftVan) { var isUplift = true; - macroStabilityOutputItem = ProperMacroStabilityResultsItem(macroStabilityOutput, 1); - AddDesignResult(damKernelInput, designScenario, designResults, macroStabilityOutputItem, macroStabilityOutput); + macroStabilityOutputItem = ProperMacroStabilityResultsItem(macroStabilityOutput, 0); + if (isBishopUpliftVan) + { + 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) { AddDesignResultNoRun(damKernelInput, designScenario, designResults, macroStabilityOutput); isUplift = false; macroStabilityOutputItem = ProperMacroStabilityResultsItem(macroStabilityOutput, 0); - macroStabilityOutputItem.StabilityModelType = StabilityModelType.BishopUpliftVan; + macroStabilityOutputItem.StabilityModelType = FailureMechanismParametersMStab.MStabParameters.Model; AddDesignResult(damKernelInput, designScenario, designResults, macroStabilityOutputItem, macroStabilityOutput); } + if (!isBishopUpliftVan) + { + return; + } + // Now add the overall result for Bishop/UpliftVan only if both results are available. if (macroStabilityOutput!.StabilityOutputItems.Count == 2) { @@ -496,7 +507,7 @@ designResultUpliftNoRun.CalculationResult = CalculationResult.NoRun; designResultUpliftNoRun.SafetyFactor = null; designResultUpliftNoRun.StabilityDesignResults.UpliftSituation = macroStabilityOutput.UpliftSituation; - if (designResults[0].CalculationSubDir != null) + if ((designResults.Count > 0) && (designResults[0].CalculationSubDir != null)) { designResultUpliftNoRun.CalculationSubDir = designResults.Count == 1 ? designResults[0].CalculationSubDir.Replace(StabilityModelType.Bishop.ToString(), StabilityModelType.UpliftVan.ToString()) : ""; } Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs =================================================================== diff -u -r6557 -r6659 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs (.../MacroStabilityInwardsTests.cs) (revision 6557) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs (.../MacroStabilityInwardsTests.cs) (revision 6659) @@ -45,7 +45,7 @@ private const double tolerance = 0.00051; private const string tutorialStability2D = @"TestFiles\InputTutorialStability2D.xml"; - [Test, Category(Categories.Slow)] + [Test] public void TestRunMacroStabilityTutorialDesignUpliftVan() { // Based on ".data\DamEngineTestProjects\DAM Tutorial Design\DAM Tutorial Design.damx" @@ -68,6 +68,7 @@ inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used Output output = GeneralHelper.RunAfterInputValidation(inputString); + Assert.That(output.Results.CalculationResults, Has.Length.EqualTo(1)); Assert.Multiple(() => { @@ -103,6 +104,43 @@ }); } + [Test] + public void TestRunMacroStabilityTutorialDesignUpliftVan_NoUplift() + { + // Based on DAM UI tutorial for stability, for location DWP_18 + const string calcDir = "TestStabInwardsUpliftVan_NoUplift"; + if (Directory.Exists(calcDir)) + { + Directory.Delete(calcDir, true); // delete previous results + } + + string inputString = File.ReadAllText(tutorialStability2D); + string[] locations = ["DWP_18"]; + inputString = XmlAdapter.SelectLocations(inputString, locations); + + inputString = XmlAdapter.ChangeStabilityInputModel(inputString, InputStabilityModelType.UpliftVan); + inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used + inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used + + Output output = GeneralHelper.RunAfterInputValidation(inputString); + Assert.That(output.Results.CalculationResults, Has.Length.EqualTo(1)); + + // Uplift Van + DesignResultStabilityDesignResults result = output.Results.CalculationResults[0].StabilityDesignResults; + Assert.Multiple(() => + { + Assert.That(result.SafetyFactorSpecified, Is.False); + Assert.That(result.UpliftSituation, Is.Not.Null); + Assert.That(result.StabilityModelType, Is.EqualTo(DesignResultStabilityDesignResultsStabilityModelType.UpliftVan)); + }); + Assert.Multiple(() => + { + // Calculation Result + Assert.That(ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[0].CalculationResult), + Is.EqualTo(CalculationResult.NoRun)); + }); + } + [Test, Category(Categories.Slow)] public void TestRunMacroStabilityTutorialDesignBishopUpliftVan_UpliftVanLowest() { @@ -126,6 +164,7 @@ inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used Output output = GeneralHelper.RunAfterInputValidation(inputString); + Assert.That(output.Results.CalculationResults, Has.Length.EqualTo(3)); // Bishop DesignResult result = output.Results.CalculationResults[0]; @@ -187,6 +226,7 @@ inputString = XmlAdapter.ChangeValueInXml(inputString, "SearchMethod", "BeeSwarm"); Output output = GeneralHelper.RunAfterInputValidation(inputString); + Assert.That(output.Results.CalculationResults, Has.Length.EqualTo(3)); // Bishop DesignResultStabilityDesignResults result = output.Results.CalculationResults[0].StabilityDesignResults; @@ -225,13 +265,10 @@ }); } - [Test, Category(Categories.Slow)] + [Test] public void TestRunMacroStabilityTutorialDesignBishopUpliftVan_NoUplift() { - // Based on ".data\DamEngineTestProjects\DAM Tutorial Design\DAM Tutorial Design.damx" - // with Dam Classic rev.1059 - // Select 10th location (DWP_18) - // with Dam Classic rev.833 + // Based on DAM UI tutorial for stability, for location DWP_18 const string calcDir = "TestStabInwardsBishopUpliftVan_NoUplift"; if (Directory.Exists(calcDir)) { @@ -247,6 +284,7 @@ inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used Output output = GeneralHelper.RunAfterInputValidation(inputString); + Assert.That(output.Results.CalculationResults, Has.Length.EqualTo(3)); // Bishop DesignResultStabilityDesignResults result = output.Results.CalculationResults[0].StabilityDesignResults; @@ -548,14 +586,22 @@ Output output = GeneralHelper.RunAfterInputValidation(engineInterface); // one location is calculated with 3 1D profiles - // However, profile 6-4-1-A-1-F_3_s has no UpliftVan occuring and thus has no result - Assert.That(output.Results.CalculationResults.Length, Is.EqualTo(2)); + // However, profile 6-4-1-A-1-F_3_s has no UpliftVan occuring and thus has result NoRun + Assert.That(output.Results.CalculationResults.Length, Is.EqualTo(3)); Assert.Multiple(() => { - Assert.That(output.Results.CalculationResults[0].LocationName, Is.EqualTo("6-4-1-A-1-F")); - Assert.That(output.Results.CalculationResults[0].ProfileName, Is.EqualTo("6-4-1-A-1-F_1_s")); - Assert.That(output.Results.CalculationResults[1].LocationName, Is.EqualTo("6-4-1-A-1-F")); - Assert.That(output.Results.CalculationResults[1].ProfileName, Is.EqualTo("6-4-1-A-1-F_2_s")); + DesignResult result = output.Results.CalculationResults[0]; + Assert.That(result.LocationName, Is.EqualTo("6-4-1-A-1-F")); + Assert.That(result.ProfileName, Is.EqualTo("6-4-1-A-1-F_1_s")); + Assert.That(ConversionHelper.ConvertToCalculationResult(result.CalculationResult), Is.EqualTo(CalculationResult.Succeeded)); + result = output.Results.CalculationResults[1]; + Assert.That(result.LocationName, Is.EqualTo("6-4-1-A-1-F")); + Assert.That(result.ProfileName, Is.EqualTo("6-4-1-A-1-F_2_s")); + Assert.That(ConversionHelper.ConvertToCalculationResult(result.CalculationResult), Is.EqualTo(CalculationResult.Succeeded)); + result = output.Results.CalculationResults[2]; + Assert.That(result.LocationName, Is.EqualTo("6-4-1-A-1-F")); + Assert.That(result.ProfileName, Is.EqualTo("6-4-1-A-1-F_3_s")); + Assert.That(ConversionHelper.ConvertToCalculationResult(result.CalculationResult), Is.EqualTo(CalculationResult.NoRun)); }); DesignResult result = output.Results.CalculationResults[0]; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs =================================================================== diff -u -r6532 -r6659 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 6532) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 6659) @@ -51,7 +51,7 @@ private readonly string inputXmlForDamEngine = Path.Combine(testFolder, "StabilityDesign1Dbased.xml"); [Test] - [TestCase(0.8, true, false, PrepareResult.NotRelevant)] + [TestCase(0.8, true, false, PrepareResult.Successful)] // no uplift [TestCase(1.4, true, true, PrepareResult.Successful)] [TestCase(1.2, false, false, PrepareResult.Failed)] public void TestPrepare(double upliftCriterionStability, bool isInputValid, bool expectedIsUplift, PrepareResult expectedPrepareResult) @@ -434,34 +434,6 @@ } [Test] - public void TestFullCalculationFails() - { - var kernelWrapper = new MacroStabilityInwardsKernelWrapper - { - FailureMechanismParametersMStab = new FailureMechanismParametersMStab - { - MStabParameters = - { - Model = StabilityModelType.UpliftVan - } - } - }; - - IKernelDataInput kernelDataInput = new MacroStabilityKernelDataInput(); - - IKernelDataOutput kernelDataOutput = new MacroStabilityOutput(); - // Run the dll - kernelWrapper.Execute(kernelDataInput, kernelDataOutput, out List messages); - var macroStabilityOutput = (MacroStabilityOutput) kernelDataOutput; - Assert.Multiple(() => - { - Assert.That(messages, Is.Not.Empty); - // as there is no data at all, expect unexpected error - Assert.That(macroStabilityOutput.CalculationResult, Is.EqualTo(CalculationResult.UnexpectedError)); - }); - } - - [Test] public void TestFullCalculationSucceedsWithWarningsWithBadTangentLines() { // Prepare the wrapper. Result is input for the calculation dll Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelperTests.cs =================================================================== diff -u -r6533 -r6659 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelperTests.cs (.../MacroStabilityCommonHelperTests.cs) (revision 6533) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelperTests.cs (.../MacroStabilityCommonHelperTests.cs) (revision 6659) @@ -20,15 +20,21 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.Linq; using Deltares.DamEngine.Calculators.KernelWrappers.Common; using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon; +using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; +using Deltares.DamEngine.Data.Standard.Calculation; +using Deltares.DamEngine.Data.Standard.Logging; using Deltares.DamEngine.TestHelpers.Factories; using NUnit.Framework; +using CharacteristicPointType = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointType; using Soil = Deltares.DamEngine.Data.Geotechnics.Soil; +using SoilProfileType = Deltares.DamEngine.Data.General.SoilProfileType; namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.MacroStabilityCommon; @@ -333,4 +339,23 @@ MacroStabilityCommonHelper.CombineSoilProfileWithSurfaceLine(soilGeometryProbability, surfaceLine, new Soil()); return soilGeometryProbability; } + + [Test] + public void TestUnexpectedErrorIsReturned() + { + var kernelDataInput = new MacroStabilityKernelDataInput(); + var kernelDataOutput = new MacroStabilityOutput(); + // Perform the calculation + MacroStabilityCommonHelper.PerformStabilityCalculation(kernelDataInput, kernelDataOutput, "", null, out List errorMessages); + + var macroStabilityOutput = (MacroStabilityOutput) kernelDataOutput; + Assert.Multiple(() => + { + Assert.That(errorMessages, Is.Not.Empty); + // as there is no data at all, expect unexpected error + Assert.That(macroStabilityOutput.CalculationResult, Is.EqualTo(CalculationResult.UnexpectedError)); + }); + } + + } \ No newline at end of file