// Copyright (C) Stichting Deltares 2018. 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; using Deltares.DamEngine.Data.Standard; using Deltares.DamEngine.Data.Standard.Language; namespace Deltares.DamEngine.Data.Geotechnics { /// /// Soil class, representing a specific soil material and its properties /// [Serializable] public class Soil : IName { // Stability properties private string name = ""; private SoilType soilType; /// /// Initializes a new instance of the class. /// public Soil() { Name = LocalizationManager.GetTranslatedText(this, "DefaultNameSoilMaterial"); soilType = SoilType.Sand; } /// /// Initializes a new instance of the class. /// /// The name. /// Unit weight below phreatic level /// Unit weight above phreatic level public Soil(string name, double belowPhreaticLevel, double abovePhreaticLevel) : this() { Name = name; AbovePhreaticLevel = abovePhreaticLevel; BelowPhreaticLevel = belowPhreaticLevel; } /// /// Initializes a new instance of the class. /// /// The name. public Soil(string name) : this() { Name = name; } /// /// Gets or sets the type of the soil. /// /// /// The type of the soil. /// public virtual SoilType SoilType { get { return soilType; } set { if (!soilType.Equals(value)) { soilType = value; } } } #region property Name /// /// Gets or sets the name of the soil. /// public string Name { get { return name; } set { name = value; } } /// /// Returns a that represents this instance. /// /// /// A that represents this instance. /// public override string ToString() { return Name; } #endregion property Name #region property Weight /// /// Unit Weight below the phreatic level (kN/m3) /// public double BelowPhreaticLevel { get; set; } = double.NaN; /// /// Unit Weight above the phreatic level (kN/m3) /// public double AbovePhreaticLevel { get; set; } = double.NaN; #endregion #region Piping /// /// Bedding Angle (degree). /// /// /// The bedding angle. /// public double BeddingAngle { get; set; } = double.NaN; /// /// Diameter D70 (micrometer). /// /// /// The diameter D70. /// public double DiameterD70 { get; set; } = double.NaN; /// /// Horizontal permeability (m/s) /// /// /// The permeab kx. /// public double PermeabKx { get; set; } = double.NaN; /// /// Whites constant (-). /// /// /// The whites constant. /// public double WhitesConstant { get; set; } = double.NaN; /// /// Diameter D90 (micrometer). /// /// /// The diameter D90. /// public double DiameterD90 { get; set; } = double.NaN; #endregion #region Macrostability /// /// Ovendry unit weight [kN/m3] /// public double DryUnitWeight { get; set; } = double.NaN; /// /// Cohesion (the force that holds together molecules or like particles within a soil) [kN/m2] /// public double Cohesion { get; set; } = double.NaN; /// /// Critical state friction angle (deg) /// public double FrictionAngle { get; set; } = double.NaN; /// /// Pre-overburden pressure (POP) /// Equal to pre-consolidation stress minus effective stress /// public double PoP { get; set; } = double.NaN; /// /// Over-consolidation ratio (OCR) /// public double Ocr { get; set; } = double.NaN; /// /// Ratio Cu/Pc /// public double RatioCuPc { get; set; } = double.NaN; /// /// Cu Top /// public double CuTop { get; set; } = double.NaN; /// /// Cu Bottom /// public double CuBottom { get; set; } = double.NaN; /// /// Use POP for shear strength model /// public bool UsePop { get; set; } = false; /// /// Dilatancy (shear thickening) type /// public DilatancyType? DilatancyType { get; set; } = null; /// /// Gets or sets the strength increase exponent. /// /// /// The strength increase exponent. /// public double StrengthIncreaseExponent { get; set; } = double.NaN; /// /// Shear strength model to use /// public ShearStrengthModel? ShearStrengthModel { get; set; } = null; /// /// Gets or sets a value indicating whether to use the default shear strength model. /// /// /// true if default shear strength model must be used; otherwise, false. /// public bool? UseDefaultShearStrengthModel { get; set; } = null; /// /// Gets or sets the slope of the rest profile. /// /// /// The slope of the rest profile. /// public double SlopeRestProfile { get; set; } = double.NaN; #endregion /// /// Assigns the specified a soil. /// /// a soil. public void Assign(Soil aSoil) { name = aSoil.Name; BeddingAngle = aSoil.BeddingAngle; DiameterD70 = aSoil.DiameterD70; PermeabKx = aSoil.PermeabKx; WhitesConstant = aSoil.WhitesConstant; DiameterD90 = aSoil.DiameterD90; DilatancyType = aSoil.DilatancyType; ShearStrengthModel = aSoil.ShearStrengthModel; BelowPhreaticLevel = aSoil.BelowPhreaticLevel; AbovePhreaticLevel = aSoil.AbovePhreaticLevel; Cohesion = aSoil.Cohesion; FrictionAngle = aSoil.FrictionAngle; PoP = aSoil.PoP; Ocr = aSoil.Ocr; RatioCuPc = aSoil.RatioCuPc; CuTop = aSoil.CuTop; CuBottom = aSoil.CuBottom; UsePop = aSoil.UsePop; StrengthIncreaseExponent = aSoil.StrengthIncreaseExponent; } } }