// Copyright (C) Stichting Deltares 2018. 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.Waternet.Input
{
///
/// This class contains all the parameters that are required to perform a Waternet calculation.
///
public class WaternetCalculatorInput
{
///
/// 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 WaternetCalculatorInput(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.PhreaticLineOffsets == null)
{
throw new ArgumentException("PhreaticLineOffsets must be set.");
}
WaternetCreationMode = properties.WaternetCreationMode;
PlLineCreationMethod = properties.PlLineCreationMethod;
AssessmentLevel = properties.AssessmentLevel;
LandwardDirection = properties.LandwardDirection;
SurfaceLine = properties.SurfaceLine;
SoilProfile = properties.SoilProfile;
DrainageConstruction = properties.DrainageConstruction;
PhreaticLineOffsets = properties.PhreaticLineOffsets;
WaterLevelRiverAverage = properties.WaterLevelRiverAverage;
WaterLevelPolder = properties.WaterLevelPolder;
MinimumLevelPhreaticLineAtDikeTopRiver = properties.MinimumLevelPhreaticLineAtDikeTopRiver;
MinimumLevelPhreaticLineAtDikeTopPolder = properties.MinimumLevelPhreaticLineAtDikeTopPolder;
LeakageLengthOutwardsPhreaticLine3 = properties.LeakageLengthOutwardsPhreaticLine3;
LeakageLengthInwardsPhreaticLine3 = properties.LeakageLengthInwardsPhreaticLine3;
LeakageLengthOutwardsPhreaticLine4 = properties.LeakageLengthOutwardsPhreaticLine4;
LeakageLengthInwardsPhreaticLine4 = properties.LeakageLengthInwardsPhreaticLine4;
PiezometricHeadPhreaticLine2Outwards = properties.PiezometricHeadPhreaticLine2Outwards;
PiezometricHeadPhreaticLine2Inwards = properties.PiezometricHeadPhreaticLine2Inwards;
PenetrationLength = properties.PenetrationLength;
AdjustPhreaticLine3And4ForUplift = properties.AdjustPhreaticLine3And4ForUplift;
DikeSoilScenario = properties.DikeSoilScenario;
}
///
/// 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;
WaterLevelPolder = 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;
PenetrationLength = double.NaN;
DikeSoilScenario = MacroStabilityInwardsDikeSoilScenario.ClayDikeOnClay;
}
#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.
///
public PhreaticLineOffsets PhreaticLineOffsets { 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.
/// [m+NAP]
///
public double WaterLevelPolder { 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.
/// [m]
///
public double PenetrationLength { 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.
///
public PhreaticLineOffsets PhreaticLineOffsets { 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.
/// [m+NAP]
///
public double WaterLevelPolder { 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.
/// [m]
///
public double PenetrationLength { get; }
#endregion
}
}