Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile1D.cs =================================================================== diff -u -r5290 -r6404 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile1D.cs (.../SoilProfile1D.cs) (revision 5290) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile1D.cs (.../SoilProfile1D.cs) (revision 6404) @@ -1,4 +1,4 @@ -// Copyright (C) Stichting Deltares 2024. All rights reserved. +// Copyright (C) Stichting Deltares 2025. All rights reserved. // // This file is part of the Dam Engine. // @@ -183,7 +183,7 @@ return aquiferLayer; } } - + /// /// Gets the deepest aquifer layer /// @@ -196,7 +196,7 @@ { IList sortedLayers = Layers.OrderBy(l => l.TopLevel).ToList(); SoilLayer1D aquiferLayer = null; - + for (var layerIndex = 0; layerIndex < sortedLayers.Count; layerIndex++) { SoilLayer1D layer = sortedLayers[layerIndex]; @@ -221,26 +221,7 @@ /// The list of all clusters of in-between aquifers. /// public IList<(SoilLayer1D, SoilLayer1D)> GetInBetweenAquiferClusters => InBetweenAquiferClusters(); - - private IList<(SoilLayer1D, SoilLayer1D)> InBetweenAquiferClusters() - { - // At least 4 layers are needed (aquitard, aquifer, aquitard, aquifer) to get one in-between aquifer - if (LayerCount <= 3) - { - return new List<(SoilLayer1D, SoilLayer1D)>(); - } - IList sortedLayers = Layers.OrderByDescending(l => l.TopLevel).ToList(); - IList topLayers = DetermineTopLayersOfInBetweenAquiferClusters(sortedLayers); - if (topLayers.Count <= 0) - { - return new List<(SoilLayer1D, SoilLayer1D)>(); - } - - IList bottomLayers = DetermineBottomLayersOfInBetweenAquiferClusters(sortedLayers, layers.IndexOf(topLayers.First())); - return topLayers.Count != bottomLayers.Count ? null : topLayers.Select((topLayer, i) => new ValueTuple(topLayer, bottomLayers[i])).ToList(); - } - /// /// Gets the highest aquifer in the highest cluster of in-between aquifers. /// The top layer of a cluster of in-between aquifer can't be the highest layer of the soil profile. @@ -512,7 +493,7 @@ return layer; } - + /// /// Gets the lowest layer of the highest cluster of aquifers. /// @@ -531,7 +512,7 @@ return layer; } - + /// /// Returns a that represents this instance. /// @@ -543,6 +524,25 @@ return Name; } + private IList<(SoilLayer1D, SoilLayer1D)> InBetweenAquiferClusters() + { + // At least 4 layers are needed (aquitard, aquifer, aquitard, aquifer) to get one in-between aquifer + if (LayerCount <= 3) + { + return new List<(SoilLayer1D, SoilLayer1D)>(); + } + + IList sortedLayers = Layers.OrderByDescending(l => l.TopLevel).ToList(); + IList topLayers = DetermineTopLayersOfInBetweenAquiferClusters(sortedLayers); + if (topLayers.Count <= 0) + { + return new List<(SoilLayer1D, SoilLayer1D)>(); + } + + IList bottomLayers = DetermineBottomLayersOfInBetweenAquiferClusters(sortedLayers, layers.IndexOf(topLayers.First())); + return topLayers.Count != bottomLayers.Count ? null : topLayers.Select((topLayer, i) => new ValueTuple(topLayer, bottomLayers[i])).ToList(); + } + private List DetermineTopLayersOfInBetweenAquiferClusters(IList sortedLayers) { List topLayers = [];