Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs =================================================================== diff -u -r3801 -r3819 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 3801) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 3819) @@ -19,17 +19,22 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System; +using System.Collections.Generic; using System.Data; using System.IO; using System.Text.RegularExpressions; using Deltares.DamEngine.Calculators.KernelWrappers.Common; +using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces; +using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo; using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards; using Deltares.DamEngine.Calculators.Properties; using Deltares.DamEngine.Data.Design; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.General.Results; using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.Data.Standard.Calculation; +using Deltares.DamEngine.Data.Standard.Logging; +using Deltares.MacroStability.CSharpWrapper; using Deltares.MacroStability.CSharpWrapper.Input; using Deltares.MacroStability.CSharpWrapper.Output; using Deltares.StixFileWriter; @@ -231,7 +236,7 @@ /// /// Name of the file. /// The input. - public static void WriteStixFileBasedOnInputAndResultsSearchGrid(string fileName, MacroStabilityInput input) + private static void WriteStixFileBasedOnInputAndResultsSearchGrid(string fileName, MacroStabilityInput input) { if (!(input.StabilityModel.ModelOption == StabilityModelOptionType.UpliftVan && input.StabilityModel.SearchAlgorithm == SearchAlgorithm.Beeswarm)) @@ -250,7 +255,7 @@ /// Name of the file. /// The input. /// The macro stability output. - public static void WriteStixFileBasedOnInputAndResultsSlipPlane(string fileName, MacroStabilityInput input, + private static void WriteStixFileBasedOnInputAndResultsSlipPlane(string fileName, MacroStabilityInput input, MacroStabilityOutput macroStabilityOutput) { if (macroStabilityOutput.CalculationResult == CalculationResult.Succeeded) @@ -342,5 +347,146 @@ macroStabilityOutputItem.PassiveCenterPointRadius; } } + + /// + /// Prepares the kernel. + /// + /// The calculator. + /// Name of the file. + /// + public static PrepareResult PrepareKernel(Calculator calculator, string fileName) + { + try + { + // For now a simple check to see if any data has been past at all. + var inputAsXml = calculator.KernelInputXml; + + File.WriteAllText(fileName, inputAsXml); + + if (inputAsXml.Length > 10) + { + return PrepareResult.Successful; + } + + return PrepareResult.Failed; + } + catch + { + return PrepareResult.Failed; + } + } + + /// + /// Validates the specified kernel data input. + /// + /// The kernel data input. + /// The kernel data output. + /// The return messages. + /// + /// Zero when there are no errors, one when there are errors that prevent a calculation + /// + public static int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) + { + MacroStabilityKernelDataInput macroStabilityKernelDataInput = (MacroStabilityKernelDataInput)kernelDataInput; + messages = new List(); + try + { + var result = new Validator(macroStabilityKernelDataInput.Input).Validate(); + if (result.IsValid) + { + return 0; + } + + if (kernelDataOutput != null) + { + ((MacroStabilityOutput)kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData; + } + + foreach (var resultMessage in result.Messages) + { + var message = new LogMessage + { + Message = resultMessage.Content + }; + switch (resultMessage.MessageType) + { + case MessageType.Error: + { + message.MessageType = LogMessageType.Error; + break; + } + case MessageType.Info: + { + message.MessageType = LogMessageType.Info; + break; + } + case MessageType.Warning: + { + message.MessageType = LogMessageType.Warning; + break; + } + } + + messages.Add(message); + } + + return 1; + } + catch (Exception e) + { + var message = new LogMessage { MessageType = LogMessageType.FatalError, Message = e.Message }; + messages.Add(message); + if (kernelDataOutput != null) + { + ((MacroStabilityOutput)kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData; + } + + return 1; + } + } + + /// + /// Performs the stability calculation. + /// + /// The input. + /// The macro stability output. + /// Name of the file. + /// The calculator. + /// The messages. + public static void PerformStabilityCalculation(MacroStabilityInput input, MacroStabilityOutput macroStabilityOutput, + string fileName, ICalculator calculator, out List messages) + { + macroStabilityOutput.CalculationResult = CalculationResult.NoRun; + macroStabilityOutput.StabilityOutputItems = new List(); + messages = new List(); + try + { + var macroStabilityOutputKernel = calculator.Calculate(); + FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(macroStabilityOutputKernel, macroStabilityOutput, + out messages); +#if DEBUG + foreach (var stabilityOutputItem in macroStabilityOutput.StabilityOutputItems) + { + switch (stabilityOutputItem.StabilityModelType) + { + case MStabModelType.Bishop: + input.StabilityModel.BishopCalculationCircle = stabilityOutputItem.BishopCalculationCircle; + break; + case MStabModelType.UpliftVan: + input.StabilityModel.UpliftVanCalculationGrid = stabilityOutputItem.UpliftVanCalculationGrid; + break; + } + + WriteStixFileBasedOnInputAndResultsSearchGrid(fileName, input); + } +#endif + WriteStixFileBasedOnInputAndResultsSlipPlane(fileName, input, macroStabilityOutput); + } + catch (Exception e) + { + macroStabilityOutput.CalculationResult = CalculationResult.UnexpectedError; + messages.Add(new LogMessage(LogMessageType.Error, null, e.Message)); + } + } } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r3800 -r3819 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3800) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3819) @@ -35,7 +35,6 @@ using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.Data.Standard.Calculation; using Deltares.MacroStability.CSharpWrapper; -using Deltares.MacroStability.CSharpWrapper.Input; using Deltares.MacroStability.CSharpWrapper.Output; using CharacteristicPointType = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointType; using GeometryPoint = Deltares.DamEngine.Data.Geometry.GeometryPoint; @@ -138,7 +137,7 @@ macroStabilityInput.Input = fillMacroStabilityWrapperFromEngine.CreateMacroStabilityInput(damKernelInput, FailureMechanismParametersMStab.MStabParameters, waterNet); fileNameForCalculation = MacroStabilityCommonHelper.GetStabilityInputFileName(damKernelInput, iterationIndex, FailureMechanismParametersMStab.MStabParameters.Model); stabilityCalculator = new Calculator(macroStabilityInput.Input); - var firstPrepareResult = PrepareKernel(stabilityCalculator, fileNameForCalculation); + var firstPrepareResult = MacroStabilityCommonHelper.PrepareKernel(stabilityCalculator, fileNameForCalculation); if (isBishopUpliftVan && upliftSituation.IsUplift && firstPrepareResult == PrepareResult.Successful) { @@ -151,7 +150,7 @@ FailureMechanismParametersMStab.MStabParameters.Model = MStabModelType.BishopUpliftVan; stabilityCalculatorForSecondCalculation = new Calculator(macroStabilityInput.Input); - return PrepareKernel(stabilityCalculatorForSecondCalculation, fileNameForSecondCalculation); + return MacroStabilityCommonHelper.PrepareKernel(stabilityCalculatorForSecondCalculation, fileNameForSecondCalculation); } if (isBishopUpliftVan) @@ -173,28 +172,6 @@ return PrepareResult.NotRelevant; } - private PrepareResult PrepareKernel(Calculator calculator, string fileName) - { - try - { - // For now a simple check to see if any data has been past at all. - var inputAsXml = calculator.KernelInputXml; - - File.WriteAllText(fileName, inputAsXml); - - if (inputAsXml.Length > 10) - { - return PrepareResult.Successful; - } - - return PrepareResult.Failed; - } - catch - { - return PrepareResult.Failed; - } - } - private MacroStabilityCommon.UpliftVanCalculationGrid FillUpliftVanCalculationGrid(DamKernelInput damKernelInput) { var slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification @@ -226,62 +203,7 @@ /// public int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { - MacroStabilityKernelDataInput macroStabilityKernelDataInput = (MacroStabilityKernelDataInput)kernelDataInput; - messages = new List(); - try - { - var result = new Validator(macroStabilityKernelDataInput.Input).Validate(); - if (result.IsValid) - { - return 0; - } - - if (kernelDataOutput != null) - { - ((MacroStabilityOutput)kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData; - } - - foreach (var resultMessage in result.Messages) - { - var message = new LogMessage - { - Message = resultMessage.Content - }; - switch (resultMessage.MessageType) - { - case MessageType.Error: - { - message.MessageType = LogMessageType.Error; - break; - } - case MessageType.Info: - { - message.MessageType = LogMessageType.Info; - break; - } - case MessageType.Warning: - { - message.MessageType = LogMessageType.Warning; - break; - } - } - - messages.Add(message); - } - - return 1; - } - catch (Exception e) - { - var message = new LogMessage { MessageType = LogMessageType.FatalError, Message = e.Message }; - messages.Add(message); - if (kernelDataOutput != null) - { - ((MacroStabilityOutput)kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData; - } - - return 1; - } + return MacroStabilityCommonHelper.Validate(kernelDataInput, kernelDataOutput, out messages); } /// @@ -303,7 +225,7 @@ macroStabilityKernelDataInput.Input.StabilityModel.ModelOption = StabilityModelOptionType.Bishop; } - PerformStabilityCalculation(macroStabilityKernelDataInput.Input, macroStabilityOutput, + MacroStabilityCommonHelper.PerformStabilityCalculation(macroStabilityKernelDataInput.Input, macroStabilityOutput, fileNameForCalculation, stabilityCalculator, out messages); var fileName = Path.GetFileNameWithoutExtension(fileNameForCalculation); foreach (var logMessage in messages) @@ -314,7 +236,7 @@ if (isBishopUpliftVan && macroStabilityOutput.UpliftSituation.IsUplift) { macroStabilityKernelDataInput.Input.StabilityModel.ModelOption = StabilityModelOptionType.UpliftVan; - PerformStabilityCalculation(macroStabilityKernelDataInput.Input, macroStabilityOutput, + MacroStabilityCommonHelper.PerformStabilityCalculation(macroStabilityKernelDataInput.Input, macroStabilityOutput, fileNameForSecondCalculation, stabilityCalculatorForSecondCalculation, out messages); fileName = Path.GetFileNameWithoutExtension(fileNameForSecondCalculation); foreach (var logMessage in messages) @@ -324,42 +246,6 @@ } } - private void PerformStabilityCalculation(MacroStabilityInput input, MacroStabilityOutput macroStabilityOutput, - string fileName, ICalculator calculator, out List messages) - { - macroStabilityOutput.CalculationResult = CalculationResult.NoRun; - macroStabilityOutput.StabilityOutputItems = new List(); - messages = new List(); - try - { - var macroStabilityOutputKernel = calculator.Calculate(); - FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(macroStabilityOutputKernel, macroStabilityOutput, - out messages); -#if DEBUG - foreach (var stabilityOutputItem in macroStabilityOutput.StabilityOutputItems) - { - switch (stabilityOutputItem.StabilityModelType) - { - case MStabModelType.Bishop: - input.StabilityModel.BishopCalculationCircle = stabilityOutputItem.BishopCalculationCircle; - break; - case MStabModelType.UpliftVan: - input.StabilityModel.UpliftVanCalculationGrid = stabilityOutputItem.UpliftVanCalculationGrid; - break; - } - - MacroStabilityCommonHelper.WriteStixFileBasedOnInputAndResultsSearchGrid(fileName, input); - } -#endif - MacroStabilityCommonHelper.WriteStixFileBasedOnInputAndResultsSlipPlane(fileName, input, macroStabilityOutput); - } - catch (Exception e) - { - macroStabilityOutput.CalculationResult = CalculationResult.UnexpectedError; - messages.Add(new LogMessage(LogMessageType.Error, null, e.Message)); - } - } - /// /// Fills the design results with the kernel output. /// @@ -376,24 +262,25 @@ var macroStabilityOutput = kernelDataOutput as MacroStabilityOutput; MacroStabilityCommonHelper.ThrowWhenMacroStabilityKernelOutputNull(macroStabilityOutput); designResults = new List(); - if (macroStabilityOutput?.StabilityOutputItems != null && macroStabilityOutput.StabilityOutputItems.Count > 0) + if (macroStabilityOutput == null) { - var macroStabilityOutputItem = macroStabilityOutput.StabilityOutputItems[0]; - if (macroStabilityOutputItem != null) - { - var designResult = MacroStabilityCommonHelper.NewDesignResult(damKernelInput, designScenario); - MacroStabilityCommonHelper.FillDesignResult(macroStabilityOutputItem, designResult); - designResult.StabilityDesignResults.NumberOfIterations = lastIterationIndex; - designResult.StabilityDesignResults.UpliftSituation = macroStabilityOutput.UpliftSituation; - designResults.Add(designResult); - } + return; } + var macroStabilityOutputItem = ProperMacroStabilityResultsItem(macroStabilityOutput, 0); + if (macroStabilityOutputItem != null) + { + var designResult = MacroStabilityCommonHelper.NewDesignResult(damKernelInput, designScenario); + MacroStabilityCommonHelper.FillDesignResult(macroStabilityOutputItem, designResult); + designResult.StabilityDesignResults.NumberOfIterations = lastIterationIndex; + designResult.StabilityDesignResults.UpliftSituation = macroStabilityOutput.UpliftSituation; + designResults.Add(designResult); + } var isBishopUpliftVan = FailureMechanismParametersMStab.MStabParameters.Model == MStabModelType.BishopUpliftVan; if (isBishopUpliftVan) { - MacroStabilityOutputItem macroStabilityOutputItem = null; - if (macroStabilityOutput != null && macroStabilityOutput.StabilityOutputItems != null && macroStabilityOutput.StabilityOutputItems.Count > 1) + macroStabilityOutputItem = ProperMacroStabilityResultsItem(macroStabilityOutput, 1); + if (macroStabilityOutputItem != null) { macroStabilityOutputItem = macroStabilityOutput.StabilityOutputItems[1]; if (macroStabilityOutputItem != null) @@ -435,21 +322,14 @@ index = 1; } - if (macroStabilityOutput != null) + macroStabilityOutputItem = ProperMacroStabilityResultsItem(macroStabilityOutput, index); + if (macroStabilityOutputItem != null) { - if (macroStabilityOutput.StabilityOutputItems != null) - { - macroStabilityOutputItem = macroStabilityOutput.StabilityOutputItems[index]; - } - - if (macroStabilityOutputItem != null) - { - var overallResult = MacroStabilityCommonHelper.NewDesignResult(damKernelInput, designScenario); - MacroStabilityCommonHelper.FillDesignResult(macroStabilityOutputItem, overallResult); - overallResult.StabilityDesignResults.UpliftSituation = macroStabilityOutput.UpliftSituation; - overallResult.StabilityDesignResults.StabilityModelType = MStabModelType.BishopUpliftVan; - designResults.Add(overallResult); - } + var overallResult = MacroStabilityCommonHelper.NewDesignResult(damKernelInput, designScenario); + MacroStabilityCommonHelper.FillDesignResult(macroStabilityOutputItem, overallResult); + overallResult.StabilityDesignResults.UpliftSituation = macroStabilityOutput.UpliftSituation; + overallResult.StabilityDesignResults.StabilityModelType = MStabModelType.BishopUpliftVan; + designResults.Add(overallResult); } } } @@ -583,5 +463,17 @@ return DesignStrategy.NoDesignPossible; } } + + private MacroStabilityOutputItem ProperMacroStabilityResultsItem(MacroStabilityOutput macroStabilityOutput, int requestedIndex) + { + MacroStabilityOutputItem macroStabilityOutputItem = null; + if (macroStabilityOutput?.StabilityOutputItems != null && + macroStabilityOutput.StabilityOutputItems.Count > requestedIndex && + macroStabilityOutput.StabilityOutputItems[requestedIndex] != null) + { + macroStabilityOutputItem = macroStabilityOutput.StabilityOutputItems[requestedIndex]; + } + return macroStabilityOutputItem; + } } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityOutwards/MacroStabilityOutwardsKernelWrapper.cs =================================================================== diff -u -r3800 -r3819 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityOutwards/MacroStabilityOutwardsKernelWrapper.cs (.../MacroStabilityOutwardsKernelWrapper.cs) (revision 3800) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityOutwards/MacroStabilityOutwardsKernelWrapper.cs (.../MacroStabilityOutwardsKernelWrapper.cs) (revision 3819) @@ -36,8 +36,6 @@ using Deltares.DamEngine.Data.Standard.Calculation; using Deltares.DamEngine.Data.Standard.Logging; using Deltares.MacroStability.CSharpWrapper; -using Deltares.MacroStability.CSharpWrapper.Input; -using Deltares.MacroStability.CSharpWrapper.Output; using CharacteristicPointType = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointType; using MacroStabilityOutput = Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards.MacroStabilityOutput; @@ -53,20 +51,20 @@ private string fileNameForCalculation; /// - /// Gets or sets the failure mechanisme paramaters for mstab. + /// Gets or sets the failure mechanism parameters for mstab. /// /// - /// The failure mechanisme paramaters mstab. + /// The failure mechanism parameters mstab. /// public FailureMechanismParametersMStab FailureMechanismParametersMStab { get; set; } /// /// Prepares the specified dam kernel input. /// /// The dam kernel input. - /// + /// The number of the current iteration. /// The kernel data input. - /// The kernel data output + /// The kernel data output. /// /// Result of the prepare /// @@ -116,7 +114,7 @@ macroStabilityInput.Input = fillMacroStabilityWrapperFromEngine.CreateMacroStabilityInput(damKernelInput, FailureMechanismParametersMStab.MStabParameters, waterNet); fileNameForCalculation = MacroStabilityCommonHelper.GetStabilityInputFileName(damKernelInput, iterationIndex, FailureMechanismParametersMStab.MStabParameters.Model); stabilityCalculator = new Calculator(macroStabilityInput.Input); - var firstPrepareResult = PrepareKernel(stabilityCalculator, fileNameForCalculation); + var firstPrepareResult = MacroStabilityCommonHelper.PrepareKernel(stabilityCalculator, fileNameForCalculation); return firstPrepareResult; } @@ -131,28 +129,6 @@ return PrepareResult.NotRelevant; } - private PrepareResult PrepareKernel(Calculator calculator, string fileName) - { - try - { - // For now a simple check to see if any data has been past at all. - var inputAsXml = calculator.KernelInputXml; - - File.WriteAllText(fileName, inputAsXml); - - if (inputAsXml.Length > 10) - { - return PrepareResult.Successful; - } - - return PrepareResult.Failed; - } - catch - { - return PrepareResult.Failed; - } - } - /// /// Validates the specified kernel data input. /// @@ -164,62 +140,7 @@ /// public int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { - MacroStabilityKernelDataInput macroStabilityKernelDataInput = (MacroStabilityKernelDataInput)kernelDataInput; - messages = new List(); - try - { - var result = new Validator(macroStabilityKernelDataInput.Input).Validate(); - if (result.IsValid) - { - return 0; - } - - if (kernelDataOutput != null) - { - ((MacroStabilityOutput)kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData; - } - - foreach (var resultMessage in result.Messages) - { - var message = new LogMessage - { - Message = resultMessage.Content - }; - switch (resultMessage.MessageType) - { - case MessageType.Error: - { - message.MessageType = LogMessageType.Error; - break; - } - case MessageType.Info: - { - message.MessageType = LogMessageType.Info; - break; - } - case MessageType.Warning: - { - message.MessageType = LogMessageType.Warning; - break; - } - } - - messages.Add(message); - } - - return 1; - } - catch (Exception e) - { - var message = new LogMessage { MessageType = LogMessageType.FatalError, Message = e.Message }; - messages.Add(message); - if (kernelDataOutput != null) - { - ((MacroStabilityOutput)kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData; - } - - return 1; - } + return MacroStabilityCommonHelper.Validate(kernelDataInput, kernelDataOutput, out messages); } /// @@ -235,7 +156,7 @@ MacroStabilityCommonHelper.ThrowWhenMacroStabilityKernelInputNull(macroStabilityKernelDataInput); MacroStabilityCommonHelper.ThrowWhenMacroStabilityKernelOutputNull(macroStabilityOutput); - PerformStabilityCalculation(macroStabilityKernelDataInput.Input, macroStabilityOutput, + MacroStabilityCommonHelper.PerformStabilityCalculation(macroStabilityKernelDataInput.Input, macroStabilityOutput, fileNameForCalculation, stabilityCalculator, out messages); var fileName = Path.GetFileNameWithoutExtension(fileNameForCalculation); foreach (var logMessage in messages) @@ -244,39 +165,12 @@ } } - private void PerformStabilityCalculation(MacroStabilityInput input, MacroStabilityOutput macroStabilityOutput, - string fileName, ICalculator calculator, out List messages) - { - macroStabilityOutput.CalculationResult = CalculationResult.NoRun; - macroStabilityOutput.StabilityOutputItems = new List(); - messages = new List(); - try - { - var macroStabilityOutputKernel = calculator.Calculate(); - FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(macroStabilityOutputKernel, macroStabilityOutput, - out messages); -#if DEBUG - foreach (var stabilityOutputItem in macroStabilityOutput.StabilityOutputItems) - { - input.StabilityModel.BishopCalculationCircle = stabilityOutputItem.BishopCalculationCircle; - MacroStabilityCommonHelper.WriteStixFileBasedOnInputAndResultsSearchGrid(fileName, input); - } -#endif - MacroStabilityCommonHelper.WriteStixFileBasedOnInputAndResultsSlipPlane(fileName, input, macroStabilityOutput); - } - catch (Exception e) - { - macroStabilityOutput.CalculationResult = CalculationResult.UnexpectedError; - messages.Add(new LogMessage(LogMessageType.Error, null, e.Message)); - } - } - /// /// Fills the design results with the kernel output. /// /// The dam kernel input. /// The kernel data output. - /// + /// The design scenario /// The result message. /// The design results. ///