Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/ConversionHelperTests.cs =================================================================== diff -u -r2966 -r2970 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 2966) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 2970) @@ -70,30 +70,30 @@ #region ModelType [Test] //[TestCase(StabilityModelOption.Bishop, MStabModelType.BishopWti)] - [TestCase(MacroStability.CSharpWrapper.Output.StabilityModelOptionType.UpliftVan, MStabModelType.UpliftVanWti)] - public void CanConvertToMStabModelType(MacroStability.CSharpWrapper.Output.StabilityModelOptionType modelOption, MStabModelType mStabModelType) + [TestCase(StabilityModelOptionType.UpliftVan, MStabModelType.UpliftVanWti)] + public void CanConvertToMStabModelType(StabilityModelOptionType modelOption, MStabModelType mStabModelType) { Assert.AreEqual(mStabModelType, ConversionHelper.ConvertToMStabModelType(modelOption)); } [Test] - [TestCase(MacroStability.CSharpWrapper.Output.StabilityModelOptionType.Bishop, MStabModelType.BishopWti)] - [TestCase(MacroStability.CSharpWrapper.Output.StabilityModelOptionType.UpliftVan, MStabModelType.UpliftVanWti)] - public void CanConvertToMStabModelTypeFromOutput(MacroStability.CSharpWrapper.Output.StabilityModelOptionType modelOption, MStabModelType mStabModelType) + [TestCase(StabilityModelOptionType.Bishop, MStabModelType.BishopWti)] + [TestCase(StabilityModelOptionType.UpliftVan, MStabModelType.UpliftVanWti)] + public void CanConvertToMStabModelTypeFromOutput(StabilityModelOptionType modelOption, MStabModelType mStabModelType) { Assert.AreEqual(mStabModelType, ConversionHelper.ConvertToMStabModelTypeFromOutput(modelOption)); } [Test] - [TestCase(MStabModelType.UpliftVanWti, MacroStability.CSharpWrapper.Output.StabilityModelOptionType.UpliftVan)] - public void CanConvertToModelOptions(MStabModelType mStabModelType, MacroStability.CSharpWrapper.Output.StabilityModelOptionType modelOption) + [TestCase(MStabModelType.UpliftVanWti, StabilityModelOptionType.UpliftVan)] + public void CanConvertToModelOptions(MStabModelType mStabModelType, StabilityModelOptionType modelOption) { Assert.AreEqual(modelOption, ConversionHelper.ConvertToModelOptions(mStabModelType)); } [Test] - [TestCase(MStabModelType.UpliftVanWti, MacroStability.CSharpWrapper.Output.StabilityModelOptionType.UpliftVan)] - public void CanConvertToModelOptionsOutput(MStabModelType mStabModelType, MacroStability.CSharpWrapper.Output.StabilityModelOptionType modelOption) + [TestCase(MStabModelType.UpliftVanWti, StabilityModelOptionType.UpliftVan)] + public void CanConvertToModelOptionsOutput(MStabModelType mStabModelType, StabilityModelOptionType modelOption) { Assert.AreEqual(modelOption, ConversionHelper.ConvertToModelOptionsOutput(mStabModelType)); } @@ -272,19 +272,19 @@ #endregion #region LogMessages - [TestCase(MacroStability.CSharpWrapper.Output.MessageType.Info, Data.Standard.Logging.LogMessageType.Info)] - [TestCase(MacroStability.CSharpWrapper.Output.MessageType.Warning, Data.Standard.Logging.LogMessageType.Warning)] - [TestCase(MacroStability.CSharpWrapper.Output.MessageType.Error, Data.Standard.Logging.LogMessageType.Error)] - public void CanConvertKernelValidationResultTypeToLogMessageType(MacroStability.CSharpWrapper.Output.MessageType validationResultType, LogMessageType logMessageType) + [TestCase(LogMessageType.Info, MessageType.Info)] + [TestCase(LogMessageType.Warning, MessageType.Warning)] + [TestCase(LogMessageType.Error, MessageType.Error)] + public void CanConvertLogMessageTypeToKernelLogMessageType(LogMessageType logMessageType, MessageType messageType) { - Assert.AreEqual(logMessageType, - ConversionHelper.ConvertKernelValidationResultTypeToLogMessageType(validationResultType)); + Assert.AreEqual(messageType, + ConversionHelper.ConvertLogMessageTypeToKernelLogMessageType(logMessageType)); } - [TestCase(MacroStability.CSharpWrapper.Output.MessageType.Info, LogMessageType.Info)] - [TestCase(MacroStability.CSharpWrapper.Output.MessageType.Warning, LogMessageType.Warning)] - [TestCase(MacroStability.CSharpWrapper.Output.MessageType.Error, LogMessageType.Error)] - public void CanConvertKernelLogMessageTypeToLogMessageType(MacroStability.CSharpWrapper.Output.MessageType kernelLogMessageType, + [TestCase(MessageType.Info, LogMessageType.Info)] + [TestCase(MessageType.Warning, LogMessageType.Warning)] + [TestCase(MessageType.Error, LogMessageType.Error)] + public void CanConvertKernelLogMessageTypeToLogMessageType(MessageType kernelLogMessageType, LogMessageType logMessageType) { Assert.AreEqual(logMessageType, Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperOutputFromEngine.cs =================================================================== diff -u -r2906 -r2970 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperOutputFromEngine.cs (.../FillMacroStabilityWrapperOutputFromEngine.cs) (revision 2906) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperOutputFromEngine.cs (.../FillMacroStabilityWrapperOutputFromEngine.cs) (revision 2970) @@ -24,14 +24,48 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards; +using Deltares.DamEngine.Data.Standard.Logging; +using Deltares.MacroStability.CSharpWrapper.Output; +using MacroStabilityOutput = Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards.MacroStabilityOutput; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo { + /// + /// Fills the the MacroStabilityWrapper output with Fills the engine results + /// public class FillMacroStabilityWrapperOutputFromEngine { - public void FillMacroStabilityWrapperOutput() + public static MacroStability.CSharpWrapper.Output.MacroStabilityOutput FillMacroStabilityWrapperOutput(MacroStabilityOutput output, List logMessages) { + var kernelOutput = new MacroStability.CSharpWrapper.Output.MacroStabilityOutput(); + kernelOutput.ResultType = ConversionHelper.ConvertToMacroStabilityResultType(output.CalculationResult); + kernelOutput.StabilityOutput = new StabilityOutput(); + if (kernelOutput.ResultType == CalculationResultType.Succeeded) + { + var outputItem = output.StabilityOutputItems.First(); + kernelOutput.StabilityOutput.SafetyFactor = outputItem.SafetyFactor; + kernelOutput.StabilityOutput.ModelOptionType = ConversionHelper.ConvertToModelOptionsOutput(outputItem.StabilityModelType); + // Todo rest of kernel output to be converted later. + } + else + { + kernelOutput.StabilityOutput.SafetyFactor = double.NaN; + } + if (logMessages != null && logMessages.Any()) + { + var messagesOutput = new List(); + foreach (var logMessage in logMessages) + { + var message = new Message(); + message.Content = logMessage.Message; + message.MessageType = ConversionHelper.ConvertLogMessageTypeToKernelLogMessageType(logMessage.MessageType); + messagesOutput.Add(message); + } + kernelOutput.StabilityOutput.Messages = messagesOutput; + } + return kernelOutput; } } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs =================================================================== diff -u -r2964 -r2970 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 2964) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 2970) @@ -121,46 +121,7 @@ } [Test] - public void TestParseValidationResultOk() - { - List messages; - var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); - var xmlFileName = Path.Combine(TestFolder, "ValidateOk.xml"); - string xmlValidationResult = File.ReadAllText(xmlFileName); - kernelWrapper.ParseValidationResult(xmlValidationResult, out messages); - Assert.AreEqual(0, messages.Count); - } - - [TestCase("ValidateInfo.xml", LogMessageType.Info, "Dit is een Info bericht voor test")] - [TestCase("ValidateWarning.xml", LogMessageType.Warning, "Dit is een Waarschuwings bericht voor test")] - [TestCase("ValidateError.xml", LogMessageType.Error, "Voor geval 'Klei dijk op klei' (1A) moet de laag onder de dijk geen watervoerende laag zijn.")] [Category(Categories.WorkInProgress)] // based on wti so can probably be removed - public void TestParseValidationResultMessages(string fileName, LogMessageType logMessageType, string message) - { - List messages; - var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); - var xmlFileName = Path.Combine(TestFolder, fileName); - string xmlValidationResult = File.ReadAllText(xmlFileName); - kernelWrapper.ParseValidationResult(xmlValidationResult, out messages); - Assert.AreEqual(1, messages.Count); - Assert.AreEqual(logMessageType, messages[0].MessageType); - Assert.AreEqual(message, messages[0].Message); - } - - [Test] - [Category(Categories.WorkInProgress)] // based on wti so can probably be removed - [ExpectedException(typeof(XmlSchemaValidationException), ExpectedMessage = "The 'Severity' attribute is invalid - The value 'Wrong' is invalid according to its datatype 'ValidationType' - The Enumeration constraint failed.")] - public void TestParseValidationResultMessageWrongType() - { - List messages; - var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); - var xmlFileName = Path.Combine(TestFolder, "ValidateWrong.xml"); - string xmlValidationResult = File.ReadAllText(xmlFileName); - kernelWrapper.ParseValidationResult(xmlValidationResult, out messages); - } - - [Test] - [Category(Categories.WorkInProgress)] // based on wti so can probably be removed // Result1True.xml is generated with BmMacrostabiliteit 'Benchmark 1-01b.wti' // Result2True.xml is generated with BmMacrostabiliteit 'Benchmark 4-01b.wti' // An info and warning message were manually added Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs =================================================================== diff -u -r2960 -r2970 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs (.../FillEngineFromMacroStabilityWrapperOutput.cs) (revision 2960) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs (.../FillEngineFromMacroStabilityWrapperOutput.cs) (revision 2970) @@ -24,6 +24,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards; +using Deltares.DamEngine.Data.Standard.Logging; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo { @@ -32,15 +34,47 @@ /// public class FillEngineFromMacroStabilityWrapperOutput { + public List LogMessages { get; set; } - /// /// Fills the engine data with results. /// - public static void FillEngineDataWithResults() + public MacroStabilityOutput FillEngineDataWithResults(MacroStability.CSharpWrapper.Output.MacroStabilityOutput kernelOutput) { - - + var output = new MacroStabilityOutput + { + CalculationResult = ConversionHelper.ConvertToDamResultType(kernelOutput.ResultType) + }; + if (kernelOutput.StabilityOutput != null) + { + output.StabilityOutputItems = new List(); + var outputItem = new MacroStabilityOutputItem + { + CalculationResult = ConversionHelper.ConvertToDamResultType(kernelOutput.ResultType), + SafetyFactor = kernelOutput.StabilityOutput.SafetyFactor, + StabilityModelType = + ConversionHelper.ConvertToMStabModelTypeFromOutput(kernelOutput.StabilityOutput.ModelOptionType) + }; + output.StabilityOutputItems.Add(outputItem); + if (kernelOutput.StabilityOutput.Messages != null && kernelOutput.StabilityOutput.Messages.Any()) + { + LogMessages = new List(); + foreach (var stabilityOutputMessage in kernelOutput.StabilityOutput.Messages) + { + var logMessage = new LogMessage + { + Message = stabilityOutputMessage.Content, + MessageType = ConversionHelper.ConvertKernelLogMessageTypeToLogMessageType( + stabilityOutputMessage + .MessageType) + }; + LogMessages.Add(logMessage); + } + } + } + // output.UpliftSituation = ToDo later + + return output; } } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r2963 -r2970 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 2963) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 2970) @@ -175,20 +175,6 @@ return 0; } - internal void ParseValidationResult(string xmlValidationResult, out List messages) - { - messages = new List(); - //var validationResults = WtiDeserializer.DeserializeValidation(xmlValidationResult); - // foreach (var result in validationResults) - // { - // messages.Add(new LogMessage - // { - // Message = result.Text, - // MessageType = ConversionHelper.ConvertKernelValidationResultTypeToLogMessageType(result.MessageType) - // }); - // } - } - /// /// Executes the kernel. /// Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/ConversionHelper.cs =================================================================== diff -u -r2966 -r2970 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/ConversionHelper.cs (.../ConversionHelper.cs) (revision 2966) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/ConversionHelper.cs (.../ConversionHelper.cs) (revision 2970) @@ -183,6 +183,11 @@ /// The MacroStability Soil. public static Soil ConvertToMacroStabilitySoil(Data.Geotechnics.Soil soil) { + ShearStrengthModel shearStrengthModel = ShearStrengthModel.None; + if (soil.ShearStrengthModel.HasValue) + { + shearStrengthModel = soil.ShearStrengthModel.Value; + } var macroStabilitySoil = new Soil() { Name = soil.Name, @@ -192,7 +197,7 @@ FrictionAngle = soil.FrictionAngle, RRatio = soil.RRatio, RatioCuPc = soil.RatioCuPc, - ShearStrengthModel = ConversionHelper.ConvertToMacroStabilityShearStrengthModel(soil.ShearStrengthModel.Value), + ShearStrengthModel = ConversionHelper.ConvertToMacroStabilityShearStrengthModel(shearStrengthModel), //RheologicalCoefficient = 0.0, // is purely needed for Nails which are NOT yet to be implemented StrengthIncreaseExponent = soil.StrengthIncreaseExponent, UseSoilClassification = false, // Soil type is not given so make sure it is not used. @@ -401,13 +406,13 @@ /// /// Type of the message. /// - public static LogMessageType ConvertKernelValidationResultTypeToLogMessageType(MessageType messageType) + public static MessageType ConvertLogMessageTypeToKernelLogMessageType(LogMessageType messageType) { - var translationTable = new Dictionary() + var translationTable = new Dictionary() { - {MessageType.Info, LogMessageType.Info}, - {MessageType.Warning, LogMessageType.Warning}, - {MessageType.Error, LogMessageType.Error} + {LogMessageType.Info, MessageType.Info}, + {LogMessageType.Warning, MessageType.Warning}, + {LogMessageType.Error, MessageType.Error} }; return translationTable[messageType]; } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs =================================================================== diff -u -r2965 -r2970 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs (.../MacroStabilityIoTests.cs) (revision 2965) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs (.../MacroStabilityIoTests.cs) (revision 2970) @@ -29,13 +29,17 @@ using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo; using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; +using Deltares.DamEngine.Data.Standard.Calculation; using Deltares.DamEngine.TestHelpers; using Deltares.DamEngine.TestHelpers.Factories; +using Deltares.MacroStability.CSharpWrapper.Output; using KellermanSoftware.CompareNetObjects; using CharacteristicPointSet = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointSet; using HeadLine = Deltares.DamEngine.Data.Geometry.HeadLine; using SoilProfile2D = Deltares.DamEngine.Data.Geotechnics.SoilProfile2D; using SurfaceLine2 = Deltares.DamEngine.Data.Geotechnics.SurfaceLine2; +using Waternet = Deltares.DamEngine.Data.Geometry.Waternet; +using WaternetLine = Deltares.DamEngine.Data.Geometry.WaternetLine; namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.MacroStabilityCommon { @@ -52,11 +56,28 @@ "UseDefaultShearStrengthModel" }; - [Test] - [Category(Categories.WorkInProgress)] // The actual code has to be implemented - public void GivenCSharpWrapperOutputWhenGoingToAndFromEngineTheDataIsEqual() + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void GivenCSharpWrapperOutputWhenGoingToAndFromEngineTheDataIsEqual(int testNumber) { - //ToDo fill this + //ToDo fill this + var expectedKernelOutput = CreateKernelOutputForTest(testNumber); + + var fillEngineFromMacroStabilityWrapperOutput = new FillEngineFromMacroStabilityWrapperOutput(); + var dd = fillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(expectedKernelOutput); + var kernelOutput = FillMacroStabilityWrapperOutputFromEngine.FillMacroStabilityWrapperOutput(dd, fillEngineFromMacroStabilityWrapperOutput.LogMessages); + + var compare = new CompareLogic { Config = { MaxDifferences = 100 } }; + compare.Config.MembersToInclude = new List() + { + //"XEnd", + //"XStart", + //"Pressure" + }; + ComparisonResult result; + result = compare.Compare(expectedKernelOutput, kernelOutput); + Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel Output"); } [Test] @@ -324,5 +345,56 @@ { return FactoryForDamProjectData.CreateExampleDamProjectData(); } + + private MacroStability.CSharpWrapper.Output.MacroStabilityOutput CreateKernelOutputForTest(int choice) + { + var output = new MacroStability.CSharpWrapper.Output.MacroStabilityOutput(); + var messagesOutput = new List(); + if (choice == 1) + { + // Result 1: succeeded, has a SafetyFactor of ca. 3.856, no messages + output.ResultType = CalculationResultType.Succeeded; + output.StabilityOutput = new StabilityOutput + { + SafetyFactor = 3.856, + ModelOptionType = StabilityModelOptionType.UpliftVan + }; + } + else if (choice == 2) + { + // Result 2: succeeded, has a SafetyFactor of ca. 1.857, has info and warning, but no error messages + messagesOutput.Clear(); + var infoMessage = new Message(); + infoMessage.Content = "Info"; + infoMessage.MessageType = MessageType.Info; + messagesOutput.Add(infoMessage); + var warningMessage = new Message(); + warningMessage.Content = "Warning"; + warningMessage.MessageType = MessageType.Warning; + messagesOutput.Add(warningMessage); + output.ResultType = CalculationResultType.Succeeded; + output.StabilityOutput = new StabilityOutput + { + SafetyFactor = 1.857, + Messages = messagesOutput, + ModelOptionType = StabilityModelOptionType.UpliftVan + }; + } + else + { + // Result 3 failed - has a SafetyFactor of NaN, has an error message + messagesOutput.Clear(); + var errorMessage = new Message(); + errorMessage.Content = "Error"; + errorMessage.MessageType = MessageType.Error; + messagesOutput.Add(errorMessage); + output.StabilityOutput = new StabilityOutput(); + output.ResultType = CalculationResultType.RunFailed; + output.StabilityOutput.SafetyFactor = double.NaN; + output.StabilityOutput.Messages = messagesOutput; + } + + return output; + } } } \ No newline at end of file