Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs
===================================================================
diff -u -r4000 -r4052
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 4000)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 4052)
@@ -43,463 +43,462 @@
using MacroStabilityOutput = Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards.MacroStabilityOutput;
using Soil = Deltares.DamEngine.Data.Geotechnics.Soil;
-namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon
+namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon;
+
+///
+/// Class with helper methods for the Macro Stability Wrappers.
+///
+public static class MacroStabilityCommonHelper
{
///
- /// Class with helper methods for the Macro Stability Wrappers.
+ /// Ensures the soil profile2d is filled.
///
- public static class MacroStabilityCommonHelper
+ /// The sub soil scenario.
+ /// The surface line2.
+ /// The dike embankment soil.
+ public static void EnsureSoilProfile2DIsFilled(SoilGeometryProbability subSoilScenario, SurfaceLine2 surfaceLine2, Soil dikeEmbankmentSoil)
{
- ///
- /// Ensures the soil profile2d is filled.
- ///
- /// The sub soil scenario.
- /// The surface line2.
- /// The dike embankment soil.
- public static void EnsureSoilProfile2DIsFilled(SoilGeometryProbability subSoilScenario, SurfaceLine2 surfaceLine2, Soil dikeEmbankmentSoil)
+ SoilProfile2D soilProfile2D = subSoilScenario.SoilProfile2D;
+ if (soilProfile2D == null)
{
- SoilProfile2D soilProfile2D = subSoilScenario.SoilProfile2D;
- if (soilProfile2D == null)
+ var soilSurfaceProfile = new SoilSurfaceProfile
{
- var soilSurfaceProfile = new SoilSurfaceProfile
- {
- SoilProfile = subSoilScenario.SoilProfile1D,
- SurfaceLine2 = surfaceLine2,
- Name = subSoilScenario.SoilProfile1D.Name,
- DikeEmbankmentMaterial = dikeEmbankmentSoil
- };
- // Convert the soilSurfaceProfile to a SoilProfile2D to be able to edit it properly.
- SoilProfile2D soilProfile2DNew = soilSurfaceProfile.ConvertToSoilProfile2D();
- subSoilScenario.SoilProfile2D = soilProfile2DNew;
- subSoilScenario.SoilProfile2DName = soilProfile2DNew.Name;
- subSoilScenario.SoilProfileType = SoilProfileType.ProfileType2D;
- subSoilScenario.SoilProfile1D = null;
- }
+ SoilProfile = subSoilScenario.SoilProfile1D,
+ SurfaceLine2 = surfaceLine2,
+ Name = subSoilScenario.SoilProfile1D.Name,
+ DikeEmbankmentMaterial = dikeEmbankmentSoil
+ };
+ // Convert the soilSurfaceProfile to a SoilProfile2D to be able to edit it properly.
+ SoilProfile2D soilProfile2DNew = soilSurfaceProfile.ConvertToSoilProfile2D();
+ subSoilScenario.SoilProfile2D = soilProfile2DNew;
+ subSoilScenario.SoilProfile2DName = soilProfile2DNew.Name;
+ subSoilScenario.SoilProfileType = SoilProfileType.ProfileType2D;
+ subSoilScenario.SoilProfile1D = null;
}
+ }
- ///
- /// Fills the traffic load.
- ///
- /// The dam kernel input.
- ///
- public static TrafficLoad FillTrafficLoad(DamKernelInput damKernelInput)
+ ///
+ /// Fills the traffic load.
+ ///
+ /// The dam kernel input.
+ ///
+ public static TrafficLoad FillTrafficLoad(DamKernelInput damKernelInput)
+ {
+ TrafficLoad trafficLoad = null;
+ if (damKernelInput.Location.StabilityOptions != null && damKernelInput.Location.StabilityOptions.TrafficLoad.HasValue &&
+ !(Math.Abs(damKernelInput.Location.StabilityOptions.TrafficLoad.Value) < 1e-6))
{
- TrafficLoad trafficLoad = null;
- if (damKernelInput.Location.StabilityOptions != null && damKernelInput.Location.StabilityOptions.TrafficLoad.HasValue &&
- !(Math.Abs(damKernelInput.Location.StabilityOptions.TrafficLoad.Value) < 1e-6))
+ trafficLoad = new TrafficLoad
{
- trafficLoad = new TrafficLoad
- {
- Pressure = damKernelInput.Location.StabilityOptions.TrafficLoad.Value,
- XEnd = damKernelInput.Location.SurfaceLine
- .CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).X,
- XStart = damKernelInput.Location.SurfaceLine
- .CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadOutside).X
- };
- }
-
- return trafficLoad;
+ Pressure = damKernelInput.Location.StabilityOptions.TrafficLoad.Value,
+ XEnd = damKernelInput.Location.SurfaceLine
+ .CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadInside).X,
+ XStart = damKernelInput.Location.SurfaceLine
+ .CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.TrafficLoadOutside).X
+ };
}
- ///
- /// Fills the bishop calculation grid.
- ///
- /// The dam kernel input.
- ///
- public static BishopCalculationGrid FillBishopCalculationGrid(DamKernelInput damKernelInput)
- {
- 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());
- BishopGridCreator.DetermineTangentLines(bishopCalculationGrid, slipCircleDefinition,
- soilProfile1DAtCenterOfLeftGridXCoordinate, minimumCircleDepth);
+ return trafficLoad;
+ }
- return bishopCalculationGrid;
- }
+ ///
+ /// Fills the bishop calculation grid.
+ ///
+ /// The dam kernel input.
+ ///
+ public static BishopCalculationGrid FillBishopCalculationGrid(DamKernelInput damKernelInput)
+ {
+ 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());
+ BishopGridCreator.DetermineTangentLines(bishopCalculationGrid, slipCircleDefinition,
+ soilProfile1DAtCenterOfLeftGridXCoordinate, minimumCircleDepth);
- ///
- /// Gets the name of the stability input file.
- ///
- /// The dam kernel input.
- /// Index of the iteration.
- /// The model.
- ///
- public static string GetStabilityInputFileName(DamKernelInput damKernelInput, int iterationIndex, MStabModelType model)
+ return bishopCalculationGrid;
+ }
+
+ ///
+ /// Gets the name of the stability input file.
+ ///
+ /// The dam kernel input.
+ /// Index of the iteration.
+ /// The model.
+ ///
+ public static string GetStabilityInputFileName(DamKernelInput damKernelInput, int iterationIndex, MStabModelType model)
+ {
+ // Assume 2D sti-file, then check on type being 1D
+ string soilGeometryName = damKernelInput.SubSoilScenario.SoilProfile2DName;
+ string calculationName = DetermineCalculationFilename(damKernelInput.FilenamePrefix, soilGeometryName, iterationIndex);
+ const string filenameExtension = ".skx";
+ string fileName = calculationName + filenameExtension;
+ string stabilityDirectory = GetStabilityCalculationDirectory(model, damKernelInput.CalculationDir);
+ return Path.Combine(stabilityDirectory, fileName);
+ }
+
+ ///
+ /// Throws the when macro stability kernel input is not assigned.
+ ///
+ /// The dam macro stability input.
+ ///
+ public static void ThrowWhenMacroStabilityKernelInputNull(MacroStabilityKernelDataInput macroStabilityKernelDataInput)
+ {
+ if (macroStabilityKernelDataInput == null)
{
- // Assume 2D sti-file, then check on type being 1D
- string soilGeometryName = damKernelInput.SubSoilScenario.SoilProfile2DName;
- string calculationName = DetermineCalculationFilename(damKernelInput.FilenamePrefix, soilGeometryName, iterationIndex);
- const string filenameExtension = ".skx";
- string fileName = calculationName + filenameExtension;
- string stabilityDirectory = GetStabilityCalculationDirectory(model, damKernelInput.CalculationDir);
- return Path.Combine(stabilityDirectory, fileName);
+ throw new NoNullAllowedException(Resources.MacroStabilityKernelWrapper_NoMacroStabilityInputObjectDefined);
}
+ }
- ///
- /// Throws the when macro stability kernel input is not assigned.
- ///
- /// The dam macro stability input.
- ///
- public static void ThrowWhenMacroStabilityKernelInputNull(MacroStabilityKernelDataInput macroStabilityKernelDataInput)
+ ///
+ /// Throws the when macro stability kernel output is not assigned.
+ ///
+ /// The dam macro stability output.
+ ///
+ public static void ThrowWhenMacroStabilityKernelOutputNull(MacroStabilityOutput macroStabilityOutput)
+ {
+ if (macroStabilityOutput == null)
{
- if (macroStabilityKernelDataInput == null)
- {
- throw new NoNullAllowedException(Resources.MacroStabilityKernelWrapper_NoMacroStabilityInputObjectDefined);
- }
+ throw new NoNullAllowedException(Resources.MacroStabilityKernelWrapper_NoMacroStabilityOutputObjectDefined);
}
+ }
- ///
- /// Throws the when macro stability kernel output is not assigned.
- ///
- /// The dam macro stability output.
- ///
- public static void ThrowWhenMacroStabilityKernelOutputNull(MacroStabilityOutput macroStabilityOutput)
+ ///
+ /// Throws the when macro stability dam kernel input is not assigned.
+ ///
+ /// The dam kernel input.
+ ///
+ public static void ThrowWhenMacroStabilityDamKernelInputNull(DamKernelInput damKernelInput)
+ {
+ if (damKernelInput == null)
{
- if (macroStabilityOutput == null)
- {
- throw new NoNullAllowedException(Resources.MacroStabilityKernelWrapper_NoMacroStabilityOutputObjectDefined);
- }
+ throw new NoNullAllowedException(Resources.MacroStabilityKernelWrapper_NoDamInputObjectDefinedForMacroStability);
}
+ }
- ///
- /// Throws the when macro stability dam kernel input is not assigned.
- ///
- /// The dam kernel input.
- ///
- public static void ThrowWhenMacroStabilityDamKernelInputNull(DamKernelInput damKernelInput)
+ ///
+ /// Creates new designresult.
+ ///
+ /// The dam kernel input.
+ /// The design scenario.
+ ///
+ public static DesignResult NewDesignResult(DamKernelInput damKernelInput, DesignScenario designScenario)
+ {
+ var soilProfile2DName = damKernelInput.SubSoilScenario.ToString();
+ var designResult = new DesignResult(damKernelInput.DamFailureMechanismeCalculationSpecification,
+ designScenario, damKernelInput.SubSoilScenario.SoilProfile1D, soilProfile2DName)
{
- if (damKernelInput == null)
- {
- throw new NoNullAllowedException(Resources.MacroStabilityKernelWrapper_NoDamInputObjectDefinedForMacroStability);
- }
+ // initialize as failed
+ CalculationResult = CalculationResult.RunFailed,
+ StabilityDesignResults = new StabilityDesignResults()
+ };
+ var stabilityDesignResults = new StabilityDesignResults
+ {
+ RedesignedSurfaceLine = damKernelInput.Location.SurfaceLine
+ };
+ designResult.ProfileName = soilProfile2DName;
+ designResult.StabilityDesignResults = stabilityDesignResults;
+ designResult.CalculationSubDir = damKernelInput.CalculationDir;
+ return designResult;
+ }
+
+ ///
+ /// Fills the design result.
+ ///
+ /// The macro stability output item.
+ /// The design result.
+ public static void FillDesignResult(MacroStabilityOutputItem macroStabilityOutputItem, DesignResult designResult)
+ {
+ designResult.BaseFileName = Path.GetFileNameWithoutExtension(macroStabilityOutputItem.ProjectName);
+ designResult.CalculationSubDir = macroStabilityOutputItem.CalculationPath;
+ designResult.CalculationResult = macroStabilityOutputItem.CalculationResult;
+ designResult.StabilityDesignResults.StabilityModelType = macroStabilityOutputItem.StabilityModelType;
+ if (designResult.CalculationResult == CalculationResult.Succeeded)
+ {
+ designResult.StabilityDesignResults.SafetyFactor = macroStabilityOutputItem.SafetyFactor;
}
- ///
- /// Creates new designresult.
- ///
- /// The dam kernel input.
- /// The design scenario.
- ///
- public static DesignResult NewDesignResult(DamKernelInput damKernelInput, DesignScenario designScenario)
+ designResult.StabilityDesignResults.ActiveCenterPoint =
+ macroStabilityOutputItem.ActiveCenterPoint;
+ designResult.StabilityDesignResults.ActiveCenterPointRadius =
+ macroStabilityOutputItem.ActiveCenterPointRadius;
+ designResult.StabilityDesignResults.ResultSlices = macroStabilityOutputItem.ResultSlices;
+ if (macroStabilityOutputItem.StabilityModelType == MStabModelType.UpliftVan ||
+ macroStabilityOutputItem.StabilityModelType == MStabModelType.BishopUpliftVan)
{
- var soilProfile2DName = damKernelInput.SubSoilScenario.ToString();
- var designResult = new DesignResult(damKernelInput.DamFailureMechanismeCalculationSpecification,
- designScenario, damKernelInput.SubSoilScenario.SoilProfile1D, soilProfile2DName)
- {
- // initialize as failed
- CalculationResult = CalculationResult.RunFailed,
- StabilityDesignResults = new StabilityDesignResults()
- };
- var stabilityDesignResults = new StabilityDesignResults
- {
- RedesignedSurfaceLine = damKernelInput.Location.SurfaceLine
- };
- designResult.ProfileName = soilProfile2DName;
- designResult.StabilityDesignResults = stabilityDesignResults;
- designResult.CalculationSubDir = damKernelInput.CalculationDir;
- return designResult;
+ designResult.StabilityDesignResults.PassiveCenterPoint =
+ macroStabilityOutputItem.PassiveCenterPoint;
+ designResult.StabilityDesignResults.PassiveCenterPointRadius =
+ macroStabilityOutputItem.PassiveCenterPointRadius;
}
+ }
- ///
- /// Fills the design result.
- ///
- /// The macro stability output item.
- /// The design result.
- public static void FillDesignResult(MacroStabilityOutputItem macroStabilityOutputItem, DesignResult designResult)
+ ///
+ /// Prepares the kernel.
+ ///
+ /// The calculator.
+ /// Name of the file.
+ ///
+ public static PrepareResult PrepareKernel(Calculator calculator, string fileName)
+ {
+ try
{
- designResult.BaseFileName = Path.GetFileNameWithoutExtension(macroStabilityOutputItem.ProjectName);
- designResult.CalculationSubDir = macroStabilityOutputItem.CalculationPath;
- designResult.CalculationResult = macroStabilityOutputItem.CalculationResult;
- designResult.StabilityDesignResults.StabilityModelType = macroStabilityOutputItem.StabilityModelType;
- if (designResult.CalculationResult == CalculationResult.Succeeded)
- {
- designResult.StabilityDesignResults.SafetyFactor = macroStabilityOutputItem.SafetyFactor;
- }
+ // For now a simple check to see if any data has been past at all.
+ string inputAsXml = calculator.KernelInputXml;
- designResult.StabilityDesignResults.ActiveCenterPoint =
- macroStabilityOutputItem.ActiveCenterPoint;
- designResult.StabilityDesignResults.ActiveCenterPointRadius =
- macroStabilityOutputItem.ActiveCenterPointRadius;
- designResult.StabilityDesignResults.ResultSlices = macroStabilityOutputItem.ResultSlices;
- if (macroStabilityOutputItem.StabilityModelType == MStabModelType.UpliftVan ||
- macroStabilityOutputItem.StabilityModelType == MStabModelType.BishopUpliftVan)
+ File.WriteAllText(fileName, inputAsXml);
+
+ if (inputAsXml.Length > 10)
{
- designResult.StabilityDesignResults.PassiveCenterPoint =
- macroStabilityOutputItem.PassiveCenterPoint;
- designResult.StabilityDesignResults.PassiveCenterPointRadius =
- macroStabilityOutputItem.PassiveCenterPointRadius;
+ return PrepareResult.Successful;
}
+
+ return PrepareResult.Failed;
}
+ catch
+ {
+ return PrepareResult.Failed;
+ }
+ }
- ///
- /// Prepares the kernel.
- ///
- /// The calculator.
- /// Name of the file.
- ///
- public static PrepareResult PrepareKernel(Calculator calculator, string fileName)
+ ///
+ /// 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)
+ {
+ var macroStabilityKernelDataInput = (MacroStabilityKernelDataInput) kernelDataInput;
+ messages = new List();
+ try
{
- try
+ ValidationOutput result = new Validator(macroStabilityKernelDataInput.Input).Validate();
+ if (result.IsValid)
{
- // For now a simple check to see if any data has been past at all.
- string inputAsXml = calculator.KernelInputXml;
-
- File.WriteAllText(fileName, inputAsXml);
-
- if (inputAsXml.Length > 10)
- {
- return PrepareResult.Successful;
- }
-
- return PrepareResult.Failed;
+ return 0;
}
- catch
+
+ if (kernelDataOutput != null)
{
- return PrepareResult.Failed;
+ ((MacroStabilityOutput) kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData;
}
- }
- ///
- /// 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)
- {
- var macroStabilityKernelDataInput = (MacroStabilityKernelDataInput) kernelDataInput;
- messages = new List();
- try
+ foreach (Message resultMessage in result.Messages)
{
- ValidationOutput result = new Validator(macroStabilityKernelDataInput.Input).Validate();
- if (result.IsValid)
+ var message = new LogMessage
{
- return 0;
- }
-
- if (kernelDataOutput != null)
+ Message = resultMessage.Content
+ };
+ switch (resultMessage.MessageType)
{
- ((MacroStabilityOutput) kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData;
- }
-
- foreach (Message resultMessage in result.Messages)
- {
- var message = new LogMessage
+ case MessageType.Error:
{
- Message = resultMessage.Content
- };
- switch (resultMessage.MessageType)
+ message.MessageType = LogMessageType.Error;
+ break;
+ }
+ case MessageType.Info:
{
- case MessageType.Error:
- {
- message.MessageType = LogMessageType.Error;
- break;
- }
- case MessageType.Info:
- {
- message.MessageType = LogMessageType.Info;
- break;
- }
- case MessageType.Warning:
- {
- message.MessageType = LogMessageType.Warning;
- break;
- }
+ message.MessageType = LogMessageType.Info;
+ break;
}
-
- messages.Add(message);
+ case MessageType.Warning:
+ {
+ message.MessageType = LogMessageType.Warning;
+ break;
+ }
}
- 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
- {
- MacroStability.CSharpWrapper.Output.MacroStabilityOutput macroStabilityOutputKernel = calculator.Calculate();
- FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(macroStabilityOutputKernel, macroStabilityOutput,
- out messages);
-#if DEBUG
- foreach (MacroStabilityOutputItem 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));
- }
+ return 1;
}
-
- ///
- /// 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)
+ catch (Exception e)
{
- string calculationName;
- if (iterationIndex <= 0)
+ var message = new LogMessage
{
- calculationName = $"{filenamePrefix}_Pro({soilGeometryName})";
- }
- else
+ MessageType = LogMessageType.FatalError,
+ Message = e.Message
+ };
+ messages.Add(message);
+ if (kernelDataOutput != null)
{
- calculationName = $"{filenamePrefix}_Pro({soilGeometryName})_Ite({iterationIndex})";
+ ((MacroStabilityOutput) kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData;
}
- return Regex.Replace(calculationName, @"[\\\/:\*\?""'<>|.]", "_");
+ return 1;
}
+ }
- ///
- /// Gets the stability calculation directory.
- ///
- /// The model.
- /// The project working path.
- ///
- private static string GetStabilityCalculationDirectory(MStabModelType model, string projectWorkingPath)
+ ///
+ /// 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
{
- string calculationBaseDirectory = projectWorkingPath;
- string stabilitySubDir = GetCalculationSubDir(model);
- string stabilityDirectory = Path.Combine(calculationBaseDirectory, stabilitySubDir);
- if (!Directory.Exists(stabilityDirectory))
+ MacroStability.CSharpWrapper.Output.MacroStabilityOutput macroStabilityOutputKernel = calculator.Calculate();
+ FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(macroStabilityOutputKernel, macroStabilityOutput,
+ out messages);
+#if DEBUG
+ foreach (MacroStabilityOutputItem stabilityOutputItem in macroStabilityOutput.StabilityOutputItems)
{
- Directory.CreateDirectory(stabilityDirectory);
+ 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));
+ }
+ }
- return stabilityDirectory;
+ ///
+ /// 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})";
+ }
- ///
- /// Gets the calculation sub dir.
- ///
- /// The model.
- ///
- private static string GetCalculationSubDir(MStabModelType model)
+ 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))
{
- const string stabilitySubDir = @"Stability\";
- var modelSubDirectory = model.ToString();
- string dir = Path.Combine(stabilitySubDir, modelSubDirectory);
- return dir;
+ 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)
+ ///
+ /// 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))
{
- 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);
- }
+ 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)
+ ///
+ /// 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)
{
- if (macroStabilityOutput.CalculationResult == CalculationResult.Succeeded)
+ foreach (MacroStabilityOutputItem macroStabilityOutputItem in macroStabilityOutput.StabilityOutputItems)
{
- 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);
- }
+ 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)
+ private static void StixFileWrite(StixWriter stixWriter, string fileName, MacroStabilityInput input)
+ {
+ if (File.Exists(fileName))
{
- if (File.Exists(fileName))
- {
- File.Delete(fileName);
- }
-
- stixWriter.WriteStixFile(fileName, input);
+ File.Delete(fileName);
}
- private static string DetermineStixFilename(string fileNameForCalc, string suffix, string extension = ".stix")
- {
- return Path.Combine(Path.GetDirectoryName(fileNameForCalc) ?? string.Empty,
- $"{Path.GetFileNameWithoutExtension(fileNameForCalc)}_{suffix}{extension}");
- }
+ 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