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)