using System.Collections.Generic; using DelftTools.Shell.Core; namespace Wti.Data { public class PipingData : IObservable { private readonly IList observers = new List(); private PipingOutput output; // Defaults as they have been defined in the DikesPiping Kernel's Technical Documentation of 07 Oct 15 private double dampingFactorExit = 1.0; private double sellmeijerReductionFactor = 0.3; private double waterVolumetricWeight = 9.81; private double sandParticlesVolumicWeight = 16.5; private double whitesDragCoefficient = 0.25; private double waterKinematicViscosity = 1.33e-6; private double gravity = 9.81; private double meanDiameter70 = 2.08e-4; private double beddingAngle = 37.0; /// /// Gets or sets the damping factor at the exit point. /// public double DampingFactorExit { get { return dampingFactorExit; } set { dampingFactorExit = value; } } /// /// Gets or sets the reduction factor Sellmeijer. /// public double SellmeijerReductionFactor { get { return sellmeijerReductionFactor; } set { sellmeijerReductionFactor = value; } } /// /// Gets or sets the volumetric weight of water. /// [kN/m³] /// public double WaterVolumetricWeight { get { return waterVolumetricWeight; } set { waterVolumetricWeight = value; } } /// /// Gets or sets the (lowerbound) volumic weight of sand grain material of a sand layer under water. /// [kN/m³] /// public double SandParticlesVolumicWeight { get { return sandParticlesVolumicWeight; } set { sandParticlesVolumicWeight = value; } } /// /// Gets or sets the White's drag coefficient. /// public double WhitesDragCoefficient { get { return whitesDragCoefficient; } set { whitesDragCoefficient = value; } } /// /// Gets or sets the kinematic viscosity of water at 10 degrees Celsius. /// [m²/s] /// public double WaterKinematicViscosity { get { return waterKinematicViscosity; } set { waterKinematicViscosity = value; } } /// /// Gets or sets the gravitational acceleration. /// [m/s²] /// public double Gravity { get { return gravity; } set { gravity = value; } } /// /// Gets or sets the mean diameter of small scale tests applied to different kinds of sand, on which the formula of Sellmeijer has been fit. /// [m] /// public double MeanDiameter70 { get { return meanDiameter70; } set { meanDiameter70 = value; } } /// /// Gets or sets the angle of the force balance representing the amount in which sand grains resist rolling. /// [°] /// public double BeddingAngle { get { return beddingAngle; } set { beddingAngle = value; } } /// /// Gets or sets the calculation value used to account for uncertainty in the model for uplift. /// public double UpliftModelFactor { get; set; } /// /// Gets or sets the outside high water level. /// [m] /// public double AssessmentLevel { get; set; } /// /// Gets or sets the piezometric head at the exit point. /// [m] /// public double PiezometricHeadExit { get; set; } /// /// Gets or sets the phreatic level at the exit point. /// [m] /// public double PhreaticLevelExit { get; set; } /// /// Gets or sets the piezometric head in the hinterland. /// [m] /// public double PiezometricHeadPolder { get; set; } /// /// Gets or sets the critical exit gradient for heave. /// public double CriticalHeaveGradient { get; set; } /// /// Gets or sets the total thickness of the coverage layer at the exit point. /// [m] /// public double ThicknessCoverageLayer { get; set; } /// /// Gets or sets the calculation value used to account for uncertainty in the model for Sellmeijer. /// public double SellmeijerModelFactor { get; set; } /// /// Gets or sets the horizontal distance between entree and exit point. /// [m] /// public double SeepageLength { get; set; } /// /// Gets or sets the sieve size through which 70% fraction of the grains of the top part of the aquifer passes. /// [m] /// public double Diameter70 { get; set; } /// /// Gets or sets the Darcy-speed with which water flows through the aquifer layer. /// [m/s] /// public double DarcyPermeability { get; set; } /// /// Gets or sets the thickness of the aquifer layer. /// [m] /// public double ThicknessAquiferLayer { get; set; } /// /// Gets or sets the x coordinate of the exit point. /// [m] /// public double ExitPointXCoordinate { get; set; } /// /// Gets or sets , which contains the results of a Piping calculation. /// public PipingOutput Output { get { return output; } set { output = value; NotifyObservers(); } } public void Attach(IObserver observer) { observers.Add(observer); } public void Detach(IObserver observer) { observers.Remove(observer); } public void NotifyObservers() { foreach (var observer in observers) { observer.UpdateObserver(); } } } }