Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Data/HeightStructuresInput.cs =================================================================== diff -u -rf989a06ad41e4081dd1d155fafa263e94b070816 -r3dc04fc5fb21350c7b4da44fdba336aead86560e --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Data/HeightStructuresInput.cs (.../HeightStructuresInput.cs) (revision f989a06ad41e4081dd1d155fafa263e94b070816) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Data/HeightStructuresInput.cs (.../HeightStructuresInput.cs) (revision 3dc04fc5fb21350c7b4da44fdba336aead86560e) @@ -19,37 +19,20 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System; -using System.Linq; -using Core.Common.Base; using Core.Common.Base.Data; -using Core.Common.Base.Geometry; -using Ringtoets.Common.Data.Calculation; -using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Data.Probabilistics; -using Ringtoets.HydraRing.Data; +using Ringtoets.Common.Data.Structures; using RingtoetsCommonDataResources = Ringtoets.Common.Data.Properties.Resources; namespace Ringtoets.HeightStructures.Data { /// /// Class that holds all height structures calculation specific input parameters. /// - public class HeightStructuresInput : Observable, ICalculationInput, IUseBreakWater, IUseForeshore + public class HeightStructuresInput : StructuresInputBase { private readonly NormalDistribution levelCrestStructure; - private readonly NormalDistribution modelFactorSuperCriticalFlow; - private readonly LogNormalDistribution allowedLevelIncreaseStorage; - private readonly VariationCoefficientLogNormalDistribution storageStructureArea; - private readonly LogNormalDistribution flowWidthAtBottomProtection; - private readonly VariationCoefficientLogNormalDistribution criticalOvertoppingDischarge; - private readonly VariationCoefficientNormalDistribution widthFlowApertures; - private readonly VariationCoefficientLogNormalDistribution stormDuration; - private RoundedDouble structureNormalOrientation; private RoundedDouble deviationWaveDirection; - private double failureProbabilityStructureWithErosion; - private ForeshoreProfile foreshoreProfile; - private HeightStructure heightStructure; /// /// Creates a new instance of the class. @@ -62,91 +45,19 @@ StandardDeviation = (RoundedDouble) 0.05 }; - structureNormalOrientation = new RoundedDouble(2, double.NaN); - - modelFactorSuperCriticalFlow = new NormalDistribution(2) - { - Mean = (RoundedDouble) 1.1, - StandardDeviation = (RoundedDouble) 0.03 - }; - - allowedLevelIncreaseStorage = new LogNormalDistribution(2) - { - Mean = (RoundedDouble) double.NaN, - StandardDeviation = (RoundedDouble) 0.1 - }; - - storageStructureArea = new VariationCoefficientLogNormalDistribution(2) - { - Mean = (RoundedDouble) double.NaN, - CoefficientOfVariation = (RoundedDouble) 0.1 - }; - - flowWidthAtBottomProtection = new LogNormalDistribution(2) - { - Mean = (RoundedDouble) double.NaN, - StandardDeviation = (RoundedDouble) 0.05 - }; - - criticalOvertoppingDischarge = new VariationCoefficientLogNormalDistribution(2) - { - Mean = (RoundedDouble) double.NaN, - CoefficientOfVariation = (RoundedDouble) 0.15 - }; - - failureProbabilityStructureWithErosion = double.NaN; - - widthFlowApertures = new VariationCoefficientNormalDistribution(2) - { - Mean = (RoundedDouble) double.NaN, - CoefficientOfVariation = (RoundedDouble) 0.05 - }; - deviationWaveDirection = new RoundedDouble(2, double.NaN); - stormDuration = new VariationCoefficientLogNormalDistribution(2) - { - Mean = (RoundedDouble) 6.0, - CoefficientOfVariation = (RoundedDouble) 0.25 - }; - - UpdateHeightStructureProperties(); - UpdateForeshoreProperties(); + UpdateStructureProperties(); } private static bool ValidProbabilityValue(double probability) { return !double.IsNaN(probability) && probability <= 1 && probability >= 0; } - #region Model factors - - /// - /// Gets or sets the model factor for super critical flow. - /// - /// Only sets the mean. - public NormalDistribution ModelFactorSuperCriticalFlow - { - get - { - return modelFactorSuperCriticalFlow; - } - set - { - modelFactorSuperCriticalFlow.Mean = value.Mean; - } - } - - #endregion - #region Hydraulic data /// - /// Gets or sets the hydraulic boundary location from which to use the assessment level. - /// - public HydraulicBoundaryLocation HydraulicBoundaryLocation { get; set; } - - /// /// Gets or sets the deviation of the wave direction. /// [degrees] /// @@ -162,23 +73,6 @@ } } - /// - /// Gets or sets the storm duration. - /// [hrs] - /// - /// Only sets the mean. - public VariationCoefficientLogNormalDistribution StormDuration - { - get - { - return stormDuration; - } - set - { - stormDuration.Mean = value.Mean; - } - } - #endregion #region Schematization @@ -200,227 +94,21 @@ } } - /// - /// Gets or sets the orientation of the normal of the structure. - /// [degrees] - /// - /// Thrown when the value for the orientation is not between [0, 360] degrees. - public RoundedDouble StructureNormalOrientation + protected override void UpdateStructureProperties() { - get + if (Structure != null) { - return structureNormalOrientation; + StructureNormalOrientation = Structure.StructureNormalOrientation; + LevelCrestStructure = Structure.LevelCrestStructure; + FlowWidthAtBottomProtection = Structure.FlowWidthAtBottomProtection; + CriticalOvertoppingDischarge = Structure.CriticalOvertoppingDischarge; + WidthFlowApertures = Structure.WidthFlowApertures; + FailureProbabilityStructureWithErosion = Structure.FailureProbabilityStructureWithErosion; + StorageStructureArea = Structure.StorageStructureArea; + AllowedLevelIncreaseStorage = Structure.AllowedLevelIncreaseStorage; } - set - { - if (double.IsNaN(value)) - { - structureNormalOrientation = value.ToPrecision(structureNormalOrientation.NumberOfDecimalPlaces); - return; - } - - RoundedDouble newOrientationValue = value.ToPrecision(structureNormalOrientation.NumberOfDecimalPlaces); - if (newOrientationValue < 0 || newOrientationValue > 360) - { - throw new ArgumentOutOfRangeException("value", RingtoetsCommonDataResources.Orientation_Value_needs_to_be_between_0_and_360); - } - structureNormalOrientation = newOrientationValue; - } } - /// - /// Gets or sets the allowed increase of level for the storage. - /// [m] - /// - public LogNormalDistribution AllowedLevelIncreaseStorage - { - get - { - return allowedLevelIncreaseStorage; - } - set - { - allowedLevelIncreaseStorage.Mean = value.Mean; - allowedLevelIncreaseStorage.StandardDeviation = value.StandardDeviation; - } - } - - /// - /// Gets or sets the storage structure area. - /// [m^2] - /// - public VariationCoefficientLogNormalDistribution StorageStructureArea - { - get - { - return storageStructureArea; - } - set - { - storageStructureArea.Mean = value.Mean; - storageStructureArea.CoefficientOfVariation = value.CoefficientOfVariation; - } - } - - /// - /// Gets or sets the flow width at the bottom protection. - /// [m] - /// - public LogNormalDistribution FlowWidthAtBottomProtection - { - get - { - return flowWidthAtBottomProtection; - } - set - { - flowWidthAtBottomProtection.Mean = value.Mean; - flowWidthAtBottomProtection.StandardDeviation = value.StandardDeviation; - } - } - - /// - /// Gets or sets the critical overtopping discharge. - /// [m^3/s/m] - /// - public VariationCoefficientLogNormalDistribution CriticalOvertoppingDischarge - { - get - { - return criticalOvertoppingDischarge; - } - set - { - criticalOvertoppingDischarge.Mean = value.Mean; - criticalOvertoppingDischarge.CoefficientOfVariation = value.CoefficientOfVariation; - } - } - - /// - /// Gets or sets the failure probability of structure given erosion. - /// [1/year] - /// - /// Thrown when the value of the probability - /// is not between [0, 1]. - public double FailureProbabilityStructureWithErosion - { - get - { - return failureProbabilityStructureWithErosion; - } - set - { - if (!ValidProbabilityValue(value)) - { - throw new ArgumentOutOfRangeException("value", RingtoetsCommonDataResources.FailureProbability_Value_needs_to_be_between_0_and_1); - } - failureProbabilityStructureWithErosion = value; - } - } - - /// - /// Gets or sets the width of flow apertures. - /// [m] - /// - public VariationCoefficientNormalDistribution WidthFlowApertures - { - get - { - return widthFlowApertures; - } - set - { - widthFlowApertures.Mean = value.Mean; - widthFlowApertures.CoefficientOfVariation = value.CoefficientOfVariation; - } - } - - /// - /// Gets or sets the height structure. - /// - public HeightStructure HeightStructure - { - get - { - return heightStructure; - } - set - { - heightStructure = value; - UpdateHeightStructureProperties(); - } - } - - /// - /// Gets or sets the foreshore profile. - /// - public ForeshoreProfile ForeshoreProfile - { - get - { - return foreshoreProfile; - } - set - { - foreshoreProfile = value; - UpdateForeshoreProperties(); - } - } - - public bool UseBreakWater { get; set; } - - public bool UseForeshore { get; set; } - - public RoundedPoint2DCollection ForeshoreGeometry - { - get - { - return foreshoreProfile != null - ? foreshoreProfile.Geometry - : new RoundedPoint2DCollection(2, Enumerable.Empty()); - } - } - - public BreakWater BreakWater { get; private set; } - - private void UpdateHeightStructureProperties() - { - if (heightStructure != null) - { - StructureNormalOrientation = heightStructure.StructureNormalOrientation; - LevelCrestStructure = heightStructure.LevelCrestStructure; - FlowWidthAtBottomProtection = heightStructure.FlowWidthAtBottomProtection; - CriticalOvertoppingDischarge = heightStructure.CriticalOvertoppingDischarge; - WidthFlowApertures = heightStructure.WidthFlowApertures; - FailureProbabilityStructureWithErosion = heightStructure.FailureProbabilityStructureWithErosion; - StorageStructureArea = heightStructure.StorageStructureArea; - AllowedLevelIncreaseStorage = heightStructure.AllowedLevelIncreaseStorage; - } - } - - private void UpdateForeshoreProperties() - { - if (foreshoreProfile == null) - { - UseForeshore = false; - UseBreakWater = false; - BreakWater = GetDefaultBreakWater(); - } - else - { - UseForeshore = foreshoreProfile.Geometry.Count() > 1; - UseBreakWater = foreshoreProfile.HasBreakWater; - BreakWater = foreshoreProfile.HasBreakWater ? - new BreakWater(foreshoreProfile.BreakWater.Type, foreshoreProfile.BreakWater.Height) : - GetDefaultBreakWater(); - } - } - - private static BreakWater GetDefaultBreakWater() - { - return new BreakWater(BreakWaterType.Dam, 0.0); - } - #endregion } } \ No newline at end of file