Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs
===================================================================
diff -u -r0dfaf04c32ddd8f2ccfe1e244bdc6efcbb3b6857 -r7751f40a2df9299c4510003b45dac7d574cd97c2
--- Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision 0dfaf04c32ddd8f2ccfe1e244bdc6efcbb3b6857)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision 7751f40a2df9299c4510003b45dac7d574cd97c2)
@@ -21,6 +21,7 @@
using System.Collections.Generic;
using System.Linq;
+using Core.Common.Base.Data;
using Ringtoets.Common.Service;
using Ringtoets.Piping.Data;
using Ringtoets.Piping.KernelWrapper;
@@ -200,6 +201,16 @@
{
validationResult.Add(Resources.PipingCalculationService_ValidateInput_Cannot_derive_SaturatedVolumicWeight);
}
+ else
+ {
+ var saturatedVolumicWeightOfCoverageLayer =
+ PipingSemiProbabilisticDesignValueFactory.GetSaturatedVolumicWeightOfCoverageLayer(inputParameters).GetDesignValue();
+
+ if (saturatedVolumicWeightOfCoverageLayer < inputParameters.WaterVolumetricWeight)
+ {
+ validationResult.Add(Resources.PipingCalculationService_ValidateInput_SaturatedVolumicWeightCoverageLayer_must_be_larger_than_WaterVolumetricWeight);
+ }
+ }
}
}
}
Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.Designer.cs
===================================================================
diff -u -r7ee19b11cabfc6cb2ba1ab895462b024a621294b -r7751f40a2df9299c4510003b45dac7d574cd97c2
--- Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 7ee19b11cabfc6cb2ba1ab895462b024a621294b)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 7751f40a2df9299c4510003b45dac7d574cd97c2)
@@ -249,6 +249,16 @@
}
///
+ /// Looks up a localized string similar to Het verzadigd volumetrisch gewicht van de deklaag moet groter zijn dan het volumetrisch gewicht van water..
+ ///
+ internal static string PipingCalculationService_ValidateInput_SaturatedVolumicWeightCoverageLayer_must_be_larger_than_WaterVolumetricWeight {
+ get {
+ return ResourceManager.GetString("PipingCalculationService_ValidateInput_SaturatedVolumicWeightCoverageLayer_must_b" +
+ "e_larger_than_WaterVolumetricWeight", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to Veiligheidsfactor voor piping kan niet worden berekend..
///
internal static string PipingSemiProbabilisticCalculationService_ValidateOutputOnCalculation_Factor_of_safety_cannot_be_calculated {
Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.resx
===================================================================
diff -u -r7ee19b11cabfc6cb2ba1ab895462b024a621294b -r7751f40a2df9299c4510003b45dac7d574cd97c2
--- Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.resx (.../Resources.resx) (revision 7ee19b11cabfc6cb2ba1ab895462b024a621294b)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.resx (.../Resources.resx) (revision 7751f40a2df9299c4510003b45dac7d574cd97c2)
@@ -174,4 +174,7 @@
Gespecificeerde waarde voor d70 ({0} m) ligt buiten het geldigheidsbereik van dit model. Geldige waarden liggen tussen 0.000063 m en 0.0005 m.
+
+ Het verzadigd volumetrisch gewicht van de deklaag moet groter zijn dan het volumetrisch gewicht van water.
+
\ No newline at end of file
Index: Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs
===================================================================
diff -u -r7ee19b11cabfc6cb2ba1ab895462b024a621294b -r7751f40a2df9299c4510003b45dac7d574cd97c2
--- Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs (.../PipingCalculationServiceTest.cs) (revision 7ee19b11cabfc6cb2ba1ab895462b024a621294b)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs (.../PipingCalculationServiceTest.cs) (revision 7751f40a2df9299c4510003b45dac7d574cd97c2)
@@ -426,8 +426,8 @@
new PipingSoilLayer(10.5)
{
IsAquifer = false,
- BelowPhreaticLevelDeviation = random.GetFromRange(1e-6, 999.999),
- BelowPhreaticLevelMean = random.GetFromRange(10.0, 999.999),
+ BelowPhreaticLevelDeviation = random.GetFromRange(1e-6, 5.0),
+ BelowPhreaticLevelMean = random.GetFromRange(15.0, 999.999),
BelowPhreaticLevelShift = random.GetFromRange(1e-6, 10.0)
},
incompletePipingSoilLayer
@@ -588,6 +588,7 @@
var random = new Random(21);
var belowPhreaticLevelDeviation = random.NextDouble();
var belowPhreaticLevelShift = random.NextDouble();
+ var belowPhreaticLevelMeanBase = 15.0;
var profile = new PipingSoilProfile(string.Empty, 0.0,
new[]
{
@@ -596,14 +597,14 @@
IsAquifer = false,
BelowPhreaticLevelDeviation = belowPhreaticLevelDeviation,
BelowPhreaticLevelShift = belowPhreaticLevelShift,
- BelowPhreaticLevelMean = 0.1 + belowPhreaticLevelShift + random.NextDouble()
+ BelowPhreaticLevelMean = belowPhreaticLevelMeanBase + belowPhreaticLevelShift + random.NextDouble()
},
new PipingSoilLayer(8.5)
{
IsAquifer = false,
BelowPhreaticLevelDeviation = belowPhreaticLevelDeviation,
BelowPhreaticLevelShift = belowPhreaticLevelShift,
- BelowPhreaticLevelMean = 0.1 + belowPhreaticLevelShift + random.NextDouble()
+ BelowPhreaticLevelMean = belowPhreaticLevelMeanBase + belowPhreaticLevelShift + random.NextDouble()
},
new PipingSoilLayer(5.0)
{
@@ -661,8 +662,8 @@
new PipingSoilLayer(10.5)
{
IsAquifer = false,
- BelowPhreaticLevelDeviation = random.GetFromRange(1e-6, 999.999),
- BelowPhreaticLevelMean = random.GetFromRange(10.0, 999.999),
+ BelowPhreaticLevelDeviation = random.GetFromRange(1e-6, 5.0),
+ BelowPhreaticLevelMean = random.GetFromRange(15.0, 999.999),
BelowPhreaticLevelShift = random.GetFromRange(1e-6, 10.0)
},
soilLayer
@@ -689,6 +690,132 @@
}
[Test]
+ public void Validate_CalculationWithSaturatedCoverageLayerVolumicWeightLessThanWaterVolumicWeight_LogsErrorAndReturnsFalse()
+ {
+ // Setup
+ const string name = "";
+
+ var random = new Random(21);
+
+ var profile = new PipingSoilProfile(string.Empty, 0.0,
+ new[]
+ {
+ new PipingSoilLayer(10.5)
+ {
+ IsAquifer = false,
+ BelowPhreaticLevelMean = 9.81,
+ BelowPhreaticLevelDeviation = 2,
+ BelowPhreaticLevelShift = 0
+ },
+ new PipingSoilLayer(5.0)
+ {
+ IsAquifer = true,
+ PermeabilityDeviation = random.NextDouble(),
+ PermeabilityMean = 0.1 + random.NextDouble(),
+ DiameterD70Mean = 0.0002,
+ DiameterD70Deviation = 0
+ }
+ },
+ SoilProfileType.SoilProfile1D, -1);
+
+ PipingCalculation pipingCalculation = PipingCalculationScenarioFactory.CreatePipingCalculationScenarioWithValidInput();
+ pipingCalculation.Name = name;
+ pipingCalculation.InputParameters.StochasticSoilProfile.SoilProfile = profile;
+
+ bool isValid = false;
+
+ // Call
+ Action call = () => isValid = PipingCalculationService.Validate(pipingCalculation);
+
+ // 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.First());
+ Assert.AreEqual(
+ "Validatie mislukt: Het verzadigd volumetrisch gewicht van de deklaag moet groter zijn dan het volumetrisch gewicht van water.",
+ msgs[1]);
+ StringAssert.StartsWith(string.Format("Validatie van '{0}' beƫindigd om: ", name), msgs.Last());
+ });
+
+ Assert.IsFalse(isValid);
+ }
+
+ [Test]
+ public void Validate_CalculationSaturatedCoverageLayerHeavierThanWaterLayerMissingSaturatedParameter_LogsNoErrorForSaturatedValue()
+ {
+ // Setup
+ const string name = "";
+
+ var random = new Random(21);
+
+ var profile = new PipingSoilProfile(string.Empty, 0.0,
+ new[]
+ {
+ new PipingSoilLayer(10.5)
+ {
+ IsAquifer = false,
+ BelowPhreaticLevelMean = 5,
+ BelowPhreaticLevelDeviation = 2,
+ BelowPhreaticLevelShift = 0
+ },
+ new PipingSoilLayer(8.5)
+ {
+ IsAquifer = false,
+ BelowPhreaticLevelMean = 5,
+ BelowPhreaticLevelDeviation = 2,
+ BelowPhreaticLevelShift = double.NaN
+ },
+ new PipingSoilLayer(5.0)
+ {
+ IsAquifer = true,
+ PermeabilityDeviation = random.NextDouble(),
+ PermeabilityMean = 0.1 + random.NextDouble(),
+ DiameterD70Mean = 0.0002,
+ DiameterD70Deviation = 0
+ }
+ },
+ SoilProfileType.SoilProfile1D, -1);
+
+ PipingCalculation pipingCalculation = PipingCalculationScenarioFactory.CreatePipingCalculationScenarioWithValidInput();
+ pipingCalculation.Name = name;
+ pipingCalculation.InputParameters.StochasticSoilProfile.SoilProfile = profile;
+
+ // Call
+ Action call = () => PipingCalculationService.Validate(pipingCalculation);
+
+ // Assert
+ TestHelper.AssertLogMessages(call, messages =>
+ {
+ var msgs = messages.ToArray();
+ Assert.AreEqual(4, msgs.Length);
+ StringAssert.StartsWith(string.Format("Validatie van '{0}' gestart om: ", name), msgs.First());
+ Assert.AreEqual(
+ "Validatie mislukt: Kan de definitie voor het verzadigd gewicht van de deklaag niet (volledig) afleiden.",
+ msgs[2]);
+ StringAssert.StartsWith(string.Format("Validatie van '{0}' beƫindigd om: ", name), msgs.Last());
+ });
+ }
+
+ [Test]
+ public void Validate_CompleteInput_InputSetOnSubCalculators()
+ {
+ // Setup
+ PipingCalculation validPipingCalculation = PipingCalculationScenarioFactory.CreatePipingCalculationScenarioWithValidInput();
+ PipingInput input = validPipingCalculation.InputParameters;
+
+ using (new PipingSubCalculatorFactoryConfig())
+ {
+ // Call
+ PipingCalculationService.Validate(validPipingCalculation);
+
+ // Assert
+ AssertSubCalculatorInputs(input);
+ }
+ }
+
+ [Test]
public void Calculate_ValidPipingCalculation_LogStartAndEndOfValidatingInputsAndCalculation()
{
// Setup
@@ -755,23 +882,6 @@
}
[Test]
- public void Validate_CompleteInput_InputSetOnSubCalculators()
- {
- // Setup
- PipingCalculation validPipingCalculation = PipingCalculationScenarioFactory.CreatePipingCalculationScenarioWithValidInput();
- PipingInput input = validPipingCalculation.InputParameters;
-
- using (new PipingSubCalculatorFactoryConfig())
- {
- // Call
- PipingCalculationService.Validate(validPipingCalculation);
-
- // Assert
- AssertSubCalculatorInputs(input);
- }
- }
-
- [Test]
public void Calculate_CompleteInput_InputSetOnSubCalculators()
{
// Setup