Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingSoilProfile.cs
===================================================================
diff -u -r935ddb05bb15494732dea93d6c67a40bb318fb85 -r96a31b6c1e568fbbe87fb72f13f0a76b065bdf77
--- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingSoilProfile.cs (.../PipingSoilProfile.cs) (revision 935ddb05bb15494732dea93d6c67a40bb318fb85)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingSoilProfile.cs (.../PipingSoilProfile.cs) (revision 96a31b6c1e568fbbe87fb72f13f0a76b065bdf77)
@@ -115,9 +115,9 @@
/// does not contain .
public double GetLayerThickness(PipingSoilLayer layer)
{
- var orderedLayers = layers.OrderBy(l => l.Top);
+ var layersOrderedByTopAscending = layers.Reverse();
var previousLevel = Bottom;
- foreach (var oLayer in orderedLayers)
+ foreach (var oLayer in layersOrderedByTopAscending)
{
if (ReferenceEquals(layer, oLayer))
{
@@ -132,5 +132,56 @@
{
return Name;
}
+
+ ///
+ /// Retrieves the thickness of the topmost aquifer layer under a certain .
+ /// Only the thickness of the part of the aquifer layer under the level is determined.
+ /// Aquifer layers above are not considered.
+ ///
+ /// The level under which the aquifer layer is sought.
+ /// The thickness of the part of the topmost aquifer layer under the .
+ /// is less than .
+ public double GetTopAquiferLayerThicknessBelowLevel(double level)
+ {
+ ValidateLevelToBottom(level);
+
+ PipingSoilLayer currentTopAquiferLayer = null;
+ foreach (var pipingSoilLayer in Layers)
+ {
+ if (pipingSoilLayer.Top > level)
+ {
+ currentTopAquiferLayer = null;
+ }
+ if (currentTopAquiferLayer != null && pipingSoilLayer.Top <= level)
+ {
+ break;
+ }
+ if (pipingSoilLayer.IsAquifer)
+ {
+ currentTopAquiferLayer = pipingSoilLayer;
+ }
+ }
+ return GetLayerThicknessBelowLevel(currentTopAquiferLayer, level);
+ }
+
+ private void ValidateLevelToBottom(double level)
+ {
+ if (level < Bottom)
+ {
+ var message = string.Format(Resources.PipingSoilProfile_GetTopAquiferLayerThicknessBelowLevel_Level_0_below_Bottom_1_, level, Bottom);
+ throw new ArgumentException(message);
+ }
+ }
+
+ private double GetLayerThicknessBelowLevel(PipingSoilLayer layer, double level)
+ {
+ var thickness = double.NaN;
+ if (layer != null)
+ {
+ double thicknessAboveLevel = Math.Max(0, layer.Top - level);
+ thickness = GetLayerThickness(layer) - thicknessAboveLevel;
+ }
+ return thickness;
+ }
}
}
\ No newline at end of file