Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/IWaveConditionsCosineCalculator.cs =================================================================== diff -u -rbc9c19b950e12688f8f97a659af2f2cd3295956a -r484b07491e6cbb52ef2dc36bb236fb3b349d3141 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/IWaveConditionsCosineCalculator.cs (.../IWaveConditionsCosineCalculator.cs) (revision bc9c19b950e12688f8f97a659af2f2cd3295956a) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/IWaveConditionsCosineCalculator.cs (.../IWaveConditionsCosineCalculator.cs) (revision 484b07491e6cbb52ef2dc36bb236fb3b349d3141) @@ -31,18 +31,33 @@ { /// /// Gets the height of the wave. + /// [m] /// double WaveHeight { get; } /// - /// Gets the angle of the wave. + /// Gets the angle of the wave with respect to the dike normal. + /// [deg] /// double WaveAngle { get; } /// + /// Gets the direction of the wave with respect to the North. + /// [deg] + /// + double WaveDirection { get; } + + /// /// Gets the peak period of the wave. + /// [s] /// double WavePeakPeriod { get; } + + /// + /// Gets the calculated reliability index. + /// [-] + /// + double ReliabilityIndex { get; } /// /// Gets the temporary output directory that is generated during the Hydra-Ring calculation.s Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/WaveConditionsCosineCalculator.cs =================================================================== diff -u -reb5faa58e3d91d44faf0d7544fa0c33be54c0c4a -r484b07491e6cbb52ef2dc36bb236fb3b349d3141 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/WaveConditionsCosineCalculator.cs (.../WaveConditionsCosineCalculator.cs) (revision eb5faa58e3d91d44faf0d7544fa0c33be54c0c4a) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/WaveConditionsCosineCalculator.cs (.../WaveConditionsCosineCalculator.cs) (revision 484b07491e6cbb52ef2dc36bb236fb3b349d3141) @@ -34,6 +34,7 @@ internal class WaveConditionsCosineCalculator : HydraRingCalculatorBase, IWaveConditionsCosineCalculator { private readonly WaveConditionsCalculationParser waveConditionsCalculationParser; + private readonly ReliabilityIndexCalculationParser reliabilityIndexCalculationParser; /// /// Create a new instance of . @@ -45,15 +46,20 @@ : base(hlcdDirectory, ringId) { waveConditionsCalculationParser = new WaveConditionsCalculationParser(); + reliabilityIndexCalculationParser = new ReliabilityIndexCalculationParser(); WaveHeight = double.NaN; WaveAngle = double.NaN; WavePeakPeriod = double.NaN; + WaveDirection = double.NaN; + ReliabilityIndex = double.NaN; } public double WaveHeight { get; private set; } public double WaveAngle { get; private set; } public double WavePeakPeriod { get; private set; } + public double WaveDirection { get; private set; } + public double ReliabilityIndex { get; private set; } public void Calculate(WaveConditionsCosineCalculationInput input) { @@ -63,6 +69,7 @@ protected override IEnumerable GetParsers() { yield return waveConditionsCalculationParser; + yield return reliabilityIndexCalculationParser; } protected override void SetOutputs() @@ -71,8 +78,14 @@ { WaveHeight = waveConditionsCalculationParser.Output.WaveHeight; WaveAngle = waveConditionsCalculationParser.Output.WaveAngle; + WaveDirection = waveConditionsCalculationParser.Output.WaveDirection; WavePeakPeriod = waveConditionsCalculationParser.Output.WavePeakPeriod; } + + if (reliabilityIndexCalculationParser.Output != null) + { + ReliabilityIndex = reliabilityIndexCalculationParser.Output.CalculatedReliabilityIndex; + } } } } \ No newline at end of file Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Output/WaveConditionsCalculationOutput.cs =================================================================== diff -u -r2973c5f790a5131e427bd5f73e2a620044199639 -r484b07491e6cbb52ef2dc36bb236fb3b349d3141 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Output/WaveConditionsCalculationOutput.cs (.../WaveConditionsCalculationOutput.cs) (revision 2973c5f790a5131e427bd5f73e2a620044199639) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Output/WaveConditionsCalculationOutput.cs (.../WaveConditionsCalculationOutput.cs) (revision 484b07491e6cbb52ef2dc36bb236fb3b349d3141) @@ -31,12 +31,14 @@ /// /// The calculated wave height. /// The calculated wave peak period. - /// The calculated wave angle. - public WaveConditionsCalculationOutput(double waveHeight, double wavePeakPeriod, double waveAngle) + /// The calculated wave angle with respect to the dike normal.. + /// The calculated wave direction with respect to North. + public WaveConditionsCalculationOutput(double waveHeight, double wavePeakPeriod, double waveAngle, double waveDirection) { WaveHeight = waveHeight; WavePeakPeriod = wavePeakPeriod; WaveAngle = waveAngle; + WaveDirection = waveDirection; } /// @@ -50,8 +52,13 @@ public double WavePeakPeriod { get; private set; } /// - /// Gets the calculated wave angle. + /// Gets the calculated wave angle with respect to the dike normal. /// public double WaveAngle { get; private set; } + + /// + /// Gets the calculated wave direction with respect to North. + /// + public double WaveDirection { get; set; } } } \ No newline at end of file Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/WaveConditionsCalculationParser.cs =================================================================== diff -u -r12fa48e392e145311f2f6fe5822a8692594aaf0f -r484b07491e6cbb52ef2dc36bb236fb3b349d3141 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/WaveConditionsCalculationParser.cs (.../WaveConditionsCalculationParser.cs) (revision 12fa48e392e145311f2f6fe5822a8692594aaf0f) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/WaveConditionsCalculationParser.cs (.../WaveConditionsCalculationParser.cs) (revision 484b07491e6cbb52ef2dc36bb236fb3b349d3141) @@ -33,13 +33,15 @@ public class WaveConditionsCalculationParser : IHydraRingFileParser { private const string waveAngleText = "Wave angle"; + private const string waveDirectionText = "Wave direction"; private const string waveHeightText = "Wave height"; private const string wavePeakPeriodText = "Wave period"; private const string reductionFactorText = "reduction factor"; private const char equalsCharacter = '='; private double? waveAngle; + private double? waveDirection; private double? waveHeight; private double? wavePeakPeriod; @@ -65,9 +67,10 @@ private void SetOutput() { - if (waveAngle != null && waveHeight != null && wavePeakPeriod != null) + if (waveAngle != null && waveHeight != null && wavePeakPeriod != null && waveDirection != null) { - Output = new WaveConditionsCalculationOutput(waveHeight.Value, wavePeakPeriod.Value, waveAngle.Value); + Output = new WaveConditionsCalculationOutput(waveHeight.Value, wavePeakPeriod.Value, waveAngle.Value, + waveDirection.Value); } } @@ -82,6 +85,7 @@ string currentLine = file.ReadLine(); waveAngle = TryParseWaveAngle(currentLine) ?? waveAngle; + waveDirection = TryParseWaveDirection(currentLine) ?? waveDirection; waveHeight = TryParseWaveHeight(currentLine) ?? waveHeight; wavePeakPeriod = TryParseWavePeakPeriod(currentLine) ?? wavePeakPeriod; } @@ -99,6 +103,17 @@ return null; } + private static double? TryParseWaveDirection(string line) + { + if (line.Contains(waveDirectionText)) + { + string resultAsString = line.Split(equalsCharacter)[1].Trim(); + return ParseStringResult(resultAsString); + } + + return null; + } + private static double? TryParseWaveHeight(string line) { if (line.Contains(waveHeightText)) Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Calculator/WaveConditionsCosineCalculatorTest.cs =================================================================== diff -u -r07cf1185ccd0260f3e72818dff093ff39dbdd816 -r484b07491e6cbb52ef2dc36bb236fb3b349d3141 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Calculator/WaveConditionsCosineCalculatorTest.cs (.../WaveConditionsCosineCalculatorTest.cs) (revision 07cf1185ccd0260f3e72818dff093ff39dbdd816) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Calculator/WaveConditionsCosineCalculatorTest.cs (.../WaveConditionsCosineCalculatorTest.cs) (revision 484b07491e6cbb52ef2dc36bb236fb3b349d3141) @@ -37,7 +37,9 @@ Assert.IsInstanceOf(calculator); Assert.IsNaN(calculator.WaveHeight); Assert.IsNaN(calculator.WaveAngle); + Assert.IsNaN(calculator.WaveDirection); Assert.IsNaN(calculator.WavePeakPeriod); + Assert.IsNaN(calculator.ReliabilityIndex); Assert.IsNull(calculator.OutputDirectory); } } Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Output/WaveConditionsCalculationOutputTest.cs =================================================================== diff -u -rfb6c8cb473282ccd9b920afddb33a2284c7274cd -r484b07491e6cbb52ef2dc36bb236fb3b349d3141 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Output/WaveConditionsCalculationOutputTest.cs (.../WaveConditionsCalculationOutputTest.cs) (revision fb6c8cb473282ccd9b920afddb33a2284c7274cd) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Output/WaveConditionsCalculationOutputTest.cs (.../WaveConditionsCalculationOutputTest.cs) (revision 484b07491e6cbb52ef2dc36bb236fb3b349d3141) @@ -32,16 +32,18 @@ { // Setup const double waveAngle = 3.0; + const double waveDirection = 5.0; const double waveHeight = 9.93; const double wavePeakPeriod = 18; - + // Call - var output = new WaveConditionsCalculationOutput(waveHeight, wavePeakPeriod, waveAngle); + var output = new WaveConditionsCalculationOutput(waveHeight, wavePeakPeriod, waveAngle, waveDirection); // Assert Assert.AreEqual(waveHeight, output.WaveHeight); Assert.AreEqual(wavePeakPeriod, output.WavePeakPeriod); Assert.AreEqual(waveAngle, output.WaveAngle); + Assert.AreEqual(waveDirection, output.WaveDirection); } } } \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/WaveConditionsCalculationParserTest.cs =================================================================== diff -u -re69acb9595f7bf1d202ddd1fb51934b66768b75d -r484b07491e6cbb52ef2dc36bb236fb3b349d3141 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/WaveConditionsCalculationParserTest.cs (.../WaveConditionsCalculationParserTest.cs) (revision e69acb9595f7bf1d202ddd1fb51934b66768b75d) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Parsers/WaveConditionsCalculationParserTest.cs (.../WaveConditionsCalculationParserTest.cs) (revision 484b07491e6cbb52ef2dc36bb236fb3b349d3141) @@ -86,6 +86,7 @@ Assert.AreEqual(22.01300, parser.Output.WaveAngle); Assert.AreEqual(1.87957, parser.Output.WaveHeight); Assert.AreEqual(11.15140, parser.Output.WavePeakPeriod); + Assert.AreEqual(337.98700, parser.Output.WaveDirection); Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName))); } @@ -104,7 +105,23 @@ Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName))); } + [Test] + public void Parse_InvalidHydraRingOutputFileWaveDirectionMissing_OutputNull() + { + // Setup + var parser = new WaveConditionsCalculationParser(); + var workingDirectory = Path.Combine(testDataPath, "output-no-waveDirection"); + + // Call + parser.Parse(workingDirectory, sectionId); + + // Assert + Assert.IsNull(parser.Output); + Assert.IsTrue(TestHelper.CanOpenFileForWrite(Path.Combine(workingDirectory, outputFileName))); + } + + [Test] public void Parse_InvalidHydraRingOutputFileWaveHeightMissing_OutputNull() { // Setup Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/output-no-waveDirection/1-output.txt =================================================================== diff -u --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/output-no-waveDirection/1-output.txt (revision 0) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/test-data/Parsers/WaveConditionsCalculationParser/output-no-waveDirection/1-output.txt (revision 484b07491e6cbb52ef2dc36bb236fb3b349d3141) @@ -0,0 +1,16 @@ +Executable name : D:\WTI\bin\Debug\HydraRing\MechanismComputation.exe +Executable version : 16.1.1.6952 +===================================================================================== + Submechanism = Q-variant + Waterlevel Q-variant (m+NAP) = 1.00000E+00 + Resistance Q-variant (-) = 5.00000E+00 + Dike normal (�) = 0.00000E+00 + Wave angle (�) = 2.28411E+01 + Wave angle reduction factor (-) = 9.36760E-01 + Local waterlevel (m+NAP) = 2.48827E+00 + Wave height (m) = 1.97435E+00 + Wave period (s) = 1.20161E+01 + Load Q-variant (-) = 4.99986E+00 + Limit state function Z1 (-) = -1.48827E+00 + Limit state function Z2 (-) = 1.40333E-04 + Limit state function Z (-) = 1.40333E-04 \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/Calculator/TestHydraRingCalculatorFactory.cs =================================================================== diff -u -r12fa48e392e145311f2f6fe5822a8692594aaf0f -r484b07491e6cbb52ef2dc36bb236fb3b349d3141 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/Calculator/TestHydraRingCalculatorFactory.cs (.../TestHydraRingCalculatorFactory.cs) (revision 12fa48e392e145311f2f6fe5822a8692594aaf0f) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/Calculator/TestHydraRingCalculatorFactory.cs (.../TestHydraRingCalculatorFactory.cs) (revision 484b07491e6cbb52ef2dc36bb236fb3b349d3141) @@ -110,6 +110,8 @@ public class TestWaveConditionsCosineCalculator : TestHydraRingCalculator, IWaveConditionsCosineCalculator { + public double WaveDirection { get; private set; } + public double ReliabilityIndex { get; private set; } public string OutputDirectory { get; set; } public string LastErrorFileContent { get; set; } public double WaveHeight { get; set; }