// 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 Core.Common.Base.Data;
using Ringtoets.Common.Data.Probabilistics;
namespace Ringtoets.MacroStabilityInwards.Primitives
{
///
/// Soil layer properties.
///
public class MacroStabilityInwardsSoilLayerPropertiesUnderSurfaceLine
{
///
/// Creates a new instance of .
///
/// The object containing the values for the properties
/// of the new .
/// Thrown when is null.
public MacroStabilityInwardsSoilLayerPropertiesUnderSurfaceLine(ConstructionProperties properties)
{
if (properties == null)
{
throw new ArgumentNullException(nameof(properties));
}
AbovePhreaticLevel = new VariationCoefficientLogNormalDistribution(2)
{
Mean = (RoundedDouble) properties.AbovePhreaticLevelMean,
CoefficientOfVariation = (RoundedDouble) properties.AbovePhreaticLevelCoefficientOfVariation
};
BelowPhreaticLevel = new VariationCoefficientLogNormalDistribution(2)
{
Mean = (RoundedDouble) properties.BelowPhreaticLevelMean,
CoefficientOfVariation = (RoundedDouble) properties.BelowPhreaticLevelCoefficientOfVariation
};
Cohesion = new VariationCoefficientLogNormalDistribution(2)
{
Mean = (RoundedDouble) properties.CohesionMean,
CoefficientOfVariation = (RoundedDouble) properties.CohesionCoefficientOfVariation
};
FrictionAngle = new VariationCoefficientLogNormalDistribution(2)
{
Mean = (RoundedDouble) properties.FrictionAngleMean,
CoefficientOfVariation = (RoundedDouble) properties.FrictionAngleCoefficientOfVariation
};
StrengthIncreaseExponent = new VariationCoefficientLogNormalDistribution(2)
{
Mean = (RoundedDouble) properties.StrengthIncreaseExponentMean,
CoefficientOfVariation = (RoundedDouble) properties.StrengthIncreaseExponentCoefficientOfVariation
};
ShearStrengthRatio = new VariationCoefficientLogNormalDistribution(2)
{
Mean = (RoundedDouble) properties.ShearStrengthRatioMean,
CoefficientOfVariation = (RoundedDouble) properties.ShearStrengthRatioCoefficientOfVariation
};
Pop = new VariationCoefficientLogNormalDistribution(2)
{
Mean = (RoundedDouble) properties.PopMean,
CoefficientOfVariation = (RoundedDouble) properties.PopCoefficientOfVariation
};
IsAquifer = properties.IsAquifer;
UsePop = properties.UsePop;
ShearStrengthModel = properties.ShearStrengthModel;
MaterialName = properties.MaterialName;
}
///
/// Gets a value indicating whether the layer is an aquifer.
///
public bool IsAquifer { get; }
///
/// Gets a value indicating whether to use POP for the layer.
///
public bool UsePop { get; }
///
/// Gets the shear strength model to use for the layer.
///
public MacroStabilityInwardsShearStrengthModel ShearStrengthModel { get; }
///
/// Gets the name of the material that was assigned to the layer.
///
public string MaterialName { get; }
#region distributions
///
/// Gets the distribution for the volumic weight of the layer above the phreatic level.
/// [kN/m³]
///
public VariationCoefficientLogNormalDistribution AbovePhreaticLevel { get; }
///
/// Gets the distribution for the volumic weight of the layer below the phreatic level.
/// [kN/m³]
///
public VariationCoefficientLogNormalDistribution BelowPhreaticLevel { get; }
///
/// Gets the distribution for the cohesion.
/// [kN/m³]
///
public VariationCoefficientLogNormalDistribution Cohesion { get; }
///
/// Gets the friction angle.
/// [°]
///
public VariationCoefficientLogNormalDistribution FrictionAngle { get; }
///
/// Gets the strength increase component.
/// [-]
///
public VariationCoefficientLogNormalDistribution StrengthIncreaseExponent { get; set; }
///
/// Gets the shear strength ratio.
/// [-]
///
public VariationCoefficientLogNormalDistribution ShearStrengthRatio { get; }
///
/// Gets the Pop.
/// [kN/m²]
///
public VariationCoefficientLogNormalDistribution Pop { get; }
#endregion
#region Design variables
///
/// Gets or sets the design variable of the distribution for the volumic weight of the layer above the phreatic level.
///
public RoundedDouble AbovePhreaticLevelDesignVariable { get; set; }
///
/// Gets or sets the design variable of the distribution for the volumic weight of the layer below the phreatic level.
///
public RoundedDouble BelowPhreaticLevelDesignVariable { get; set; }
///
/// Gets or sets the design variable of the distribution for the cohesion.
///
public RoundedDouble CohesionDesignVariable { get; set; }
///
/// Gets or sets the design variable of the distribution for the friction angle.
///
public RoundedDouble FrictionAngleDesignVariable { get; set; }
///
/// Gets or sets the design variable of the distribution for the strength increase exponent.
///
public RoundedDouble StrengthIncreaseExponentDesignVariable { get; set; }
///
/// Gets or sets the design variable of the distribution for the shear strength ratio.
///
public RoundedDouble ShearStrengthRatioDesignVariable { get; set; }
///
/// Gets or sets the design variable of the distribution for the Pop.
///
public RoundedDouble PopDesignVariable { get; set; }
#endregion
#region ConstructionProperties
public class ConstructionProperties
{
///
/// Creates a new instance of .
///
public ConstructionProperties()
{
AbovePhreaticLevelMean = double.NaN;
AbovePhreaticLevelCoefficientOfVariation = double.NaN;
BelowPhreaticLevelMean = double.NaN;
BelowPhreaticLevelCoefficientOfVariation = double.NaN;
CohesionMean = double.NaN;
CohesionCoefficientOfVariation = double.NaN;
FrictionAngleMean = double.NaN;
FrictionAngleCoefficientOfVariation = double.NaN;
StrengthIncreaseExponentMean = double.NaN;
StrengthIncreaseExponentCoefficientOfVariation = double.NaN;
ShearStrengthRatioMean = double.NaN;
ShearStrengthRatioCoefficientOfVariation = double.NaN;
PopMean = double.NaN;
PopCoefficientOfVariation = double.NaN;
ShearStrengthModel = MacroStabilityInwardsShearStrengthModel.CPhi;
MaterialName = string.Empty;
}
///
/// Gets or sets the mean of the distribution for the volumic weight of the layer above the phreatic level.
/// [kN/m³]
///
public double AbovePhreaticLevelMean { internal get; set; }
///
/// Gets or sets the coefficient of variation of the distribution for the volumic weight of the layer above the phreatic level.
/// [kN/m³]
///
public double AbovePhreaticLevelCoefficientOfVariation { internal get; set; }
///
/// Gets or sets the mean of the distribution for the volumic weight of the layer below the phreatic level.
/// [kN/m³]
///
public double BelowPhreaticLevelMean { internal get; set; }
///
/// Gets or sets the coefficient of variation of the distribution for the volumic weight of the layer below the phreatic level.
/// [kN/m³]
///
public double BelowPhreaticLevelCoefficientOfVariation { internal get; set; }
///
/// Gets or sets the mean of the distribution for the cohesion.
/// [kN/m³]
///
public double CohesionMean { internal get; set; }
///
/// Gets or sets the coefficient of variation of the distribution for the cohesion.
/// [kN/m³]
///
public double CohesionCoefficientOfVariation { internal get; set; }
///
/// Gets or sets the mean of the distribution for the friction angle.
/// [°]
///
public double FrictionAngleMean { internal get; set; }
///
/// Gets or sets the coefficient of variation of the distribution for the friction angle.
/// [°]
///
public double FrictionAngleCoefficientOfVariation { internal get; set; }
///
/// Gets or sets the mean of the distribution for the strength increase exponent.
/// [-]
///
public double StrengthIncreaseExponentMean { internal get; set; }
///
/// Gets or sets the coefficient of variation of the distribution for the strength increase exponent.
/// [-]
///
public double StrengthIncreaseExponentCoefficientOfVariation { internal get; set; }
///
/// Gets or sets the mean of the distribution for the shear strength ratio.
/// [-]
///
public double ShearStrengthRatioMean { internal get; set; }
///
/// Gets or sets the coefficient of variation of the distribution for the shear strength ratio.
/// [-]
///
public double ShearStrengthRatioCoefficientOfVariation { internal get; set; }
///
/// Gets or sets the mean of the distribution for the pop.
/// [kN/m²]
///
public double PopMean { internal get; set; }
///
/// Gets or sets the coefficient of variation of the distribution for the pop.
/// [kN/m²]
///
public double PopCoefficientOfVariation { internal get; set; }
///
/// Gets or sets a value indicating whether the layer is an aquifer.
///
public bool IsAquifer { internal get; set; }
///
/// Gets or sets a value indicating whether to use POP for the layer.
///
public bool UsePop { internal get; set; }
///
/// Gets or sets the shear strength model to use for the layer.
///
public MacroStabilityInwardsShearStrengthModel ShearStrengthModel { internal get; set; }
///
/// Gets or sets the name of the material that was assigned to the layer.
///
public string MaterialName { internal get; set; }
}
#endregion
}
}