using System.Collections.Generic; using Core.Common.Base; using Ringtoets.Piping.Data.Probabilistics; namespace Ringtoets.Piping.Data { /// /// This class holds the information which can be made visible in the graphical interface of the application. /// public class PipingData : IObservable { private readonly IList observers = new List(); /// /// Constructs a new instance of with default values set for some of the parameters. /// public PipingData() { Name = "Piping"; // Defaults as they have been defined in 'functional design semi-probabilistic assessments 1209431-008-ZWS-0009 Version 2 Final' UpliftModelFactor = 1.0; SellmeijerModelFactor = 1.0; WaterVolumetricWeight = 10.0; WhitesDragCoefficient = 0.25; SandParticlesVolumicWeight = 16.5; WaterKinematicViscosity = 1.33e-6; Gravity = 9.81; MeanDiameter70 = 2.08e-4; BeddingAngle = 37.0; SellmeijerReductionFactor = 0.3; CriticalHeaveGradient = 0.3; PhreaticLevelExit = new NormalDistribution(); DampingFactorExit = new LognormalDistribution { Mean = 1.0 }; ThicknessCoverageLayer = new LognormalDistribution(); SeepageLength = new LognormalDistribution(); Diameter70 = new LognormalDistribution(); DarcyPermeability = new LognormalDistribution(); ThicknessAquiferLayer = new LognormalDistribution(); } /// /// Gets or sets the name the user gave this this calculation object. /// public string Name { get; set; } /// /// Gets or sets the reduction factor Sellmeijer. /// public double SellmeijerReductionFactor { get; set; } /// /// Gets or sets the volumetric weight of water. /// [kN/m³] /// public double WaterVolumetricWeight { get; set; } /// /// Gets or sets the (lowerbound) volumic weight of sand grain material of a sand layer under water. /// [kN/m³] /// public double SandParticlesVolumicWeight { get; set; } /// /// Gets or sets the White's drag coefficient. /// public double WhitesDragCoefficient { get; set; } /// /// Gets or sets the kinematic viscosity of water at 10 degrees Celsius. /// [m²/s] /// public double WaterKinematicViscosity { get; set; } /// /// Gets or sets the gravitational acceleration. /// [m/s²] /// public double Gravity { get; set; } /// /// 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; set; } /// /// Gets or sets the angle of the force balance representing the amount in which sand grains resist rolling. /// [°] /// public double BeddingAngle { get; set; } /// /// 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 piezometric head in the hinterland. /// [m] /// public double PiezometricHeadPolder { 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 x coordinate of the exit point. /// [m] /// public double ExitPointXCoordinate { get; set; } #region Probabilistic parameters /// /// Gets or sets the phreatic level at the exit point. /// [m] /// public NormalDistribution PhreaticLevelExit { get; set; } /// /// Gets or sets the horizontal distance between entree and exit point. /// [m] /// public LognormalDistribution 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 LognormalDistribution Diameter70 { get; set; } /// /// Gets or sets the Darcy-speed with which water flows through the aquifer layer. /// [m/s] /// public LognormalDistribution DarcyPermeability { get; set; } /// /// Gets or sets the thickness of the aquifer layer. /// [m] /// public LognormalDistribution ThicknessAquiferLayer { get; set; } /// /// Gets or sets the total thickness of the coverage layer at the exit point. /// [m] /// public LognormalDistribution ThicknessCoverageLayer { get; set; } /// /// Gets or sets the damping factor at the exit point. /// public LognormalDistribution DampingFactorExit { get; set; } #endregion #region Constants /// /// Gets or sets the critical exit gradient for heave. /// public double CriticalHeaveGradient { get; private set; } #endregion /// /// Gets or sets the surface line. /// public RingtoetsPipingSurfaceLine SurfaceLine { get; set; } /// /// Gets or sets the profile which contains a 1 dimensional definition of soil layers with properties. /// public PipingSoilProfile SoilProfile { get; set; } /// /// Gets or sets , which contains the results of a Piping calculation. /// public PipingOutput Output { get; set; } /// /// Gets a value indicating whether the has . /// public bool HasOutput { get { return Output != null; } } /// /// Clears the . /// public void ClearOutput() { Output = null; } 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(); } } } }