Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresCalculationServiceTest.cs =================================================================== diff -u -r276a32161f29fcba4af79cf7c7f0aeb254d4db54 -r008166ca3c301eb0c1ed35da586b05f25f10a427 --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresCalculationServiceTest.cs (.../StabilityPointStructuresCalculationServiceTest.cs) (revision 276a32161f29fcba4af79cf7c7f0aeb254d4db54) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresCalculationServiceTest.cs (.../StabilityPointStructuresCalculationServiceTest.cs) (revision 008166ca3c301eb0c1ed35da586b05f25f10a427) @@ -351,11 +351,410 @@ input.WidthFlowApertures.Mean, input.WidthFlowApertures.CoefficientOfVariation); - StructuresStabilityPointLowSillLinearCalculationInput actualInput = (StructuresStabilityPointLowSillLinearCalculationInput)calculationInputs[0]; + StructuresStabilityPointLowSillLinearCalculationInput actualInput = (StructuresStabilityPointLowSillLinearCalculationInput) calculationInputs[0]; HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); Assert.IsFalse(calculator.IsCanceled); } mockRepository.VerifyAll(); } + + [Test] + [TestCase(true, false)] + [TestCase(true, true)] + [TestCase(false, false)] + public void Calculate_VariousLowSillQuadraticCalculations_InputPropertiesCorrectlySentToCalculator(bool useForeshore, bool useBreakWater) + { + // Setup + var stabilityPointStructuresFailureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + var assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(stabilityPointStructuresFailureMechanism, mockRepository); + mockRepository.ReplayAll(); + + stabilityPointStructuresFailureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + + var calculation = new TestStabilityPointStructuresCalculation() + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSectionStub.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + InflowModelType = StabilityPointStructureInflowModelType.LowSill, + LoadSchematizationType = LoadSchematizationType.Quadratic + } + }; + + 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 = stabilityPointStructuresFailureMechanism.Sections.First(); + + using (new HydraRingCalculatorFactoryConfig()) + { + var calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).StructuresStabilityPointCalculator; + + // Call + new StabilityPointStructuresCalculationService().Calculate(calculation, + assessmentSectionStub, + stabilityPointStructuresFailureMechanism, + validDataFilepath); + + // Assert + StructuresStabilityPointCalculationInput[] calculationInputs = calculator.ReceivedInputs.ToArray(); + Assert.AreEqual(1, calculationInputs.Length); + Assert.AreEqual(testDataPath, calculator.HydraulicBoundaryDatabaseDirectory); + Assert.AreEqual(assessmentSectionStub.Id, calculator.RingId); + + GeneralStabilityPointStructuresInput generalInput = stabilityPointStructuresFailureMechanism.GeneralInput; + StabilityPointStructuresInput input = calculation.InputParameters; + var expectedInput = new StructuresStabilityPointLowSillQuadraticCalculationInput( + 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, + input.VolumicWeightWater, + generalInput.GravitationalAcceleration, + input.LevelCrestStructure.Mean, + input.LevelCrestStructure.StandardDeviation, + input.StructureNormalOrientation, + input.FactorStormDurationOpenStructure, + input.ModelFactorSuperCriticalFlow.Mean, + input.ModelFactorSuperCriticalFlow.StandardDeviation, + input.ThresholdHeightOpenWeir.Mean, + input.ThresholdHeightOpenWeir.StandardDeviation, + input.InsideWaterLevelFailureConstruction.Mean, + input.InsideWaterLevelFailureConstruction.StandardDeviation, + input.FailureProbabilityRepairClosure, + input.FailureCollisionEnergy.Mean, + input.FailureCollisionEnergy.CoefficientOfVariation, + generalInput.ModelFactorCollisionLoad.Mean, + generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, + input.ShipMass.Mean, + input.ShipMass.CoefficientOfVariation, + input.ShipVelocity.Mean, + input.ShipVelocity.CoefficientOfVariation, + input.LevellingCount, + input.ProbabilityCollisionSecondaryStructure, + input.FlowVelocityStructureClosable.Mean, + input.FlowVelocityStructureClosable.StandardDeviation, + input.InsideWaterLevel.Mean, + input.InsideWaterLevel.StandardDeviation, + 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.BankWidth.Mean, + input.BankWidth.StandardDeviation, + input.EvaluationLevel, + generalInput.ModelFactorLoadEffect.Mean, + generalInput.ModelFactorLoadEffect.StandardDeviation, + generalInput.WaveRatioMaxHN, + generalInput.WaveRatioMaxHStandardDeviation, + input.VerticalDistance, + generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, + generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, + input.ModelFactorSuperCriticalFlow.Mean, + input.ModelFactorSuperCriticalFlow.StandardDeviation, + input.ConstructiveStrengthQuadraticLoadModel.Mean, + input.ConstructiveStrengthQuadraticLoadModel.CoefficientOfVariation, + input.StabilityQuadraticLoadModel.Mean, + input.StabilityQuadraticLoadModel.CoefficientOfVariation, + input.WidthFlowApertures.Mean, + input.WidthFlowApertures.CoefficientOfVariation); + + StructuresStabilityPointLowSillQuadraticCalculationInput actualInput = (StructuresStabilityPointLowSillQuadraticCalculationInput) calculationInputs[0]; + HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); + Assert.IsFalse(calculator.IsCanceled); + } + mockRepository.VerifyAll(); + } + + [Test] + [TestCase(true, false)] + [TestCase(true, true)] + [TestCase(false, false)] + public void Calculate_VariousFloodedCulvertLinearCalculations_InputPropertiesCorrectlySentToCalculator(bool useForeshore, bool useBreakWater) + { + // Setup + var stabilityPointStructuresFailureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + var assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(stabilityPointStructuresFailureMechanism, mockRepository); + mockRepository.ReplayAll(); + + stabilityPointStructuresFailureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + + var calculation = new TestStabilityPointStructuresCalculation() + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSectionStub.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + InflowModelType = StabilityPointStructureInflowModelType.FloodedCulvert, + LoadSchematizationType = LoadSchematizationType.Linear + } + }; + + 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 = stabilityPointStructuresFailureMechanism.Sections.First(); + + using (new HydraRingCalculatorFactoryConfig()) + { + var calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).StructuresStabilityPointCalculator; + + // Call + new StabilityPointStructuresCalculationService().Calculate(calculation, + assessmentSectionStub, + stabilityPointStructuresFailureMechanism, + validDataFilepath); + + // Assert + StructuresStabilityPointCalculationInput[] calculationInputs = calculator.ReceivedInputs.ToArray(); + Assert.AreEqual(1, calculationInputs.Length); + Assert.AreEqual(testDataPath, calculator.HydraulicBoundaryDatabaseDirectory); + Assert.AreEqual(assessmentSectionStub.Id, calculator.RingId); + + GeneralStabilityPointStructuresInput generalInput = stabilityPointStructuresFailureMechanism.GeneralInput; + StabilityPointStructuresInput input = calculation.InputParameters; + var expectedInput = new StructuresStabilityPointFloodedCulvertLinearCalculationInput( + 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, + input.VolumicWeightWater, + generalInput.GravitationalAcceleration, + input.LevelCrestStructure.Mean, + input.LevelCrestStructure.StandardDeviation, + input.StructureNormalOrientation, + input.FactorStormDurationOpenStructure, + input.ModelFactorSuperCriticalFlow.Mean, + input.ModelFactorSuperCriticalFlow.StandardDeviation, + input.ThresholdHeightOpenWeir.Mean, + input.ThresholdHeightOpenWeir.StandardDeviation, + input.InsideWaterLevelFailureConstruction.Mean, + input.InsideWaterLevelFailureConstruction.StandardDeviation, + input.FailureProbabilityRepairClosure, + input.FailureCollisionEnergy.Mean, + input.FailureCollisionEnergy.CoefficientOfVariation, + generalInput.ModelFactorCollisionLoad.Mean, + generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, + input.ShipMass.Mean, + input.ShipMass.CoefficientOfVariation, + input.ShipVelocity.Mean, + input.ShipVelocity.CoefficientOfVariation, + input.LevellingCount, + input.ProbabilityCollisionSecondaryStructure, + input.FlowVelocityStructureClosable.Mean, + input.FlowVelocityStructureClosable.StandardDeviation, + input.InsideWaterLevel.Mean, + input.InsideWaterLevel.StandardDeviation, + 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.BankWidth.Mean, + input.BankWidth.StandardDeviation, + input.EvaluationLevel, + generalInput.ModelFactorLoadEffect.Mean, + generalInput.ModelFactorLoadEffect.StandardDeviation, + generalInput.WaveRatioMaxHN, + generalInput.WaveRatioMaxHStandardDeviation, + input.VerticalDistance, + generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, + generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, + input.DrainCoefficient.Mean, + input.DrainCoefficient.StandardDeviation, + input.AreaFlowApertures.Mean, + input.AreaFlowApertures.StandardDeviation, + input.ConstructiveStrengthLinearLoadModel.Mean, + input.ConstructiveStrengthLinearLoadModel.CoefficientOfVariation, + input.StabilityLinearLoadModel.Mean, + input.StabilityLinearLoadModel.CoefficientOfVariation); + + StructuresStabilityPointFloodedCulvertLinearCalculationInput actualInput = (StructuresStabilityPointFloodedCulvertLinearCalculationInput) calculationInputs[0]; + HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); + Assert.IsFalse(calculator.IsCanceled); + } + mockRepository.VerifyAll(); + } + + [Test] + [TestCase(true, false)] + [TestCase(true, true)] + [TestCase(false, false)] + public void Calculate_VariousFloodedCulvertQuadraticCalculations_InputPropertiesCorrectlySentToCalculator(bool useForeshore, bool useBreakWater) + { + // Setup + var stabilityPointStructuresFailureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + var assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(stabilityPointStructuresFailureMechanism, mockRepository); + mockRepository.ReplayAll(); + + stabilityPointStructuresFailureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + + var calculation = new TestStabilityPointStructuresCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSectionStub.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + InflowModelType = StabilityPointStructureInflowModelType.FloodedCulvert, + LoadSchematizationType = LoadSchematizationType.Quadratic + } + }; + + 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 = stabilityPointStructuresFailureMechanism.Sections.First(); + + using (new HydraRingCalculatorFactoryConfig()) + { + var calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).StructuresStabilityPointCalculator; + + // Call + new StabilityPointStructuresCalculationService().Calculate(calculation, + assessmentSectionStub, + stabilityPointStructuresFailureMechanism, + validDataFilepath); + + // Assert + StructuresStabilityPointCalculationInput[] calculationInputs = calculator.ReceivedInputs.ToArray(); + Assert.AreEqual(1, calculationInputs.Length); + Assert.AreEqual(testDataPath, calculator.HydraulicBoundaryDatabaseDirectory); + Assert.AreEqual(assessmentSectionStub.Id, calculator.RingId); + + GeneralStabilityPointStructuresInput generalInput = stabilityPointStructuresFailureMechanism.GeneralInput; + StabilityPointStructuresInput input = calculation.InputParameters; + var expectedInput = new StructuresStabilityPointFloodedCulvertQuadraticCalculationInput( + 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, + input.VolumicWeightWater, + generalInput.GravitationalAcceleration, + input.LevelCrestStructure.Mean, + input.LevelCrestStructure.StandardDeviation, + input.StructureNormalOrientation, + input.FactorStormDurationOpenStructure, + input.ModelFactorSuperCriticalFlow.Mean, + input.ModelFactorSuperCriticalFlow.StandardDeviation, + input.ThresholdHeightOpenWeir.Mean, + input.ThresholdHeightOpenWeir.StandardDeviation, + input.InsideWaterLevelFailureConstruction.Mean, + input.InsideWaterLevelFailureConstruction.StandardDeviation, + input.FailureProbabilityRepairClosure, + input.FailureCollisionEnergy.Mean, + input.FailureCollisionEnergy.CoefficientOfVariation, + generalInput.ModelFactorCollisionLoad.Mean, + generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, + input.ShipMass.Mean, + input.ShipMass.CoefficientOfVariation, + input.ShipVelocity.Mean, + input.ShipVelocity.CoefficientOfVariation, + input.LevellingCount, + input.ProbabilityCollisionSecondaryStructure, + input.FlowVelocityStructureClosable.Mean, + input.FlowVelocityStructureClosable.StandardDeviation, + input.InsideWaterLevel.Mean, + input.InsideWaterLevel.StandardDeviation, + 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.BankWidth.Mean, + input.BankWidth.StandardDeviation, + input.EvaluationLevel, + generalInput.ModelFactorLoadEffect.Mean, + generalInput.ModelFactorLoadEffect.StandardDeviation, + generalInput.WaveRatioMaxHN, + generalInput.WaveRatioMaxHStandardDeviation, + input.VerticalDistance, + generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, + generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, + input.DrainCoefficient.Mean, + input.DrainCoefficient.StandardDeviation, + input.AreaFlowApertures.Mean, + input.AreaFlowApertures.StandardDeviation, + input.ConstructiveStrengthQuadraticLoadModel.Mean, + input.ConstructiveStrengthQuadraticLoadModel.CoefficientOfVariation, + input.StabilityQuadraticLoadModel.Mean, + input.StabilityQuadraticLoadModel.CoefficientOfVariation); + + StructuresStabilityPointFloodedCulvertQuadraticCalculationInput actualInput = (StructuresStabilityPointFloodedCulvertQuadraticCalculationInput) calculationInputs[0]; + HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); + Assert.IsFalse(calculator.IsCanceled); + } + mockRepository.VerifyAll(); + } } } \ No newline at end of file