Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile1DTests.cs =================================================================== diff -u -r4906 -r4927 --- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile1DTests.cs (.../SoilProfile1DTests.cs) (revision 4906) +++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile1DTests.cs (.../SoilProfile1DTests.cs) (revision 4927) @@ -42,7 +42,7 @@ SoilProfile1D soilProfile1D = CreateProfileWith3Layers(true, false, true); Assert.Multiple(() => { - Assert.That(soilProfile1D.InBetweenAquiferClusters, Is.Null); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters, Is.Empty); Assert.That(soilProfile1D.InBetweenAquiferLayer, Is.Null); Assert.That(soilProfile1D.BottomAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer3)); Assert.That(soilProfile1D.BottomAquiferLayer.BottomLevel, Is.EqualTo(topLevelLayer4)); @@ -52,7 +52,7 @@ soilProfile1D = CreateProfileWith6Layers(true, true, false, false, true, true); Assert.Multiple(() => { - Assert.That(soilProfile1D.InBetweenAquiferClusters, Is.Null); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters, Is.Empty); Assert.That(soilProfile1D.InBetweenAquiferLayer, Is.Null); Assert.That(soilProfile1D.BottomAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer5)); Assert.That(soilProfile1D.BottomAquiferLayer.BottomLevel, Is.EqualTo(topLevelLayer6)); @@ -62,7 +62,7 @@ soilProfile1D = CreateProfileWith6Layers(true, true, true, true, true, true); Assert.Multiple(() => { - Assert.That(soilProfile1D.InBetweenAquiferClusters, Is.Null); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters, Is.Empty); Assert.That(soilProfile1D.InBetweenAquiferLayer, Is.Null); Assert.That(soilProfile1D.BottomAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer1)); Assert.That(soilProfile1D.BottomAquiferLayer.BottomLevel, Is.EqualTo(topLevelLayer2)); @@ -72,7 +72,7 @@ soilProfile1D = CreateProfileWith6Layers(false, false, false, false, false, false); Assert.Multiple(() => { - Assert.That(soilProfile1D.InBetweenAquiferClusters, Is.Null); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters, Is.Empty); Assert.That(soilProfile1D.InBetweenAquiferLayer, Is.Null); Assert.That(soilProfile1D.BottomAquiferLayer, Is.Null); }); @@ -81,7 +81,7 @@ soilProfile1D = CreateProfileWith6Layers(true, false, true, true, true, true); Assert.Multiple(() => { - Assert.That(soilProfile1D.InBetweenAquiferClusters, Is.Null); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters, Is.Empty); Assert.That(soilProfile1D.InBetweenAquiferLayer, Is.Null); Assert.That(soilProfile1D.BottomAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer3)); Assert.That(soilProfile1D.BottomAquiferLayer.BottomLevel, Is.EqualTo(topLevelLayer4)); @@ -91,21 +91,21 @@ soilProfile1D = CreateProfileWith6Layers(false, false, false, true, true, true); Assert.Multiple(() => { - Assert.That(soilProfile1D.InBetweenAquiferClusters, Is.Null); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters, Is.Empty); Assert.That(soilProfile1D.InBetweenAquiferLayer, Is.Null); Assert.That(soilProfile1D.BottomAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer4)); Assert.That(soilProfile1D.BottomAquiferLayer.BottomLevel, Is.EqualTo(topLevelLayer5)); }); // 2 in-between aquifers present (layers 2 and 4) and bottom aquifer is the lowest layer soilProfile1D = CreateProfileWith6Layers(false, true, false, true, false, true); - Assert.That(soilProfile1D.InBetweenAquiferClusters, Has.Count.EqualTo(2)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters, Has.Count.EqualTo(2)); Assert.Multiple(() => { - Assert.That(soilProfile1D.InBetweenAquiferClusters[0].Item1.TopLevel, Is.EqualTo(topLevelLayer2)); - Assert.That(soilProfile1D.InBetweenAquiferClusters[0].Item2.BottomLevel, Is.EqualTo(topLevelLayer3)); - Assert.That(soilProfile1D.InBetweenAquiferClusters[1].Item1.TopLevel, Is.EqualTo(topLevelLayer4)); - Assert.That(soilProfile1D.InBetweenAquiferClusters[1].Item2.BottomLevel, Is.EqualTo(topLevelLayer5)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[0].Item1.TopLevel, Is.EqualTo(topLevelLayer2)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[0].Item2.BottomLevel, Is.EqualTo(topLevelLayer3)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[1].Item1.TopLevel, Is.EqualTo(topLevelLayer4)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[1].Item2.BottomLevel, Is.EqualTo(topLevelLayer5)); Assert.That(soilProfile1D.InBetweenAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer2)); Assert.That(soilProfile1D.InBetweenAquiferLayer.BottomLevel, Is.EqualTo(topLevelLayer3)); Assert.That(soilProfile1D.BottomAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer6)); @@ -114,11 +114,11 @@ // 1 in-between aquifers cluster present (layers 2-4) and bottom aquifer is the lowest layer soilProfile1D = CreateProfileWith6Layers(false, true, true, true, false, true); - Assert.That(soilProfile1D.InBetweenAquiferClusters, Has.Count.EqualTo(1)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters, Has.Count.EqualTo(1)); Assert.Multiple(() => { - Assert.That(soilProfile1D.InBetweenAquiferClusters[0].Item1.TopLevel, Is.EqualTo(topLevelLayer2)); - Assert.That(soilProfile1D.InBetweenAquiferClusters[0].Item2.BottomLevel, Is.EqualTo(topLevelLayer5)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[0].Item1.TopLevel, Is.EqualTo(topLevelLayer2)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[0].Item2.BottomLevel, Is.EqualTo(topLevelLayer5)); Assert.That(soilProfile1D.InBetweenAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer2)); Assert.That(soilProfile1D.InBetweenAquiferLayer.BottomLevel, Is.EqualTo(topLevelLayer3)); Assert.That(soilProfile1D.BottomAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer6)); @@ -127,11 +127,11 @@ // 1 in-between aquifer present (layer 2) and bottom aquifer is the highest layer of cluster 4-6 soilProfile1D = CreateProfileWith6Layers(false, true, false, true, true, true); - Assert.That(soilProfile1D.InBetweenAquiferClusters, Has.Count.EqualTo(1)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters, Has.Count.EqualTo(1)); Assert.Multiple(() => { - Assert.That(soilProfile1D.InBetweenAquiferClusters[0].Item1.TopLevel, Is.EqualTo(topLevelLayer2)); - Assert.That(soilProfile1D.InBetweenAquiferClusters[0].Item2.BottomLevel, Is.EqualTo(topLevelLayer3)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[0].Item1.TopLevel, Is.EqualTo(topLevelLayer2)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[0].Item2.BottomLevel, Is.EqualTo(topLevelLayer3)); Assert.That(soilProfile1D.InBetweenAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer2)); Assert.That(soilProfile1D.InBetweenAquiferLayer.BottomLevel, Is.EqualTo(topLevelLayer3)); Assert.That(soilProfile1D.BottomAquiferLayer.TopLevel, Is.EqualTo(topLevelLayer4)); Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile1D.cs =================================================================== diff -u -r4909 -r4927 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile1D.cs (.../SoilProfile1D.cs) (revision 4909) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile1D.cs (.../SoilProfile1D.cs) (revision 4927) @@ -205,26 +205,25 @@ /// /// The list of all clusters of in-between aquifers. /// - public IList<(SoilLayer1D, SoilLayer1D)> InBetweenAquiferClusters + public IList<(SoilLayer1D, SoilLayer1D)> GetInBetweenAquiferClusters => InBetweenAquiferClusters(); + + private IList<(SoilLayer1D, SoilLayer1D)> InBetweenAquiferClusters() { - get + // At least 4 layers are needed (aquitard, aquifer, aquitard, aquifer) to get one in-between aquifer + if (LayerCount <= 3) { - // At least 4 layers are needed (aquitard, aquifer, aquitard, aquifer) to get one in-between aquifer - if (LayerCount <= 3) - { - return null; - } + return new List<(SoilLayer1D, SoilLayer1D)>(); + } - IList sortedLayers = Layers.OrderByDescending(l => l.TopLevel).ToList(); - IList topLayers = DetermineTopLayersOfInBetweenAquiferClusters(sortedLayers); - if (topLayers.Count <= 0) - { - return null; - } - - IList bottomLayers = DetermineBottomLayersOfInBetweenAquiferClusters(sortedLayers, layers.IndexOf(topLayers.First())); - return topLayers.Count != bottomLayers.Count ? null : topLayers.Select((topLayer, i) => new ValueTuple(topLayer, bottomLayers[i])).ToList(); + 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(); } /// @@ -238,7 +237,7 @@ { get { - return InBetweenAquiferClusters?.First().Item1; + return GetInBetweenAquiferClusters.Count == 0 ? null : GetInBetweenAquiferClusters.First().Item1; } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs =================================================================== diff -u -r4920 -r4927 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (.../PlLinesToWaternetConverter.cs) (revision 4920) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverter.cs (.../PlLinesToWaternetConverter.cs) (revision 4927) @@ -200,9 +200,9 @@ if (headLine != null && !IsBelowSoilProfile(soilProfile1D, plLine)) { waternet.HeadLineList.Add(headLine); - if (soilProfile1D.InBetweenAquiferClusters != null) + if (soilProfile1D.GetInBetweenAquiferClusters != null) { - foreach ((SoilLayer1D, SoilLayer1D) inBetweenAquiferCluster in soilProfile1D.InBetweenAquiferClusters.Where(layer => layer is { Item1: not null, Item2: not null })) + foreach ((SoilLayer1D, SoilLayer1D) inBetweenAquiferCluster in soilProfile1D.GetInBetweenAquiferClusters.Where(layer => layer is { Item1: not null, Item2: not null })) { double levelTop = inBetweenAquiferCluster.Item1.TopLevel; double levelBottom = inBetweenAquiferCluster.Item2.BottomLevel; @@ -254,7 +254,7 @@ for (var i = 0; i < xCoordinates.Length; i++) { SoilProfile1D crossSection = soilProfile.GetSoilProfile1D(xCoordinates[i]); - currentCount = crossSection.InBetweenAquiferClusters?.Count ?? 0; + currentCount = crossSection.GetInBetweenAquiferClusters?.Count ?? 0; if (i > 0 && currentCount != previousCount) { return 0; @@ -415,9 +415,9 @@ case LayerType.BottomAquifer: return soilProfile1D.BottomAquiferLayer; case LayerType.TopLayerInBetweenAquiferCluster: - return soilProfile1D.InBetweenAquiferClusters[indexInBetweenAquifer].Item1; + return soilProfile1D.GetInBetweenAquiferClusters[indexInBetweenAquifer].Item1; case LayerType.BottomLayerInBetweenAquiferCluster: - return soilProfile1D.InBetweenAquiferClusters[indexInBetweenAquifer].Item2; + return soilProfile1D.GetInBetweenAquiferClusters[indexInBetweenAquifer].Item2; } return null; @@ -623,14 +623,14 @@ private static List DivideCurvesIntoLines(List curves) { var lines = new List(); - foreach (GeometryPointString curve in curves) + foreach (IList points in curves.Select(curve => curve.Points)) { - for (var i = 0; i < curve.Points.Count - 1; i++) + for (var i = 0; i < points.Count - 1; i++) { var line = new Line { - BeginPoint = new Point2D(curve.Points[i].X, curve.Points[i].Z), - EndPoint = new Point2D(curve.Points[i + 1].X, curve.Points[i + 1].Z) + BeginPoint = new Point2D(points[i].X, points[i].Z), + EndPoint = new Point2D(points[i + 1].X, points[i + 1].Z) }; lines.Add(line); } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs =================================================================== diff -u -r4909 -r4927 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs (.../PlLinesToWaternetConverterTests.cs) (revision 4909) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/PlLinesToWaternetConverterTests.cs (.../PlLinesToWaternetConverterTests.cs) (revision 4927) @@ -88,11 +88,11 @@ SoilProfile1D soilProfile1D = CreateSoilProfile1DForTest(); Assert.Multiple(() => { - Assert.That(soilProfile1D.InBetweenAquiferClusters, Has.Count.EqualTo(2).Within(precision3Decimals)); - Assert.That(soilProfile1D.InBetweenAquiferClusters[0].Item1.TopLevel, Is.EqualTo(-2.111).Within(precision3Decimals)); - Assert.That(soilProfile1D.InBetweenAquiferClusters[0].Item2.BottomLevel, Is.EqualTo(-3.373).Within(precision3Decimals)); - Assert.That(soilProfile1D.InBetweenAquiferClusters[1].Item1.TopLevel, Is.EqualTo(-4.151).Within(precision3Decimals)); - Assert.That(soilProfile1D.InBetweenAquiferClusters[1].Item2.BottomLevel, Is.EqualTo(-5.373).Within(precision3Decimals)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters, Has.Count.EqualTo(2).Within(precision3Decimals)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[0].Item1.TopLevel, Is.EqualTo(-2.111).Within(precision3Decimals)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[0].Item2.BottomLevel, Is.EqualTo(-3.373).Within(precision3Decimals)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[1].Item1.TopLevel, Is.EqualTo(-4.151).Within(precision3Decimals)); + Assert.That(soilProfile1D.GetInBetweenAquiferClusters[1].Item2.BottomLevel, Is.EqualTo(-5.373).Within(precision3Decimals)); Assert.That(soilProfile1D.BottomAquiferLayer.TopLevel, Is.EqualTo(-6.111).Within(precision3Decimals)); });