Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/CSharpWrapperConverters.cs =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/CSharpWrapperConverters.cs (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/CSharpWrapperConverters.cs (revision 6391) @@ -0,0 +1,172 @@ +// Copyright (C) Stichting Deltares 2024. All rights reserved. +// +// This file is part of the Dam Engine. +// +// The Dam Engine is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.Collections.Generic; +using System.Linq; +using Deltares.MacroStability.CSharpWrapper; + +namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon; + +/// +/// Converter methods for converting between CSharpWrapper and engine types. +/// +public static class CSharpWrapperConverters +{ + /// + /// Create a CSharpWrapper BishopCalculationCircle based on an engine BishopCalculationGrid + /// + /// Engine BishopCalculationGrid + /// CSharpWrapper BishopCalculationCircle + public static BishopCalculationCircle CreateWrapperBishopCalculationCircle(BishopCalculationGrid inputBishopCalculationGrid) + { + if (inputBishopCalculationGrid == null) + { + return null; + } + + var bishopCalculationCircle = new BishopCalculationCircle + { + Grid = new CalculationGrid(), + TangentLines = new List() + }; + bishopCalculationCircle.Grid.GridXLeft = inputBishopCalculationGrid.GridXLeft; + bishopCalculationCircle.Grid.GridXRight = inputBishopCalculationGrid.GridXRight; + bishopCalculationCircle.Grid.GridXNumber = inputBishopCalculationGrid.GridXCount; + bishopCalculationCircle.Grid.GridZTop = inputBishopCalculationGrid.GridZTop; + bishopCalculationCircle.Grid.GridZBottom = inputBishopCalculationGrid.GridZBottom; + bishopCalculationCircle.Grid.GridZNumber = inputBishopCalculationGrid.GridZCount; + double currentTangentLevel = inputBishopCalculationGrid.TangentLineZTop; + double tangentIncrement = (inputBishopCalculationGrid.TangentLineZTop - inputBishopCalculationGrid.TangentLineZBottom) / + (inputBishopCalculationGrid.TangentLineCount - 1); + for (var i = 0; i < inputBishopCalculationGrid.TangentLineCount; i++) + { + bishopCalculationCircle.TangentLines.Add(currentTangentLevel); + currentTangentLevel -= tangentIncrement; + } + + return bishopCalculationCircle; + } + + /// + /// Create a CSharpWrapper UpliftVanCalculationGrid based on an engine UpliftVanCalculationGrid + /// + /// Engine UpliftVanCalculationGrid + /// CSharpWrapper UpliftVanCalculationGrid + public static MacroStability.CSharpWrapper.UpliftVanCalculationGrid CreateWrapperUpliftVanCalculationGrid(UpliftVanCalculationGrid inputUpliftVanCalculationGrid) + { + if (inputUpliftVanCalculationGrid == null) + { + return null; + } + + var upliftVanCalculationGrid = new MacroStability.CSharpWrapper.UpliftVanCalculationGrid + { + LeftGrid = new CalculationGrid(), + RightGrid = new CalculationGrid(), + TangentLines = new List() + }; + // Transfer left grid + upliftVanCalculationGrid.LeftGrid.GridXLeft = inputUpliftVanCalculationGrid.LeftGridXLeft; + upliftVanCalculationGrid.LeftGrid.GridXRight = inputUpliftVanCalculationGrid.LeftGridXRight; + upliftVanCalculationGrid.LeftGrid.GridXNumber = inputUpliftVanCalculationGrid.LeftGridXCount; + upliftVanCalculationGrid.LeftGrid.GridZTop = inputUpliftVanCalculationGrid.LeftGridZTop; + upliftVanCalculationGrid.LeftGrid.GridZBottom = inputUpliftVanCalculationGrid.LeftGridZBottom; + upliftVanCalculationGrid.LeftGrid.GridZNumber = inputUpliftVanCalculationGrid.LeftGridZCount; + // Transfer right grid + upliftVanCalculationGrid.RightGrid.GridXLeft = inputUpliftVanCalculationGrid.RightGridXLeft; + upliftVanCalculationGrid.RightGrid.GridXRight = inputUpliftVanCalculationGrid.RightGridXRight; + upliftVanCalculationGrid.RightGrid.GridXNumber = inputUpliftVanCalculationGrid.RightGridXCount; + upliftVanCalculationGrid.RightGrid.GridZTop = inputUpliftVanCalculationGrid.RightGridZTop; + upliftVanCalculationGrid.RightGrid.GridZBottom = inputUpliftVanCalculationGrid.RightGridZBottom; + upliftVanCalculationGrid.RightGrid.GridZNumber = inputUpliftVanCalculationGrid.RightGridZCount; + // Transfer tangent lines + double currentTangentLevel = inputUpliftVanCalculationGrid.TangentLineZTop; + double tangentIncrement = (inputUpliftVanCalculationGrid.TangentLineZTop - inputUpliftVanCalculationGrid.TangentLineZBottom) / + (inputUpliftVanCalculationGrid.TangentLineCount - 1); + for (var i = 0; i < inputUpliftVanCalculationGrid.TangentLineCount; i++) + { + upliftVanCalculationGrid.TangentLines.Add(currentTangentLevel); + currentTangentLevel -= tangentIncrement; + } + + return upliftVanCalculationGrid; + } + + /// + /// Create an engine BishopCalculationGrid based on a CSharpWrapper BishopCalculationCircle + /// + /// CSharpWrapper BishopCalculationCircle + /// Engine BishopCalculationGrid + public static BishopCalculationGrid CreateEngineBishopCalculationGrid(BishopCalculationCircle inputBishopCalculationCircle) + { + if (inputBishopCalculationCircle == null) + { + return null; + } + + var bishopCalculationGrid = new BishopCalculationGrid + { + GridXLeft = inputBishopCalculationCircle.Grid.GridXLeft, + GridXRight = inputBishopCalculationCircle.Grid.GridXRight, + GridXCount = inputBishopCalculationCircle.Grid.GridXNumber, + GridZTop = inputBishopCalculationCircle.Grid.GridZTop, + GridZBottom = inputBishopCalculationCircle.Grid.GridZBottom, + GridZCount = inputBishopCalculationCircle.Grid.GridZNumber, + TangentLineZTop = inputBishopCalculationCircle.TangentLines.First(), + TangentLineZBottom = inputBishopCalculationCircle.TangentLines.Last(), + TangentLineCount = inputBishopCalculationCircle.TangentLines.Count + }; + return bishopCalculationGrid; + } + + /// + /// Create an engine UpliftVanCalculationGrid based on a CSharpWrapper UpliftVanCalculationGrid + /// + /// CSharpWrapper UpliftVanCalculationGrid + /// Engine UpliftVanCalculationGrid + public static UpliftVanCalculationGrid CreateEngineUpliftVanCalculationGrid(MacroStability.CSharpWrapper.UpliftVanCalculationGrid inputUpliftVanCalculationGrid) + { + if (inputUpliftVanCalculationGrid == null) + { + return null; + } + + var upliftVanCalculationGrid = new UpliftVanCalculationGrid + { + LeftGridXLeft = inputUpliftVanCalculationGrid.LeftGrid.GridXLeft, + LeftGridXRight = inputUpliftVanCalculationGrid.LeftGrid.GridXRight, + LeftGridXCount = inputUpliftVanCalculationGrid.LeftGrid.GridXNumber, + LeftGridZTop = inputUpliftVanCalculationGrid.LeftGrid.GridZTop, + LeftGridZBottom = inputUpliftVanCalculationGrid.LeftGrid.GridZBottom, + LeftGridZCount = inputUpliftVanCalculationGrid.LeftGrid.GridZNumber, + RightGridXLeft = inputUpliftVanCalculationGrid.RightGrid.GridXLeft, + RightGridXRight = inputUpliftVanCalculationGrid.RightGrid.GridXRight, + RightGridXCount = inputUpliftVanCalculationGrid.RightGrid.GridXNumber, + RightGridZTop = inputUpliftVanCalculationGrid.RightGrid.GridZTop, + RightGridZBottom = inputUpliftVanCalculationGrid.RightGrid.GridZBottom, + RightGridZCount = inputUpliftVanCalculationGrid.RightGrid.GridZNumber, + TangentLineZTop = inputUpliftVanCalculationGrid.TangentLines.First(), + TangentLineZBottom = inputUpliftVanCalculationGrid.TangentLines.Last(), + TangentLineCount = inputUpliftVanCalculationGrid.TangentLines.Count + }; + return upliftVanCalculationGrid; + } +} \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityOutputItem.cs =================================================================== diff -u -r6387 -r6391 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityOutputItem.cs (.../MacroStabilityOutputItem.cs) (revision 6387) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityOutputItem.cs (.../MacroStabilityOutputItem.cs) (revision 6391) @@ -126,7 +126,7 @@ /// /// The bishop calculation circle. /// - public BishopCalculationCircle BishopCalculationCircle { get; set; } +// public BishopCalculationCircle BishopCalculationCircle { get; set; } /// /// Gets or sets the Uplift Van calculation grid. @@ -135,15 +135,15 @@ /// /// The Uplift Van calculation grid. /// - public MacroStability.CSharpWrapper.UpliftVanCalculationGrid UpliftVanCalculationGrid { get; set; } +// public MacroStability.CSharpWrapper.UpliftVanCalculationGrid UpliftVanCalculationGrid { get; set; } /// /// Gets or sets the Bishop calculation circle. /// /// /// The bishop calculation circle. /// - public BishopCalculationGrid InputBishopCalculationCircle { get; set; } + public BishopCalculationGrid InputBishopCalculationGrid { get; set; } /// /// Gets or sets the Uplift Van calculation grid. Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs =================================================================== diff -u -r6291 -r6391 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 6291) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 6391) @@ -411,10 +411,12 @@ switch (stabilityOutputItem.StabilityModelType) { case StabilityModelType.Bishop: - input.StabilityModel.BishopCalculationCircle = stabilityOutputItem.BishopCalculationCircle; + // input.StabilityModel.BishopCalculationCircle = stabilityOutputItem.BishopCalculationCircle; + input.StabilityModel.BishopCalculationCircle = CSharpWrapperConverters.CreateWrapperBishopCalculationCircle(stabilityOutputItem.InputBishopCalculationGrid); break; case StabilityModelType.UpliftVan: - input.StabilityModel.UpliftVanCalculationGrid = stabilityOutputItem.UpliftVanCalculationGrid; + // input.StabilityModel.UpliftVanCalculationGrid = stabilityOutputItem.UpliftVanCalculationGrid; + input.StabilityModel.UpliftVanCalculationGrid = CSharpWrapperConverters.CreateWrapperUpliftVanCalculationGrid(stabilityOutputItem.InputUpliftVanCalculationGrid); break; } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/CSharpWrapperConvertersTests.cs =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/CSharpWrapperConvertersTests.cs (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/CSharpWrapperConvertersTests.cs (revision 6391) @@ -0,0 +1,120 @@ +// Copyright (C) Stichting Deltares 2024. All rights reserved. +// +// This file is part of the Dam Engine. +// +// The Dam Engine is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.Collections.Generic; +using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon; +using Deltares.MacroStability.CSharpWrapper; +using KellermanSoftware.CompareNetObjects; +using NUnit.Framework; +using UpliftVanCalculationGrid = Deltares.MacroStability.CSharpWrapper.UpliftVanCalculationGrid; + +namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.MacroStabilityCommon; + +[TestFixture] +public class CSharpWrapperConvertersTests +{ + [Test] + public void GivenCSharpWrapperBishopCalculationCircleWhenConvertingToAndFromEngineBishopCalculationGridThenReturnsSameObject() + { + var expectedBishopCalculationCircle = new BishopCalculationCircle + { + Grid = new CalculationGrid + { + GridXLeft = 0.0, + GridXRight = 10.0, + GridXNumber = 100, + GridZTop = 5.0, + GridZBottom = 0.0, + GridZNumber = 50 + }, + TangentLines = new List + { + 5.0, + 4.0, + 3.0, + 2.0, + 1.0 + } + }; + + BishopCalculationGrid engineBishopCalculationGrid = CSharpWrapperConverters.CreateEngineBishopCalculationGrid(expectedBishopCalculationCircle); + BishopCalculationCircle actualBishopCalculationCircle = CSharpWrapperConverters.CreateWrapperBishopCalculationCircle(engineBishopCalculationGrid); + + var compare = new CompareLogic + { + Config = + { + MaxDifferences = 100 + } + }; + ComparisonResult result = compare.Compare(expectedBishopCalculationCircle, actualBishopCalculationCircle); + Assert.That(result.Differences, Is.Empty, "Differences found converting to and from engine BishopCalculationGrid"); + } + + [Test] + public void GivenCSharpWrapperUpliftVanCalculationGridWhenConvertingToAndFromEngineUpliftVanCalculationGridThenReturnsSameObject() + { + var expectedUpliftVanCalculationGrid = new UpliftVanCalculationGrid + { + LeftGrid = new CalculationGrid + { + GridXLeft = 0.0, + GridXRight = 10.0, + GridXNumber = 100, + GridZTop = 5.0, + GridZBottom = 0.0, + GridZNumber = 50 + }, + RightGrid = new CalculationGrid + { + GridXLeft = 200.0, + GridXRight = 30.0, + GridXNumber = 100, + GridZTop = 15.0, + GridZBottom = 10.0, + GridZNumber = 50 + }, + TangentLines = new List + { + 5.0, + 4.0, + 3.0, + 2.0, + 1.0 + } + }; + + Calculators.KernelWrappers.MacroStabilityCommon.UpliftVanCalculationGrid engineUpliftVanCalculationGrid = + CSharpWrapperConverters.CreateEngineUpliftVanCalculationGrid(expectedUpliftVanCalculationGrid); + UpliftVanCalculationGrid actualUpliftVanCalculationGrid = + CSharpWrapperConverters.CreateWrapperUpliftVanCalculationGrid(engineUpliftVanCalculationGrid); + + var compare = new CompareLogic + { + Config = + { + MaxDifferences = 100 + } + }; + ComparisonResult result = compare.Compare(expectedUpliftVanCalculationGrid, actualUpliftVanCalculationGrid); + Assert.That(result.Differences, Is.Empty, "Differences found converting to and from engine UpliftVanCalculationGrid"); + } +} \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs =================================================================== diff -u -r6264 -r6391 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs (.../FillEngineFromMacroStabilityWrapperOutput.cs) (revision 6264) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperOutput.cs (.../FillEngineFromMacroStabilityWrapperOutput.cs) (revision 6391) @@ -58,9 +58,9 @@ { CalculationResult = ConversionHelper.ConvertToDamResultType(kernelOutput.ResultType), SafetyFactor = kernelOutput.StabilityOutput.SafetyFactor, - StabilityModelType = ConversionHelper.ConvertToMStabModelType(kernelOutput.StabilityOutput.ModelOptionType), - BishopCalculationCircle = new BishopCalculationCircle(), - UpliftVanCalculationGrid = new MacroStability.CSharpWrapper.UpliftVanCalculationGrid() + StabilityModelType = ConversionHelper.ConvertToMStabModelType(kernelOutput.StabilityOutput.ModelOptionType) + // BishopCalculationCircle = new MacroStability.CSharpWrapper.BishopCalculationCircle(), + // UpliftVanCalculationGrid = new MacroStability.CSharpWrapper.UpliftVanCalculationGrid() }; if (outputItem.StabilityModelType == StabilityModelType.Bishop) @@ -80,13 +80,15 @@ if (outputItem.StabilityModelType == StabilityModelType.Bishop || outputItem.StabilityModelType == StabilityModelType.BishopUpliftVan) { var bishopPreprocessingOutput = (BishopPreprocessingOutput) kernelOutput.PreprocessingOutputBase; - outputItem.BishopCalculationCircle = bishopPreprocessingOutput.BishopCalculationCircle; + // outputItem.BishopCalculationCircle = bishopPreprocessingOutput.BishopCalculationCircle; + outputItem.InputBishopCalculationGrid = CSharpWrapperConverters.CreateEngineBishopCalculationGrid(bishopPreprocessingOutput.BishopCalculationCircle); } if (outputItem.StabilityModelType == StabilityModelType.UpliftVan || outputItem.StabilityModelType == StabilityModelType.BishopUpliftVan) { var upliftVanPreprocessingOutput = (UpliftVanPreprocessingOutput) kernelOutput.PreprocessingOutputBase; - outputItem.UpliftVanCalculationGrid = upliftVanPreprocessingOutput.UpliftVanCalculationGrid; + // outputItem.UpliftVanCalculationGrid = upliftVanPreprocessingOutput.UpliftVanCalculationGrid; + outputItem.InputUpliftVanCalculationGrid = CSharpWrapperConverters.CreateEngineUpliftVanCalculationGrid(upliftVanPreprocessingOutput.UpliftVanCalculationGrid); } }