Index: Riskeer/Piping/src/Riskeer.Piping.Service/PipingCalculationValidationHelper.cs =================================================================== diff -u -rc7b2f994269437cbd81a5461137f7d8e84505d80 -rfc95d32dafbceff6c3b5c44da936b9d8f0b35757 --- Riskeer/Piping/src/Riskeer.Piping.Service/PipingCalculationValidationHelper.cs (.../PipingCalculationValidationHelper.cs) (revision c7b2f994269437cbd81a5461137f7d8e84505d80) +++ Riskeer/Piping/src/Riskeer.Piping.Service/PipingCalculationValidationHelper.cs (.../PipingCalculationValidationHelper.cs) (revision fc95d32dafbceff6c3b5c44da936b9d8f0b35757) @@ -84,7 +84,7 @@ var errors = new List(ValidateCoreSurfaceLineAndSoilProfileProperties(input)); if (!errors.Any()) { - errors.AddRange(ValidateSoilLayers(input, generalInput)); + errors.AddRange(ValidateSoilLayers(input)); } return errors; @@ -155,7 +155,7 @@ } } - private static IEnumerable ValidateSoilLayers(PipingInput input, GeneralPipingInput generalInput) + private static IEnumerable ValidateSoilLayers(PipingInput input) { var validationResults = new List(); if (double.IsNaN(DerivedPipingInput.GetThicknessAquiferLayer(input).Mean)) @@ -166,7 +166,7 @@ double surfaceLevel = input.SurfaceLine.GetZAtL(input.ExitPointL); validationResults.AddRange(ValidateAquiferLayers(input, surfaceLevel)); - validationResults.AddRange(ValidateCoverageLayers(input, generalInput, surfaceLevel)); + validationResults.AddRange(ValidateCoverageLayers(input, surfaceLevel)); return validationResults; } @@ -194,8 +194,7 @@ } } - private static IEnumerable ValidateCoverageLayers(PipingInput input, GeneralPipingInput generalInput, - double surfaceLevel) + private static IEnumerable ValidateCoverageLayers(PipingInput input, double surfaceLevel) { PipingSoilProfile pipingSoilProfile = input.StochasticSoilProfile.SoilProfile; @@ -209,10 +208,6 @@ { yield return Resources.PipingCalculationService_ValidateInput_Cannot_derive_SaturatedVolumicWeight; } - else if (PipingDesignVariableFactory.GetSaturatedVolumicWeightOfCoverageLayer(input).GetDesignValue() < generalInput.WaterVolumetricWeight) - { - yield return Resources.PipingCalculationService_ValidateInput_SaturatedVolumicWeightCoverageLayer_must_be_larger_than_WaterVolumetricWeight; - } } } } Index: Riskeer/Piping/src/Riskeer.Piping.Service/SemiProbabilistic/SemiProbabilisticPipingCalculationService.cs =================================================================== diff -u -rd8dd6b9fbf7990a92a3d1f60839772cdd653c719 -rfc95d32dafbceff6c3b5c44da936b9d8f0b35757 --- Riskeer/Piping/src/Riskeer.Piping.Service/SemiProbabilistic/SemiProbabilisticPipingCalculationService.cs (.../SemiProbabilisticPipingCalculationService.cs) (revision d8dd6b9fbf7990a92a3d1f60839772cdd653c719) +++ Riskeer/Piping/src/Riskeer.Piping.Service/SemiProbabilistic/SemiProbabilisticPipingCalculationService.cs (.../SemiProbabilisticPipingCalculationService.cs) (revision fc95d32dafbceff6c3b5c44da936b9d8f0b35757) @@ -23,12 +23,14 @@ using System.Collections.Generic; using System.Linq; using Core.Common.Base.Data; +using Riskeer.Common.Data.Probabilistics; using Riskeer.Common.Service; using Riskeer.Common.Service.ValidationRules; using Riskeer.Piping.Data; using Riskeer.Piping.Data.SemiProbabilistic; using Riskeer.Piping.KernelWrapper; using Riskeer.Piping.KernelWrapper.SubCalculator; +using Riskeer.Piping.Primitives; using Riskeer.Piping.Service.Properties; using RiskeerCommonFormsResources = Riskeer.Common.Forms.Properties.Resources; using RiskeerCommonServiceResources = Riskeer.Common.Service.Properties.Resources; @@ -175,6 +177,7 @@ validationResults.AddRange(ValidateHydraulics(input, normativeAssessmentLevel)); validationResults.AddRange(PipingCalculationValidationHelper.GetValidationErrors(input, generalInput)); + validationResults.AddRange(ValidateCoverageLayers(input, generalInput)); return validationResults; } @@ -219,6 +222,25 @@ return validationResult; } + private static IEnumerable ValidateCoverageLayers(PipingInput input, GeneralPipingInput generalInput) + { + double surfaceLevel = input.SurfaceLine.GetZAtL(input.ExitPointL); + PipingSoilProfile pipingSoilProfile = input.StochasticSoilProfile.SoilProfile; + + if (pipingSoilProfile.GetConsecutiveCoverageLayersBelowLevel(surfaceLevel).Any()) + { + LogNormalDistribution thicknessCoverageLayer = DerivedPipingInput.GetThicknessCoverageLayer(input); + if (!double.IsNaN(thicknessCoverageLayer.Mean)) + { + RoundedDouble saturatedVolumicWeightOfCoverageLayer = PipingDesignVariableFactory.GetSaturatedVolumicWeightOfCoverageLayer(input).GetDesignValue(); + if (!double.IsNaN(saturatedVolumicWeightOfCoverageLayer) && saturatedVolumicWeightOfCoverageLayer < generalInput.WaterVolumetricWeight) + { + yield return Resources.PipingCalculationService_ValidateInput_SaturatedVolumicWeightCoverageLayer_must_be_larger_than_WaterVolumetricWeight; + } + } + } + } + private static PipingCalculatorInput CreateInputFromData(SemiProbabilisticPipingInput input, GeneralPipingInput generalPipingInput, RoundedDouble normativeAssessmentLevel)