/// <summary> /// Create the output of the calculation. /// </summary> /// <param name="duneLocationName">The name of the location.</param> /// <param name="targetReliability">The target reliability for the calculation.</param> /// <param name="targetProbability">The target probability for the calculation.</param> /// <param name="messageProvider">The object which is used to build log messages.</param> /// <returns>A <see cref="DuneLocationCalculationOutput"/>.</returns> /// <exception cref="ArgumentOutOfRangeException">Thrown when <paramref name="targetProbability"/> /// or the calculated probability falls outside the [0.0, 1.0] range and is not <see cref="double.NaN"/>.</exception> private DuneLocationCalculationOutput CreateDuneLocationCalculationOutput(string duneLocationName, double targetReliability, double targetProbability, ICalculationMessageProvider messageProvider) { double reliability = calculator.ReliabilityIndex; double probability = StatisticsConverter.ReliabilityToProbability(reliability); CalculationConvergence converged = RiskeerCommonDataCalculationService.GetCalculationConvergence(calculator.Converged); if (converged != CalculationConvergence.CalculatedConverged) { log.WarnFormat(messageProvider.GetCalculatedNotConvergedMessage(duneLocationName)); } return(new DuneLocationCalculationOutput(converged, new DuneLocationCalculationOutput.ConstructionProperties { WaterLevel = calculator.WaterLevel, WaveHeight = calculator.WaveHeight, WavePeriod = calculator.WavePeriod, TargetProbability = targetProbability, TargetReliability = targetReliability, CalculatedProbability = probability, CalculatedReliability = reliability })); }
public void Constructor_ExpectedValues(double targetProbability, double calculatedProbability) { // Setup const double waterLevel = 3.09378; const double waveHeight = 4.29884; const double wavePeakPeriod = 0.19435; const double waveAngle = 180.62353; const double waveDirection = 230.67893; const double targetReliability = 3000; const double calculatedReliability = 4000; const CalculationConvergence calculationConvergence = CalculationConvergence.NotCalculated; // Call var output = new WaveConditionsOutput(waterLevel, waveHeight, wavePeakPeriod, waveAngle, waveDirection, targetProbability, targetReliability, calculatedProbability, calculatedReliability, calculationConvergence); // Assert Assert.IsInstanceOf <CloneableObservable>(output); Assert.IsInstanceOf <ICalculationOutput>(output); Assert.AreEqual(waterLevel, output.WaterLevel, output.WaterLevel.GetAccuracy()); Assert.AreEqual(waveHeight, output.WaveHeight, output.WaveHeight.GetAccuracy()); Assert.AreEqual(wavePeakPeriod, output.WavePeakPeriod, output.WavePeakPeriod.GetAccuracy()); Assert.AreEqual(waveAngle, output.WaveAngle, output.WaveAngle.GetAccuracy()); Assert.AreEqual(waveDirection, output.WaveDirection, output.WaveDirection.GetAccuracy()); Assert.AreEqual(targetProbability, output.TargetProbability); Assert.AreEqual(5, output.TargetReliability.NumberOfDecimalPlaces); Assert.AreEqual(targetReliability, output.TargetReliability, output.TargetReliability.GetAccuracy()); Assert.AreEqual(calculatedProbability, output.CalculatedProbability); Assert.AreEqual(5, output.CalculatedReliability.NumberOfDecimalPlaces); Assert.AreEqual(calculatedReliability, output.CalculatedReliability, output.CalculatedReliability.GetAccuracy()); Assert.AreEqual(calculationConvergence, output.CalculationConvergence); }
public void GetCalculationConvergence_WithDifferentValues_ReturnsExpectedConvergence(bool?value, CalculationConvergence expectedConvergence) { // Call CalculationConvergence calculationConverged = RiskeerCommonDataCalculationService.GetCalculationConvergence(value); // Assert Assert.AreEqual(expectedConvergence, calculationConverged); }
/// <summary> /// Creates the <see cref="WaveConditionsOutput"/> based on the provided parameters. /// </summary> /// <param name="waterLevel">The water level that was calculated for.</param> /// <param name="waveHeight">The calculated wave height.</param> /// <param name="wavePeakPeriod">The calculated wave peak period.</param> /// <param name="waveAngle">The calculated wave angle with respect to the dike normal.</param> /// <param name="waveDirection">The calculated wave direction with respect to the North.</param> /// <param name="targetProbability">The target probability that was calculated for.</param> /// <param name="calculatedReliability">The calculated reliability.</param> /// <param name="calculatedConvergence">The calculated convergence value.</param> /// <returns>The created <see cref="WaveConditionsOutput"/>.</returns> public static WaveConditionsOutput CreateOutput(double waterLevel, double waveHeight, double wavePeakPeriod, double waveAngle, double waveDirection, double targetProbability, double calculatedReliability, bool?calculatedConvergence) { double targetReliability = StatisticsConverter.ProbabilityToReliability(targetProbability); double calculatedProbability = StatisticsConverter.ReliabilityToProbability(calculatedReliability); CalculationConvergence convergence = RiskeerCommonDataCalculationService.GetCalculationConvergence(calculatedConvergence); return(new WaveConditionsOutput(waterLevel, waveHeight, wavePeakPeriod, waveAngle, waveDirection, targetProbability, targetReliability, calculatedProbability, calculatedReliability, convergence)); }
/// <summary> /// Creates a new instance of <see cref="HydraulicLoadsOutput"/>. /// </summary> /// <param name="targetProbability">The target probability used during the calculation.</param> /// <param name="targetReliability">The reliability index used during the calculation.</param> /// <param name="calculatedProbability">The calculated probability.</param> /// <param name="calculatedReliability">The calculated reliability index.</param> /// <param name="calculationConvergence">The convergence status of the calculation.</param> /// <param name="generalResult">The general result with the fault tree illustration points.</param> /// <exception cref="ArgumentOutOfRangeException">Thrown when <paramref name="targetProbability"/> /// or <paramref name="calculatedProbability"/> falls outside the [0.0, 1.0] range and is not <see cref="double.NaN"/>.</exception> protected HydraulicLoadsOutput(double targetProbability, double targetReliability, double calculatedProbability, double calculatedReliability, CalculationConvergence calculationConvergence, GeneralResult <TopLevelFaultTreeIllustrationPoint> generalResult) { ProbabilityHelper.ValidateProbability(targetProbability, nameof(targetProbability), true); ProbabilityHelper.ValidateProbability(calculatedProbability, nameof(calculatedProbability), true); TargetProbability = targetProbability; TargetReliability = new RoundedDouble(5, targetReliability); CalculatedProbability = calculatedProbability; CalculatedReliability = new RoundedDouble(5, calculatedReliability); CalculationConvergence = calculationConvergence; GeneralResult = generalResult; }
public void Constructor_WithInvalidCalculationConvergenceValue_ThrowsInvalidEnumArgumentException() { // Setup const CalculationConvergence invalidEnumValue = (CalculationConvergence)9001; // Call TestDelegate call = () => new WaveConditionsOutput(double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, invalidEnumValue); // Assert const string expectedMessage = "The value of argument 'value' (9001) is invalid for Enum type 'CalculationConvergence'."; string paramName = TestHelper.AssertThrowsArgumentExceptionAndTestMessage <InvalidEnumArgumentException>(call, expectedMessage).ParamName; Assert.AreEqual("value", paramName); }
/// <summary> /// Creates a new instance of <see cref="WaveConditionsOutput"/>. /// </summary> /// <param name="waterLevel">The water level for which the calculation has been performed.</param> /// <param name="waveHeight">The calculated wave height.</param> /// <param name="wavePeakPeriod">The calculated wave peak period.</param> /// <param name="waveAngle">The calculated wave angle with respect to the dike normal.</param> /// <param name="waveDirection">The calculated wave direction with respect to the North.</param> /// <param name="targetProbability">The target probability.</param> /// <param name="targetReliability">The target beta (reliability).</param> /// <param name="calculatedProbability">The calculated probability.</param> /// <param name="calculatedReliability">The calculated beta (reliability).</param> /// <param name="calculationConvergence">The convergence status of the calculation.</param> /// <exception cref="ArgumentOutOfRangeException">Thrown when <paramref name="targetProbability"/> or /// <paramref name="calculatedProbability"/> falls outside the [0.0, 1.0] range and is not /// <see cref="double.NaN"/>.</exception> /// <exception cref="InvalidEnumArgumentException">Thrown when <paramref name="calculationConvergence"/> /// has an invalid enum value of type <see cref="CalculationConvergence"/>.</exception> public WaveConditionsOutput(double waterLevel, double waveHeight, double wavePeakPeriod, double waveAngle, double waveDirection, double targetProbability, double targetReliability, double calculatedProbability, double calculatedReliability, CalculationConvergence calculationConvergence) { WaterLevel = new RoundedDouble(2, waterLevel); WaveHeight = new RoundedDouble(2, waveHeight); WavePeakPeriod = new RoundedDouble(2, wavePeakPeriod); WaveAngle = new RoundedDouble(2, waveAngle); WaveDirection = new RoundedDouble(2, waveDirection); TargetProbability = targetProbability; TargetReliability = new RoundedDouble(5, targetReliability); CalculatedProbability = calculatedProbability; CalculatedReliability = new RoundedDouble(5, calculatedReliability); CalculationConvergence = calculationConvergence; }
/// <summary> /// Creates a new instance of <see cref="HydraulicBoundaryLocationCalculationOutput"/>. /// </summary> /// <param name="result">The calculation result.</param> /// <param name="targetProbability">The target probability used during the calculation.</param> /// <param name="targetReliability">The reliability index used during the calculation.</param> /// <param name="calculatedProbability">The calculated probability.</param> /// <param name="calculatedReliability">The calculated reliability.</param> /// <param name="calculationConvergence">The convergence status of the calculation.</param> /// <param name="generalResult">The general result of this output with sub mechanism illustration points.</param> /// <exception cref="ArgumentOutOfRangeException">Thrown when <paramref name="targetProbability"/> /// or <paramref name="calculatedProbability"/> falls outside the [0.0, 1.0] range and is not <see cref="double.NaN"/>.</exception> public HydraulicBoundaryLocationCalculationOutput(double result, double targetProbability, double targetReliability, double calculatedProbability, double calculatedReliability, CalculationConvergence calculationConvergence, GeneralResult <TopLevelSubMechanismIllustrationPoint> generalResult) { ProbabilityHelper.ValidateProbability(targetProbability, nameof(targetProbability), true); ProbabilityHelper.ValidateProbability(calculatedProbability, nameof(calculatedProbability), true); Result = new RoundedDouble(2, result); TargetProbability = targetProbability; TargetReliability = new RoundedDouble(5, targetReliability); CalculatedProbability = calculatedProbability; CalculatedReliability = new RoundedDouble(5, calculatedReliability); CalculationConvergence = calculationConvergence; GeneralResult = generalResult; }
/// <summary> /// Creates a new instance of <see cref="DuneLocationCalculationOutput"/>. /// </summary> /// <param name="calculationConvergence">The convergence status of the calculation.</param> /// <param name="constructionProperties">The container for the properties for the <see cref="DuneLocationCalculationOutput"/>.</param> /// <exception cref="ArgumentNullException">Thrown when <paramref name="constructionProperties"/> is <c>null</c>.</exception> /// <exception cref="ArgumentOutOfRangeException">Thrown when <see cref="ConstructionProperties.TargetProbability"/> /// or <see cref="ConstructionProperties.CalculatedProbability"/> falls outside the [0.0, 1.0] range.</exception> public DuneLocationCalculationOutput(CalculationConvergence calculationConvergence, ConstructionProperties constructionProperties) { if (constructionProperties == null) { throw new ArgumentNullException(nameof(constructionProperties)); } WaterLevel = new RoundedDouble(2, constructionProperties.WaterLevel); WaveHeight = new RoundedDouble(2, constructionProperties.WaveHeight); WavePeriod = new RoundedDouble(2, constructionProperties.WavePeriod); ProbabilityHelper.ValidateProbability(constructionProperties.TargetProbability, nameof(TargetProbability), true); ProbabilityHelper.ValidateProbability(constructionProperties.CalculatedProbability, nameof(CalculatedProbability), true); TargetProbability = constructionProperties.TargetProbability; TargetReliability = new RoundedDouble(5, constructionProperties.TargetReliability); CalculatedProbability = constructionProperties.CalculatedProbability; CalculatedReliability = new RoundedDouble(5, constructionProperties.CalculatedReliability); CalculationConvergence = calculationConvergence; }
/// <summary> /// Creates the output of an overtopping rate calculation. /// </summary> /// <param name="calculator">The calculator used for performing the calculation.</param> /// <param name="calculationName">The name of the calculation.</param> /// <param name="targetReliability">The target reliability for the calculation.</param> /// <param name="targetProbability">The target probability for the calculation.</param> /// <param name="shouldIllustrationPointsBeCalculated">Indicates whether the illustration points /// should be calculated for the calculation.</param> /// <returns>A <see cref="OvertoppingRateOutput"/>.</returns> /// <exception cref="ArgumentOutOfRangeException">Thrown when <paramref name="targetProbability"/> /// or the calculated probability falls outside the [0.0, 1.0] range and is not <see cref="double.NaN"/>.</exception> private static OvertoppingRateOutput CreateOvertoppingRateOutput(IHydraulicLoadsCalculator calculator, string calculationName, double targetReliability, double targetProbability, bool shouldIllustrationPointsBeCalculated) { double overtoppingRate = calculator.Value; double reliability = calculator.ReliabilityIndex; double probability = StatisticsConverter.ReliabilityToProbability(reliability); CalculationConvergence converged = RiskeerCommonDataCalculationService.GetCalculationConvergence(calculator.Converged); if (converged != CalculationConvergence.CalculatedConverged) { log.Warn( string.Format(Resources.GrassCoverErosionInwardsCalculationService_Calculation_of_type_0_for_calculation_with_name_1_not_converged, Resources.GrassCoverErosionInwardsCalculationService_OvertoppingRate, calculationName)); } GeneralResult <TopLevelFaultTreeIllustrationPoint> generalResult = null; try { generalResult = shouldIllustrationPointsBeCalculated ? ConvertIllustrationPointsResult(calculator.IllustrationPointsResult, calculator.IllustrationPointsParserErrorMessage) : null; } catch (ArgumentException e) { log.Warn(string.Format(Resources.GrassCoverErosionInwardsCalculationService_CalculateOvertopping_Error_in_reading_illustrationPoints_for_CalculationName_0_overtopping_rate_with_ErrorMessage_1, calculationName, e.Message)); } return(new OvertoppingRateOutput(overtoppingRate, targetProbability, targetReliability, probability, reliability, converged, generalResult)); }
/// <summary> /// Creates the output of the calculation. /// </summary> /// <param name="messageProvider">The object which is used to build log messages.</param> /// <param name="hydraulicBoundaryLocationName">The name of the hydraulic boundary location.</param> /// <param name="targetReliability">The target reliability for the calculation.</param> /// <param name="targetProbability">The target probability for the calculation.</param> /// <param name="calculatorConverged">The value indicating whether the calculation converged.</param> /// <param name="generalResult">The general result with illustration points.</param> /// <returns>A <see cref="HydraulicBoundaryLocationCalculationOutput"/>.</returns> /// <exception cref="ArgumentOutOfRangeException">Thrown when <paramref name="targetProbability"/> /// or the calculated probability falls outside the [0.0, 1.0] range and is not <see cref="double.NaN"/>.</exception> private HydraulicBoundaryLocationCalculationOutput CreateOutput(ICalculationMessageProvider messageProvider, string hydraulicBoundaryLocationName, double targetReliability, double targetProbability, bool?calculatorConverged, GeneralResult <TopLevelSubMechanismIllustrationPoint> generalResult) { double waveHeight = calculator.WaveHeight; double reliability = calculator.ReliabilityIndex; double probability = StatisticsConverter.ReliabilityToProbability(reliability); CalculationConvergence converged = RiskeerCommonDataCalculationService.GetCalculationConvergence(calculatorConverged); if (converged != CalculationConvergence.CalculatedConverged) { log.Warn(messageProvider.GetCalculatedNotConvergedMessage(hydraulicBoundaryLocationName)); } return(new HydraulicBoundaryLocationCalculationOutput(waveHeight, targetProbability, targetReliability, probability, reliability, converged, generalResult)); }
/// <summary> /// Creates a new instance of <see cref="TestHydraulicLoadsOutput"/>. /// </summary> /// <param name="targetProbability">The target probability used during the calculation.</param> /// <param name="targetReliability">The reliability index used during the calculation.</param> /// <param name="calculatedProbability">The calculated probability.</param> /// <param name="calculatedReliability">The calculated reliability index.</param> /// <param name="calculationConvergence">The convergence status of the calculation.</param> /// <param name="generalResult">The general result with the fault tree illustration points.</param> /// <exception cref="ArgumentOutOfRangeException">Thrown when <paramref name="targetProbability"/> /// or <paramref name="calculatedProbability"/> falls outside the [0.0, 1.0] range and is not <see cref="double.NaN"/>.</exception> public TestHydraulicLoadsOutput(double targetProbability, double targetReliability, double calculatedProbability, double calculatedReliability, CalculationConvergence calculationConvergence, GeneralResult <TopLevelFaultTreeIllustrationPoint> generalResult) : base(targetProbability, targetReliability, calculatedProbability, calculatedReliability, calculationConvergence, generalResult) { }
/// <summary> /// Creates a new instance of <see cref="TestDikeHeightOutput"/>. /// </summary> /// <param name="dikeHeight">The dike height to set to the output.</param> /// <param name="calculationConvergence">The <see cref="CalculationConvergence"/> to set to the output.</param> public TestDikeHeightOutput(double dikeHeight, CalculationConvergence calculationConvergence = CalculationConvergence.NotCalculated) : base(dikeHeight, double.NaN, double.NaN, double.NaN, double.NaN, calculationConvergence, null) { }
/// <summary> /// Creates a new instance of <see cref="OvertoppingRateOutput"/>. /// </summary> /// <param name="overtoppingRate">The calculated overtopping rate.</param> /// <param name="targetProbability">The target probability used during the calculation.</param> /// <param name="targetReliability">The reliability index used during the calculation.</param> /// <param name="calculatedProbability">The calculated probability.</param> /// <param name="calculatedReliability">The calculated reliability index.</param> /// <param name="calculationConvergence">The convergence status of the calculation.</param> /// <param name="generalResult">The general result with illustration points belonging to /// this output.</param> /// <exception cref="ArgumentOutOfRangeException">Thrown when <paramref name="targetProbability"/> /// or <paramref name="calculatedProbability"/> falls outside the [0.0, 1.0] range and is not <see cref="double.NaN"/>.</exception> public OvertoppingRateOutput(double overtoppingRate, double targetProbability, double targetReliability, double calculatedProbability, double calculatedReliability, CalculationConvergence calculationConvergence, GeneralResult <TopLevelFaultTreeIllustrationPoint> generalResult) : base(targetProbability, targetReliability, calculatedProbability, calculatedReliability, calculationConvergence, generalResult) { OvertoppingRate = new RoundedDouble(5, overtoppingRate); }
public void CreateOutput_ValidParameters_ReturnsExpectedValues(bool?convergence, CalculationConvergence expectedConvergence) { // Setup const double waterLevel = 1.1; const double waveHeight = 2.2; const double wavePeakPeriod = 3.3; const double waveAngle = 4.4; const double waveDirection = 5.5; const double targetProbability = 1 / 6.6; const double calculatedReliability = -7.7; // Call WaveConditionsOutput output = WaveConditionsOutputFactory.CreateOutput(waterLevel, waveHeight, wavePeakPeriod, waveAngle, waveDirection, targetProbability, calculatedReliability, convergence); // Assert Assert.AreEqual(waterLevel, output.WaterLevel, output.WaterLevel.GetAccuracy()); Assert.AreEqual(waveHeight, output.WaveHeight, output.WaveHeight.GetAccuracy()); Assert.AreEqual(wavePeakPeriod, output.WavePeakPeriod, output.WavePeakPeriod.GetAccuracy()); Assert.AreEqual(waveAngle, output.WaveAngle, output.WaveAngle.GetAccuracy()); Assert.AreEqual(waveDirection, output.WaveDirection, output.WaveDirection.GetAccuracy()); Assert.AreEqual(targetProbability, output.TargetProbability, 1e-6); Assert.AreEqual(StatisticsConverter.ProbabilityToReliability(targetProbability), output.TargetReliability, output.TargetReliability.GetAccuracy()); Assert.AreEqual(calculatedReliability, output.CalculatedReliability, output.CalculatedReliability.GetAccuracy()); Assert.AreEqual(StatisticsConverter.ReliabilityToProbability(calculatedReliability), output.CalculatedProbability, 1e-6); Assert.AreEqual(expectedConvergence, output.CalculationConvergence); }
/// <summary> /// Creates a new instance of <see cref="TestHydraulicBoundaryLocationCalculationOutput"/>. /// </summary> /// <param name="result">The result to set in the output.</param> /// <param name="calculationConvergence">The <see cref="CalculationConvergence"/> to set in the output.</param> public TestHydraulicBoundaryLocationCalculationOutput(double result, CalculationConvergence calculationConvergence = CalculationConvergence.NotCalculated) : base(result, double.NaN, double.NaN, double.NaN, double.NaN, calculationConvergence, null) { }
/// <summary> /// Creates a new instance of <see cref="DikeHeightOutput"/>. /// </summary> /// <param name="dikeHeight">The calculated dike height.</param> /// <param name="targetProbability">The target probability used during the calculation.</param> /// <param name="targetReliability">The reliability index used during the calculation.</param> /// <param name="calculatedProbability">The calculated probability.</param> /// <param name="calculatedReliability">The calculated reliability index.</param> /// <param name="calculationConvergence">The convergence status of the calculation.</param> /// <param name="generalResult">The general result with the illustration points for this output.</param> /// <exception cref="ArgumentOutOfRangeException">Thrown when <paramref name="targetProbability"/> /// or <paramref name="calculatedProbability"/> falls outside the [0.0, 1.0] range and is not <see cref="double.NaN"/>.</exception> public DikeHeightOutput(double dikeHeight, double targetProbability, double targetReliability, double calculatedProbability, double calculatedReliability, CalculationConvergence calculationConvergence, GeneralResult <TopLevelFaultTreeIllustrationPoint> generalResult) : base(targetProbability, targetReliability, calculatedProbability, calculatedReliability, calculationConvergence, generalResult) { DikeHeight = new RoundedDouble(2, dikeHeight); }
/// <summary> /// Creates a new instance of <see cref="TestOvertoppingRateOutput"/>. /// </summary> /// <param name="overtoppingRate">The overtopping rate to set to the output.</param> /// <param name="calculationConvergence">The <see cref="CalculationConvergence"/> to set to the output.</param> public TestOvertoppingRateOutput(double overtoppingRate, CalculationConvergence calculationConvergence = CalculationConvergence.NotCalculated) : base(overtoppingRate, double.NaN, double.NaN, double.NaN, double.NaN, calculationConvergence, null) { }