// Copyright (C) Stichting Deltares 2017. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.
//
// You should have received a copy of the GNU 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;
using Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.Input;
using Ringtoets.MacroStabilityInwards.Primitives;
namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Calculators.UpliftVan.Input
{
///
/// This class contains all the parameters that are required to perform an Uplift Van calculation.
///
public class UpliftVanCalculatorInput
{
///
/// Creates a new instance of .
///
/// The object containing the values for the properties
/// of the new .
/// Thrown when is null.
/// Thrown when one of the following properties is null:
///
/// - ;
/// - ;
/// - ;
/// - ;
/// - ;
/// - .
///
///
public UpliftVanCalculatorInput(ConstructionProperties properties)
{
if (properties == null)
{
throw new ArgumentNullException(nameof(properties));
}
if (properties.SurfaceLine == null)
{
throw new ArgumentException("SurfaceLine must be set.");
}
if (properties.SoilProfile == null)
{
throw new ArgumentException("SoilProfile must be set.");
}
if (properties.DrainageConstruction == null)
{
throw new ArgumentException("DrainageConstruction must be set.");
}
if (properties.PhreaticLineOffsetsExtreme == null)
{
throw new ArgumentException("PhreaticLineOffsetsExtreme must be set.");
}
if (properties.PhreaticLineOffsetsDaily == null)
{
throw new ArgumentException("PhreaticLineOffsetsDaily must be set.");
}
if (properties.SlipPlane == null)
{
throw new ArgumentException("SlipPlane must be set.");
}
WaternetCreationMode = properties.WaternetCreationMode;
PlLineCreationMethod = properties.PlLineCreationMethod;
AssessmentLevel = properties.AssessmentLevel;
LandwardDirection = properties.LandwardDirection;
SurfaceLine = properties.SurfaceLine;
SoilProfile = properties.SoilProfile;
DrainageConstruction = properties.DrainageConstruction;
PhreaticLineOffsetsExtreme = properties.PhreaticLineOffsetsExtreme;
PhreaticLineOffsetsDaily = properties.PhreaticLineOffsetsDaily;
SlipPlane = properties.SlipPlane;
SlipPlaneConstraints = properties.SlipPlaneConstraints;
WaterLevelRiverAverage = properties.WaterLevelRiverAverage;
WaterLevelPolderExtreme = properties.WaterLevelPolderExtreme;
WaterLevelPolderDaily = properties.WaterLevelPolderDaily;
MinimumLevelPhreaticLineAtDikeTopRiver = properties.MinimumLevelPhreaticLineAtDikeTopRiver;
MinimumLevelPhreaticLineAtDikeTopPolder = properties.MinimumLevelPhreaticLineAtDikeTopPolder;
LeakageLengthOutwardsPhreaticLine3 = properties.LeakageLengthOutwardsPhreaticLine3;
LeakageLengthInwardsPhreaticLine3 = properties.LeakageLengthInwardsPhreaticLine3;
LeakageLengthOutwardsPhreaticLine4 = properties.LeakageLengthOutwardsPhreaticLine4;
LeakageLengthInwardsPhreaticLine4 = properties.LeakageLengthInwardsPhreaticLine4;
PiezometricHeadPhreaticLine2Outwards = properties.PiezometricHeadPhreaticLine2Outwards;
PiezometricHeadPhreaticLine2Inwards = properties.PiezometricHeadPhreaticLine2Inwards;
PenetrationLengthExtreme = properties.PenetrationLengthExtreme;
PenetrationLengthDaily = properties.PenetrationLengthDaily;
AdjustPhreaticLine3And4ForUplift = properties.AdjustPhreaticLine3And4ForUplift;
DikeSoilScenario = properties.DikeSoilScenario;
MoveGrid = properties.MoveGrid;
MaximumSliceWidth = properties.MaximumSliceWidth;
}
///
/// Container for properties for constructing a .
///
public class ConstructionProperties
{
///
/// Creates new instance of .
///
public ConstructionProperties()
{
WaternetCreationMode = WaternetCreationMode.CreateWaternet;
PlLineCreationMethod = PlLineCreationMethod.RingtoetsWti2017;
AssessmentLevel = double.NaN;
LandwardDirection = LandwardDirection.PositiveX;
WaterLevelRiverAverage = double.NaN;
WaterLevelPolderExtreme = double.NaN;
WaterLevelPolderDaily = double.NaN;
MinimumLevelPhreaticLineAtDikeTopRiver = double.NaN;
MinimumLevelPhreaticLineAtDikeTopPolder = double.NaN;
LeakageLengthOutwardsPhreaticLine3 = double.NaN;
LeakageLengthInwardsPhreaticLine3 = double.NaN;
LeakageLengthOutwardsPhreaticLine4 = double.NaN;
LeakageLengthInwardsPhreaticLine4 = double.NaN;
PiezometricHeadPhreaticLine2Outwards = double.NaN;
PiezometricHeadPhreaticLine2Inwards = double.NaN;
PenetrationLengthExtreme = double.NaN;
PenetrationLengthDaily = double.NaN;
DikeSoilScenario = MacroStabilityInwardsDikeSoilScenario.ClayDikeOnClay;
MaximumSliceWidth = double.NaN;
}
#region Properties
///
/// Gets or sets the waternet creation mode.
///
public WaternetCreationMode WaternetCreationMode { internal get; set; }
///
/// Gets or sets the pl line creation method.
///
public PlLineCreationMethod PlLineCreationMethod { internal get; set; }
///
/// Gets or sets the outside high water level.
/// [m+NAP]
///
public double AssessmentLevel { internal get; set; }
///
/// Gets or sets the landward direction of .
///
public LandwardDirection LandwardDirection { internal get; set; }
///
/// Gets or sets the surface line.
///
public MacroStabilityInwardsSurfaceLine SurfaceLine { internal get; set; }
///
/// Gets or sets the profile which contains a definition of soil layers with properties.
///
public SoilProfile SoilProfile { internal get; set; }
///
/// Gets or sets the drainage construction.
///
public DrainageConstruction DrainageConstruction { internal get; set; }
///
/// Gets or sets the phreatic line offsets under extreme circumstances.
///
public PhreaticLineOffsets PhreaticLineOffsetsExtreme { internal get; set; }
///
/// Gets or sets the phreatic line offsets under daily circumstances.
///
public PhreaticLineOffsets PhreaticLineOffsetsDaily { internal get; set; }
///
/// Gets or sets the slip plane.
///
public UpliftVanSlipPlane SlipPlane { internal get; set; }
///
/// Gets or sets the slip plane constraints.
///
public UpliftVanSlipPlaneConstraints SlipPlaneConstraints { internal get; set; }
///
/// Gets or sets the dike soil scenario.
///
public MacroStabilityInwardsDikeSoilScenario DikeSoilScenario { internal get; set; }
///
/// Gets or sets the average river water level.
/// [m+NAP]
///
public double WaterLevelRiverAverage { internal get; set; }
///
/// Gets or sets the polder water level under extreme circumstances.
/// [m+NAP]
///
public double WaterLevelPolderExtreme { internal get; set; }
///
/// Gets or sets the polder water level under daily circumstances.
/// [m+NAP]
///
public double WaterLevelPolderDaily { internal get; set; }
///
/// Gets or sets the minimum level phreatic line at dike top river.
/// [m+NAP]
///
public double MinimumLevelPhreaticLineAtDikeTopRiver { internal get; set; }
///
/// Gets or sets the minimum level phreatic line at dike top polder.
/// [m+NAP]
///
public double MinimumLevelPhreaticLineAtDikeTopPolder { internal get; set; }
///
/// Gets or sets whether phreatic line 3 and 4 should be adjusted for Uplift.
///
public bool AdjustPhreaticLine3And4ForUplift { internal get; set; }
///
/// Gets or sets the leakage length outwards of phreatic line 3.
/// [m]
///
public double LeakageLengthOutwardsPhreaticLine3 { internal get; set; }
///
/// Gets or sets the leakage length inwards of phreatic line 3.
/// [m]
///
public double LeakageLengthInwardsPhreaticLine3 { internal get; set; }
///
/// Gets or sets the leakage length outwards of phreatic line 4.
/// [m]
///
public double LeakageLengthOutwardsPhreaticLine4 { internal get; set; }
///
/// Gets or sets the leakage length inwards of phreatic line 4.
/// [m]
///
public double LeakageLengthInwardsPhreaticLine4 { internal get; set; }
///
/// Gets or sets the piezometric head of the phreatic line 2 outwards.
/// [m+NAP]
///
public double PiezometricHeadPhreaticLine2Outwards { internal get; set; }
///
/// Gets or sets the piezometric head of the phreatic line 2 inwards.
/// [m+NAP]
///
public double PiezometricHeadPhreaticLine2Inwards { internal get; set; }
///
/// Gets or sets the penetration length under extreme circumstances.
/// [m]
///
public double PenetrationLengthExtreme { internal get; set; }
///
/// Gets or sets the penetration length under daily circumstances.
/// [m]
///
public double PenetrationLengthDaily { internal get; set; }
///
/// Gets or sets the value whether the grid should be moved.
///
public bool MoveGrid { internal get; set; }
///
/// Gets or sets the maximum slice width.
/// [m]
///
public double MaximumSliceWidth { internal get; set; }
#endregion
}
#region Properties
///
/// Gets the waternet creation mode.
///
public WaternetCreationMode WaternetCreationMode { get; }
///
/// Gets the pl line creation method.
///
public PlLineCreationMethod PlLineCreationMethod { get; }
///
/// Gets the outside high water level.
/// [m+NAP]
///
public double AssessmentLevel { get; }
///
/// Gets the landward direction of .
///
public LandwardDirection LandwardDirection { get; }
///
/// Gets the surface line.
///
public MacroStabilityInwardsSurfaceLine SurfaceLine { get; }
///
/// Gets the profile which contains a definition of soil layers with properties.
///
public SoilProfile SoilProfile { get; }
///
/// Gets the drainage construction.
///
public DrainageConstruction DrainageConstruction { get; }
///
/// Gets the phreatic line offsets under extreme circumstances.
///
public PhreaticLineOffsets PhreaticLineOffsetsExtreme { get; }
///
/// Gets the phreatic line offsets under daily circumstances.
///
public PhreaticLineOffsets PhreaticLineOffsetsDaily { get; }
///
/// Gets the slip plane.
///
public UpliftVanSlipPlane SlipPlane { get; }
///
/// Gets the slip plane constraints.
///
public UpliftVanSlipPlaneConstraints SlipPlaneConstraints { get; }
///
/// Gets the dike soil scenario.
///
public MacroStabilityInwardsDikeSoilScenario DikeSoilScenario { get; }
///
/// Gets the average river water level.
/// [m+NAP]
///
public double WaterLevelRiverAverage { get; }
///
/// Gets the polder water level under extreme circumstances.
/// [m+NAP]
///
public double WaterLevelPolderExtreme { get; }
///
/// Gets the polder water level under daily circumstances.
/// [m+NAP]
///
public double WaterLevelPolderDaily { get; }
///
/// Gets the minimum level phreatic line at dike top river.
/// [m+NAP]
///
public double MinimumLevelPhreaticLineAtDikeTopRiver { get; }
///
/// Gets the minimum level phreatic line at dike top polder.
/// [m+NAP]
///
public double MinimumLevelPhreaticLineAtDikeTopPolder { get; }
///
/// Gets whether phreatic line 3 and 4 should be adjusted for Uplift.
///
public bool AdjustPhreaticLine3And4ForUplift { get; }
///
/// Gets the leakage length outwards of phreatic line 3.
/// [m]
///
public double LeakageLengthOutwardsPhreaticLine3 { get; }
///
/// Gets the leakage length inwards of phreatic line 3.
/// [m]
///
public double LeakageLengthInwardsPhreaticLine3 { get; }
///
/// Gets the leakage length outwards of phreatic line 4.
/// [m]
///
public double LeakageLengthOutwardsPhreaticLine4 { get; }
///
/// Gets the leakage length inwards of phreatic line 4.
/// [m]
///
public double LeakageLengthInwardsPhreaticLine4 { get; }
///
/// Gets the piezometric head of the phreatic line 2 outwards.
/// [m+NAP]
///
public double PiezometricHeadPhreaticLine2Outwards { get; }
///
/// Gets the piezometric head of the phreatic line 2 inwards.
/// [m+NAP]
///
public double PiezometricHeadPhreaticLine2Inwards { get; }
///
/// Gets the penetration length under extreme circumstances.
/// [m]
///
public double PenetrationLengthExtreme { get; }
///
/// Gets the penetration length under daily circumstances.
/// [m]
///
public double PenetrationLengthDaily { get; }
///
/// Gets the value whether the grid should be moved.
///
public bool MoveGrid { get; }
///
/// Gets the maximum slice width.
/// [m]
///
public double MaximumSliceWidth { get; }
#endregion
}
}