Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Service/StabilityPointStructuresCalculationService.cs =================================================================== diff -u -r008166ca3c301eb0c1ed35da586b05f25f10a427 -rdb25336357293cb8cdde5ca8f4ed1cda8ff0f280 --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Service/StabilityPointStructuresCalculationService.cs (.../StabilityPointStructuresCalculationService.cs) (revision 008166ca3c301eb0c1ed35da586b05f25f10a427) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Service/StabilityPointStructuresCalculationService.cs (.../StabilityPointStructuresCalculationService.cs) (revision db25336357293cb8cdde5ca8f4ed1cda8ff0f280) @@ -28,6 +28,7 @@ using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Service; +using Ringtoets.Common.Service.ValidationRules; using Ringtoets.Common.Utils; using Ringtoets.HydraRing.Calculation.Calculator; using Ringtoets.HydraRing.Calculation.Calculator.Factory; @@ -263,206 +264,206 @@ GeneralStabilityPointStructuresInput generalInput) { return new StructuresStabilityPointLowSillQuadraticCalculationInput(calculation.InputParameters.HydraulicBoundaryLocation.Id, - new HydraRingSection(1, failureMechanismSection.GetSectionLength(), calculation.InputParameters.StructureNormalOrientation), - HydraRingInputParser.ParseForeshore(calculation.InputParameters), - HydraRingInputParser.ParseBreakWater(calculation.InputParameters), - calculation.InputParameters.VolumicWeightWater, - generalInput.GravitationalAcceleration, - calculation.InputParameters.LevelCrestStructure.Mean, - calculation.InputParameters.LevelCrestStructure.StandardDeviation, - calculation.InputParameters.StructureNormalOrientation, - calculation.InputParameters.FactorStormDurationOpenStructure, - calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, - calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, - calculation.InputParameters.ThresholdHeightOpenWeir.Mean, - calculation.InputParameters.ThresholdHeightOpenWeir.StandardDeviation, - calculation.InputParameters.InsideWaterLevelFailureConstruction.Mean, - calculation.InputParameters.InsideWaterLevelFailureConstruction.StandardDeviation, - calculation.InputParameters.FailureProbabilityRepairClosure, - calculation.InputParameters.FailureCollisionEnergy.Mean, - calculation.InputParameters.FailureCollisionEnergy.CoefficientOfVariation, - generalInput.ModelFactorCollisionLoad.Mean, - generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, - calculation.InputParameters.ShipMass.Mean, - calculation.InputParameters.ShipMass.CoefficientOfVariation, - calculation.InputParameters.ShipVelocity.Mean, - calculation.InputParameters.ShipVelocity.CoefficientOfVariation, - calculation.InputParameters.LevellingCount, - calculation.InputParameters.ProbabilityCollisionSecondaryStructure, - calculation.InputParameters.FlowVelocityStructureClosable.Mean, - calculation.InputParameters.FlowVelocityStructureClosable.StandardDeviation, - calculation.InputParameters.InsideWaterLevel.Mean, - calculation.InputParameters.InsideWaterLevel.StandardDeviation, - 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.BankWidth.Mean, - calculation.InputParameters.BankWidth.StandardDeviation, - calculation.InputParameters.EvaluationLevel, - generalInput.ModelFactorLoadEffect.Mean, - generalInput.ModelFactorLoadEffect.StandardDeviation, - generalInput.WaveRatioMaxHN, - generalInput.WaveRatioMaxHStandardDeviation, - calculation.InputParameters.VerticalDistance, - generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, - generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, - calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, - calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, - calculation.InputParameters.ConstructiveStrengthQuadraticLoadModel.Mean, - calculation.InputParameters.ConstructiveStrengthQuadraticLoadModel.CoefficientOfVariation, - calculation.InputParameters.StabilityQuadraticLoadModel.Mean, - calculation.InputParameters.StabilityQuadraticLoadModel.CoefficientOfVariation, - calculation.InputParameters.WidthFlowApertures.Mean, - calculation.InputParameters.WidthFlowApertures.CoefficientOfVariation); + new HydraRingSection(1, failureMechanismSection.GetSectionLength(), calculation.InputParameters.StructureNormalOrientation), + HydraRingInputParser.ParseForeshore(calculation.InputParameters), + HydraRingInputParser.ParseBreakWater(calculation.InputParameters), + calculation.InputParameters.VolumicWeightWater, + generalInput.GravitationalAcceleration, + calculation.InputParameters.LevelCrestStructure.Mean, + calculation.InputParameters.LevelCrestStructure.StandardDeviation, + calculation.InputParameters.StructureNormalOrientation, + calculation.InputParameters.FactorStormDurationOpenStructure, + calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, + calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, + calculation.InputParameters.ThresholdHeightOpenWeir.Mean, + calculation.InputParameters.ThresholdHeightOpenWeir.StandardDeviation, + calculation.InputParameters.InsideWaterLevelFailureConstruction.Mean, + calculation.InputParameters.InsideWaterLevelFailureConstruction.StandardDeviation, + calculation.InputParameters.FailureProbabilityRepairClosure, + calculation.InputParameters.FailureCollisionEnergy.Mean, + calculation.InputParameters.FailureCollisionEnergy.CoefficientOfVariation, + generalInput.ModelFactorCollisionLoad.Mean, + generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, + calculation.InputParameters.ShipMass.Mean, + calculation.InputParameters.ShipMass.CoefficientOfVariation, + calculation.InputParameters.ShipVelocity.Mean, + calculation.InputParameters.ShipVelocity.CoefficientOfVariation, + calculation.InputParameters.LevellingCount, + calculation.InputParameters.ProbabilityCollisionSecondaryStructure, + calculation.InputParameters.FlowVelocityStructureClosable.Mean, + calculation.InputParameters.FlowVelocityStructureClosable.StandardDeviation, + calculation.InputParameters.InsideWaterLevel.Mean, + calculation.InputParameters.InsideWaterLevel.StandardDeviation, + 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.BankWidth.Mean, + calculation.InputParameters.BankWidth.StandardDeviation, + calculation.InputParameters.EvaluationLevel, + generalInput.ModelFactorLoadEffect.Mean, + generalInput.ModelFactorLoadEffect.StandardDeviation, + generalInput.WaveRatioMaxHN, + generalInput.WaveRatioMaxHStandardDeviation, + calculation.InputParameters.VerticalDistance, + generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, + generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, + calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, + calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, + calculation.InputParameters.ConstructiveStrengthQuadraticLoadModel.Mean, + calculation.InputParameters.ConstructiveStrengthQuadraticLoadModel.CoefficientOfVariation, + calculation.InputParameters.StabilityQuadraticLoadModel.Mean, + calculation.InputParameters.StabilityQuadraticLoadModel.CoefficientOfVariation, + calculation.InputParameters.WidthFlowApertures.Mean, + calculation.InputParameters.WidthFlowApertures.CoefficientOfVariation); } private StructuresStabilityPointFloodedCulvertLinearCalculationInput CreateFloodedCulvertLinearCalculationInput(StructuresCalculation calculation, FailureMechanismSection failureMechanismSection, GeneralStabilityPointStructuresInput generalInput) { return new StructuresStabilityPointFloodedCulvertLinearCalculationInput(calculation.InputParameters.HydraulicBoundaryLocation.Id, - new HydraRingSection(1, failureMechanismSection.GetSectionLength(), calculation.InputParameters.StructureNormalOrientation), - HydraRingInputParser.ParseForeshore(calculation.InputParameters), - HydraRingInputParser.ParseBreakWater(calculation.InputParameters), - calculation.InputParameters.VolumicWeightWater, - generalInput.GravitationalAcceleration, - calculation.InputParameters.LevelCrestStructure.Mean, - calculation.InputParameters.LevelCrestStructure.StandardDeviation, - calculation.InputParameters.StructureNormalOrientation, - calculation.InputParameters.FactorStormDurationOpenStructure, - calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, - calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, - calculation.InputParameters.ThresholdHeightOpenWeir.Mean, - calculation.InputParameters.ThresholdHeightOpenWeir.StandardDeviation, - calculation.InputParameters.InsideWaterLevelFailureConstruction.Mean, - calculation.InputParameters.InsideWaterLevelFailureConstruction.StandardDeviation, - calculation.InputParameters.FailureProbabilityRepairClosure, - calculation.InputParameters.FailureCollisionEnergy.Mean, - calculation.InputParameters.FailureCollisionEnergy.CoefficientOfVariation, - generalInput.ModelFactorCollisionLoad.Mean, - generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, - calculation.InputParameters.ShipMass.Mean, - calculation.InputParameters.ShipMass.CoefficientOfVariation, - calculation.InputParameters.ShipVelocity.Mean, - calculation.InputParameters.ShipVelocity.CoefficientOfVariation, - calculation.InputParameters.LevellingCount, - calculation.InputParameters.ProbabilityCollisionSecondaryStructure, - calculation.InputParameters.FlowVelocityStructureClosable.Mean, - calculation.InputParameters.FlowVelocityStructureClosable.StandardDeviation, - calculation.InputParameters.InsideWaterLevel.Mean, - calculation.InputParameters.InsideWaterLevel.StandardDeviation, - 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.BankWidth.Mean, - calculation.InputParameters.BankWidth.StandardDeviation, - calculation.InputParameters.EvaluationLevel, - generalInput.ModelFactorLoadEffect.Mean, - generalInput.ModelFactorLoadEffect.StandardDeviation, - generalInput.WaveRatioMaxHN, - generalInput.WaveRatioMaxHStandardDeviation, - calculation.InputParameters.VerticalDistance, - generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, - generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, - calculation.InputParameters.DrainCoefficient.Mean, - calculation.InputParameters.DrainCoefficient.StandardDeviation, - calculation.InputParameters.AreaFlowApertures.Mean, - calculation.InputParameters.AreaFlowApertures.StandardDeviation, - calculation.InputParameters.ConstructiveStrengthLinearLoadModel.Mean, - calculation.InputParameters.ConstructiveStrengthLinearLoadModel.CoefficientOfVariation, - calculation.InputParameters.StabilityLinearLoadModel.Mean, - calculation.InputParameters.StabilityLinearLoadModel.CoefficientOfVariation); + new HydraRingSection(1, failureMechanismSection.GetSectionLength(), calculation.InputParameters.StructureNormalOrientation), + HydraRingInputParser.ParseForeshore(calculation.InputParameters), + HydraRingInputParser.ParseBreakWater(calculation.InputParameters), + calculation.InputParameters.VolumicWeightWater, + generalInput.GravitationalAcceleration, + calculation.InputParameters.LevelCrestStructure.Mean, + calculation.InputParameters.LevelCrestStructure.StandardDeviation, + calculation.InputParameters.StructureNormalOrientation, + calculation.InputParameters.FactorStormDurationOpenStructure, + calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, + calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, + calculation.InputParameters.ThresholdHeightOpenWeir.Mean, + calculation.InputParameters.ThresholdHeightOpenWeir.StandardDeviation, + calculation.InputParameters.InsideWaterLevelFailureConstruction.Mean, + calculation.InputParameters.InsideWaterLevelFailureConstruction.StandardDeviation, + calculation.InputParameters.FailureProbabilityRepairClosure, + calculation.InputParameters.FailureCollisionEnergy.Mean, + calculation.InputParameters.FailureCollisionEnergy.CoefficientOfVariation, + generalInput.ModelFactorCollisionLoad.Mean, + generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, + calculation.InputParameters.ShipMass.Mean, + calculation.InputParameters.ShipMass.CoefficientOfVariation, + calculation.InputParameters.ShipVelocity.Mean, + calculation.InputParameters.ShipVelocity.CoefficientOfVariation, + calculation.InputParameters.LevellingCount, + calculation.InputParameters.ProbabilityCollisionSecondaryStructure, + calculation.InputParameters.FlowVelocityStructureClosable.Mean, + calculation.InputParameters.FlowVelocityStructureClosable.StandardDeviation, + calculation.InputParameters.InsideWaterLevel.Mean, + calculation.InputParameters.InsideWaterLevel.StandardDeviation, + 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.BankWidth.Mean, + calculation.InputParameters.BankWidth.StandardDeviation, + calculation.InputParameters.EvaluationLevel, + generalInput.ModelFactorLoadEffect.Mean, + generalInput.ModelFactorLoadEffect.StandardDeviation, + generalInput.WaveRatioMaxHN, + generalInput.WaveRatioMaxHStandardDeviation, + calculation.InputParameters.VerticalDistance, + generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, + generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, + calculation.InputParameters.DrainCoefficient.Mean, + calculation.InputParameters.DrainCoefficient.StandardDeviation, + calculation.InputParameters.AreaFlowApertures.Mean, + calculation.InputParameters.AreaFlowApertures.StandardDeviation, + calculation.InputParameters.ConstructiveStrengthLinearLoadModel.Mean, + calculation.InputParameters.ConstructiveStrengthLinearLoadModel.CoefficientOfVariation, + calculation.InputParameters.StabilityLinearLoadModel.Mean, + calculation.InputParameters.StabilityLinearLoadModel.CoefficientOfVariation); } private StructuresStabilityPointFloodedCulvertQuadraticCalculationInput CreateFloodedCulvertQuadraticCalculationInput(StructuresCalculation calculation, FailureMechanismSection failureMechanismSection, GeneralStabilityPointStructuresInput generalInput) { return new StructuresStabilityPointFloodedCulvertQuadraticCalculationInput(calculation.InputParameters.HydraulicBoundaryLocation.Id, - new HydraRingSection(1, failureMechanismSection.GetSectionLength(), calculation.InputParameters.StructureNormalOrientation), - HydraRingInputParser.ParseForeshore(calculation.InputParameters), - HydraRingInputParser.ParseBreakWater(calculation.InputParameters), - calculation.InputParameters.VolumicWeightWater, - generalInput.GravitationalAcceleration, - calculation.InputParameters.LevelCrestStructure.Mean, - calculation.InputParameters.LevelCrestStructure.StandardDeviation, - calculation.InputParameters.StructureNormalOrientation, - calculation.InputParameters.FactorStormDurationOpenStructure, - calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, - calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, - calculation.InputParameters.ThresholdHeightOpenWeir.Mean, - calculation.InputParameters.ThresholdHeightOpenWeir.StandardDeviation, - calculation.InputParameters.InsideWaterLevelFailureConstruction.Mean, - calculation.InputParameters.InsideWaterLevelFailureConstruction.StandardDeviation, - calculation.InputParameters.FailureProbabilityRepairClosure, - calculation.InputParameters.FailureCollisionEnergy.Mean, - calculation.InputParameters.FailureCollisionEnergy.CoefficientOfVariation, - generalInput.ModelFactorCollisionLoad.Mean, - generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, - calculation.InputParameters.ShipMass.Mean, - calculation.InputParameters.ShipMass.CoefficientOfVariation, - calculation.InputParameters.ShipVelocity.Mean, - calculation.InputParameters.ShipVelocity.CoefficientOfVariation, - calculation.InputParameters.LevellingCount, - calculation.InputParameters.ProbabilityCollisionSecondaryStructure, - calculation.InputParameters.FlowVelocityStructureClosable.Mean, - calculation.InputParameters.FlowVelocityStructureClosable.StandardDeviation, - calculation.InputParameters.InsideWaterLevel.Mean, - calculation.InputParameters.InsideWaterLevel.StandardDeviation, - 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.BankWidth.Mean, - calculation.InputParameters.BankWidth.StandardDeviation, - calculation.InputParameters.EvaluationLevel, - generalInput.ModelFactorLoadEffect.Mean, - generalInput.ModelFactorLoadEffect.StandardDeviation, - generalInput.WaveRatioMaxHN, - generalInput.WaveRatioMaxHStandardDeviation, - calculation.InputParameters.VerticalDistance, - generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, - generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, - calculation.InputParameters.DrainCoefficient.Mean, - calculation.InputParameters.DrainCoefficient.StandardDeviation, - calculation.InputParameters.AreaFlowApertures.Mean, - calculation.InputParameters.AreaFlowApertures.StandardDeviation, - calculation.InputParameters.ConstructiveStrengthQuadraticLoadModel.Mean, - calculation.InputParameters.ConstructiveStrengthQuadraticLoadModel.CoefficientOfVariation, - calculation.InputParameters.StabilityQuadraticLoadModel.Mean, - calculation.InputParameters.StabilityQuadraticLoadModel.CoefficientOfVariation); + new HydraRingSection(1, failureMechanismSection.GetSectionLength(), calculation.InputParameters.StructureNormalOrientation), + HydraRingInputParser.ParseForeshore(calculation.InputParameters), + HydraRingInputParser.ParseBreakWater(calculation.InputParameters), + calculation.InputParameters.VolumicWeightWater, + generalInput.GravitationalAcceleration, + calculation.InputParameters.LevelCrestStructure.Mean, + calculation.InputParameters.LevelCrestStructure.StandardDeviation, + calculation.InputParameters.StructureNormalOrientation, + calculation.InputParameters.FactorStormDurationOpenStructure, + calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, + calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, + calculation.InputParameters.ThresholdHeightOpenWeir.Mean, + calculation.InputParameters.ThresholdHeightOpenWeir.StandardDeviation, + calculation.InputParameters.InsideWaterLevelFailureConstruction.Mean, + calculation.InputParameters.InsideWaterLevelFailureConstruction.StandardDeviation, + calculation.InputParameters.FailureProbabilityRepairClosure, + calculation.InputParameters.FailureCollisionEnergy.Mean, + calculation.InputParameters.FailureCollisionEnergy.CoefficientOfVariation, + generalInput.ModelFactorCollisionLoad.Mean, + generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, + calculation.InputParameters.ShipMass.Mean, + calculation.InputParameters.ShipMass.CoefficientOfVariation, + calculation.InputParameters.ShipVelocity.Mean, + calculation.InputParameters.ShipVelocity.CoefficientOfVariation, + calculation.InputParameters.LevellingCount, + calculation.InputParameters.ProbabilityCollisionSecondaryStructure, + calculation.InputParameters.FlowVelocityStructureClosable.Mean, + calculation.InputParameters.FlowVelocityStructureClosable.StandardDeviation, + calculation.InputParameters.InsideWaterLevel.Mean, + calculation.InputParameters.InsideWaterLevel.StandardDeviation, + 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.BankWidth.Mean, + calculation.InputParameters.BankWidth.StandardDeviation, + calculation.InputParameters.EvaluationLevel, + generalInput.ModelFactorLoadEffect.Mean, + generalInput.ModelFactorLoadEffect.StandardDeviation, + generalInput.WaveRatioMaxHN, + generalInput.WaveRatioMaxHStandardDeviation, + calculation.InputParameters.VerticalDistance, + generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, + generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, + calculation.InputParameters.DrainCoefficient.Mean, + calculation.InputParameters.DrainCoefficient.StandardDeviation, + calculation.InputParameters.AreaFlowApertures.Mean, + calculation.InputParameters.AreaFlowApertures.StandardDeviation, + calculation.InputParameters.ConstructiveStrengthQuadraticLoadModel.Mean, + calculation.InputParameters.ConstructiveStrengthQuadraticLoadModel.CoefficientOfVariation, + calculation.InputParameters.StabilityQuadraticLoadModel.Mean, + calculation.InputParameters.StabilityQuadraticLoadModel.CoefficientOfVariation); } private static string[] ValidateInput(StabilityPointStructuresInput inputParameters, IAssessmentSection assessmentSection) @@ -481,7 +482,97 @@ validationResults.Add(RingtoetsCommonServiceResources.CalculationService_ValidateInput_No_hydraulic_boundary_location_selected); } + if (inputParameters.Structure == null) + { + validationResults.Add(RingtoetsCommonServiceResources.StructuresCalculationService_ValidateInput_No_Structure_selected); + } + else + { + IEnumerable validationRules; + switch (inputParameters.InflowModelType) + { + case StabilityPointStructureInflowModelType.LowSill: + switch (inputParameters.LoadSchematizationType) + { + case LoadSchematizationType.Linear: + validationRules = GetLowSillLinearValidationRules(inputParameters); + break; + case LoadSchematizationType.Quadratic: + validationRules = GetLowSillQuadraticValidationRules(inputParameters); + break; + default: + throw new InvalidEnumArgumentException("inputParameters", + (int) inputParameters.LoadSchematizationType, + typeof(LoadSchematizationType)); + } + break; + case StabilityPointStructureInflowModelType.FloodedCulvert: + switch (inputParameters.LoadSchematizationType) + { + case LoadSchematizationType.Linear: + validationRules = GetFloodedCulvertLinearValidationRules(inputParameters); + break; + case LoadSchematizationType.Quadratic: + validationRules = GetFloodedCulvertQuadraticValidationRules(inputParameters); + break; + default: + throw new InvalidEnumArgumentException("inputParameters", + (int) inputParameters.LoadSchematizationType, + typeof(LoadSchematizationType)); + } + break; + default: + throw new InvalidEnumArgumentException("inputParameters", + (int) inputParameters.InflowModelType, + typeof(StabilityPointStructureInflowModelType)); + } + + foreach (var validationRule in validationRules) + { + validationResults.AddRange(validationRule.Validate()); + } + } return validationResults.ToArray(); } + + private static IEnumerable GetLowSillLinearValidationRules(StabilityPointStructuresInput input) + { + var validationRules = new List() + { + new UseBreakWaterRule(input) + }; + + return validationRules; + } + + private static IEnumerable GetLowSillQuadraticValidationRules(StabilityPointStructuresInput input) + { + var validationRules = new List() + { + new UseBreakWaterRule(input) + }; + + return validationRules; + } + + private static IEnumerable GetFloodedCulvertLinearValidationRules(StabilityPointStructuresInput input) + { + var validationRules = new List() + { + new UseBreakWaterRule(input) + }; + + return validationRules; + } + + private static IEnumerable GetFloodedCulvertQuadraticValidationRules(StabilityPointStructuresInput input) + { + var validationRules = new List() + { + new UseBreakWaterRule(input) + }; + + return validationRules; + } } } \ No newline at end of file Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/Ringtoets.StabilityPointStructures.Service.Test.csproj =================================================================== diff -u -r6ac5917aa7fd76c41f389c1f649b2449229925d8 -rdb25336357293cb8cdde5ca8f4ed1cda8ff0f280 --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/Ringtoets.StabilityPointStructures.Service.Test.csproj (.../Ringtoets.StabilityPointStructures.Service.Test.csproj) (revision 6ac5917aa7fd76c41f389c1f649b2449229925d8) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/Ringtoets.StabilityPointStructures.Service.Test.csproj (.../Ringtoets.StabilityPointStructures.Service.Test.csproj) (revision db25336357293cb8cdde5ca8f4ed1cda8ff0f280) @@ -67,6 +67,10 @@ + + {03DBE353-99F7-47D6-B826-60D694FFB9AC} + Application.Ringtoets.Storage.TestUtil + {3bbfd65b-b277-4e50-ae6d-bd24c3434609} Core.Common.Base Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresCalculationServiceTest.cs =================================================================== diff -u -r191a0e9d3424473aa91c591571c5582870f64c96 -rdb25336357293cb8cdde5ca8f4ed1cda8ff0f280 --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresCalculationServiceTest.cs (.../StabilityPointStructuresCalculationServiceTest.cs) (revision 191a0e9d3424473aa91c591571c5582870f64c96) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresCalculationServiceTest.cs (.../StabilityPointStructuresCalculationServiceTest.cs) (revision db25336357293cb8cdde5ca8f4ed1cda8ff0f280) @@ -23,6 +23,7 @@ using System.ComponentModel; using System.IO; using System.Linq; +using Application.Ringtoets.Storage.TestUtil; using Core.Common.Base.Geometry; using Core.Common.TestUtil; using NUnit.Framework; @@ -131,6 +132,54 @@ } [Test] + public void Validate_CalculationWithoutStructuresValidHydraulicBoundaryDatabase_LogStartAndEndAndErrorMessage() + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + var assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mockRepository); + assessmentSectionStub.HydraulicBoundaryDatabase.FilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite"); + mockRepository.ReplayAll(); + + failureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + + const string name = ""; + var calculation = new TestStabilityPointStructuresCalculation + { + Name = name, + InputParameters = + { + InflowModelType = StabilityPointStructureInflowModelType.FloodedCulvert, + LoadSchematizationType = LoadSchematizationType.Linear, + Structure = null + } + }; + + bool isValid = false; + + // Call + Action call = () => isValid = StabilityPointStructuresCalculationService.Validate(calculation, assessmentSectionStub); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + var msgs = messages.ToArray(); + Assert.AreEqual(3, msgs.Length); + StringAssert.StartsWith(string.Format("Validatie van '{0}' gestart om: ", name), msgs[0]); + StringAssert.StartsWith("Validatie mislukt: Er is geen kunstwerk geselecteerd.", msgs[1]); + StringAssert.StartsWith(string.Format("Validatie van '{0}' beëindigd om: ", name), msgs[2]); + }); + Assert.IsFalse(isValid); + + mockRepository.VerifyAll(); + } + + [Test] public void Calculate_InvalidInFlowModelType_ThrowsInvalidEnumArgumentException() { // Setup @@ -227,6 +276,137 @@ } [Test] + [Combinatorial] + public void Validate_UseBreakWaterWithInvalidBreakWaterHeight_LogStartAndEndAndErrorMessageAndThrowsException( + [Values(StabilityPointStructureInflowModelType.FloodedCulvert, StabilityPointStructureInflowModelType.LowSill)] StabilityPointStructureInflowModelType inflowModelType, + [Values(LoadSchematizationType.Quadratic, LoadSchematizationType.Linear)] LoadSchematizationType loadSchematizationType, + [Values(double.NaN, double.PositiveInfinity, double.NegativeInfinity)] double breakWaterHeight) + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + var assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mockRepository); + assessmentSectionStub.HydraulicBoundaryDatabase.FilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite"); + mockRepository.ReplayAll(); + + failureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + + const string name = ""; + var calculation = new TestStabilityPointStructuresCalculation + { + Name = name, + InputParameters = + { + InflowModelType = inflowModelType, + LoadSchematizationType = loadSchematizationType, + ForeshoreProfile = new TestForeshoreProfile(new BreakWater(BreakWaterType.Dam, breakWaterHeight)), + UseBreakWater = true, + UseForeshore = true + } + }; + + bool isValid = false; + + // Call + Action call = () => isValid = StabilityPointStructuresCalculationService.Validate(calculation, assessmentSectionStub); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + var msgs = messages.ToArray(); + Assert.AreEqual(3, msgs.Length); + StringAssert.StartsWith(string.Format("Validatie van '{0}' gestart om: ", name), msgs[0]); + StringAssert.StartsWith("Validatie mislukt: Er is geen geldige damhoogte ingevoerd.", msgs[1]); + StringAssert.StartsWith(string.Format("Validatie van '{0}' beëindigd om: ", name), msgs[2]); + }); + Assert.IsFalse(isValid); + + mockRepository.VerifyAll(); + } + + [Test] + public void Validate_InvalidInFlowModelType_ThrowsInvalidEnumArgumentException() + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + var assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mockRepository); + assessmentSectionStub.HydraulicBoundaryDatabase.FilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite"); + mockRepository.ReplayAll(); + + failureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + + const string name = ""; + var calculation = new TestStabilityPointStructuresCalculation + { + Name = name, + InputParameters = + { + InflowModelType = (StabilityPointStructureInflowModelType) 100, + } + }; + + // Call + TestDelegate call = () => StabilityPointStructuresCalculationService.Validate(calculation, + assessmentSectionStub); + // Assert + const string expectedMessage = "The value of argument 'inputParameters' (100) is invalid for Enum type 'StabilityPointStructureInflowModelType'."; + string paramName = TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, + expectedMessage).ParamName; + Assert.AreEqual("inputParameters", paramName); + mockRepository.VerifyAll(); + } + + [Test] + public void Validate_InvalidLoadSchematizationType_ThrowsInvalidEnumArgumentException() + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + var assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mockRepository); + assessmentSectionStub.HydraulicBoundaryDatabase.FilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite"); + mockRepository.ReplayAll(); + + failureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + + const string name = ""; + var calculation = new TestStabilityPointStructuresCalculation + { + Name = name, + InputParameters = + { + LoadSchematizationType = (LoadSchematizationType) 100 + } + }; + + // Call + TestDelegate call = () => StabilityPointStructuresCalculationService.Validate(calculation, assessmentSectionStub); + + // Assert + const string expectedMessage = "The value of argument 'inputParameters' (100) is invalid for Enum type 'LoadSchematizationType'."; + string paramName = TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, + expectedMessage).ParamName; + Assert.AreEqual("inputParameters", paramName); + + mockRepository.VerifyAll(); + } + + [Test] [TestCase(true, false)] [TestCase(true, true)] [TestCase(false, false)] @@ -762,7 +942,8 @@ [Combinatorial] public void Calculate_ValidCalculation_LogStartAndEndAndReturnOutput( [Values(StabilityPointStructureInflowModelType.FloodedCulvert, StabilityPointStructureInflowModelType.LowSill)] StabilityPointStructureInflowModelType inflowModelType, - [Values(LoadSchematizationType.Quadratic, LoadSchematizationType.Linear)] LoadSchematizationType loadSchematizationType) + [Values(LoadSchematizationType.Quadratic, LoadSchematizationType.Linear)] LoadSchematizationType loadSchematizationType, + [Values(CalculationType.NoForeshore, CalculationType.ForeshoreWithValidBreakWater, CalculationType.ForeshoreWithoutBreakWater)] CalculationType calculationType) { // Setup var failureMechanism = new StabilityPointStructuresFailureMechanism(); @@ -783,27 +964,48 @@ { HydraulicBoundaryLocation = assessmentSectionStub.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), InflowModelType = inflowModelType, - LoadSchematizationType = loadSchematizationType + LoadSchematizationType = loadSchematizationType, + ForeshoreProfile = new TestForeshoreProfile(true), + UseBreakWater = true, + UseForeshore = true } }; - // Call - Action call = () => new StabilityPointStructuresCalculationService().Calculate(calculation, - assessmentSectionStub, - failureMechanism, - validDataFilepath); + switch (calculationType) + { + case CalculationType.NoForeshore: + calculation.InputParameters.ForeshoreProfile = null; + calculation.InputParameters.UseForeshore = false; + calculation.InputParameters.UseBreakWater = false; + break; + case CalculationType.ForeshoreWithoutBreakWater: + calculation.InputParameters.ForeshoreProfile = new TestForeshoreProfile(); + calculation.InputParameters.UseBreakWater = false; + break; + case CalculationType.ForeshoreWithValidBreakWater: + break; + } - // Assert - TestHelper.AssertLogMessages(call, messages => + // Call + using (new HydraRingCalculatorFactoryConfig()) { - var msgs = messages.ToArray(); - Assert.AreEqual(3, msgs.Length); - StringAssert.StartsWith(string.Format("Berekening van '{0}' gestart om: ", calculation.Name), msgs[0]); - StringAssert.StartsWith("Puntconstructies kunstwerk berekeningsverslag. Klik op details voor meer informatie.", msgs[1]); - StringAssert.StartsWith(string.Format("Berekening van '{0}' beëindigd om: ", calculation.Name), msgs[2]); - }); - Assert.IsNotNull(calculation.Output); + Action call = () => new StabilityPointStructuresCalculationService().Calculate(calculation, + assessmentSectionStub, + failureMechanism, + validDataFilepath); + // Assert + TestHelper.AssertLogMessages(call, messages => + { + var msgs = messages.ToArray(); + Assert.AreEqual(3, msgs.Length); + StringAssert.StartsWith(string.Format("Berekening van '{0}' gestart om: ", calculation.Name), msgs[0]); + StringAssert.StartsWith("Puntconstructies kunstwerk berekeningsverslag. Klik op details voor meer informatie.", msgs[1]); + StringAssert.StartsWith(string.Format("Berekening van '{0}' beëindigd om: ", calculation.Name), msgs[2]); + }); + Assert.IsNotNull(calculation.Output); + } + mockRepository.VerifyAll(); }