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