Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs
===================================================================
diff -u -r6420 -r6479
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 6420)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 6479)
@@ -37,16 +37,17 @@
using Deltares.DamEngine.Data.Geometry;
using Deltares.DamEngine.Data.Geotechnics;
using Deltares.DamEngine.Data.Standard.Calculation;
-using Deltares.DamEngine.Data.Standard.Language;
using Deltares.DamEngine.Data.Standard.Logging;
-using Deltares.MacroStability.CSharpWrapper;
-using Deltares.MacroStability.CSharpWrapper.Input;
-using Deltares.MacroStability.CSharpWrapper.Output;
-using Deltares.StixFileWriter;
+using Deltares.MacroStability.Data;
+using Deltares.MacroStability.Interface;
+using Deltares.MacroStability.Io;
+using Deltares.MacroStability.Io.XmlOutput;
+using Deltares.MacroStability.Io.XmlValidationOutput;
using CharacteristicPointType = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointType;
using MacroStabilityOutput = Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards.MacroStabilityOutput;
using Point2D = Deltares.DamEngine.Data.Geometry.Point2D;
using Soil = Deltares.DamEngine.Data.Geotechnics.Soil;
+using SoilProfileType = Deltares.DamEngine.Data.General.SoilProfileType;
namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon;
@@ -293,16 +294,14 @@
/// The calculator.
/// Name of the file.
///
- public static PrepareResult PrepareKernel(Calculator calculator, string fileName)
+ public static PrepareResult PrepareKernel(MacroStabilityInterface calculator, string fileName)
{
try
{
// For now a simple check to see if any data has been past at all.
- string inputAsXml = calculator.KernelInputXml;
+ string inputAsXml = calculator.KernelModel.ToString();
- File.WriteAllText(fileName, inputAsXml);
-
- if (inputAsXml.Length > 10)
+ if (inputAsXml is { Length: > 10 })
{
return PrepareResult.Successful;
}
@@ -327,12 +326,26 @@
public static int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages)
{
var macroStabilityKernelDataInput = (MacroStabilityKernelDataInput) kernelDataInput;
- messages = new List();
-
+ messages = [];
+ if (macroStabilityKernelDataInput.Input.StabilityModel == null || macroStabilityKernelDataInput.Input.PreprocessingInput == null)
+ {
+ var message = new LogMessage
+ {
+ Message = "De invoer voor de berekening met de stabiliteits kernel is incompleet.",
+ MessageType = LogMessageType.Error
+ };
+ messages.Add(message);
+ if (kernelDataOutput != null)
+ {
+ ((MacroStabilityOutput) kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData;
+ }
+ return 1;
+ }
+ var macroStabilityInterface = new MacroStabilityInterface(macroStabilityKernelDataInput.Input);
try
{
- ValidationOutput result = new Validator(macroStabilityKernelDataInput.Input).Validate();
- if (result.IsValid)
+ var result = macroStabilityInterface.Validate(out ValidationOutputType validationOutput);
+ if (result)
{
return 0;
}
@@ -342,25 +355,25 @@
((MacroStabilityOutput) kernelDataOutput).CalculationResult = CalculationResult.InvalidInputData;
}
- foreach (Message resultMessage in result.Messages)
+ foreach (var resultMessage in validationOutput.Messages)
{
var message = new LogMessage
{
- Message = resultMessage.Content
+ Message = resultMessage.Message
};
switch (resultMessage.MessageType)
{
- case MessageType.Error:
+ case Deltares.MacroStability.Io.XmlValidationOutput.MessageType.Error:
{
message.MessageType = LogMessageType.Error;
break;
}
- case MessageType.Info:
+ case Deltares.MacroStability.Io.XmlValidationOutput.MessageType.Info:
{
message.MessageType = LogMessageType.Info;
break;
}
- case MessageType.Warning:
+ case Deltares.MacroStability.Io.XmlValidationOutput.MessageType.Warning:
{
message.MessageType = LogMessageType.Warning;
break;
@@ -393,12 +406,18 @@
/// Performs the stability calculation.
///
/// The input.
+ ///
/// The macro stability output.
/// Name of the file.
/// The calculator.
/// The error messages.
- public void PerformStabilityCalculation(MacroStabilityInput input, MacroStabilityOutput macroStabilityOutput,
- string fileName, Calculator calculator, out List errorMessages)
+ ///
+ ///
+ ///
+ public void PerformStabilityCalculation(DamKernelInput damKernelInput, MStabParameters mStabParameters,
+ Waternet waterNet, double xCoordinateLowestUpliftFactorPoint,
+ MacroStabilityOutput macroStabilityOutput, string fileName,
+ MacroStabilityInterface calculator, out List errorMessages)
{
macroStabilityOutput.CalculationResult = CalculationResult.NoRun;
macroStabilityOutput.StabilityOutputItems ??= [];
@@ -408,12 +427,12 @@
{
//string helperFile = fileName.Replace(".skx", ".testIn.xml");
//calculator.FileName = helperFile;
- MacroStability.CSharpWrapper.Output.MacroStabilityOutput macroStabilityOutputKernel = calculator.Calculate();
- string outputAsXml = calculator.KernelOutputXml;
+ FullOutputModelType output;
+ Result result = calculator.Calculate(out output);
+ string outputAsXml = MacroStabilityXmlSerialization.SaveOutputAsXmlString(output);
string outputFileName = fileName.Replace(".skx", ".out.xml");
File.WriteAllText(outputFileName, outputAsXml);
- FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(macroStabilityOutputKernel, macroStabilityOutput,
- out List allMessages);
+ FillEngineFromMacroStabilityKernelOutput.FillDamProjectDataFromKernelModel(output, macroStabilityOutput, out List allMessages);
errorMessages = allMessages.Where(logMessage => logMessage.MessageType == LogMessageType.Error).ToList();
}
catch (Exception exceptionDuringCalculation)
@@ -424,7 +443,12 @@
if (macroStabilityOutput.CalculationResult != CalculationResult.UnexpectedError)
{
- StoreResultsAndWriteStixFile(input, macroStabilityOutput, fileName, errorMessages);
+ //#Bka : will not work until output is OK.
+ //StixFileWriterConnector.WriteStixFileWithInput(damKernelInput, mStabParameters, waterNet,
+ // xCoordinateLowestUpliftFactorPoint, macroStabilityOutput,
+ // fileName, new List());
+ StixFileWriterConnector.WriteStixFileWithInputAndResults(damKernelInput, mStabParameters, waterNet,
+ xCoordinateLowestUpliftFactorPoint, macroStabilityOutput, fileName, errorMessages);
}
}
@@ -450,40 +474,7 @@
SoilProfile2D soilProfile2D = damKernelInput.SubSoilScenario.SoilProfile2D;
return PlLinesToWaternetConverter.CreateWaternetBasedOnPlLines(plLines, soilProfile2D, surfaceLine, penetrationLength, pressureType);
}
-
- private void StoreResultsAndWriteStixFile(MacroStabilityInput input, MacroStabilityOutput macroStabilityOutput, string fileName, List messages)
- {
- try
- {
- MacroStabilityOutputItem stabilityOutputItem = macroStabilityOutput.StabilityOutputItems[^1];
-
- switch (stabilityOutputItem.StabilityModelType)
- {
- case StabilityModelType.Bishop:
- input.StabilityModel.BishopCalculationCircle = stabilityOutputItem.BishopCalculationCircle;
- // TODO: Replace above with the following line to make outputItem independent of the CSharpWrapper
- // input.StabilityModel.BishopCalculationCircle = CSharpWrapperConverters.CreateWrapperBishopCalculationCircle(stabilityOutputItem.InputBishopCalculationGrid);
- break;
- case StabilityModelType.UpliftVan:
- input.StabilityModel.UpliftVanCalculationGrid = stabilityOutputItem.UpliftVanCalculationGrid;
- // TODO: Replace above with the following line to make outputItem independent of the CSharpWrapper
- // input.StabilityModel.UpliftVanCalculationGrid = CSharpWrapperConverters.CreateWrapperUpliftVanCalculationGrid(stabilityOutputItem.InputUpliftVanCalculationGrid);
- break;
- }
-
- if (stabilityOutputItem.CalculationResult == CalculationResult.Succeeded)
- {
- WriteStixFileBasedOnInputAndResultsSearchGrid(fileName, input);
- WriteStixFileBasedOnInputAndResultsSlipPlane(fileName, input, stabilityOutputItem);
- }
- }
- catch (Exception exceptionDuringStixFileWriter)
- {
- string message = LocalizationManager.GetTranslatedText(this, "UnexpectedErrorStixFileCreation") + exceptionDuringStixFileWriter.Message;
- messages.Add(new LogMessage(LogMessageType.Warning, null, message));
- }
- }
-
+
///
/// Combines the surface line with the SoilProfile2D.
///
@@ -662,77 +653,6 @@
return dir;
}
- ///
- /// Writes the stix file based on input and results search grid.
- /// For Uplift-Van with Grid, the stix file is not written because this combination is not possible in D-Stability.
- ///
- /// Name of the file.
- /// The input.
- private static void WriteStixFileBasedOnInputAndResultsSearchGrid(string fileName, MacroStabilityInput input)
- {
- if (input.StabilityModel.ModelOption == StabilityModelOptionType.UpliftVan &&
- input.StabilityModel.SearchAlgorithm == SearchAlgorithm.Grid)
- {
- return;
- }
-
- string fileNameForCalculationAsStix = DetermineStixFilename(fileName, "input");
- var inputStixFile = new StixWriter();
- inputStixFile.FillInfo("DAM Engine", Path.GetDirectoryName(fileName),
- Path.GetFileName(fileName), true);
- StixFileWrite(inputStixFile, fileNameForCalculationAsStix, input);
- }
-
- ///
- /// 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,
- MacroStabilityOutputItem macroStabilityOutputItem)
- {
- 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);
- switch (macroStabilityOutputItem.StabilityModelType)
- {
- case StabilityModelType.UpliftVan:
- resultStixWrite.FillCalculatedDualCircle(macroStabilityOutputItem.ActiveCenterPoint.X,
- macroStabilityOutputItem.ActiveCenterPoint.Z,
- macroStabilityOutputItem.ActiveCenterPointRadius,
- macroStabilityOutputItem.PassiveCenterPoint.X,
- macroStabilityOutputItem.PassiveCenterPoint.Z);
- break;
- case StabilityModelType.Bishop:
- resultStixWrite.FillCalculatedCircle(macroStabilityOutputItem.ActiveCenterPoint.X,
- macroStabilityOutputItem.ActiveCenterPoint.Z,
- macroStabilityOutputItem.ActiveCenterPointRadius);
- break;
- }
-
- 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}");
- }
-
private static void ThrowWhenSoilProfile2DIsNull(SoilGeometryProbability subSoilScenario)
{
if (subSoilScenario.SoilProfile2D == null)