Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresCalculationService.cs =================================================================== diff -u -r5fdf505948e36b6a4657ac0847034bc67349f9ab -rb4cf63f91f57cebd1cfc99a4b2c34a630587df9b --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresCalculationService.cs (.../ClosingStructuresCalculationService.cs) (revision 5fdf505948e36b6a4657ac0847034bc67349f9ab) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Service/ClosingStructuresCalculationService.cs (.../ClosingStructuresCalculationService.cs) (revision b4cf63f91f57cebd1cfc99a4b2c34a630587df9b) @@ -69,10 +69,11 @@ input = CreateClosureVerticalWallCalculationInput(calculation, failureMechanismSection, generalInput); break; case ClosingStructureInflowModelType.LowSill: - input = CreateLowSillCalculationInput(calculation, failureMechanismSection, generalInput); + input = CreateLowSillCalculationInput(calculation, failureMechanismSection, generalInput); break; -// case ClosingStructureInflowModelType.FloodedCulvert: -// break; + case ClosingStructureInflowModelType.FloodedCulvert: + input = CreateFloodedCulvertCalculationInput(calculation, failureMechanismSection, generalInput); + break; default: throw new NotSupportedException("ClosingStructureInflowModelType"); } @@ -118,7 +119,7 @@ GeneralClosingStructuresInput generalInput) { return new StructuresClosureLowSillCalculationInput( - calculation.InputParameters.HydraulicBoundaryLocation.Id, + calculation.InputParameters.HydraulicBoundaryLocation.Id, new HydraRingSection(1, failureMechanismSection.GetSectionLength(), calculation.InputParameters.StructureNormalOrientation), ParseForeshore(calculation.InputParameters), ParseBreakWater(calculation.InputParameters), @@ -143,14 +144,42 @@ calculation.InputParameters.WidthFlowApertures.Mean, calculation.InputParameters.WidthFlowApertures.CoefficientOfVariation); } + private static StructuresClosureFloodedCulvertCalculationInput CreateFloodedCulvertCalculationInput(ClosingStructuresCalculation calculation, + FailureMechanismSection failureMechanismSection, + GeneralClosingStructuresInput generalInput) + { + return new StructuresClosureFloodedCulvertCalculationInput( + calculation.InputParameters.HydraulicBoundaryLocation.Id, + new HydraRingSection(1, failureMechanismSection.GetSectionLength(), calculation.InputParameters.StructureNormalOrientation), + ParseForeshore(calculation.InputParameters), + ParseBreakWater(calculation.InputParameters), + generalInput.GravitationalAcceleration, + calculation.InputParameters.FactorStormDurationOpenStructure, + calculation.InputParameters.FailureProbabilityOpenStructure, + calculation.InputParameters.FailureProbabilityReparation, + calculation.InputParameters.IdenticalApertures, + calculation.InputParameters.AllowedLevelIncreaseStorage.Mean, calculation.InputParameters.AllowedLevelIncreaseStorage.StandardDeviation, + generalInput.ModelFactorStorageVolume.Mean, generalInput.ModelFactorStorageVolume.StandardDeviation, + calculation.InputParameters.StorageStructureArea.Mean, calculation.InputParameters.StorageStructureArea.CoefficientOfVariation, + generalInput.ModelFactorInflowVolume, + calculation.InputParameters.FlowWidthAtBottomProtection.Mean, calculation.InputParameters.FlowWidthAtBottomProtection.StandardDeviation, + calculation.InputParameters.CriticalOvertoppingDischarge.Mean, calculation.InputParameters.CriticalOvertoppingDischarge.CoefficientOfVariation, + calculation.InputParameters.FailureProbabilityStructureWithErosion, + calculation.InputParameters.StormDuration.Mean, calculation.InputParameters.StormDuration.CoefficientOfVariation, + calculation.InputParameters.ProbabilityOpenStructureBeforeFlooding, + calculation.InputParameters.DrainCoefficient.Mean, calculation.InputParameters.DrainCoefficient.StandardDeviation, + calculation.InputParameters.AreaFlowApertures.Mean, calculation.InputParameters.AreaFlowApertures.StandardDeviation, + calculation.InputParameters.InsideWaterLevel.Mean, calculation.InputParameters.InsideWaterLevel.StandardDeviation); + } + private static IEnumerable ParseForeshore(ClosingStructuresInput input) { return input.UseForeshore ? input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)) : new HydraRingForelandPoint[0]; } private static HydraRingBreakWater ParseBreakWater(ClosingStructuresInput input) { - return input.UseBreakWater ? new HydraRingBreakWater((int)input.BreakWater.Type, input.BreakWater.Height) : null; + return input.UseBreakWater ? new HydraRingBreakWater((int) input.BreakWater.Type, input.BreakWater.Height) : null; } } } \ No newline at end of file Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Service.Test/ClosingStructuresCalculationServiceTest.cs =================================================================== diff -u -r5fdf505948e36b6a4657ac0847034bc67349f9ab -rb4cf63f91f57cebd1cfc99a4b2c34a630587df9b --- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Service.Test/ClosingStructuresCalculationServiceTest.cs (.../ClosingStructuresCalculationServiceTest.cs) (revision 5fdf505948e36b6a4657ac0847034bc67349f9ab) +++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Service.Test/ClosingStructuresCalculationServiceTest.cs (.../ClosingStructuresCalculationServiceTest.cs) (revision b4cf63f91f57cebd1cfc99a4b2c34a630587df9b) @@ -276,6 +276,98 @@ mockRepository.VerifyAll(); } + [Test] + [TestCase(true, false)] + [TestCase(true, true)] + [TestCase(false, false)] + public void Calculate_VariousFloodedCulvertCalculations_InputPropertiesCorrectlySentToCalculator(bool useForeshore, bool useBreakWater) + { + // Setup + var closingStructuresFailureMechanism = new ClosingStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + var assessmentSectionStub = CreateAssessmentSectionStub(closingStructuresFailureMechanism, mockRepository); + mockRepository.ReplayAll(); + + closingStructuresFailureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + + ClosingStructuresCalculation calculation = new TestClosingStructuresCalculation() + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSectionStub.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + InflowModelType = ClosingStructureInflowModelType.LowSill + } + }; + + if (useForeshore) + { + calculation.InputParameters.ForeshoreProfile = new ForeshoreProfile(new Point2D(0, 0), + new[] + { + new Point2D(1, 1), + new Point2D(2, 2) + }, + useBreakWater ? new BreakWater(BreakWaterType.Wall, 3.0) : null, + new ForeshoreProfile.ConstructionProperties()); + } + + FailureMechanismSection failureMechanismSection = closingStructuresFailureMechanism.Sections.First(); + + using (new HydraRingCalculatorFactoryConfig()) + { + var calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).StructuresClosureCalculator; + + // Call + new ClosingStructuresCalculationService().Calculate(calculation, + assessmentSectionStub, + failureMechanismSection, + closingStructuresFailureMechanism.GeneralInput, + closingStructuresFailureMechanism.Contribution, + testDataPath); + + // Assert + StructuresClosureCalculationInput[] calculationInputs = calculator.ReceivedInputs.ToArray(); + Assert.AreEqual(1, calculationInputs.Length); + Assert.AreEqual(testDataPath, calculator.HydraulicBoundaryDatabaseDirectory); + Assert.AreEqual(assessmentSectionStub.Id, calculator.RingId); + + GeneralClosingStructuresInput generalInput = closingStructuresFailureMechanism.GeneralInput; + ClosingStructuresInput input = calculation.InputParameters; + var expectedInput = new StructuresClosureFloodedCulvertCalculationInput( + 1300001, + new HydraRingSection(1, failureMechanismSection.GetSectionLength(), input.StructureNormalOrientation), + useForeshore ? input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)) : new HydraRingForelandPoint[0], + useBreakWater ? new HydraRingBreakWater((int) input.BreakWater.Type, input.BreakWater.Height) : null, + generalInput.GravitationalAcceleration, + input.FactorStormDurationOpenStructure, + input.FailureProbabilityOpenStructure, + input.FailureProbabilityReparation, + input.IdenticalApertures, + input.AllowedLevelIncreaseStorage.Mean, input.AllowedLevelIncreaseStorage.StandardDeviation, + generalInput.ModelFactorStorageVolume.Mean, generalInput.ModelFactorStorageVolume.StandardDeviation, + input.StorageStructureArea.Mean, input.StorageStructureArea.CoefficientOfVariation, + generalInput.ModelFactorInflowVolume, + input.FlowWidthAtBottomProtection.Mean, input.FlowWidthAtBottomProtection.StandardDeviation, + input.CriticalOvertoppingDischarge.Mean, input.CriticalOvertoppingDischarge.CoefficientOfVariation, + input.FailureProbabilityStructureWithErosion, + input.StormDuration.Mean, input.StormDuration.CoefficientOfVariation, + input.ProbabilityOpenStructureBeforeFlooding, + input.DrainCoefficient.Mean, input.DrainCoefficient.StandardDeviation, + input.AreaFlowApertures.Mean, input.AreaFlowApertures.StandardDeviation, + input.InsideWaterLevel.Mean, input.InsideWaterLevel.StandardDeviation); + + StructuresClosureFloodedCulvertCalculationInput actualInput = (StructuresClosureFloodedCulvertCalculationInput) calculationInputs[0]; + HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); + Assert.IsFalse(calculator.IsCanceled); + } + mockRepository.VerifyAll(); + } + private static IAssessmentSection CreateAssessmentSectionStub(IFailureMechanism failureMechanism, MockRepository mockRepository) { var assessmentSectionStub = mockRepository.Stub();