// Copyright (C) Stichting Deltares 2025. 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()
};
// Transfer grid
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;
// Transfer tangent lines
bishopCalculationCircle.TangentLines = inputBishopCalculationGrid.TangentLineLevels;
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
upliftVanCalculationGrid.TangentLines = inputUpliftVanCalculationGrid.TangentLineLevels;
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;
}
// Transfer grid
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
};
// Transfer tangent lines
bishopCalculationGrid.TangentLineLevels = inputBishopCalculationCircle.TangentLines.ToList();
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;
}
// Transfer grids
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
};
// Transfer tangent lines
upliftVanCalculationGrid.TangentLineLevels = inputUpliftVanCalculationGrid.TangentLines.ToList();
return upliftVanCalculationGrid;
}
}