Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs =================================================================== diff -u -ra053684de9667dfb70aa8cf669e22843c2bd39ed -r1f2fbaa211ff678a1171a5c0a67e9a94c350eab5 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision a053684de9667dfb70aa8cf669e22843c2bd39ed) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision 1f2fbaa211ff678a1171a5c0a67e9a94c350eab5) @@ -207,11 +207,11 @@ } } - private static void ParseHydraRingOutput(GrassCoverErosionInwardsCalculation calculation, double contribution, ExceedanceProbabilityCalculationOutput output) + private static void ParseHydraRingOutput(GrassCoverErosionInwardsCalculation calculation, double norm, ExceedanceProbabilityCalculationOutput output) { if (output != null) { - GrassCoverErosionInwardsOutputCalculationService.Calculate(calculation, contribution, output.Beta); + GrassCoverErosionInwardsOutputCalculationService.Calculate(calculation, norm, output.Beta); } else { Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsOutputCalculationService.cs =================================================================== diff -u -ra053684de9667dfb70aa8cf669e22843c2bd39ed -r1f2fbaa211ff678a1171a5c0a67e9a94c350eab5 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsOutputCalculationService.cs (.../GrassCoverErosionInwardsOutputCalculationService.cs) (revision a053684de9667dfb70aa8cf669e22843c2bd39ed) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsOutputCalculationService.cs (.../GrassCoverErosionInwardsOutputCalculationService.cs) (revision 1f2fbaa211ff678a1171a5c0a67e9a94c350eab5) @@ -19,6 +19,7 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using MathNet.Numerics.Distributions; using Ringtoets.GrassCoverErosionInwards.Data; @@ -35,9 +36,9 @@ private readonly double probability; // Results - private double betaTrajectNorm; + private double requiredProbability; private double pTCrossAllowed; - private double pTCrossGEKB; + private double pTCrossGrassCoverErosionInwards; private double requiredReliability; private double reliability; private double factorOfSafety; @@ -50,18 +51,23 @@ } /// - /// Calculates + /// Calculates the given the , , and . /// - /// - /// - /// + /// The calculation which is used. + /// The norm which has been defined on the assessment section. + /// The probability result. + /// Thrown when is null. public static void Calculate(GrassCoverErosionInwardsCalculation calculation, double norm, double probability) { + if (calculation == null) + { + throw new ArgumentNullException("calculation"); + } var calculator = new GrassCoverErosionInwardsOutputCalculationService(norm, calculation.NormProbabilityInput.N, probability); calculator.Calculate(); - calculation.Output = new GrassCoverErosionInwardsOutput(calculator.betaTrajectNorm, + calculation.Output = new GrassCoverErosionInwardsOutput(calculator.requiredProbability, calculator.requiredReliability, calculator.probability, calculator.reliability, @@ -79,42 +85,42 @@ private void CalculateReliability() { - betaTrajectNorm = BetaTrajectNorm(norm); - pTCrossAllowed = PTCrossAllowed(probability, norm, lengthEffectN); - pTCrossGEKB = PTCrossGEKB(); + requiredProbability = RequiredProbability(norm); + pTCrossAllowed = PtCrossAllowed(probability, norm, lengthEffectN); + pTCrossGrassCoverErosionInwards = PtCrossGrassCoverErosionInwards(); } private void CalculateRequiredReliability() { - requiredReliability = BetaCrossAllowed(pTCrossAllowed); - reliability = BetaCrossGEKB(pTCrossGEKB); + requiredReliability = RequiredReliability(pTCrossAllowed); + reliability = Reliability(pTCrossGrassCoverErosionInwards); } #region Sub calculations - private static double BetaTrajectNorm(double contribution) + private static double RequiredProbability(double contribution) { return new Normal().InverseCumulativeDistribution(1 - 1.0/contribution); } - private static double PTCrossAllowed(double probability, double contribution, double n) + private static double PtCrossAllowed(double probability, double contribution, double n) { return probability*(1.0/contribution)/n; } - private static double PTCrossGEKB() + private static double PtCrossGrassCoverErosionInwards() { return 1.0/50000; } - private static double BetaCrossAllowed(double pTCrossAllowed) + private static double RequiredReliability(double pTCrossAllowed) { return new Normal().InverseCumulativeDistribution(1 - pTCrossAllowed); } - private static double BetaCrossGEKB(double pTCrossGEKB) + private static double Reliability(double pTCross) { - return new Normal().InverseCumulativeDistribution(1 - pTCrossGEKB); + return new Normal().InverseCumulativeDistribution(1 - pTCross); } private static double FactorOfSafety(double betaCrossGekb, double betaCrossAllowed) Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/GrassCoverErosionInwardsOutputCalculationServiceTest.cs =================================================================== diff -u -rc196992ccccf32ce0fd55b83a17e3f3574467a1e -r1f2fbaa211ff678a1171a5c0a67e9a94c350eab5 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/GrassCoverErosionInwardsOutputCalculationServiceTest.cs (.../GrassCoverErosionInwardsOutputCalculationServiceTest.cs) (revision c196992ccccf32ce0fd55b83a17e3f3574467a1e) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/GrassCoverErosionInwardsOutputCalculationServiceTest.cs (.../GrassCoverErosionInwardsOutputCalculationServiceTest.cs) (revision 1f2fbaa211ff678a1171a5c0a67e9a94c350eab5) @@ -19,6 +19,8 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; +using Core.Common.Base.Data; using NUnit.Framework; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.TestUtil; @@ -30,24 +32,84 @@ public class GrassCoverErosionInwardsOutputCalculationServiceTest { [Test] - public void Calculate_CompleteInput_ReturnsGrassCoverErosionInwardsOutputWithValues() + public void Calculate_NullCalculation_ThrowsArgumentNullException() { + // Setup & Call + TestDelegate test = () => GrassCoverErosionInwardsOutputCalculationService.Calculate(null, 0, 1); + + // Assert + var exception = Assert.Throws(test); + Assert.AreEqual("calculation", exception.ParamName); + } + + [Test] + [TestCase(30000, 3.98787893661)] + [TestCase(20000, 3.89059188641)] + public void RequiredProbability_DifferentInputs_ReturnsExpectedValue(int norm, double expectedResult) + { // Setup - const int norm = 30000; - const double probability = 0.24; var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput(), new GeneralNormProbabilityInput()); // Call + GrassCoverErosionInwardsOutputCalculationService.Calculate(calculation, norm, double.NaN); + + // Assert + RoundedDouble output = calculation.Output.RequiredProbability; + Assert.AreEqual(expectedResult, output, output.GetAccuracy()); + } + + [Test] + [TestCase(30000, 1, 4.149409984)] + [TestCase(30000, 0.24, 4.465183916)] + [TestCase(20000, 1, 4.055626981)] + [TestCase(20000, 0.24, 4.377587847)] + public void RequiredReliability_DifferentInputs_ReturnsExpectedValue(int norm, double probability, double expectedResult) + { + // Setup + var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput(), + new GeneralNormProbabilityInput()); + + // Call GrassCoverErosionInwardsOutputCalculationService.Calculate(calculation, norm, probability); // Assert - GrassCoverErosionInwardsOutput output = calculation.Output; - Assert.AreEqual(0.9199, output.FactorOfSafety, output.FactorOfSafety.GetAccuracy()); - Assert.AreEqual(probability, output.Probability, output.Probability.GetAccuracy()); - Assert.AreEqual(4.107, output.Reliability, output.Reliability.GetAccuracy()); - Assert.AreEqual(3.99, output.RequiredProbability, output.RequiredProbability.GetAccuracy()); - Assert.AreEqual(4.465, output.RequiredReliability, output.RequiredReliability.GetAccuracy()); + RoundedDouble output = calculation.Output.RequiredReliability; + Assert.AreEqual(expectedResult, output, output.GetAccuracy()); } + + [Test] + public void Reliability_DifferentInputs_ReturnsExpectedValue() + { + // Setup + var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput(), + new GeneralNormProbabilityInput()); + + // Call + GrassCoverErosionInwardsOutputCalculationService.Calculate(calculation, double.NaN, double.NaN); + + // Assert + RoundedDouble output = calculation.Output.Reliability; + Assert.AreEqual(4.107479655, output, output.GetAccuracy()); + } + + [Test] + [TestCase(30000, 1, 0.989894869)] + [TestCase(30000, 0.24, 0.919890363)] + [TestCase(20000, 1, 1.012785366)] + [TestCase(20000, 0.24, 0.938297482)] + public void FactorOfSafety_DifferentInputs_ReturnsExpectedValue(int norm, double probability, double expectedResult) + { + // Setup + var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput(), + new GeneralNormProbabilityInput()); + + // Call + GrassCoverErosionInwardsOutputCalculationService.Calculate(calculation, norm, probability); + + // Assert + RoundedDouble output = calculation.Output.FactorOfSafety; + Assert.AreEqual(expectedResult, output, output.GetAccuracy()); + } } } \ No newline at end of file