// 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;
using Ringtoets.Common.Data.Probabilistics;
using BaseConstructionProperties = Ringtoets.Common.Data.StructureBase.ConstructionProperties;
namespace Ringtoets.ClosingStructures.Data
{
///
/// Definition of a closing structure for the
///
public class ClosingStructure : StructureBase
{
///
/// Initializes a new instance of the class.
///
/// The construction properties.
/// Thrown when
/// or is null, empty or consists of whitespace.
/// Thrown when is null.
public ClosingStructure(ConstructionProperties constructionProperties) : base(constructionProperties)
{
StorageStructureArea = new VariationCoefficientLogNormalDistribution(2)
{
Mean = constructionProperties.StorageStructureArea.Mean,
CoefficientOfVariation = constructionProperties.StorageStructureArea.CoefficientOfVariation
};
AllowedLevelIncreaseStorage = new LogNormalDistribution(2)
{
Mean = constructionProperties.AllowedLevelIncreaseStorage.Mean,
StandardDeviation = constructionProperties.AllowedLevelIncreaseStorage.StandardDeviation
};
WidthFlowApertures = new NormalDistribution(2)
{
Mean = constructionProperties.WidthFlowApertures.Mean,
StandardDeviation = constructionProperties.WidthFlowApertures.StandardDeviation
};
LevelCrestStructureNotClosing = new NormalDistribution(2)
{
Mean = constructionProperties.LevelCrestStructureNotClosing.Mean,
StandardDeviation = constructionProperties.LevelCrestStructureNotClosing.StandardDeviation
};
InsideWaterLevel = new NormalDistribution(2)
{
Mean = constructionProperties.InsideWaterLevel.Mean,
StandardDeviation = constructionProperties.InsideWaterLevel.StandardDeviation
};
ThresholdHeightOpenWeir = new NormalDistribution(2)
{
Mean = constructionProperties.ThresholdHeightOpenWeir.Mean,
StandardDeviation = constructionProperties.ThresholdHeightOpenWeir.StandardDeviation
};
AreaFlowApertures = new LogNormalDistribution(2)
{
Mean = constructionProperties.AreaFlowApertures.Mean,
StandardDeviation = constructionProperties.AreaFlowApertures.StandardDeviation
};
CriticalOvertoppingDischarge = new VariationCoefficientLogNormalDistribution(2)
{
Mean = constructionProperties.CriticalOvertoppingDischarge.Mean,
CoefficientOfVariation = constructionProperties.CriticalOvertoppingDischarge.CoefficientOfVariation
};
FlowWidthAtBottomProtection = new LogNormalDistribution(2)
{
Mean = constructionProperties.FlowWidthAtBottomProtection.Mean,
StandardDeviation = constructionProperties.FlowWidthAtBottomProtection.StandardDeviation
};
ProbabilityOrFrequencyOpenStructureBeforeFlooding = constructionProperties.ProbabilityOrFrequencyOpenStructureBeforeFlooding;
FailureProbabilityOpenStructure = constructionProperties.FailureProbabilityOpenStructure;
IdenticalApertures = constructionProperties.IdenticalApertures;
FailureProbabilityReparation = constructionProperties.FailureProbabilityReparation;
InflowModelType = constructionProperties.InflowModelType;
}
///
/// Gets the storage area of the closing structure.
/// [m^2]
///
public VariationCoefficientLogNormalDistribution StorageStructureArea { get; private set; }
///
/// Gets the allowed increase of level for storage of the closing structure.
/// [m]
///
public LogNormalDistribution AllowedLevelIncreaseStorage { get; private set; }
///
/// Gets the width of the flow apertures of the closing structure.
/// [m]
///
public NormalDistribution WidthFlowApertures { get; private set; }
///
/// Gets the crest level of the opened closing structure.
/// [m+NAP]
///
public NormalDistribution LevelCrestStructureNotClosing { get; private set; }
///
/// Gets the interior water level of the closing structure.
/// [m+NAP]
///
public NormalDistribution InsideWaterLevel { get; private set; }
///
/// Gets the threshold height of the opened closing structure.
/// [m+NAP]
///
public NormalDistribution ThresholdHeightOpenWeir { get; private set; }
///
/// Gets the area of the flow aperture of the closing structure.
/// [m^2]
///
public LogNormalDistribution AreaFlowApertures { get; private set; }
///
/// Gets the critical overtopping discharge per meter of the closing structure.
/// [m^3/s/m]
///
public VariationCoefficientLogNormalDistribution CriticalOvertoppingDischarge { get; private set; }
///
/// Gets the flow width of the closing structure at the bottom protection.
/// [m]
///
public LogNormalDistribution FlowWidthAtBottomProtection { get; private set; }
///
/// Gets the probability or frequency of the closing structure being open before flooding.
/// [1/year]
///
/// Because this property can also be used to denote a frequency, there
/// is no guarantee that this property returns a value in the range [0.0, 1.0]
/// nor that formal rules of probability apply.
public double ProbabilityOrFrequencyOpenStructureBeforeFlooding { get; private set; }
///
/// Gets the probability of failing to close the closing structure.
/// [1/year]
///
public double FailureProbabilityOpenStructure { get; private set; }
///
/// Gets the number of identical apertures of the closing structure.
///
public int IdenticalApertures { get; private set; }
///
/// Gets the probability of failing to repair a failed closure of the closing structure.
/// [1/year]
///
public double FailureProbabilityReparation { get; private set; }
///
/// Gets the type of closing structure inflow model.
///
public ClosingStructureInflowModelType InflowModelType { get; private set; }
///
/// Class holding the various construction parameters for .
///
public new class ConstructionProperties : BaseConstructionProperties
{
///
/// Initializes a new instance of the class.
///
public ConstructionProperties()
{
StorageStructureArea = new VariationCoefficientLogNormalDistribution(2)
{
Mean = RoundedDouble.NaN,
CoefficientOfVariation = (RoundedDouble) 0.1
};
AllowedLevelIncreaseStorage = new LogNormalDistribution(2)
{
Mean = RoundedDouble.NaN,
StandardDeviation = (RoundedDouble) 0.1
};
WidthFlowApertures = new NormalDistribution(2)
{
Mean = RoundedDouble.NaN,
StandardDeviation = (RoundedDouble) 0.2
};
LevelCrestStructureNotClosing = new NormalDistribution(2)
{
Mean = RoundedDouble.NaN,
StandardDeviation = (RoundedDouble) 0.05
};
InsideWaterLevel = new NormalDistribution(2)
{
Mean = RoundedDouble.NaN,
StandardDeviation = (RoundedDouble) 0.1
};
ThresholdHeightOpenWeir = new NormalDistribution(2)
{
Mean = RoundedDouble.NaN,
StandardDeviation = (RoundedDouble) 0.1
};
AreaFlowApertures = new LogNormalDistribution(2)
{
Mean = RoundedDouble.NaN,
StandardDeviation = (RoundedDouble) 0.01
};
CriticalOvertoppingDischarge = new VariationCoefficientLogNormalDistribution(2)
{
Mean = RoundedDouble.NaN,
CoefficientOfVariation = (RoundedDouble) 0.15
};
FlowWidthAtBottomProtection = new LogNormalDistribution(2)
{
Mean = RoundedDouble.NaN,
StandardDeviation = (RoundedDouble) 0.05
};
ProbabilityOrFrequencyOpenStructureBeforeFlooding = 1;
FailureProbabilityOpenStructure = 1;
IdenticalApertures = 1;
FailureProbabilityReparation = 1;
InflowModelType = ClosingStructureInflowModelType.VerticalWall;
}
///
/// Gets the storage area of the closing structure.
/// [m^2]
///
public VariationCoefficientLogNormalDistribution StorageStructureArea { get; }
///
/// Gets the allowed increase of level for storage of the closing structure.
/// [m]
///
public LogNormalDistribution AllowedLevelIncreaseStorage { get; }
///
/// Gets the width of the flow apertures of the closing structure.
/// [m]
///
public NormalDistribution WidthFlowApertures { get; }
///
/// Gets the crest level of the opened closing structure.
/// [m+NAP]
///
public NormalDistribution LevelCrestStructureNotClosing { get; }
///
/// Gets the interior water level of the closing structure.
/// [m+NAP]
///
public NormalDistribution InsideWaterLevel { get; }
///
/// Gets the threshold height of the opened closing structure.
/// [m+NAP]
///
public NormalDistribution ThresholdHeightOpenWeir { get; }
///
/// Gets the area of the flow aperture of the closing structure.
/// [m^2]
///
public LogNormalDistribution AreaFlowApertures { get; }
///
/// Gets the critical overtopping discharge per meter of the closing structure.
/// [m^3/s/m]
///
public VariationCoefficientLogNormalDistribution CriticalOvertoppingDischarge { get; }
///
/// Gets the flow width of the closing structure at the bottom protection.
/// [m]
///
public LogNormalDistribution FlowWidthAtBottomProtection { get; }
///
/// Gets or sets the probability or frequency of the closing structure being open before flooding.
/// [1/year]
///
/// Because this property can also be used to denote a frequency, there
/// is no guarantee that this property returns a value in the range [0.0, 1.0]
/// nor that formal rules of probability apply.
public double ProbabilityOrFrequencyOpenStructureBeforeFlooding { get; set; }
///
/// Gets or sets the probability of failing to close the closing structure.
/// [1/year]
///
public double FailureProbabilityOpenStructure { get; set; }
///
/// Gets or sets the number of identical apertures of the closing structure.
///
public int IdenticalApertures { get; set; }
///
/// Gets or sets the probability of failing to repair a failed closure of the closing structure.
/// [1/year]
///
public double FailureProbabilityReparation { get; set; }
///
/// Gets or sets the type of closing structure inflow model.
///
public ClosingStructureInflowModelType InflowModelType { get; set; }
}
}
}