Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingSemiProbabilisticDesignValueFactory.cs =================================================================== diff -u -rb7563238aa805cb6207e948a97f6fcc9e52c92b2 -rec79baa6789a55510eea80494f5ff91f293f77b2 --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingSemiProbabilisticDesignValueFactory.cs (.../PipingSemiProbabilisticDesignValueFactory.cs) (revision b7563238aa805cb6207e948a97f6fcc9e52c92b2) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingSemiProbabilisticDesignValueFactory.cs (.../PipingSemiProbabilisticDesignValueFactory.cs) (revision ec79baa6789a55510eea80494f5ff91f293f77b2) @@ -56,10 +56,6 @@ /// public static DesignVariable GetSaturatedVolumicWeightOfCoverageLayer(PipingInput parameters) { - if (double.IsNaN(parameters.SaturatedVolumicWeightOfCoverageLayer.Mean)) - { - return CreateDeterministicDesignVariable(parameters.SaturatedVolumicWeightOfCoverageLayer, 0); - } return CreateDesignVariable(parameters.SaturatedVolumicWeightOfCoverageLayer, 0.05); } Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs =================================================================== diff -u -ra50f8fe4c13956d52e563e1f9e154f1bd186edad -rec79baa6789a55510eea80494f5ff91f293f77b2 --- Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision a50f8fe4c13956d52e563e1f9e154f1bd186edad) +++ Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision ec79baa6789a55510eea80494f5ff91f293f77b2) @@ -22,6 +22,7 @@ using System.Collections.Generic; using System.Linq; using Core.Common.Base.Data; +using Ringtoets.Common.Data.Probabilistics; using Ringtoets.Common.Service; using Ringtoets.Piping.Data; using Ringtoets.Piping.KernelWrapper; @@ -164,7 +165,7 @@ validationResult.Add(Resources.PipingCalculationService_ValidateInput_No_value_for_ExitPointL); } - if (!isSurfaceLineMissing && !isSoilProfileMissing && !isExitPointLMissing) + if (IsSurfaceLineProfileDefinitionComplete(inputParameters)) { if (double.IsNaN(inputParameters.ThicknessAquiferLayer.Mean)) { @@ -179,100 +180,124 @@ var pipingSoilProfile = inputParameters.StochasticSoilProfile.SoilProfile; var surfaceLevel = inputParameters.SurfaceLine.GetZAtL(inputParameters.ExitPointL); - if (pipingSoilProfile != null) + validationResult.AddRange(ValidateAquiferLayers(inputParameters, pipingSoilProfile, surfaceLevel)); + validationResult.AddRange(ValidateCoverageLayers(inputParameters, pipingSoilProfile, surfaceLevel)); + } + + return validationResult; + } + + private static IEnumerable ValidateAquiferLayers(PipingInput inputParameters, PipingSoilProfile pipingSoilProfile, double surfaceLevel) + { + var validationResult = new List(); + + bool hasConsecutiveAquiferLayers = pipingSoilProfile.GetConsecutiveAquiferLayersBelowLevel(surfaceLevel).Any(); + if (!hasConsecutiveAquiferLayers) + { + validationResult.Add(Resources.PipingCalculationService_ValidateInput_No_aquifer_layer_at_ExitPointL_under_SurfaceLine); + } + else + { + if (double.IsNaN(PipingSemiProbabilisticDesignValueFactory.GetDarcyPermeability(inputParameters).GetDesignValue())) { - IEnumerable consecutiveAquiferLayers = pipingSoilProfile.GetConsecutiveAquiferLayersBelowLevel(surfaceLevel).ToArray(); - IEnumerable consecutiveCoverageLayers = pipingSoilProfile.GetConsecutiveCoverageLayersBelowLevel(surfaceLevel).ToArray(); + validationResult.Add(Resources.PipingCalculationService_ValidateInput_Cannot_derive_DarcyPermeability); + } - var hasAquiferLayers = consecutiveAquiferLayers.Any(); - var hasCoverageLayers = consecutiveCoverageLayers.Any(); + if (double.IsNaN(PipingSemiProbabilisticDesignValueFactory.GetDiameter70(inputParameters).GetDesignValue())) + { + validationResult.Add(Resources.PipingCalculationService_ValidateInput_Cannot_derive_Diameter70); + } + } + return validationResult; + } - if (!hasAquiferLayers) - { - validationResult.Add(Resources.PipingCalculationService_ValidateInput_No_aquifer_layer_at_ExitPointL_under_SurfaceLine); - } - if (!hasCoverageLayers) - { - validationResult.Add(Resources.PipingCalculationService_ValidateInput_No_coverage_layer_at_ExitPointL_under_SurfaceLine); - } + private static IEnumerable ValidateCoverageLayers(PipingInput inputParameters, PipingSoilProfile pipingSoilProfile, double surfaceLevel) + { + var validationResult = new List(); - if (hasAquiferLayers) - { - if (double.IsNaN(inputParameters.DarcyPermeability.Mean) - || double.IsNaN(inputParameters.DarcyPermeability.StandardDeviation)) - { - validationResult.Add(Resources.PipingCalculationService_ValidateInput_Cannot_derive_DarcyPermeability); - } - if (double.IsNaN(inputParameters.Diameter70.Mean) - || double.IsNaN(inputParameters.Diameter70.StandardDeviation)) - { - validationResult.Add(Resources.PipingCalculationService_ValidateInput_Cannot_derive_Diameter70); - } - } - if (hasCoverageLayers) - { - if (double.IsNaN(inputParameters.SaturatedVolumicWeightOfCoverageLayer.Mean) - || double.IsNaN(inputParameters.SaturatedVolumicWeightOfCoverageLayer.StandardDeviation) - || double.IsNaN(inputParameters.SaturatedVolumicWeightOfCoverageLayer.Shift)) - { - validationResult.Add(Resources.PipingCalculationService_ValidateInput_Cannot_derive_SaturatedVolumicWeight); - } - else - { - var saturatedVolumicWeightOfCoverageLayer = - PipingSemiProbabilisticDesignValueFactory.GetSaturatedVolumicWeightOfCoverageLayer(inputParameters).GetDesignValue(); + bool hasConsecutiveCoverageLayers = pipingSoilProfile.GetConsecutiveCoverageLayersBelowLevel(surfaceLevel).Any(); + if (!hasConsecutiveCoverageLayers) + { + validationResult.Add(Resources.PipingCalculationService_ValidateInput_No_coverage_layer_at_ExitPointL_under_SurfaceLine); + } + else + { + var saturatedVolumicWeightOfCoverageLayer = + PipingSemiProbabilisticDesignValueFactory.GetSaturatedVolumicWeightOfCoverageLayer(inputParameters).GetDesignValue(); - if (saturatedVolumicWeightOfCoverageLayer < inputParameters.WaterVolumetricWeight) - { - validationResult.Add(Resources.PipingCalculationService_ValidateInput_SaturatedVolumicWeightCoverageLayer_must_be_larger_than_WaterVolumetricWeight); - } - } - } + if (double.IsNaN(saturatedVolumicWeightOfCoverageLayer)) + { + validationResult.Add(Resources.PipingCalculationService_ValidateInput_Cannot_derive_SaturatedVolumicWeight); } + else if (saturatedVolumicWeightOfCoverageLayer < inputParameters.WaterVolumetricWeight) + { + validationResult.Add(Resources.PipingCalculationService_ValidateInput_SaturatedVolumicWeightCoverageLayer_must_be_larger_than_WaterVolumetricWeight); + } } return validationResult; } private static List GetInputWarnings(PipingInput inputParameters) { - List warnings = new List(); + var warnings = new List(); - var exitPointL = inputParameters.ExitPointL; + if (IsSurfaceLineProfileDefinitionComplete(inputParameters)) + { + var surfaceLineLevel = inputParameters.SurfaceLine.GetZAtL(inputParameters.ExitPointL); - var isSoilProfileMissing = inputParameters.StochasticSoilProfile == null; - var isSurfaceLineMissing = inputParameters.SurfaceLine == null; - var isExitPointLMissing = double.IsNaN(exitPointL); + warnings.AddRange(GetMultipleAquiferLayersWarning(inputParameters, surfaceLineLevel)); + warnings.AddRange(GetMultipleCoverageLayersWarning(inputParameters, surfaceLineLevel)); + warnings.AddRange(GetDiameter70Warnings(inputParameters)); + } - if (!isSurfaceLineMissing && !isSoilProfileMissing && !isExitPointLMissing) + return warnings; + } + + private static IEnumerable GetDiameter70Warnings(PipingInput inputParameters) + { + List warnings = new List(); + + RoundedDouble diameter70Value = PipingSemiProbabilisticDesignValueFactory.GetDiameter70(inputParameters).GetDesignValue(); + + if (!double.IsNaN(diameter70Value) && (diameter70Value < 6.3e-5 || diameter70Value > 0.5e-3)) { - var pipingSoilProfile = inputParameters.StochasticSoilProfile.SoilProfile; - var surfaceLevel = inputParameters.SurfaceLine.GetZAtL(exitPointL); + warnings.Add(string.Format(Resources.PipingCalculationService_GetInputWarnings_Specified_DiameterD70_value_0_not_in_valid_range_of_model, diameter70Value)); + } + return warnings; + } - IEnumerable consecutiveAquiferLayersBelowLevel = pipingSoilProfile.GetConsecutiveAquiferLayersBelowLevel(surfaceLevel); - IEnumerable consecutiveAquitardLayersBelowLevel = pipingSoilProfile.GetConsecutiveCoverageLayersBelowLevel(surfaceLevel); + private static IEnumerable GetMultipleCoverageLayersWarning(PipingInput inputParameters, double surfaceLineLevel) + { + var warnings = new List(); - if (consecutiveAquiferLayersBelowLevel.Count() > 1) - { - warnings.Add(Resources.PipingCalculationService_GetInputWarnings_Multiple_aquifer_layers_Attempt_to_determine_values_for_DiameterD70_and_DarcyPermeability_from_top_layer); - } - if (consecutiveAquitardLayersBelowLevel.Count() > 1) - { - warnings.Add(Resources.PipingCalculationService_GetInputWarnings_Multiple_coverage_layers_Attempt_to_determine_value_from_combination); - } - if (!double.IsNaN(inputParameters.Diameter70.Mean) && !double.IsNaN(inputParameters.Diameter70.StandardDeviation)) - { - RoundedDouble diameter70Value = PipingSemiProbabilisticDesignValueFactory.GetDiameter70(inputParameters).GetDesignValue(); - if (diameter70Value < 6.3e-5 || diameter70Value > 0.5e-3) - { - warnings.Add(string.Format(Resources.PipingCalculationService_GetInputWarnings_Specified_DiameterD70_value_0_not_in_valid_range_of_model, diameter70Value)); - } - } + bool hasMoreThanOneCoverageLayer = inputParameters.StochasticSoilProfile.SoilProfile.GetConsecutiveCoverageLayersBelowLevel(surfaceLineLevel).Count() > 1; + if (hasMoreThanOneCoverageLayer) + { + warnings.Add(Resources.PipingCalculationService_GetInputWarnings_Multiple_coverage_layers_Attempt_to_determine_value_from_combination); } + return warnings; + } + private static IEnumerable GetMultipleAquiferLayersWarning(PipingInput inputParameters, double surfaceLineLevel) + { + var warnings = new List(); + + bool hasMoreThanOneAquiferLayer = inputParameters.StochasticSoilProfile.SoilProfile.GetConsecutiveAquiferLayersBelowLevel(surfaceLineLevel).Count() > 1; + if (hasMoreThanOneAquiferLayer) + { + warnings.Add(Resources.PipingCalculationService_GetInputWarnings_Multiple_aquifer_layers_Attempt_to_determine_values_for_DiameterD70_and_DarcyPermeability_from_top_layer); + } return warnings; } + private static bool IsSurfaceLineProfileDefinitionComplete(PipingInput surfaceLineMissing) + { + return surfaceLineMissing.SurfaceLine != null && + surfaceLineMissing.StochasticSoilProfile != null && + !double.IsNaN(surfaceLineMissing.ExitPointL); + } + private static PipingCalculatorInput CreateInputFromData(PipingInput inputParameters) { return new PipingCalculatorInput( Index: Ringtoets/Piping/test/Ringtoets.Piping.KernelWrapper.Test/PipingSemiProbabilisticDesignValueFactoryTest.cs =================================================================== diff -u -rb7563238aa805cb6207e948a97f6fcc9e52c92b2 -rec79baa6789a55510eea80494f5ff91f293f77b2 --- Ringtoets/Piping/test/Ringtoets.Piping.KernelWrapper.Test/PipingSemiProbabilisticDesignValueFactoryTest.cs (.../PipingSemiProbabilisticDesignValueFactoryTest.cs) (revision b7563238aa805cb6207e948a97f6fcc9e52c92b2) +++ Ringtoets/Piping/test/Ringtoets.Piping.KernelWrapper.Test/PipingSemiProbabilisticDesignValueFactoryTest.cs (.../PipingSemiProbabilisticDesignValueFactoryTest.cs) (revision ec79baa6789a55510eea80494f5ff91f293f77b2) @@ -207,7 +207,7 @@ DistributionAssert.AreEqual( inputParameters.SaturatedVolumicWeightOfCoverageLayer, saturatedVolumicWeightOfCoverageLayer.Distribution); - Assert.AreEqual(new RoundedDouble(2), saturatedVolumicWeightOfCoverageLayer.GetDesignValue()); + Assert.AreEqual(RoundedDouble.NaN, saturatedVolumicWeightOfCoverageLayer.GetDesignValue()); } [Test] Index: Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs =================================================================== diff -u -rb7563238aa805cb6207e948a97f6fcc9e52c92b2 -rec79baa6789a55510eea80494f5ff91f293f77b2 --- Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs (.../PipingCalculationServiceTest.cs) (revision b7563238aa805cb6207e948a97f6fcc9e52c92b2) +++ Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs (.../PipingCalculationServiceTest.cs) (revision ec79baa6789a55510eea80494f5ff91f293f77b2) @@ -24,7 +24,6 @@ using Core.Common.Base.Data; using Core.Common.TestUtil; using NUnit.Framework; -using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Piping.Data; using Ringtoets.Piping.Data.TestUtil;