Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperOutputFromEngine.cs =================================================================== diff -u -r2970 -r3004 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperOutputFromEngine.cs (.../FillMacroStabilityWrapperOutputFromEngine.cs) (revision 2970) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperOutputFromEngine.cs (.../FillMacroStabilityWrapperOutputFromEngine.cs) (revision 3004) @@ -19,12 +19,8 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System; using System.Collections.Generic; 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; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs =================================================================== diff -u -r2965 -r3004 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs (.../FillMacroStabilityWrapperInputFromEngine.cs) (revision 2965) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs (.../FillMacroStabilityWrapperInputFromEngine.cs) (revision 3004) @@ -29,6 +29,7 @@ using Deltares.MacroStability.CSharpWrapper; using Waternet = Deltares.DamEngine.Data.Geometry.Waternet; using Deltares.MacroStability.CSharpWrapper.Input; +using CharacteristicPointType = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointType; using HeadLine = Deltares.DamEngine.Data.Geometry.HeadLine; using KernelUpliftVanCalculationGrid = Deltares.MacroStability.CSharpWrapper.UpliftVanCalculationGrid; using KernelWaternet = Deltares.MacroStability.CSharpWrapper.Input.Waternet; @@ -89,8 +90,15 @@ lastStage.Waternet = new KernelWaternet(); TransferWaternet(waterNet, lastStage.Waternet); - - TransferUpliftVanCalculationGrid(UpliftVanCalculationGrid, macroStabilityInput.StabilityModel.UpliftVanCalculationGrid, macroStabilityInput.PreprocessingInput.SearchAreaConditions); + var top = damKernelInput.Location.SurfaceLine.CharacteristicPoints + .GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z; + var bottom = damKernelInput.SubSoilScenario.SoilProfile2D.Geometry.MinGeometryPointsZ; + var slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification + .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; + TransferUpliftVanCalculationGridSettings(slipCircleDefinition, top, bottom, + macroStabilityInput.PreprocessingInput.SearchAreaConditions); + //TransferUpliftVanCalculationGrid(UpliftVanCalculationGrid, macroStabilityInput.StabilityModel.UpliftVanCalculationGrid, + // macroStabilityInput.PreprocessingInput.SearchAreaConditions); lastStage.UniformLoads = new List(); // ToDo check whether this is needed. TransferUniformLoads(TrafficLoad, lastStage.UniformLoads); return macroStabilityInput; @@ -259,6 +267,22 @@ return line; } + private void TransferUpliftVanCalculationGridSettings(SlipCircleDefinition slipCircleDefinition, double top, double bottom, SearchAreaConditions kernelSearchAreaConditions) + { + kernelSearchAreaConditions.AutoSearchArea = + slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Automatic; + kernelSearchAreaConditions.AutoTangentLines = slipCircleDefinition.UpliftVanTangentLinesDefinition == + TangentLinesDefinition.OnBoundaryLines; + if (!kernelSearchAreaConditions.AutoTangentLines) + { + kernelSearchAreaConditions.TangentLineNumber = + Convert.ToInt32(Math.Floor((top - bottom) / slipCircleDefinition.UpliftVanTangentLinesDistance) + + 1); + kernelSearchAreaConditions.TangentLineZTop = top; + kernelSearchAreaConditions.TangentLineZBottom = bottom; + } + } + private void TransferUpliftVanCalculationGrid(UpliftVanCalculationGrid damUpliftVanCalculationGrid, KernelUpliftVanCalculationGrid kernelUpliftVanCalculationGrid, SearchAreaConditions kernelSearchAreaConditions) Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs =================================================================== diff -u -r2970 -r3004 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 2970) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 3004) @@ -22,44 +22,42 @@ using System.Collections.Generic; using System.Data; using System.IO; -using System.Linq; -using System.Xml; -using System.Xml.Schema; using Deltares.DamEngine.Calculators.KernelWrappers.Common; using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces; -using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon; using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards; using Deltares.DamEngine.Calculators.Tests.KernelWrappers.TestHelpers; using Deltares.DamEngine.Data.Design; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.General.Results; using Deltares.DamEngine.Data.Standard.Calculation; +using Deltares.DamEngine.Interface; +using Deltares.DamEngine.Io; using Deltares.DamEngine.TestHelpers; using Deltares.DamEngine.TestHelpers.Factories; -using Deltares.MacroStability.CSharpWrapper.Output; using NUnit.Framework; +using NUnit.Framework.Constraints; using LogMessage = Deltares.DamEngine.Data.Standard.Logging.LogMessage; -using LogMessageType = Deltares.DamEngine.Data.Standard.Logging.LogMessageType; using MacroStabilityOutput = Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards.MacroStabilityOutput; namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.MacroStabilityInwards { [TestFixture] public class MacroStabilityInwardsKernelWrapperTests { - private const string TestFolder = @"..\..\Deltares.DamEngine.Calculators.Tests\KernelWrappers\MacroStabilityInwards\TestFiles"; + private const string TestFolder = @"..\..\Deltares.DamEngine.IntegrationTests\TestFiles"; + private string inputXmlForDamEngine = Path.Combine(TestFolder, "StabilityDesign1Dbased.xml"); [Test] - [Category(Categories.WorkInProgress)] // based on wti so can probably be removed + [Category(Categories.WorkInProgress)] public void TestPrepare() { var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); - kernelWrapper.CreateStabilityCalculator(); kernelWrapper.FailureMechanismParametersMStab = new FailureMechanismParametersMStab(); IKernelDataInput kernelDataInput; IKernelDataOutput kernelDataOutput; var kernelInput = CreateDamKernelInputForTest(); + kernelInput.SubSoilScenario.SoilProfile2D.Surfaces[0].IsAquifer = false; // dit lijkt nog steeds niet te werken ivm cached. Nagaan en anders de tests uit elkaar trekken! // Situation 1: no uplift. Expected PrepareResult.NotRelevant kernelInput.Location.ModelFactors.UpliftCriterionStability = 0.8; @@ -70,9 +68,8 @@ Assert.AreEqual(false, damMacroStabilityOutput.UpliftSituation.IsUplift); // Situation 2: there is uplift and prepare succeeds. Expected PrepareResult.Successful + //kernelInput.SubSoilScenario.SoilProfile2D.Surfaces[0].IsAquifer = false; // This has in fact no use HERE as cached 1D's are used based on the original 2D input kernelInput.Location.ModelFactors.UpliftCriterionStability = 1.2; - // ToDo MWDAM-1356: Not clear yet what must be done in Prepare and XML input not written yet. - kernelWrapper.tmpPresumePrepareSucceeds = true; //ToDo replace by input that makes prepare succeed prepareResult = kernelWrapper.Prepare(kernelInput, 0, out kernelDataInput, out kernelDataOutput); Assert.AreEqual(PrepareResult.Successful, prepareResult); damMacroStabilityOutput = (MacroStabilityOutput)kernelDataOutput; @@ -81,8 +78,6 @@ // Situation 3: there is uplift and prepare fails. Expected PrepareResult.Failed kernelInput.Location.ModelFactors.UpliftCriterionStability = 1.2; - // ToDo MWDAM-1356: Not clear yet what must be done in Prepare and XML input not written yet. - kernelWrapper.tmpPresumePrepareSucceeds = false; //ToDo replace by input that makes prepare fail prepareResult = kernelWrapper.Prepare(kernelInput, 0, out kernelDataInput, out kernelDataOutput); Assert.AreEqual(PrepareResult.Failed, prepareResult); damMacroStabilityOutput = (MacroStabilityOutput)kernelDataOutput; @@ -95,8 +90,7 @@ public void TestValidate() { var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); - kernelWrapper.CreateStabilityCalculator(); - + // Validate without setting values. Expected error messages. var macroStabilityInput1 = new MacroStabilityKernelDataInput(); var macroStabilityOutput1 = new MacroStabilityOutput(); @@ -111,92 +105,12 @@ var macroStabilityOutput2 = new MacroStabilityOutput(); macroStabilityOutput2.CalculationResult = CalculationResult.NoRun; messages.Clear(); - // ToDo MWDAM-1356: Not clear yet what input must be provided to make Validate succeed. Temporary test code added. - // start of temporary test code - kernelWrapper.tmpPresumeInputValid = true; //ToDo replace by input that makes Validate succeed - // end of temporary test code errorCount = kernelWrapper.Validate(macroStabilityInput2, macroStabilityOutput2, out messages); Assert.IsTrue(errorCount == 0); Assert.AreEqual(CalculationResult.NoRun, macroStabilityOutput2.CalculationResult); } [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 - // Result3False.xml is same as Result1True.xml but changed manually to Succeeded="false" SafetyFactor="NaN" - // and added an error message - public void TestParseRunResult() - { - const double diff = 0.001; - List messages; - MacroStabilityOutputItem macroStabilityOutputItem = new MacroStabilityOutputItem(); - var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); - - // Result 1 succeeded, has a SafetyFactor of ca. 3.856, no messages - var output1 = new MacroStability.CSharpWrapper.Output.MacroStabilityOutput(); - output1.ResultType = CalculationResultType.Succeeded; - output1.StabilityOutput = new StabilityOutput - { - SafetyFactor = 3.856, ModelOptionType = StabilityModelOptionType.UpliftVan - }; - kernelWrapper.ParseRunResult(output1, out macroStabilityOutputItem, out messages); - Assert.AreEqual(0, messages.Count); - Assert.AreEqual(CalculationResult.Succeeded, macroStabilityOutputItem.CalculationResult); - Assert.AreEqual(3.856, macroStabilityOutputItem.SafetyFactor, diff); - //Assert.AreEqual(56.599, macroStabilityOutputItem.CircleSurfacePointLeftXCoordinate, diff); - //Assert.AreEqual(77.665, macroStabilityOutputItem.CircleSurfacePointRightXCoordinate, diff); - Assert.AreEqual(MStabModelType.UpliftVanWti, macroStabilityOutputItem.StabilityModelType); - - // Result 2 succeeded, has a SafetyFactor of ca. 1.857, has info and warning, but no error messages - var messagesOutput = new List(); - 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); - var output2 = new MacroStability.CSharpWrapper.Output.MacroStabilityOutput(); - output2.ResultType = CalculationResultType.Succeeded; - output2.StabilityOutput = new StabilityOutput - { - SafetyFactor = 1.857, - Messages = messagesOutput.ToArray(), - ModelOptionType = StabilityModelOptionType.UpliftVan - }; - kernelWrapper.ParseRunResult(output2, out macroStabilityOutputItem, out messages); - Assert.AreEqual(2, messages.Count); - Assert.AreEqual(LogMessageType.Info, messages[0].MessageType); - Assert.AreEqual(LogMessageType.Warning, messages[1].MessageType); - Assert.AreEqual(CalculationResult.Succeeded, macroStabilityOutputItem.CalculationResult); - Assert.AreEqual(1.857, macroStabilityOutputItem.SafetyFactor, diff); - // Assert.AreEqual(48.195, macroStabilityOutputItem.CircleSurfacePointLeftXCoordinate, diff); - // Assert.AreEqual(54.715, macroStabilityOutputItem.CircleSurfacePointRightXCoordinate, diff); - Assert.AreEqual(MStabModelType.UpliftVanWti, macroStabilityOutputItem.StabilityModelType); - - // Result 3 failed - has a SafetyFactor of NaN, has an error message - messagesOutput.Clear(); - var errorMessage = new Message(); - errorMessage.Content = "Warning"; - errorMessage.MessageType = MessageType.Error; - messagesOutput.Add(errorMessage); - var output3 = new MacroStability.CSharpWrapper.Output.MacroStabilityOutput - { - StabilityOutput = new StabilityOutput(), ResultType = CalculationResultType.RunFailed - }; - output3.StabilityOutput.SafetyFactor = double.NaN; - output3.StabilityOutput.Messages = messagesOutput; - kernelWrapper.ParseRunResult(output3, out macroStabilityOutputItem, out messages); - Assert.AreEqual(1, messages.Count); - Assert.AreEqual(LogMessageType.Error, messages[0].MessageType); - Assert.AreEqual(CalculationResult.RunFailed, macroStabilityOutputItem.CalculationResult); - Assert.AreEqual(double.NaN, macroStabilityOutputItem.SafetyFactor, diff); - } - - [Test] public void TestPostProcess() { const double diff = 0.0001; @@ -233,14 +147,12 @@ public void TestFullCalculationFails() { var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); - kernelWrapper.CreateStabilityCalculator(); - + IKernelDataInput kernelDataInput = new MacroStabilityKernelDataInput(); IKernelDataOutput kernelDataOutput = new MacroStabilityOutput(); // Run the dll List messages; MacroStabilityKernelDataInput macroStabilityKernelDataInput = (MacroStabilityKernelDataInput)kernelDataInput; - kernelWrapper.tmpPresumeRunSucceeds = false; //ToDo MWDAM-1356 replace by input that makes Execute fail kernelWrapper.Execute(kernelDataInput, kernelDataOutput, out messages); MacroStabilityOutput macroStabilityOutput = (MacroStabilityOutput)kernelDataOutput; Assert.IsTrue(messages.Count > 0); @@ -254,26 +166,22 @@ const double diff = 0.0001; var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); - kernelWrapper.CreateStabilityCalculator(); kernelWrapper.FailureMechanismParametersMStab = new FailureMechanismParametersMStab(); // Prepare the wrapper. Result is input for the calculation dll IKernelDataInput kernelDataInput; IKernelDataOutput kernelDataOutput; var kernelInput = CreateDamKernelInputForTest(); PrepareResult prepareResult = kernelWrapper.Prepare(kernelInput, 0, out kernelDataInput, out kernelDataOutput); - // ToDo MWDAM-1356: xml input not written yet. Skip for now. - //Assert.AreEqual(PrepareResult.Successful, prepareResult1); + Assert.AreEqual(PrepareResult.Successful, prepareResult); // Validate the input List messages; - kernelWrapper.tmpPresumeInputValid = true; //ToDo MWDAM-1356: replace by input that makes Validate succeed var errorCount = kernelWrapper.Validate(kernelDataInput, kernelDataOutput, out messages); // ToDo MWDAM-1356: Not clear yet what input must be provided to make Validate succeed. Skip for now. - //Assert.IsTrue(errorCount == 0); + Assert.IsTrue(errorCount == 0); // Run the dll - kernelWrapper.tmpPresumeRunSucceeds = true; //ToDo MWDAM-1356: replace by input that makes Execute succeed kernelWrapper.Execute(kernelDataInput, kernelDataOutput, out messages); MacroStabilityOutput macroStabilityOutput = (MacroStabilityOutput)kernelDataOutput; // ToDo MWDAM-1356: Input must be set first in Prepare @@ -301,6 +209,61 @@ } [Test] + public void CalculationBishopBasedOnDamEngineXmlFailsForWrongType() + { + const string calcDir = "TestStabInwardsBishop"; + if (Directory.Exists(calcDir)) + { + Directory.Delete(calcDir, true); // delete previous results + } + + Directory.CreateDirectory(calcDir); + string inputString = File.ReadAllText(inputXmlForDamEngine); + inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used + inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used + //inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\"); + //inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb"); + // inputString = XmlAdapter.ChangeValueInXml(inputString, "SegmentFailureMechanismType", segmentFailureMechanismType.ToString()); + EngineInterface engineInterface = new EngineInterface(inputString); + Assert.IsNotNull(engineInterface.DamProjectData); + + string outputString = engineInterface.Run(); + + Assert.IsNotNull(outputString); + var output = DamXmlSerialization.LoadOutputFromXmlString(outputString); + Assert.AreEqual(3,output.Results.CalculationMessages.Length, "No results available"); + Assert.IsTrue(output.Results.CalculationMessages[0].Message1.Contains("Requested kernel not implemented")); + } + + [Test] + public void CalculationUpliftBasedOnDamEngineXmlWorks() + { + const string calcDir = "TestStabInwardsBishop"; + if (Directory.Exists(calcDir)) + { + Directory.Delete(calcDir, true); // delete previous results + } + + Directory.CreateDirectory(calcDir); + string inputString = File.ReadAllText(inputXmlForDamEngine); + inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used + inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used + //inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\"); + //inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb"); + //inputString = XmlAdapter.ChangeValueInXml(inputString, "SegmentFailureMechanismType", segmentFailureMechanismType.ToString()); + EngineInterface engineInterface = new EngineInterface(inputString); + Assert.IsNotNull(engineInterface.DamProjectData); + engineInterface.DamProjectData.DamProjectCalculationSpecification.CurrentSpecification.StabilityModelType = + MStabModelType.UpliftVanWti; + string outputString = engineInterface.Run(); + + Assert.IsNotNull(outputString); + var output = DamXmlSerialization.LoadOutputFromXmlString(outputString); + Assert.IsNotNull(output.Results.CalculationResults, "No results available"); + Assert.AreEqual(1.282, output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, 0.1); + } + + [Test] [ExpectedException(typeof(NoNullAllowedException), ExpectedMessage = "Geen invoer object gedefinieerd voor Macrostabiliteit")] [SetUICulture("nl-NL")] public void TestLanguageNLThrowsExceptionWhenInputIsNull() Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r2970 -r3004 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 2970) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3004) @@ -36,8 +36,7 @@ using Deltares.DamEngine.Data.Standard; using Deltares.DamEngine.Data.Standard.Calculation; using Deltares.MacroStability.CSharpWrapper; -using Deltares.MacroStability.CSharpWrapper.Output; -using ConversionHelper = Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo.ConversionHelper; +using Deltares.MacroStability.Standard; using GeometryPoint = Deltares.DamEngine.Data.Geometry.GeometryPoint; using LogMessage = Deltares.DamEngine.Data.Standard.Logging.LogMessage; using LogMessageType = Deltares.DamEngine.Data.Standard.Logging.LogMessageType; @@ -48,7 +47,7 @@ { private Calculator stabilityCalculator; - private int lastIterationIndex = 0; + private int lastIterationIndex; /// /// Gets or sets the failure mechanisme paramaters for mstab. @@ -58,10 +57,6 @@ /// public FailureMechanismParametersMStab FailureMechanismParametersMStab { get; set; } //ToDo MWDAM-? Use same as for DGeoStability or create new one? - public bool tmpPresumePrepareSucceeds; //ToDo MWDAM-1356 - public bool tmpPresumeInputValid; //ToDo MWDAM-1356 - public bool tmpPresumeRunSucceeds; //ToDo MWDAM-1356 - /// /// Prepares the specified dam kernel input. /// @@ -93,14 +88,13 @@ macroStabilityOutput.UpliftSituation = upliftSituation; if (upliftSituation.IsUplift) { - // ToDo MWDAM-1356: Not clear yet what parts are required for input. - var left = 0.0;// ToDo MWDAM-1356: first point of surfaceline - var right = 100.0;// ToDo MWDAM-1356: last point of surfaceline + var left = damKernelInput.Location.SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelOutside).X; + var right = damKernelInput.Location.SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X; var penetrationLength = damKernelInput.Location.ModelParametersForPlLines.PenetrationLength; - var waternet = PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, damKernelInput.SubSoilScenario.SoilProfile1D, + var waterNet = PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, damKernelInput.SubSoilScenario.SoilProfile1D, penetrationLength, left, right); TrafficLoad trafficLoad = null; - if (damKernelInput.Location.StabilityOptions.TrafficLoad.HasValue) + if (damKernelInput.Location.StabilityOptions.TrafficLoad.HasValue && !damKernelInput.Location.StabilityOptions.TrafficLoad.Value.AlmostZero()) { trafficLoad = new TrafficLoad(); trafficLoad.Pressure = damKernelInput.Location.StabilityOptions.TrafficLoad.Value; @@ -112,16 +106,13 @@ FillMacroStabilityWrapperInputFromEngine fillMacroStabilityWrapperFromEngine = new FillMacroStabilityWrapperInputFromEngine() { - TrafficLoad = trafficLoad - // ToDo MWDAM-1373/1374: fill SoilProfile2D - // ToDo MWDAM-1399: add data for calculation grid Uplift Van, connect it to actual engine input + TrafficLoad = trafficLoad, + UpliftVanCalculationGrid = null, }; - - macroStabilityInput.Input = fillMacroStabilityWrapperFromEngine.CreateMacroStabilityInput(damKernelInput, FailureMechanismParametersMStab, waternet); - // KernelModel expectedKernelModel = fillMacroStabilityWrapperFromEngine.CreateKernelModel(); - // expectedKernelModel. - // var xmlInput = CreateXmlInput(macroStabilityInput, FailureMechanismParametersMStab.EmbankmentDesignParameters); + // ToDo MWDAM-1373/1374: fill SoilProfile2D + EnsureSoilProfile2DIsFilled(damKernelInput.SubSoilScenario, damKernelInput.Location.SurfaceLine, damKernelInput.Location.GetDikeEmbankmentSoil()); + macroStabilityInput.Input = fillMacroStabilityWrapperFromEngine.CreateMacroStabilityInput(damKernelInput, FailureMechanismParametersMStab, waterNet); return PrepareKernel(macroStabilityInput.Input); } return PrepareResult.NotRelevant; @@ -136,6 +127,30 @@ return PrepareResult.NotRelevant; } + private void EnsureSoilProfile2DIsFilled(SoilGeometryProbability subSoilScenario, SurfaceLine2 surfaceLine2, Soil dikeEmbankmentSoil) + { + // var soilProfile2D = subSoilScenario.SoilProfile2D; + // if (soilProfile2D == null) + // { + // var soilSurfaceProfile = new SoilSurfaceProfile + // { + // SoilProfile = subSoilScenario.SoilProfile1D, + // SurfaceLine2 = surfaceLine2, + // Name = surfaceLine2.Name + "_" + subSoilScenario.SoilProfile1D.Name, + // DikeEmbankmentMaterial = dikeEmbankmentSoil + // }; + // // Convert the soilsurfacesoilprofile to a SoilProfile2D to be able to edit it properly. + // var soilProfile2DNew = soilSurfaceProfile.ConvertToSoilProfile2D(); + // //soilSurfaceProfile.Dispose(); + // // For some obscure reason, the created soilProfile2D is handled wrong in the UI (see DSB=786). + // // Its curves do not seem to match the surfaces in the events send on selecting and dragging a curve. + // // This causes the strange behaviour. To solve this, a Clone is made of the soilProfile2D and that clone is added instead. + // //soilProfile2D = (SoilProfile2D)soilProfile2D.Clone(); + // //soilProfile2DNew.Dispose(); + // soilProfile2D = soilProfile2DNew; + // } + } + private PrepareResult PrepareKernel(MacroStability.CSharpWrapper.Input.MacroStabilityInput input) { try @@ -201,9 +216,10 @@ try { var macroStabilityOutputKernel = stabilityCalculator.Calculate(); - ParseRunResult(macroStabilityOutputKernel, out var macroStabilityOutputItem, out messages); - macroStabilityOutput.StabilityOutputItems.Add(macroStabilityOutputItem); - macroStabilityOutput.CalculationResult = CalculationResult.Succeeded; + //ParseRunResult(macroStabilityOutputKernel, out var macroStabilityOutputItem, out messages); + macroStabilityOutput = + FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(macroStabilityOutputKernel, + out messages); } catch (Exception e) { @@ -212,48 +228,7 @@ } } - internal void ParseRunResult(MacroStability.CSharpWrapper.Output.MacroStabilityOutput runResult, out MacroStabilityOutputItem macroStabilityOutputItem, out List messages) - { - messages = new List(); - macroStabilityOutputItem = new MacroStabilityOutputItem(); - macroStabilityOutputItem.SafetyFactor = runResult.StabilityOutput.SafetyFactor; - if (runResult.ResultType == CalculationResultType.Succeeded) - { - macroStabilityOutputItem.CalculationResult = CalculationResult.Succeeded; - macroStabilityOutputItem.StabilityModelType = - ConversionHelper.ConvertToMStabModelTypeFromOutput(runResult.StabilityOutput.ModelOptionType); - // macroStabilityOutputItem.CircleSurfacePointLeftXCoordinate = - // runResult.StabilityOutput.MinimumSafetyCurve.Slices.First().TopLeftPoint.X; - // macroStabilityOutputItem.CircleSurfacePointRightXCoordinate = - // runResult.StabilityOutput.MinimumSafetyCurve.Slices.Last().TopRightPoint.X; - } - else - { - macroStabilityOutputItem.CalculationResult = ConversionHelper.ConvertToDamResultType(runResult.ResultType); - } - - if (runResult.StabilityOutput.Messages != null) - { - foreach (var message in runResult.StabilityOutput.Messages) - { - messages.Add(new LogMessage - { - Message = message.Content, - MessageType = ConversionHelper.ConvertKernelLogMessageTypeToLogMessageType(message.MessageType) - }); - } - } - } - /// - /// Creates the calculator for stability based on kernel input. - /// - public void CreateStabilityCalculator() - { - //Calculator.Calculate(); - } - - /// /// Fills the design results with the kernel output. /// /// The dam kernel input. Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs =================================================================== diff -u -r3003 -r3004 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs (.../MacroStabilityIoTests.cs) (revision 3003) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs (.../MacroStabilityIoTests.cs) (revision 3004) @@ -29,8 +29,7 @@ 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.Data.Standard.Logging; using Deltares.DamEngine.TestHelpers.Factories; using Deltares.MacroStability.CSharpWrapper.Output; using KellermanSoftware.CompareNetObjects; @@ -64,17 +63,11 @@ //ToDo fill this var expectedKernelOutput = CreateKernelOutputForTest(testNumber); - var fillEngineFromMacroStabilityWrapperOutput = new FillEngineFromMacroStabilityWrapperOutput(); - var dd = fillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(expectedKernelOutput); - var kernelOutput = FillMacroStabilityWrapperOutputFromEngine.FillMacroStabilityWrapperOutput(dd, fillEngineFromMacroStabilityWrapperOutput.LogMessages); + List logMessages; + var dd = FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(expectedKernelOutput, out logMessages); + var kernelOutput = FillMacroStabilityWrapperOutputFromEngine.FillMacroStabilityWrapperOutput(dd, 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"); @@ -85,8 +78,8 @@ { // Given DamEngine data (DamProjectData) DamProjectData expectedDamProjectData = CreateExampleDamProjectData(); - Data.Geometry.Waternet expectedWaternet = CreateExampleWaternet(); - UpliftVanCalculationGrid expectedUpliftVanCalculationGrid = CreateExampleUpliftVanCalculationGrid(); + Waternet expectedWaternet = CreateExampleWaternet(); + //UpliftVanCalculationGrid expectedUpliftVanCalculationGrid = CreateExampleUpliftVanCalculationGrid(); Location expectedLocation = expectedDamProjectData.Dike.Locations[0]; SoilList expectedSoilList = expectedDamProjectData.Dike.SoilList; @@ -101,7 +94,7 @@ }; var fillMacroStabilityWrapperInputFromEngine = new FillMacroStabilityWrapperInputFromEngine { - UpliftVanCalculationGrid = expectedUpliftVanCalculationGrid, + //UpliftVanCalculationGrid = expectedUpliftVanCalculationGrid, TrafficLoad = expectedTrafficLoad }; var damKernelInput = new DamKernelInput @@ -123,37 +116,14 @@ CompareSoilProfile2D(expectedSoilProfile2D, fillEngineFromMacroStabilityWrapperInput.SoilProfile2D); CompareSurfaceLine(expectedSurfaceLine2D, fillEngineFromMacroStabilityWrapperInput.SurfaceLine2); CompareTrafficLoad(expectedTrafficLoad, fillEngineFromMacroStabilityWrapperInput.TrafficLoad); - CompareUpliftVanCalculationGrid(expectedUpliftVanCalculationGrid, fillEngineFromMacroStabilityWrapperInput.UpliftVanCalculationGrid); + var expectedUpliftVanCalculationGridSettings = expectedParametersMStab.MStabParameters.SlipCircleDefinition; + CompareUpliftVanCalculationGridSettings(expectedUpliftVanCalculationGridSettings, + fillEngineFromMacroStabilityWrapperInput.SlipCircleDefinition); + //CompareUpliftVanCalculationGrid(expectedUpliftVanCalculationGrid, fillEngineFromMacroStabilityWrapperInput.UpliftVanCalculationGrid); CompareWaternet(expectedWaternet, fillEngineFromMacroStabilityWrapperInput.Waternet); //Todo : add and or implement comparer per item as these are added to the code } - private static UpliftVanCalculationGrid CreateExampleUpliftVanCalculationGrid() - { - var random = new Random(21); - var upliftVanCalculationGrid = new UpliftVanCalculationGrid - { - LeftGridXLeft = random.NextDouble(), - LeftGridXRight = random.NextDouble(), - LeftGridZTop = random.NextDouble(), - LeftGridZBottom = random.NextDouble(), - LeftGridXCount = random.Next(), - LeftGridZCount = random.Next(), - - RightGridXLeft = random.NextDouble(), - RightGridXRight = random.NextDouble(), - RightGridZTop = random.NextDouble(), - RightGridZBottom = random.NextDouble(), - RightGridXCount = random.Next(), - RightGridZCount = random.Next(), - - TangentLineZBottom = 0, - TangentLineZTop = 10, - TangentLineCount = 10 - }; - return upliftVanCalculationGrid; - } - private static Waternet CreateExampleWaternet() { var waterNet = new Waternet @@ -221,26 +191,14 @@ Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel Traffic Load"); } - private void CompareUpliftVanCalculationGrid(UpliftVanCalculationGrid expectedSlipPlaneUpliftVan, - UpliftVanCalculationGrid actualSlipPlaneUpliftVan) + private void CompareUpliftVanCalculationGridSettings(SlipCircleDefinition expectedSlipCircleDefinition, + SlipCircleDefinition actualSlipCircleDefinition) { - Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridXLeft, actualSlipPlaneUpliftVan.LeftGridXLeft); - Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridXRight, actualSlipPlaneUpliftVan.LeftGridXRight); - Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridZTop, actualSlipPlaneUpliftVan.LeftGridZTop); - Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridZBottom, actualSlipPlaneUpliftVan.LeftGridZBottom); - Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridXCount, actualSlipPlaneUpliftVan.LeftGridXCount); - Assert.AreEqual(expectedSlipPlaneUpliftVan.LeftGridZCount, actualSlipPlaneUpliftVan.LeftGridZCount); + Assert.AreEqual(expectedSlipCircleDefinition.GridSizeDetermination, actualSlipCircleDefinition.GridSizeDetermination); + Assert.AreEqual(expectedSlipCircleDefinition.UpliftVanTangentLinesDefinition, actualSlipCircleDefinition.UpliftVanTangentLinesDefinition); + // Note: do not test UpliftVanTangentLinesDistance as there is no way to be sure of equal values as determination to and from involves rounding. + //Assert.AreEqual(expectedSlipCircleDefinition.UpliftVanTangentLinesDistance, actualSlipCircleDefinition.UpliftVanTangentLinesDistance); - Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridXLeft, actualSlipPlaneUpliftVan.RightGridXLeft); - Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridXRight, actualSlipPlaneUpliftVan.RightGridXRight); - Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridZTop, actualSlipPlaneUpliftVan.RightGridZTop); - Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridZBottom, actualSlipPlaneUpliftVan.RightGridZBottom); - Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridXCount, actualSlipPlaneUpliftVan.RightGridXCount); - Assert.AreEqual(expectedSlipPlaneUpliftVan.RightGridZCount, actualSlipPlaneUpliftVan.RightGridZCount); - - Assert.AreEqual(expectedSlipPlaneUpliftVan.TangentLineZTop, actualSlipPlaneUpliftVan.TangentLineZTop); - Assert.AreEqual(expectedSlipPlaneUpliftVan.TangentLineZBottom, actualSlipPlaneUpliftVan.TangentLineZBottom); - Assert.AreEqual(expectedSlipPlaneUpliftVan.TangentLineCount, actualSlipPlaneUpliftVan.TangentLineCount); } private static void CompareWaternet(Waternet expectedWaternet, Waternet actualWaternet) @@ -319,7 +277,6 @@ Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel SoilProfile2D"); } - private void CompareSoilModel(SoilList expectedSoils, SoilList actualSoils) { Assert.AreEqual(expectedSoils.Soils.Count, actualSoils.Soils.Count, "Soil Count does not match"); @@ -346,9 +303,9 @@ return FactoryForDamProjectData.CreateExampleDamProjectData(); } - private MacroStability.CSharpWrapper.Output.MacroStabilityOutput CreateKernelOutputForTest(int choice) + private MacroStabilityOutput CreateKernelOutputForTest(int choice) { - var output = new MacroStability.CSharpWrapper.Output.MacroStabilityOutput(); + var output = new MacroStabilityOutput(); var messagesOutput = new List(); if (choice == 1) { Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs =================================================================== diff -u -r2965 -r3004 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs (.../FillEngineFromMacroStabilityWrapperInput.cs) (revision 2965) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs (.../FillEngineFromMacroStabilityWrapperInput.cs) (revision 3004) @@ -42,7 +42,8 @@ /// Fill DamEngine data objects from the kernel data model public class FillEngineFromMacroStabilityWrapperInput { - private readonly Dictionary soilDictionary = new Dictionary(); + private readonly Dictionary soilDictionary = new Dictionary(); + private SlipCircleDefinition slipCircleDefinition; /// Gets or sets the SoilList DamEngine object /// The soil list. @@ -62,6 +63,18 @@ /// Gets or sets the UpliftVan calculation grid. /// The uplift van calculation grid. public UpliftVanCalculationGrid UpliftVanCalculationGrid { get; set; } + + /// + /// Gets or sets the slip circle definition. + /// + /// + /// The slip circle definition. + /// + public SlipCircleDefinition SlipCircleDefinition + { + get { return slipCircleDefinition; } + } + /// Gets or sets the traffic load. /// The traffic load. public TrafficLoad TrafficLoad { get; set; } @@ -83,7 +96,7 @@ var lastPreConStage = macroStabilityInput.PreprocessingInput.PreConstructionStages.Last(); TransferSurfaceLine(lastPreConStage.SurfaceLine); TransferWaternet(macroStabilityInput.StabilityModel.ConstructionStages.Last().Waternet); - TransferUpliftVanCalculationGrid(macroStabilityInput.StabilityModel.UpliftVanCalculationGrid, macroStabilityInput.PreprocessingInput.SearchAreaConditions); + TransferUpliftVanCalculationGridSettings(macroStabilityInput.PreprocessingInput.SearchAreaConditions); TransferTrafficLoad(macroStabilityInput.StabilityModel.ConstructionStages.Last().UniformLoads); } @@ -109,31 +122,25 @@ } } - private void TransferUpliftVanCalculationGrid(KernelUpliftVanCalculationGrid kernelSlipPlaneUpliftVan, - SearchAreaConditions kernelSearchAreaConditions) + private void TransferUpliftVanCalculationGridSettings(SearchAreaConditions kernelSearchAreaConditions) { - // UpliftVanCalculationGrid.IsAuto = kernelSearchAreaConditions.AutoSearchArea; - UpliftVanCalculationGrid = new UpliftVanCalculationGrid + slipCircleDefinition = new SlipCircleDefinition {GridSizeDetermination = GridSizeDetermination.Specified}; + if (kernelSearchAreaConditions.AutoSearchArea) { - LeftGridXCount = kernelSlipPlaneUpliftVan.LeftGrid.GridXNumber, - LeftGridXLeft = kernelSlipPlaneUpliftVan.LeftGrid.GridXLeft, - LeftGridXRight = kernelSlipPlaneUpliftVan.LeftGrid.GridXRight, - LeftGridZCount = kernelSlipPlaneUpliftVan.LeftGrid.GridZNumber, - LeftGridZTop = kernelSlipPlaneUpliftVan.LeftGrid.GridZTop, - LeftGridZBottom = kernelSlipPlaneUpliftVan.LeftGrid.GridZBottom, - RightGridXCount = kernelSlipPlaneUpliftVan.RightGrid.GridXNumber, - RightGridXLeft = kernelSlipPlaneUpliftVan.RightGrid.GridXLeft, - RightGridXRight = kernelSlipPlaneUpliftVan.RightGrid.GridXRight, - RightGridZCount = kernelSlipPlaneUpliftVan.RightGrid.GridZNumber, - RightGridZTop = kernelSlipPlaneUpliftVan.RightGrid.GridZTop, - RightGridZBottom = kernelSlipPlaneUpliftVan.RightGrid.GridZBottom - }; + slipCircleDefinition.GridSizeDetermination = GridSizeDetermination.Automatic; + } - // Tangent lines are filled from bottom to top as specified by the FillMacroStabilityWrapperInputFromEngine. - IEnumerable tangentLines = kernelSlipPlaneUpliftVan.TangentLines.ToArray(); - UpliftVanCalculationGrid.TangentLineZBottom = tangentLines.First(); - UpliftVanCalculationGrid.TangentLineZTop = tangentLines.Last(); - UpliftVanCalculationGrid.TangentLineCount = tangentLines.Count() - 1; // -1 as the ZTop coordinate is inclusive + slipCircleDefinition.UpliftVanTangentLinesDefinition = TangentLinesDefinition.Specified; + if (kernelSearchAreaConditions.AutoTangentLines) + { + slipCircleDefinition.UpliftVanTangentLinesDefinition = TangentLinesDefinition.OnBoundaryLines; + } + else + { + slipCircleDefinition.UpliftVanTangentLinesDistance = + (kernelSearchAreaConditions.TangentLineZTop - kernelSearchAreaConditions.TangentLineZBottom) / + kernelSearchAreaConditions.TangentLineNumber; + } } private void TransferWaternet(KernelWaternet kernelWaternet) @@ -180,7 +187,7 @@ return lineType; } - private void TransferSurfaceLine(MacroStability.CSharpWrapper.Input.SurfaceLine kernelSurfaceLine) + private void TransferSurfaceLine(SurfaceLine kernelSurfaceLine) { SurfaceLine2 = new SurfaceLine2(); foreach (var kernelCharPoint in kernelSurfaceLine.CharacteristicPoints) Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/PlLinesCreatorTest.cs =================================================================== diff -u -r2718 -r3004 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/PlLinesCreatorTest.cs (.../PlLinesCreatorTest.cs) (revision 2718) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/PlLinesCreatorTest.cs (.../PlLinesCreatorTest.cs) (revision 3004) @@ -340,7 +340,6 @@ [Test] public void CreatePL1LowLowFor1DGeometryWithExpertKnowledgeLinearInDike() { - const double cTolerance = 0.0001; var surfacelineSimpleDike = FactoryForSurfaceLines.CreateSurfacelineSimpleDike(); { Calculators.PlLinesCreator.PlLinesCreator plLineCreator = new Calculators.PlLinesCreator.PlLinesCreator(); @@ -419,7 +418,6 @@ [Test] public void CreatePL1LowLowFor1DGeometryWithExpertKnowledgeLinearInDikeWithMultiSegmentTalud() { - const double cTolerance = 0.0001; var surfaceLine = new SurfaceLine2 { Geometry = new GeometryPointString(), Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs =================================================================== diff -u -r2970 -r3004 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs (.../FillEngineFromMacroStabilityWrapperOutput.cs) (revision 2970) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs (.../FillEngineFromMacroStabilityWrapperOutput.cs) (revision 3004) @@ -19,11 +19,8 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards; using Deltares.DamEngine.Data.Standard.Logging; @@ -34,13 +31,12 @@ /// public class FillEngineFromMacroStabilityWrapperOutput { - public List LogMessages { get; set; } - /// /// Fills the engine data with results. /// - public MacroStabilityOutput FillEngineDataWithResults(MacroStability.CSharpWrapper.Output.MacroStabilityOutput kernelOutput) + public static MacroStabilityOutput FillEngineDataWithResults(MacroStability.CSharpWrapper.Output.MacroStabilityOutput kernelOutput, out List logMessages) { + logMessages = null; var output = new MacroStabilityOutput { CalculationResult = ConversionHelper.ConvertToDamResultType(kernelOutput.ResultType) @@ -58,7 +54,7 @@ output.StabilityOutputItems.Add(outputItem); if (kernelOutput.StabilityOutput.Messages != null && kernelOutput.StabilityOutput.Messages.Any()) { - LogMessages = new List(); + logMessages = new List(); foreach (var stabilityOutputMessage in kernelOutput.StabilityOutput.Messages) { var logMessage = new LogMessage @@ -68,7 +64,7 @@ stabilityOutputMessage .MessageType) }; - LogMessages.Add(logMessage); + logMessages.Add(logMessage); } } }