Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationService.cs
===================================================================
diff -u -rdf02e9274a94d8763da204833a4d93f984e242c6 -ra34dbc4a2d6b3689cde30ea81370912cdaa858ce
--- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationService.cs (.../GrassCoverErosionInwardsCalculationService.cs) (revision df02e9274a94d8763da204833a4d93f984e242c6)
+++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationService.cs (.../GrassCoverErosionInwardsCalculationService.cs) (revision a34dbc4a2d6b3689cde30ea81370912cdaa858ce)
@@ -28,6 +28,7 @@
using Ringtoets.GrassCoverErosionInwards.Data;
using Ringtoets.GrassCoverErosionInwards.Service.Properties;
using Ringtoets.HydraRing.Calculation.Data;
+using Ringtoets.HydraRing.Calculation.Data.Input.Hydraulics;
using Ringtoets.HydraRing.Calculation.Data.Input.Overtopping;
using Ringtoets.HydraRing.Calculation.Data.Output;
using Ringtoets.HydraRing.Calculation.Parsers;
@@ -61,18 +62,22 @@
/// if the calculation was successful. Error and status information is logged during the execution of the operation.
///
/// The that holds all the information required to perform the calculation.
+ /// The that holds information about the norm used in the calculation.
/// The directory of the HLCD file that should be used for performing the calculation.
/// The to create input with.
/// The id of the ring to perform the calculation for.
/// Calculation input parameters that apply to all instances.
/// A on a successful calculation, null otherwise.
internal static GrassCoverErosionInwardsCalculationServiceOutput Calculate(GrassCoverErosionInwardsCalculation calculation,
- string hlcdDirectory, FailureMechanismSection failureMechanismSection,
- string ringId, GeneralGrassCoverErosionInwardsInput generalInput)
+ IAssessmentSection assessmentSection,
+ string hlcdDirectory, FailureMechanismSection failureMechanismSection,
+ string ringId, GeneralGrassCoverErosionInwardsInput generalInput)
{
- OvertoppingCalculationInput input = CreateInput(calculation, failureMechanismSection, generalInput);
+ OvertoppingCalculationInput overtoppingCalculationInput = CreateOvertoppingInput(calculation, failureMechanismSection, generalInput);
var exceedanceProbabilityCalculationParser = new ExceedanceProbabilityCalculationParser();
var waveHeightCalculationParser = new WaveHeightCalculationParser();
+ var targetProbabiltyCalculationParser = new TargetProbabilityCalculationParser();
+ var calculateDikeHeight = calculation.InputParameters.CalculateDikeHeight;
CalculationServiceHelper.PerformCalculation(
calculation.Name,
@@ -83,53 +88,101 @@
ringId,
HydraRingTimeIntegrationSchemeType.FerryBorgesCastanheta,
HydraRingUncertaintiesType.All,
- input,
+ overtoppingCalculationInput,
new IHydraRingFileParser[]
{
exceedanceProbabilityCalculationParser,
waveHeightCalculationParser
});
- VerifyOutput(exceedanceProbabilityCalculationParser.Output, waveHeightCalculationParser.Output, calculation.Name);
+ VerifyOvertoppingCalculationOutput(exceedanceProbabilityCalculationParser.Output, waveHeightCalculationParser.Output, calculation.Name);
+
+ if (calculateDikeHeight)
+ {
+ DikeHeightCalculationInput dikeHeightCalculationInput = CreateDikeHeightInput(calculation, assessmentSection, failureMechanismSection, generalInput);
+
+ HydraRingCalculationService.PerformCalculation(
+ hlcdDirectory,
+ ringId,
+ HydraRingTimeIntegrationSchemeType.FerryBorgesCastanheta,
+ HydraRingUncertaintiesType.All,
+ dikeHeightCalculationInput,
+ new IHydraRingFileParser[]
+ {
+ targetProbabiltyCalculationParser
+ });
+
+ VerifyDikeHeightCalculationOutput(targetProbabiltyCalculationParser.Output, calculation.Name);
+ }
});
- if (exceedanceProbabilityCalculationParser.Output == null || waveHeightCalculationParser.Output == null)
+ if (exceedanceProbabilityCalculationParser.Output != null && waveHeightCalculationParser.Output != null)
{
- return null;
+ if (!calculateDikeHeight || (calculateDikeHeight && targetProbabiltyCalculationParser.Output == null))
+ {
+ return new GrassCoverErosionInwardsCalculationServiceOutput(
+ exceedanceProbabilityCalculationParser.Output.Beta,
+ waveHeightCalculationParser.Output.WaveHeight,
+ waveHeightCalculationParser.Output.IsOvertoppingDominant);
+ }
+
+ if (calculateDikeHeight && targetProbabiltyCalculationParser.Output != null)
+ {
+ return new GrassCoverErosionInwardsCalculationServiceOutput(
+ exceedanceProbabilityCalculationParser.Output.Beta,
+ waveHeightCalculationParser.Output.WaveHeight,
+ waveHeightCalculationParser.Output.IsOvertoppingDominant,
+ targetProbabiltyCalculationParser.Output.Result);
+ }
}
- return new GrassCoverErosionInwardsCalculationServiceOutput(
- exceedanceProbabilityCalculationParser.Output.Beta,
- waveHeightCalculationParser.Output.WaveHeight,
- waveHeightCalculationParser.Output.IsOvertoppingDominant);
+ return null;
}
- private static void VerifyOutput(ExceedanceProbabilityCalculationOutput exceedanceOutput, WaveHeightCalculationOutput waveHeightOutput, string name)
+ private static void VerifyOvertoppingCalculationOutput(ExceedanceProbabilityCalculationOutput exceedanceOutput, WaveHeightCalculationOutput waveHeightOutput, string name)
{
if (exceedanceOutput == null || waveHeightOutput == null)
{
log.ErrorFormat(Resources.GrassCoverErosionInwardsCalculationService_Calculate_Error_in_grass_cover_erosion_inwards_0_calculation, name);
}
}
+ private static void VerifyDikeHeightCalculationOutput(TargetProbabilityCalculationOutput output, string name)
+ {
+ if (output == null)
+ {
+ log.ErrorFormat(Resources.GrassCoverErosionInwardsCalculationService_Calculate_Error_in_hbn_grass_cover_erosion_inwards_0_calculation, name);
+ }
+ }
- private static OvertoppingCalculationInput CreateInput(GrassCoverErosionInwardsCalculation calculation, FailureMechanismSection failureMechanismSection, GeneralGrassCoverErosionInwardsInput generalInput)
+ private static OvertoppingCalculationInput CreateOvertoppingInput(GrassCoverErosionInwardsCalculation calculation, FailureMechanismSection failureMechanismSection, GeneralGrassCoverErosionInwardsInput generalInput)
{
return new OvertoppingCalculationInput(calculation.InputParameters.HydraulicBoundaryLocation.Id,
new HydraRingSection(1, failureMechanismSection.GetSectionLength(), calculation.InputParameters.Orientation),
- calculation.InputParameters.DikeHeight,
- generalInput.CriticalOvertoppingModelFactor,
+ calculation.InputParameters.DikeHeight, generalInput.CriticalOvertoppingModelFactor,
generalInput.FbFactor.Mean, generalInput.FbFactor.StandardDeviation,
generalInput.FnFactor.Mean, generalInput.FnFactor.StandardDeviation,
- generalInput.OvertoppingModelFactor,
- calculation.InputParameters.CriticalFlowRate.Mean, calculation.InputParameters.CriticalFlowRate.StandardDeviation,
- generalInput.FrunupModelFactor.Mean, generalInput.FrunupModelFactor.StandardDeviation,
- generalInput.FshallowModelFactor.Mean, generalInput.FshallowModelFactor.StandardDeviation,
- ParseProfilePoints(calculation.InputParameters.DikeGeometry),
- ParseForeshore(calculation.InputParameters),
- ParseBreakWater(calculation.InputParameters));
+ generalInput.OvertoppingModelFactor, calculation.InputParameters.CriticalFlowRate.Mean,
+ calculation.InputParameters.CriticalFlowRate.StandardDeviation, generalInput.FrunupModelFactor.Mean,
+ generalInput.FrunupModelFactor.StandardDeviation, generalInput.FshallowModelFactor.Mean,
+ generalInput.FshallowModelFactor.StandardDeviation, ParseProfilePoints(calculation.InputParameters.DikeGeometry),
+ ParseForeshore(calculation.InputParameters), ParseBreakWater(calculation.InputParameters));
}
+ private static DikeHeightCalculationInput CreateDikeHeightInput(GrassCoverErosionInwardsCalculation calculation, IAssessmentSection assessmentSection,
+ FailureMechanismSection failureMechanismSection, GeneralGrassCoverErosionInwardsInput generalInput)
+ {
+ return new DikeHeightCalculationInput(calculation.InputParameters.HydraulicBoundaryLocation.Id, assessmentSection.FailureMechanismContribution.Norm,
+ new HydraRingSection(1, failureMechanismSection.GetSectionLength(), calculation.InputParameters.Orientation),
+ generalInput.CriticalOvertoppingModelFactor, generalInput.FbFactor.Mean, generalInput.FbFactor.StandardDeviation,
+ generalInput.FnFactor.Mean, generalInput.FnFactor.StandardDeviation, generalInput.OvertoppingModelFactor,
+ calculation.InputParameters.CriticalFlowRate.Mean, calculation.InputParameters.CriticalFlowRate.StandardDeviation,
+ generalInput.FrunupModelFactor.Mean, generalInput.FrunupModelFactor.StandardDeviation,
+ generalInput.FshallowModelFactor.Mean, generalInput.FshallowModelFactor.StandardDeviation,
+ ParseProfilePoints(calculation.InputParameters.DikeGeometry), ParseForeshore(calculation.InputParameters),
+ ParseBreakWater(calculation.InputParameters));
+ }
+
private static HydraRingBreakWater ParseBreakWater(GrassCoverErosionInwardsInput input)
{
return input.UseBreakWater ? new HydraRingBreakWater((int) input.BreakWater.Type, input.BreakWater.Height) : null;