Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs =================================================================== diff -u -r3893 -r4000 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 3893) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 4000) @@ -58,7 +58,7 @@ /// The dike embankment soil. public static void EnsureSoilProfile2DIsFilled(SoilGeometryProbability subSoilScenario, SurfaceLine2 surfaceLine2, Soil dikeEmbankmentSoil) { - var soilProfile2D = subSoilScenario.SoilProfile2D; + SoilProfile2D soilProfile2D = subSoilScenario.SoilProfile2D; if (soilProfile2D == null) { var soilSurfaceProfile = new SoilSurfaceProfile @@ -69,7 +69,7 @@ DikeEmbankmentMaterial = dikeEmbankmentSoil }; // Convert the soilSurfaceProfile to a SoilProfile2D to be able to edit it properly. - var soilProfile2DNew = soilSurfaceProfile.ConvertToSoilProfile2D(); + SoilProfile2D soilProfile2DNew = soilSurfaceProfile.ConvertToSoilProfile2D(); subSoilScenario.SoilProfile2D = soilProfile2DNew; subSoilScenario.SoilProfile2DName = soilProfile2DNew.Name; subSoilScenario.SoilProfileType = SoilProfileType.ProfileType2D; @@ -92,11 +92,12 @@ { Pressure = damKernelInput.Location.StabilityOptions.TrafficLoad.Value, XEnd = damKernelInput.Location.SurfaceLine - .CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).X, + .CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).X, XStart = damKernelInput.Location.SurfaceLine - .CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadOutside).X + .CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadOutside).X }; } + return trafficLoad; } @@ -107,20 +108,20 @@ /// public static BishopCalculationGrid FillBishopCalculationGrid(DamKernelInput damKernelInput) { - var slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification - .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; - var minimumCircleDepth = damKernelInput.DamFailureMechanismeCalculationSpecification - .FailureMechanismParametersMStab.MStabParameters.CalculationOptions.MinimalCircleDepth; - var gridPosition = damKernelInput.DamFailureMechanismeCalculationSpecification - .FailureMechanismParametersMStab.MStabParameters.GridPosition; - var bishopCalculationGrid = BishopGridCreator.DetermineGridsFromSettings(gridPosition, - slipCircleDefinition, damKernelInput.Location.SurfaceLine); - var centerOfLeftGridXCoordinate = (bishopCalculationGrid.GridXLeft + bishopCalculationGrid.GridXRight) * 0.5; - var soilProfile1DAtCenterOfLeftGridXCoordinate = + SlipCircleDefinition slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification + .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; + double minimumCircleDepth = damKernelInput.DamFailureMechanismeCalculationSpecification + .FailureMechanismParametersMStab.MStabParameters.CalculationOptions.MinimalCircleDepth; + MStabGridPosition gridPosition = damKernelInput.DamFailureMechanismeCalculationSpecification + .FailureMechanismParametersMStab.MStabParameters.GridPosition; + BishopCalculationGrid bishopCalculationGrid = BishopGridCreator.DetermineGridsFromSettings(gridPosition, + slipCircleDefinition, damKernelInput.Location.SurfaceLine); + double centerOfLeftGridXCoordinate = (bishopCalculationGrid.GridXLeft + bishopCalculationGrid.GridXRight) * 0.5; + SoilProfile1D soilProfile1DAtCenterOfLeftGridXCoordinate = damKernelInput.SubSoilScenario.DetermineSoilProfile1DAtX(centerOfLeftGridXCoordinate, damKernelInput.Location.SurfaceLine, - damKernelInput.Location.GetDikeEmbankmentSoil()); + damKernelInput.Location.GetDikeEmbankmentSoil()); BishopGridCreator.DetermineTangentLines(bishopCalculationGrid, slipCircleDefinition, - soilProfile1DAtCenterOfLeftGridXCoordinate, minimumCircleDepth); + soilProfile1DAtCenterOfLeftGridXCoordinate, minimumCircleDepth); return bishopCalculationGrid; } @@ -144,56 +145,6 @@ } /// - /// Determines the calculation filename. - /// - /// The filename prefix. - /// Name of the soil geometry. - /// Index of the iteration. - /// - private static string DetermineCalculationFilename(string filenamePrefix, string soilGeometryName, int iterationIndex) - { - string calculationName; - if (iterationIndex <= 0) - { - calculationName = $"{filenamePrefix}_Pro({soilGeometryName})"; - } - else - { - calculationName = $"{filenamePrefix}_Pro({soilGeometryName})_Ite({iterationIndex})"; - } - return Regex.Replace(calculationName, @"[\\\/:\*\?""'<>|.]", "_"); - } - - /// - /// Gets the stability calculation directory. - /// - /// The model. - /// The project working path. - /// - private static string GetStabilityCalculationDirectory(MStabModelType model, string projectWorkingPath) - { - string calculationBaseDirectory = projectWorkingPath; - var stabilitySubDir = GetCalculationSubDir(model); - string stabilityDirectory = Path.Combine(calculationBaseDirectory, stabilitySubDir); - if (!Directory.Exists(stabilityDirectory)) - Directory.CreateDirectory(stabilityDirectory); - return stabilityDirectory; - } - - /// - /// Gets the calculation sub dir. - /// - /// The model. - /// - private static string GetCalculationSubDir(MStabModelType model) - { - const string stabilitySubDir = @"Stability\"; - var modelSubDirectory = model.ToString(); - var dir = Path.Combine(stabilitySubDir, modelSubDirectory); - return dir; - } - - /// /// Throws the when macro stability kernel input is not assigned. /// /// The dam macro stability input. @@ -232,80 +183,17 @@ } } -#if DEBUG /// - /// Writes the stix file based on input and results search grid. - /// - /// Name of the file. - /// The input. - private static void WriteStixFileBasedOnInputAndResultsSearchGrid(string fileName, MacroStabilityInput input) - { - if (!(input.StabilityModel.ModelOption == StabilityModelOptionType.UpliftVan && - input.StabilityModel.SearchAlgorithm == SearchAlgorithm.Beeswarm)) - { - var fileNameForCalculationAsStix = DetermineStixFilename(fileName, "input"); - var inputStixFile = new StixWriter(); - inputStixFile.FillInfo("DAM Engine", Path.GetDirectoryName(fileName), - Path.GetFileName(fileName), true); - StixFileWrite(inputStixFile, fileNameForCalculationAsStix, input); - } - } -#endif - - /// - /// Writes the stix file based on input and results slip plane. - /// - /// Name of the file. - /// The input. - /// The macro stability output. - private static void WriteStixFileBasedOnInputAndResultsSlipPlane(string fileName, MacroStabilityInput input, - MacroStabilityOutput macroStabilityOutput) - { - if (macroStabilityOutput.CalculationResult == CalculationResult.Succeeded) - { - foreach (var macroStabilityOutputItem in macroStabilityOutput.StabilityOutputItems) - { - macroStabilityOutputItem.CalculationPath = Path.GetDirectoryName(fileName); - macroStabilityOutputItem.ProjectName = Path.GetFileName(fileName); - var fileNameForCalculationAsStix = DetermineStixFilename(fileName, "result"); - var resultStixWrite = new StixWriter(); - resultStixWrite.FillInfo("DAM Engine", macroStabilityOutputItem.CalculationPath, - macroStabilityOutputItem.ProjectName, true); - resultStixWrite.FillCalculatedCircle(macroStabilityOutputItem.ActiveCenterPoint.X, - macroStabilityOutputItem.ActiveCenterPoint.Z, - macroStabilityOutputItem.ActiveCenterPointRadius); - StixFileWrite(resultStixWrite, fileNameForCalculationAsStix, input); - } - } - } - - private static void StixFileWrite(StixWriter stixWriter, string fileName, MacroStabilityInput input) - { - if (File.Exists(fileName)) - { - File.Delete(fileName); - } - - stixWriter.WriteStixFile(fileName, input); - } - - private static string DetermineStixFilename(string fileNameForCalc, string suffix, string extension = ".stix") - { - return Path.Combine(Path.GetDirectoryName(fileNameForCalc) ?? string.Empty, - $"{Path.GetFileNameWithoutExtension(fileNameForCalc)}_{suffix}{extension}"); - } - - /// /// Creates new designresult. /// /// The dam kernel input. /// The design scenario. /// public static DesignResult NewDesignResult(DamKernelInput damKernelInput, DesignScenario designScenario) { - string soilProfile2DName = damKernelInput.SubSoilScenario.ToString(); + var soilProfile2DName = damKernelInput.SubSoilScenario.ToString(); var designResult = new DesignResult(damKernelInput.DamFailureMechanismeCalculationSpecification, - designScenario, damKernelInput.SubSoilScenario.SoilProfile1D, soilProfile2DName) + designScenario, damKernelInput.SubSoilScenario.SoilProfile1D, soilProfile2DName) { // initialize as failed CalculationResult = CalculationResult.RunFailed, @@ -336,8 +224,9 @@ { designResult.StabilityDesignResults.SafetyFactor = macroStabilityOutputItem.SafetyFactor; } + designResult.StabilityDesignResults.ActiveCenterPoint = - macroStabilityOutputItem.ActiveCenterPoint; + macroStabilityOutputItem.ActiveCenterPoint; designResult.StabilityDesignResults.ActiveCenterPointRadius = macroStabilityOutputItem.ActiveCenterPointRadius; designResult.StabilityDesignResults.ResultSlices = macroStabilityOutputItem.ResultSlices; @@ -362,7 +251,7 @@ try { // For now a simple check to see if any data has been past at all. - var inputAsXml = calculator.KernelInputXml; + string inputAsXml = calculator.KernelInputXml; File.WriteAllText(fileName, inputAsXml); @@ -390,22 +279,22 @@ /// public static int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { - MacroStabilityKernelDataInput macroStabilityKernelDataInput = (MacroStabilityKernelDataInput)kernelDataInput; + var macroStabilityKernelDataInput = (MacroStabilityKernelDataInput) kernelDataInput; messages = new List(); try { - var result = new Validator(macroStabilityKernelDataInput.Input).Validate(); + ValidationOutput result = new Validator(macroStabilityKernelDataInput.Input).Validate(); if (result.IsValid) { return 0; } if (kernelDataOutput != null) { - ((MacroStabilityOutput)kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData; + ((MacroStabilityOutput) kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData; } - foreach (var resultMessage in result.Messages) + foreach (Message resultMessage in result.Messages) { var message = new LogMessage { @@ -414,20 +303,20 @@ switch (resultMessage.MessageType) { case MessageType.Error: - { - message.MessageType = LogMessageType.Error; - break; - } + { + message.MessageType = LogMessageType.Error; + break; + } case MessageType.Info: - { - message.MessageType = LogMessageType.Info; - break; - } + { + message.MessageType = LogMessageType.Info; + break; + } case MessageType.Warning: - { - message.MessageType = LogMessageType.Warning; - break; - } + { + message.MessageType = LogMessageType.Warning; + break; + } } messages.Add(message); @@ -437,11 +326,15 @@ } catch (Exception e) { - var message = new LogMessage { MessageType = LogMessageType.FatalError, Message = e.Message }; + var message = new LogMessage + { + MessageType = LogMessageType.FatalError, + Message = e.Message + }; messages.Add(message); if (kernelDataOutput != null) { - ((MacroStabilityOutput)kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData; + ((MacroStabilityOutput) kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData; } return 1; @@ -457,18 +350,18 @@ /// The calculator. /// The messages. public static void PerformStabilityCalculation(MacroStabilityInput input, MacroStabilityOutput macroStabilityOutput, - string fileName, ICalculator calculator, out List messages) + string fileName, ICalculator calculator, out List messages) { macroStabilityOutput.CalculationResult = CalculationResult.NoRun; macroStabilityOutput.StabilityOutputItems = new List(); messages = new List(); try { - var macroStabilityOutputKernel = calculator.Calculate(); + MacroStability.CSharpWrapper.Output.MacroStabilityOutput macroStabilityOutputKernel = calculator.Calculate(); FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(macroStabilityOutputKernel, macroStabilityOutput, - out messages); + out messages); #if DEBUG - foreach (var stabilityOutputItem in macroStabilityOutput.StabilityOutputItems) + foreach (MacroStabilityOutputItem stabilityOutputItem in macroStabilityOutput.StabilityOutputItems) { switch (stabilityOutputItem.StabilityModelType) { @@ -491,5 +384,122 @@ messages.Add(new LogMessage(LogMessageType.Error, null, e.Message)); } } + + /// + /// Determines the calculation filename. + /// + /// The filename prefix. + /// Name of the soil geometry. + /// Index of the iteration. + /// + private static string DetermineCalculationFilename(string filenamePrefix, string soilGeometryName, int iterationIndex) + { + string calculationName; + if (iterationIndex <= 0) + { + calculationName = $"{filenamePrefix}_Pro({soilGeometryName})"; + } + else + { + calculationName = $"{filenamePrefix}_Pro({soilGeometryName})_Ite({iterationIndex})"; + } + + return Regex.Replace(calculationName, @"[\\\/:\*\?""'<>|.]", "_"); + } + + /// + /// Gets the stability calculation directory. + /// + /// The model. + /// The project working path. + /// + private static string GetStabilityCalculationDirectory(MStabModelType model, string projectWorkingPath) + { + string calculationBaseDirectory = projectWorkingPath; + string stabilitySubDir = GetCalculationSubDir(model); + string stabilityDirectory = Path.Combine(calculationBaseDirectory, stabilitySubDir); + if (!Directory.Exists(stabilityDirectory)) + { + Directory.CreateDirectory(stabilityDirectory); + } + + return stabilityDirectory; + } + + /// + /// Gets the calculation sub dir. + /// + /// The model. + /// + private static string GetCalculationSubDir(MStabModelType model) + { + const string stabilitySubDir = @"Stability\"; + var modelSubDirectory = model.ToString(); + string dir = Path.Combine(stabilitySubDir, modelSubDirectory); + return dir; + } + +#if DEBUG + /// + /// Writes the stix file based on input and results search grid. + /// + /// Name of the file. + /// The input. + private static void WriteStixFileBasedOnInputAndResultsSearchGrid(string fileName, MacroStabilityInput input) + { + if (!(input.StabilityModel.ModelOption == StabilityModelOptionType.UpliftVan && + input.StabilityModel.SearchAlgorithm == SearchAlgorithm.Beeswarm)) + { + string fileNameForCalculationAsStix = DetermineStixFilename(fileName, "input"); + var inputStixFile = new StixWriter(); + inputStixFile.FillInfo("DAM Engine", Path.GetDirectoryName(fileName), + Path.GetFileName(fileName), true); + StixFileWrite(inputStixFile, fileNameForCalculationAsStix, input); + } + } +#endif + + /// + /// Writes the stix file based on input and results slip plane. + /// + /// Name of the file. + /// The input. + /// The macro stability output. + private static void WriteStixFileBasedOnInputAndResultsSlipPlane(string fileName, MacroStabilityInput input, + MacroStabilityOutput macroStabilityOutput) + { + if (macroStabilityOutput.CalculationResult == CalculationResult.Succeeded) + { + foreach (MacroStabilityOutputItem macroStabilityOutputItem in macroStabilityOutput.StabilityOutputItems) + { + macroStabilityOutputItem.CalculationPath = Path.GetDirectoryName(fileName); + macroStabilityOutputItem.ProjectName = Path.GetFileName(fileName); + string fileNameForCalculationAsStix = DetermineStixFilename(fileName, "result"); + var resultStixWrite = new StixWriter(); + resultStixWrite.FillInfo("DAM Engine", macroStabilityOutputItem.CalculationPath, + macroStabilityOutputItem.ProjectName, true); + resultStixWrite.FillCalculatedCircle(macroStabilityOutputItem.ActiveCenterPoint.X, + macroStabilityOutputItem.ActiveCenterPoint.Z, + macroStabilityOutputItem.ActiveCenterPointRadius); + StixFileWrite(resultStixWrite, fileNameForCalculationAsStix, input); + } + } + } + + private static void StixFileWrite(StixWriter stixWriter, string fileName, MacroStabilityInput input) + { + if (File.Exists(fileName)) + { + File.Delete(fileName); + } + + stixWriter.WriteStixFile(fileName, input); + } + + private static string DetermineStixFilename(string fileNameForCalc, string suffix, string extension = ".stix") + { + return Path.Combine(Path.GetDirectoryName(fileNameForCalc) ?? string.Empty, + $"{Path.GetFileNameWithoutExtension(fileNameForCalc)}_{suffix}{extension}"); + } } -} +} \ No newline at end of file