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);
}
}