using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Deltares.DamEngine.Calculators.PlLinesCreator;
using Deltares.DamEngine.Data.General;
using Deltares.DamEngine.Data.General.PlLines;
using Deltares.DamEngine.Data.Geotechnics;
namespace Deltares.DamEngine.Calculators.KernelWrappers.Common
{
///
/// Helper for Pl Lines
///
public class PlLinesHelper
{
///
/// Creates the pl lines.
///
/// The location.
/// The soil profile.
/// The water level.
/// The uplift situation.
///
public static PLLines CreatePlLinesForStability(Location location, SoilGeometryProbability subSoilScenario,
double waterLevel, string soilGeometry2DName, out UpliftSituation upliftSituation)
{
var plLinesCreator = new PLLinesCreator
{
WaterLevelRiverHigh = waterLevel,
SurfaceLine = location.SurfaceLine,
WaterLevelPolder = location.PolderLevel,
HeadInPLLine2 = location.HeadPl2,
HeadInPLLine3 = location.HeadPl3,
HeadInPLLine4 = location.HeadPl4,
ModelParametersForPLLines = location.ModelParametersForPLLines,
SoilProfile = subSoilScenario.SoilProfile1D,
SoilProfileType = subSoilScenario.SoilProfileType,
SoilGeometry2DName = soilGeometry2DName,
GaugePLLines = null, // TODO: Operational
Gauges = null, // TODO: Operational
IsAdjustPL3AndPL4SoNoUpliftWillOccurEnabled = true, // for stability this must be set to true
PlLineOffsetBelowDikeTopAtRiver = location.PlLineOffsetBelowDikeTopAtRiver,
PlLineOffsetBelowDikeTopAtPolder = location.PlLineOffsetBelowDikeTopAtPolder,
DikeEmbankmentMaterial = location.GetDikeEmbankmentSoil(),
IsHydraulicShortcut = false, // TODO: Regional
XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin
};
var plLines = plLinesCreator.CreateAllPLLines(location);
upliftSituation.Pl3HeadAdjusted = plLinesCreator.Pl3HeadAdjusted;
upliftSituation.Pl3LocationXMinUplift = plLinesCreator.Pl3LocationXMinUplift;
upliftSituation.Pl3MinUplift = plLinesCreator.Pl3MinUplift;
upliftSituation.Pl4HeadAdjusted = plLinesCreator.Pl4HeadAdjusted;
upliftSituation.Pl4LocationXMinUplift = plLinesCreator.Pl4LocationXMinUplift;
upliftSituation.Pl4MinUplift = plLinesCreator.Pl4MinUplift;
upliftSituation.IsUplift = false; // must be determined later on; just to avoid compiler error
return plLines;
}
///
/// Creates the pl lines.
///
/// The location.
/// The soil profile.
/// The water level.
/// The uplift situation.
///
public static PLLines CreatePlLines(Location location, SoilProfile1D soilProfile, double waterLevel, out UpliftSituation upliftSituation)
{
var plLinesCreator = new PLLinesCreator
{
WaterLevelRiverHigh = waterLevel,
SurfaceLine = location.SurfaceLine,
WaterLevelPolder = location.PolderLevel,
HeadInPLLine2 = location.HeadPl2,
HeadInPLLine3 = location.HeadPl3,
HeadInPLLine4 = location.HeadPl4,
ModelParametersForPLLines = location.ModelParametersForPLLines,
SoilProfile = soilProfile,
GaugePLLines = null, // TODO: Operational
Gauges = null, // TODO: Operational
IsAdjustPL3AndPL4SoNoUpliftWillOccurEnabled = false, // for piping this must be set to false
PlLineOffsetBelowDikeTopAtRiver = location.PlLineOffsetBelowDikeTopAtRiver,
PlLineOffsetBelowDikeTopAtPolder = location.PlLineOffsetBelowDikeTopAtPolder,
DikeEmbankmentMaterial = location.GetDikeEmbankmentSoil(),
IsHydraulicShortcut = false, // TODO: Regional
XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin
};
var plLines = plLinesCreator.CreateAllPLLines(location);
upliftSituation.Pl3HeadAdjusted = plLinesCreator.Pl3HeadAdjusted;
upliftSituation.Pl3LocationXMinUplift = plLinesCreator.Pl3LocationXMinUplift;
upliftSituation.Pl3MinUplift = plLinesCreator.Pl3MinUplift;
upliftSituation.Pl4HeadAdjusted = plLinesCreator.Pl4HeadAdjusted;
upliftSituation.Pl4LocationXMinUplift = plLinesCreator.Pl4LocationXMinUplift;
upliftSituation.Pl4MinUplift = plLinesCreator.Pl4MinUplift;
upliftSituation.IsUplift = false; // must be determined later on; just to avoid compiler error
return plLines;
}
}
}