Index: DamEngine/trunk/src/Deltares.DamEngine.Interface.Tests/ConversionHelperTests.cs
===================================================================
diff -u -r5372 -r5662
--- DamEngine/trunk/src/Deltares.DamEngine.Interface.Tests/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 5372)
+++ DamEngine/trunk/src/Deltares.DamEngine.Interface.Tests/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 5662)
@@ -361,16 +361,16 @@
}
[Test]
- [TestCase(TangentLinesDefinition.OnBoundaryLines, ConversionHelper.InputTangentLinesSpecified)]
- [TestCase(TangentLinesDefinition.Specified, ConversionHelper.InputTangentLinesOnBoundaryLines)]
+ [TestCase(TangentLinesDefinition.OnBoundaryLines, ConversionHelper.InputTangentLinesOnBoundaryLines)]
+ [TestCase(TangentLinesDefinition.Specified, ConversionHelper.InputTangentLinesSpecified)]
public void CanConvertToInputTangentLinesDefinition(TangentLinesDefinition tangentLineType, int inputTangentLineType)
{
Assert.That(ConversionHelper.ConvertToInputTangentLinesDefinition(tangentLineType), Is.EqualTo(inputTangentLineType));
}
[Test]
- [TestCase(ConversionHelper.InputGridTypeSpecified, TangentLinesDefinition.OnBoundaryLines)]
- [TestCase(ConversionHelper.InputGridTypeAutomatic, TangentLinesDefinition.Specified)]
+ [TestCase(ConversionHelper.InputTangentLinesOnBoundaryLines, TangentLinesDefinition.OnBoundaryLines)]
+ [TestCase(ConversionHelper.InputTangentLinesSpecified, TangentLinesDefinition.Specified)]
public void CanConvertToTangentLinesDefinition(int inputTangentLineType, TangentLinesDefinition tangentLineType)
{
Assert.That(ConversionHelper.ConvertToTangentLinesDefinition(inputTangentLineType), Is.EqualTo(tangentLineType));
Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/ConversionHelper.cs
===================================================================
diff -u -r5448 -r5662
--- DamEngine/trunk/src/Deltares.DamEngine.Interface/ConversionHelper.cs (.../ConversionHelper.cs) (revision 5448)
+++ DamEngine/trunk/src/Deltares.DamEngine.Interface/ConversionHelper.cs (.../ConversionHelper.cs) (revision 5662)
@@ -104,7 +104,7 @@
public const int InputGridTypeSpecified = 1;
///
- /// The input tangent lines on boundaty lines
+ /// The input tangent lines on boundary lines
///
public const int InputTangentLinesOnBoundaryLines = 0;
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/BishopGridCreatorTests.cs
===================================================================
diff -u
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/BishopGridCreatorTests.cs (revision 0)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/BishopGridCreatorTests.cs (revision 5662)
@@ -0,0 +1,164 @@
+// Copyright (C) Stichting Deltares 2024. All rights reserved.
+//
+// This file is part of the Dam Engine.
+//
+// The Dam Engine is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon;
+using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards;
+using Deltares.DamEngine.Data.General;
+using Deltares.DamEngine.Data.Geometry;
+using Deltares.DamEngine.Data.Geotechnics;
+using Deltares.DamEngine.TestHelpers.Factories;
+using NUnit.Framework;
+using CharacteristicPointType = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointType;
+
+namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.MacroStabilityInwards;
+
+[TestFixture]
+public class BishopGridCreatorTests
+{
+ private const double tolerance = 0.0001;
+ private const double specifiedGridHeight = 10;
+ private const int specifiedGridZPoints = 6;
+ private const double specifiedGridWidth = 6;
+ private const int specifiedGridXPoints = 3;
+ private const double specifiedTangentDistance = 1.5;
+ private const double surfaceLevelSoilProfile1D = 0;
+ private const double bottomLayerSoilProfile1D = -10;
+
+ [Test]
+ [TestCase(MStabGridPosition.Right, true)]
+ [TestCase(MStabGridPosition.Left, true)]
+ [TestCase(MStabGridPosition.Right, false)]
+ [TestCase(MStabGridPosition.Left, false)]
+ public void GivenSlipCircleDefinition_WhenDetermineGrid_ThenGridIsAsExpected(MStabGridPosition gridPosition, bool isGridSpecified)
+ {
+ // Given
+ SlipCircleDefinition slipCircleDefinition = CreateSlipCircleDefinition(isGridSpecified, true);
+ SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineForTestingGrid(10.0, 80.0);
+ // When
+ BishopCalculationGrid bishopCalculationGrid = BishopGridCreator.DetermineGridsFromSettings(gridPosition, slipCircleDefinition, surfaceLine);
+ // Then
+ Assert.Multiple(() =>
+ {
+ Assert.That(bishopCalculationGrid.IsGridsAutomatic, Is.Not.EqualTo(isGridSpecified));
+ CheckValuesGrid(bishopCalculationGrid, surfaceLine, gridPosition);
+ });
+ }
+
+ [Test]
+ [TestCase(true)]
+ [TestCase(false)]
+ public void GivenSlipCircleDefinitionAndSoilProfile1D_WhenDetermineTangentLines_ThenTangentLinesAreAsExpected(bool isTangentLinesSpecified)
+ {
+ // Given
+ SlipCircleDefinition slipCircleDefinition = CreateSlipCircleDefinition(true, isTangentLinesSpecified);
+ SoilProfile1D soilProfile1D = FactoryForSoilProfiles.CreateClaySandProfile(out _, surfaceLevelSoilProfile1D, bottomLayerSoilProfile1D);
+
+ // When
+ var bishopCalculationGrid = new BishopCalculationGrid();
+ BishopGridCreator.DetermineTangentLines(bishopCalculationGrid, slipCircleDefinition, soilProfile1D);
+ // Then
+ Assert.Multiple(() =>
+ {
+ Assert.That(bishopCalculationGrid.IsTangentLinesAutomatic, Is.Not.EqualTo(isTangentLinesSpecified));
+ CheckValuesTangentLines(bishopCalculationGrid);
+ });
+ }
+
+ private static void CheckValuesGrid(BishopCalculationGrid bishopCalculationGrid, SurfaceLine2 surfaceLine, MStabGridPosition gridPosition)
+ {
+ var expectedXLeft = 0.0;
+ var expectedXRight = 0.0;
+ var expectedXCount = 0;
+ var expectedZBottom = 0.0;
+ var expectedZTop = 0.0;
+ var expectedZCount = 0;
+ if (!bishopCalculationGrid.IsGridsAutomatic)
+ {
+ GeometryPoint dikeTopAtRiver = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ GeometryPoint dikeTopAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ double middleX = 0.5 * (dikeTopAtRiver.X + dikeTopAtPolder.X);
+ switch (gridPosition)
+ {
+ case MStabGridPosition.Left:
+ expectedXRight = middleX;
+ expectedXLeft = middleX - specifiedGridWidth;
+ break;
+ case MStabGridPosition.Right:
+ expectedXLeft = middleX;
+ expectedXRight = middleX + specifiedGridWidth;
+ break;
+ }
+ expectedXCount = 3;
+ expectedZBottom = 0.5 * (dikeTopAtRiver.Z + dikeTopAtPolder.Z);
+ expectedZTop = expectedZBottom + specifiedGridHeight;
+ expectedZCount = 6;
+ }
+
+ Assert.Multiple(() =>
+ {
+ Assert.That(bishopCalculationGrid.GridXLeft, Is.EqualTo(expectedXLeft).Within(tolerance));
+ Assert.That(bishopCalculationGrid.GridXRight, Is.EqualTo(expectedXRight).Within(tolerance));
+ Assert.That(bishopCalculationGrid.GridXCount, Is.EqualTo(expectedXCount));
+ Assert.That(bishopCalculationGrid.GridZBottom, Is.EqualTo(expectedZBottom).Within(tolerance));
+ Assert.That(bishopCalculationGrid.GridZTop, Is.EqualTo(expectedZTop).Within(tolerance));
+ Assert.That(bishopCalculationGrid.GridZCount, Is.EqualTo(expectedZCount));
+ });
+ }
+
+ private static void CheckValuesTangentLines(BishopCalculationGrid bishopCalculationGrid)
+ {
+ var expectedZBottom = 0.0;
+ var expectedZTop = 0.0;
+ var expectedCount = 0;
+
+ if (!bishopCalculationGrid.IsTangentLinesAutomatic)
+ {
+ expectedZBottom = bottomLayerSoilProfile1D - specifiedTangentDistance;
+ expectedCount = (int) Math.Round((surfaceLevelSoilProfile1D - expectedZBottom) / specifiedTangentDistance) + 1;
+ expectedZTop = expectedZBottom + (expectedCount - 1) * specifiedTangentDistance;
+ }
+
+ Assert.Multiple(() =>
+ {
+ Assert.That(bishopCalculationGrid.TangentLineZTop, Is.EqualTo(expectedZTop).Within(tolerance));
+ Assert.That(bishopCalculationGrid.TangentLineZBottom, Is.EqualTo(expectedZBottom).Within(tolerance));
+ Assert.That(bishopCalculationGrid.TangentLineCount, Is.EqualTo(expectedCount));
+ Assert.That(bishopCalculationGrid.TangentLineLevels, Is.Empty);
+ });
+ }
+
+ private static SlipCircleDefinition CreateSlipCircleDefinition(bool isGridSpecified, bool isTangentLinesSpecified)
+{
+ var slipCircleDefinition = new SlipCircleDefinition
+ {
+ GridSizeDetermination = isGridSpecified ? GridSizeDetermination.Specified : GridSizeDetermination.Automatic,
+ BishopGridVerticalPointCount = specifiedGridZPoints,
+ BishopGridVerticalPointDistance = specifiedGridHeight / (specifiedGridZPoints - 1),
+ BishopGridHorizontalPointCount = specifiedGridXPoints,
+ BishopGridHorizontalPointDistance = specifiedGridWidth / (specifiedGridXPoints - 1),
+ BishopTangentLinesDefinition = isTangentLinesSpecified ? TangentLinesDefinition.Specified: TangentLinesDefinition.OnBoundaryLines,
+ BishopTangentLinesDistance = specifiedTangentDistance
+ };
+ return slipCircleDefinition;
+}
+
+}
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs
===================================================================
diff -u -r5598 -r5662
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs (.../FillMacroStabilityWrapperInputFromEngine.cs) (revision 5598)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs (.../FillMacroStabilityWrapperInputFromEngine.cs) (revision 5662)
@@ -102,28 +102,17 @@
lastStage.Waternet = new KernelWaternet();
TransferWaternet(waterNet, lastStage.Waternet);
- double top = damKernelInput.Location.SurfaceLine.CharacteristicPoints
- .GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z;
- double bottom = damKernelInput.SubSoilScenario.SoilProfile2D.Geometry.MinGeometryPointsZ;
- SlipCircleDefinition slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification
- .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition;
SearchAreaConditions preprocessingSearchAreaConditions = macroStabilityInput.PreprocessingInput.SearchAreaConditions;
switch (mStabParameters.Model)
{
case MStabModelType.Bishop:
- TransferBishopCalculationGridSettings(slipCircleDefinition, top, bottom,
- preprocessingSearchAreaConditions);
- TransferBishopCalculationCircle(BishopCalculationGrid,
- macroStabilityInput.StabilityModel.BishopCalculationCircle,
- preprocessingSearchAreaConditions.AutoTangentLines);
+ TransferBishopSearchAreaSettings(preprocessingSearchAreaConditions);
+ TransferBishopCalculationGrid(macroStabilityInput.StabilityModel.BishopCalculationCircle);
break;
case MStabModelType.UpliftVan:
- TransferUpliftVanCalculationGridSettings(slipCircleDefinition, top, bottom,
- preprocessingSearchAreaConditions);
- TransferUpliftVanCalculationGrid(UpliftVanCalculationGrid,
- macroStabilityInput.StabilityModel.UpliftVanCalculationGrid,
- preprocessingSearchAreaConditions.AutoTangentLines);
+ TransferUpliftVanSearchAreaSettings(preprocessingSearchAreaConditions);
+ TransferUpliftVanCalculationGrid(macroStabilityInput.StabilityModel.UpliftVanCalculationGrid);
break;
default:
throw new NotImplementedException(nameof(mStabParameters.Model));
@@ -140,7 +129,7 @@
kernelStabilityInput.MoveGrid = true; // is not in DamEngine but MUST be true as we use the brute force approach.
kernelStabilityInput.MaximumSliceWidth = 1.0; // is not in DamEngine datamodel
// For Bishop, only Grid is possible however if Bishop/UpliftVan was selected, then the SearchAlgorithm concerns only Uplift-Van
- kernelStabilityInput.SearchAlgorithm = mStabParameters.Model == MStabModelType.Bishop ? SearchAlgorithm.Grid: ConversionHelper.ConvertToMacroStabilitySearchMethod(mStabParameters.SearchMethod);
+ kernelStabilityInput.SearchAlgorithm = mStabParameters.Model == MStabModelType.Bishop ? SearchAlgorithm.Grid : ConversionHelper.ConvertToMacroStabilitySearchMethod(mStabParameters.SearchMethod);
if (kernelStabilityInput.SearchAlgorithm == SearchAlgorithm.BeeswarmAndLevenbergMarquardt)
{
CreateDefaultBeeSwarmOptions(kernelStabilityInput);
@@ -158,8 +147,8 @@
{
return;
}
- slipPlaneConstraints.SlipPlaneMinDepth = location.StabilityOptions.MinimalCircleDepth?? 0.0;
- if ((location.StabilityOptions.StabilityZoneType == MStabZonesType.ForbiddenZone) &&
+ slipPlaneConstraints.SlipPlaneMinDepth = location.StabilityOptions.MinimalCircleDepth ?? 0.0;
+ if ((location.StabilityOptions.StabilityZoneType == MStabZonesType.ForbiddenZone) &&
location.StabilityOptions.ForbiddenZoneFactor.HasValue)
{
CharacteristicPointSet characteristicPoints = location.SurfaceLine.CharacteristicPoints;
@@ -205,7 +194,7 @@
}
}
}
-
+
private static void TransferTrafficLoadDegreeOfConsolidation(IList damDegreeOfConsolidations, ConstructionStage stage)
{
if (damDegreeOfConsolidations != null && stage.UniformLoads.Count == 1)
@@ -342,7 +331,7 @@
PhreaticLine phreaticLine = damWaternet.PhreaticLine;
kernelWaternet.PhreaticLine = CreateLine(phreaticLine);
headLineMapping.Add(damWaternet.PhreaticLine, kernelWaternet.PhreaticLine);
-
+
// Head Lines
foreach (HeadLine damHeadLine in damWaternet.HeadLineList)
{
@@ -372,54 +361,29 @@
return line;
}
- private void TransferBishopCalculationGridSettings(SlipCircleDefinition slipCircleDefinition, double top, double bottom, SearchAreaConditions kernelSearchAreaConditions)
+ private void TransferBishopSearchAreaSettings(SearchAreaConditions kernelSearchAreaConditions)
{
- kernelSearchAreaConditions.AutoSearchArea =
- slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Automatic;
- kernelSearchAreaConditions.AutoTangentLines =
- slipCircleDefinition.BishopTangentLinesDefinition == TangentLinesDefinition.OnBoundaryLines;
- if (kernelSearchAreaConditions.AutoTangentLines)
- {
- kernelSearchAreaConditions.TangentLineNumber =
- Convert.ToInt32(Math.Floor((top - bottom) / slipCircleDefinition.BishopTangentLinesDistance) + 1);
- kernelSearchAreaConditions.TangentLineZTop = top;
- kernelSearchAreaConditions.TangentLineZBottom = bottom;
- }
- else
- {
- kernelSearchAreaConditions.TangentLineNumber = BishopCalculationGrid.TangentLineCount;
- kernelSearchAreaConditions.TangentLineZTop = BishopCalculationGrid.TangentLineZTop;
- kernelSearchAreaConditions.TangentLineZBottom = BishopCalculationGrid.TangentLineZBottom;
- }
+ kernelSearchAreaConditions.AutoTangentLines = BishopCalculationGrid.IsTangentLinesAutomatic;
+ kernelSearchAreaConditions.AutoSearchArea = BishopCalculationGrid.IsGridsAutomatic;
+ kernelSearchAreaConditions.TangentLineNumber = BishopCalculationGrid.TangentLineCount;
+ kernelSearchAreaConditions.TangentLineZTop = BishopCalculationGrid.TangentLineZTop;
+ kernelSearchAreaConditions.TangentLineZBottom = BishopCalculationGrid.TangentLineZBottom;
}
- private void TransferUpliftVanCalculationGridSettings(SlipCircleDefinition slipCircleDefinition, double top, double bottom, SearchAreaConditions kernelSearchAreaConditions)
+ private void TransferUpliftVanSearchAreaSettings(SearchAreaConditions kernelSearchAreaConditions)
{
- kernelSearchAreaConditions.AutoSearchArea =
- slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Automatic;
- kernelSearchAreaConditions.AutoTangentLines =
- slipCircleDefinition.UpliftVanTangentLinesDefinition == TangentLinesDefinition.OnBoundaryLines;
- if (kernelSearchAreaConditions.AutoTangentLines)
- {
- kernelSearchAreaConditions.TangentLineNumber =
- Convert.ToInt32(Math.Floor((top - bottom) / slipCircleDefinition.UpliftVanTangentLinesDistance) + 1);
- kernelSearchAreaConditions.TangentLineZTop = top;
- kernelSearchAreaConditions.TangentLineZBottom = bottom;
- }
- else
- {
- kernelSearchAreaConditions.TangentLineNumber = UpliftVanCalculationGrid.TangentLineCount;
- kernelSearchAreaConditions.TangentLineZTop = UpliftVanCalculationGrid.TangentLineZTop;
- kernelSearchAreaConditions.TangentLineZBottom = UpliftVanCalculationGrid.TangentLineZBottom;
- }
+ kernelSearchAreaConditions.AutoTangentLines = UpliftVanCalculationGrid.IsTangentLinesAutomatic;
+ kernelSearchAreaConditions.AutoSearchArea = UpliftVanCalculationGrid.IsGridsAutomatic;
+ kernelSearchAreaConditions.TangentLineNumber = UpliftVanCalculationGrid.TangentLineCount;
+ kernelSearchAreaConditions.TangentLineZTop = UpliftVanCalculationGrid.TangentLineZTop;
+ kernelSearchAreaConditions.TangentLineZBottom = UpliftVanCalculationGrid.TangentLineZBottom;
}
- private void TransferBishopCalculationCircle(BishopCalculationGrid damBishopCalculationGrid,
- BishopCalculationCircle kernelBishopCalculationCircle, bool isAutoTangentLines)
+ private void TransferBishopCalculationGrid(BishopCalculationCircle kernelBishopCalculationCircle)
{
- if (damBishopCalculationGrid == null)
+ if (BishopCalculationGrid == null)
{
- throw new ArgumentNullException(nameof(damBishopCalculationGrid));
+ throw new ArgumentNullException(nameof(BishopCalculationGrid));
}
if (kernelBishopCalculationCircle == null)
@@ -429,26 +393,20 @@
kernelBishopCalculationCircle.Grid = new CalculationGrid
{
- GridXNumber = damBishopCalculationGrid.GridXCount,
- GridXLeft = damBishopCalculationGrid.GridXLeft,
- GridXRight = damBishopCalculationGrid.GridXRight,
- GridZNumber = damBishopCalculationGrid.GridZCount,
- GridZTop = damBishopCalculationGrid.GridZTop,
- GridZBottom = damBishopCalculationGrid.GridZBottom
+ GridXNumber = BishopCalculationGrid.GridXCount,
+ GridXLeft = BishopCalculationGrid.GridXLeft,
+ GridXRight = BishopCalculationGrid.GridXRight,
+ GridZNumber = BishopCalculationGrid.GridZCount,
+ GridZTop = BishopCalculationGrid.GridZTop,
+ GridZBottom = BishopCalculationGrid.GridZBottom
};
-
- if (!isAutoTangentLines)
- {
- kernelBishopCalculationCircle.TangentLines = damBishopCalculationGrid.TangentLineLevels.ToArray();
- }
}
- private void TransferUpliftVanCalculationGrid(UpliftVanCalculationGrid damUpliftVanCalculationGrid,
- KernelUpliftVanCalculationGrid kernelUpliftVanCalculationGrid, bool isAutoTangentLines)
+ private void TransferUpliftVanCalculationGrid(KernelUpliftVanCalculationGrid kernelUpliftVanCalculationGrid)
{
- if (damUpliftVanCalculationGrid == null)
+ if (UpliftVanCalculationGrid == null)
{
- throw new ArgumentNullException(nameof(damUpliftVanCalculationGrid));
+ throw new ArgumentNullException(nameof(UpliftVanCalculationGrid));
}
if (kernelUpliftVanCalculationGrid == null)
@@ -458,28 +416,23 @@
kernelUpliftVanCalculationGrid.LeftGrid = new CalculationGrid
{
- GridXNumber = damUpliftVanCalculationGrid.LeftGridXCount,
- GridXLeft = damUpliftVanCalculationGrid.LeftGridXLeft,
- GridXRight = damUpliftVanCalculationGrid.LeftGridXRight,
- GridZNumber = damUpliftVanCalculationGrid.LeftGridZCount,
- GridZTop = damUpliftVanCalculationGrid.LeftGridZTop,
- GridZBottom = damUpliftVanCalculationGrid.LeftGridZBottom
+ GridXNumber = UpliftVanCalculationGrid.LeftGridXCount,
+ GridXLeft = UpliftVanCalculationGrid.LeftGridXLeft,
+ GridXRight = UpliftVanCalculationGrid.LeftGridXRight,
+ GridZNumber = UpliftVanCalculationGrid.LeftGridZCount,
+ GridZTop = UpliftVanCalculationGrid.LeftGridZTop,
+ GridZBottom = UpliftVanCalculationGrid.LeftGridZBottom
};
kernelUpliftVanCalculationGrid.RightGrid = new CalculationGrid
{
- GridXNumber = damUpliftVanCalculationGrid.RightGridXCount,
- GridXLeft = damUpliftVanCalculationGrid.RightGridXLeft,
- GridXRight = damUpliftVanCalculationGrid.RightGridXRight,
- GridZNumber = damUpliftVanCalculationGrid.RightGridZCount,
- GridZTop = damUpliftVanCalculationGrid.RightGridZTop,
- GridZBottom = damUpliftVanCalculationGrid.RightGridZBottom
+ GridXNumber = UpliftVanCalculationGrid.RightGridXCount,
+ GridXLeft = UpliftVanCalculationGrid.RightGridXLeft,
+ GridXRight = UpliftVanCalculationGrid.RightGridXRight,
+ GridZNumber = UpliftVanCalculationGrid.RightGridZCount,
+ GridZTop = UpliftVanCalculationGrid.RightGridZTop,
+ GridZBottom = UpliftVanCalculationGrid.RightGridZBottom
};
-
- if (!isAutoTangentLines)
- {
- kernelUpliftVanCalculationGrid.TangentLines = damUpliftVanCalculationGrid.TangentLineLevels.ToArray();
- }
}
private void TransferUniformLoads(TrafficLoad damTrafficLoad, ICollection kernelUniformLoads)
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreatorTests.cs
===================================================================
diff -u -r5627 -r5662
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreatorTests.cs (.../UpliftVanGridCreatorTests.cs) (revision 5627)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreatorTests.cs (.../UpliftVanGridCreatorTests.cs) (revision 5662)
@@ -19,10 +19,10 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System;
using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon;
using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards;
using Deltares.DamEngine.Data.General;
-using Deltares.DamEngine.Data.Geometry;
using Deltares.DamEngine.Data.Geotechnics;
using Deltares.DamEngine.TestHelpers.Factories;
using NUnit.Framework;
@@ -32,15 +32,20 @@
[TestFixture]
public class UpliftVanGridCreatorTests
{
- [Test]
- public void GivenGridSpecified_WhenDetermineGridsFromSettings_ThenGridsAreAsExpected()
- {
- // Given
- SlipCircleDefinition slipCircleDefinition = CreateSlipCircleDefinitionSpecified();
- SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineForTestingGrid(10.0, 80.0);
- // When
- UpliftVanCalculationGrid upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings(slipCircleDefinition, surfaceLine);
- // Then
+ private const double tolerance = 0.0001;
+ private const double specifiedTangentDistance = 1.5;
+ private const double surfaceLevelSoilProfile1D = 0;
+ private const double bottomLayerSoilProfile1D = -10;
+
+ [Test]
+ public void GivenGridSpecified_WhenDetermineGridsFromSettings_ThenGridsAreAsExpected()
+ {
+ // Given
+ SlipCircleDefinition slipCircleDefinition = CreateSlipCircleDefinitionSpecified(true, true);
+ SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineForTestingGrid(10.0, 80.0);
+ // When
+ UpliftVanCalculationGrid upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings(slipCircleDefinition, surfaceLine);
+ // Then
Assert.Multiple(() =>
{
Assert.That(upliftVanCalculationGrid.IsGridsAutomatic, Is.False);
@@ -53,131 +58,170 @@
});
}
- [Test]
- public void GivenGridSpecifiedWithRightGridOverRightBoundary_WhenDetermineGridsFromSettings_ThenRightGridLimitedToRightBoundary()
- {
- // Given
- SlipCircleDefinition slipCircleDefinition = CreateSlipCircleDefinitionSpecified();
- SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineForTestingGrid(10.0, 65.0);
- // When
- UpliftVanCalculationGrid upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings(slipCircleDefinition, surfaceLine);
- // Then
- Assert.Multiple(() =>
- {
- Assert.That(upliftVanCalculationGrid.IsGridsAutomatic, Is.False);
- CheckValuesLeftGrid(upliftVanCalculationGrid);
- // The right grid is limited to right boundary 65.0
- CheckValuesRightGrid(upliftVanCalculationGrid, 59.96, 65.0);
- });
- }
+ [Test]
+ public void GivenGridSpecifiedWithRightGridOverRightBoundary_WhenDetermineGridsFromSettings_ThenRightGridLimitedToRightBoundary()
+ {
+ // Given
+ SlipCircleDefinition slipCircleDefinition = CreateSlipCircleDefinitionSpecified(true, true);
+ SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineForTestingGrid(10.0, 65.0);
+ // When
+ UpliftVanCalculationGrid upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings(slipCircleDefinition, surfaceLine);
+ // Then
+ Assert.Multiple(() =>
+ {
+ Assert.That(upliftVanCalculationGrid.IsGridsAutomatic, Is.False);
+ CheckValuesLeftGrid(upliftVanCalculationGrid);
+ // The right grid is limited to right boundary 65.0
+ CheckValuesRightGrid(upliftVanCalculationGrid, 59.96, 65.0);
+ });
+ }
- [Test]
- public void GivenGridSpecifiedWithUpliftPoint_WhenDetermineGridsFromSettings_ThenRightGridStartsAsExpected()
- {
- // Given
- SlipCircleDefinition slipCircleDefinition = CreateSlipCircleDefinitionSpecified();
- slipCircleDefinition.XCoordinateLowestUpliftFactorPoint = 75.0;
- SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineForTestingGrid(10.0, 80.0);
- // When
- UpliftVanCalculationGrid upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings(slipCircleDefinition, surfaceLine);
- // Then
- Assert.Multiple(() =>
- {
- Assert.That(upliftVanCalculationGrid.IsGridsAutomatic, Is.False);
- CheckValuesLeftGrid(upliftVanCalculationGrid);
+ [Test]
+ public void GivenGridSpecifiedWithUpliftPoint_WhenDetermineGridsFromSettings_ThenRightGridStartsAsExpected()
+ {
+ // Given
+ SlipCircleDefinition slipCircleDefinition = CreateSlipCircleDefinitionSpecified(true, true);
+ slipCircleDefinition.XCoordinateLowestUpliftFactorPoint = 75.0;
+ SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineForTestingGrid(10.0, 80.0);
+ // When
+ UpliftVanCalculationGrid upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings(slipCircleDefinition, surfaceLine);
+ // Then
+ Assert.Multiple(() =>
+ {
+ Assert.That(upliftVanCalculationGrid.IsGridsAutomatic, Is.False);
+ CheckValuesLeftGrid(upliftVanCalculationGrid);
- // The right grid starts at either last uplift point X-coordinate - gridWidth or dike toe at polder X-coordinate, whichever is largest
- // last uplift point X-coordinate - gridWidth = 75.0 - 10.0 = 65.0
- // dike toe at polder X-coordinate = 59.96
- CheckValuesRightGrid(upliftVanCalculationGrid, 65.0, 75.0);
- });
- }
+ // The right grid starts at either last uplift point X-coordinate - gridWidth or dike toe at polder X-coordinate, whichever is largest
+ // last uplift point X-coordinate - gridWidth = 75.0 - 10.0 = 65.0
+ // dike toe at polder X-coordinate = 59.96
+ CheckValuesRightGrid(upliftVanCalculationGrid, 65.0, 75.0);
+ });
+ }
- [Test]
- public void GivenGridAutomatic_WhenDetermineGridsFromSettings_ThenIsGridsAutomatic()
- {
- // Given
- var slipCircleDefinition = new SlipCircleDefinition
- {
- GridSizeDetermination = GridSizeDetermination.Automatic
- };
- SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineForTestingGrid(10.0, 80.0);
- // When
- UpliftVanCalculationGrid upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings(slipCircleDefinition, surfaceLine);
- // Then
- Assert.That(upliftVanCalculationGrid.IsGridsAutomatic, Is.True);
- CheckValuesLeftGrid(upliftVanCalculationGrid, true);
- CheckValuesRightGrid(upliftVanCalculationGrid, 0.0, 0.0, true);
- }
+ [Test]
+ public void GivenGridAutomatic_WhenDetermineGridsFromSettings_ThenIsGridsAutomatic()
+ {
+ // Given
+ SlipCircleDefinition slipCircleDefinition = CreateSlipCircleDefinitionSpecified(false, true);
+ SurfaceLine2 surfaceLine = FactoryForSurfaceLines.CreateSurfaceLineForTestingGrid(10.0, 80.0);
+ // When
+ UpliftVanCalculationGrid upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings(slipCircleDefinition, surfaceLine);
+ // Then
+ Assert.That(upliftVanCalculationGrid.IsGridsAutomatic, Is.True);
+ CheckValuesLeftGrid(upliftVanCalculationGrid, true);
+ CheckValuesRightGrid(upliftVanCalculationGrid, 0.0, 0.0, true);
+ }
+
+ [Test]
+ [TestCase(true)]
+ [TestCase(false)]
+ public void GivenSlipCircleDefinitionAndSoilProfile1D_WhenDetermineTangentLines_ThenTangentLinesAreAsExpected(bool isTangentLinesSpecified)
+ {
+ // Given
+ SlipCircleDefinition slipCircleDefinition = CreateSlipCircleDefinitionSpecified(true, isTangentLinesSpecified);
+ SoilProfile1D soilProfile1D = FactoryForSoilProfiles.CreateClaySandProfile(out _, surfaceLevelSoilProfile1D, bottomLayerSoilProfile1D);
+
+ // When
+ var upliftVanCalculationGrid = new UpliftVanCalculationGrid();
+ UpliftVanGridCreator.DetermineTangentLines(upliftVanCalculationGrid, slipCircleDefinition, soilProfile1D);
+ // Then
+ Assert.Multiple(() =>
+ {
+ Assert.That(upliftVanCalculationGrid.IsTangentLinesAutomatic, Is.Not.EqualTo(isTangentLinesSpecified));
+ CheckValuesTangentLines(upliftVanCalculationGrid);
+ });
+ }
- private static void CheckValuesLeftGrid(UpliftVanCalculationGrid upliftVanCalculationGrid, bool isGridsAutomatic = false)
- {
- const double tolerance = 0.0001;
- var expectedXLeft = 0.0;
- var expectedXRight = 0.0;
- var expectedXCount= 0;
- var expectedZBottom = 0.0;
- var expectedZTop = 0.0;
- var expectedZCount = 0;
- if (!isGridsAutomatic)
- {
- expectedXLeft = 31.52;
- expectedXRight = 57.52;
- expectedXCount= 14;
- expectedZBottom = 3.775;
- expectedZTop = 73.775;
- expectedZCount = 36;
- }
- Assert.Multiple(() =>
- {
- Assert.That(upliftVanCalculationGrid.LeftGridXLeft, Is.EqualTo(expectedXLeft).Within(tolerance));
- Assert.That(upliftVanCalculationGrid.LeftGridXRight, Is.EqualTo(expectedXRight).Within(tolerance));
- Assert.That(upliftVanCalculationGrid.LeftGridXCount, Is.EqualTo(expectedXCount));
- Assert.That(upliftVanCalculationGrid.LeftGridZBottom, Is.EqualTo(expectedZBottom).Within(tolerance));
- Assert.That(upliftVanCalculationGrid.LeftGridZTop, Is.EqualTo(expectedZTop).Within(tolerance));
- Assert.That(upliftVanCalculationGrid.LeftGridZCount, Is.EqualTo(expectedZCount));
- });
- }
+ private static void CheckValuesLeftGrid(UpliftVanCalculationGrid upliftVanCalculationGrid, bool isGridsAutomatic = false)
+ {
+ var expectedXLeft = 0.0;
+ var expectedXRight = 0.0;
+ var expectedXCount= 0;
+ var expectedZBottom = 0.0;
+ var expectedZTop = 0.0;
+ var expectedZCount = 0;
+ if (!isGridsAutomatic)
+ {
+ expectedXLeft = 31.52;
+ expectedXRight = 57.52;
+ expectedXCount= 14;
+ expectedZBottom = 3.775;
+ expectedZTop = 73.775;
+ expectedZCount = 36;
+ }
+ Assert.Multiple(() =>
+ {
+ Assert.That(upliftVanCalculationGrid.LeftGridXLeft, Is.EqualTo(expectedXLeft).Within(tolerance));
+ Assert.That(upliftVanCalculationGrid.LeftGridXRight, Is.EqualTo(expectedXRight).Within(tolerance));
+ Assert.That(upliftVanCalculationGrid.LeftGridXCount, Is.EqualTo(expectedXCount));
+ Assert.That(upliftVanCalculationGrid.LeftGridZBottom, Is.EqualTo(expectedZBottom).Within(tolerance));
+ Assert.That(upliftVanCalculationGrid.LeftGridZTop, Is.EqualTo(expectedZTop).Within(tolerance));
+ Assert.That(upliftVanCalculationGrid.LeftGridZCount, Is.EqualTo(expectedZCount));
+ });
+ }
- private static void CheckValuesRightGrid(UpliftVanCalculationGrid upliftVanCalculationGrid, double expectedXLeft, double expectedXRight, bool isGridsAutomatic = false)
- {
- const double tolerance = 0.0001;
- var expectedXCount= 0;
- var expectedZBottom = 0.0;
- var expectedZTop = 0.0;
- var expectedZCount = 0;
- if (!isGridsAutomatic)
- {
- expectedXCount= 6;
- expectedZBottom = -0.09;
- expectedZTop = 3.91;
- expectedZCount = 3;
- }
- Assert.Multiple(() =>
- {
- Assert.That(upliftVanCalculationGrid.RightGridXLeft, Is.EqualTo(expectedXLeft).Within(tolerance));
- Assert.That(upliftVanCalculationGrid.RightGridXRight, Is.EqualTo(expectedXRight).Within(tolerance));
- Assert.That(upliftVanCalculationGrid.RightGridXCount, Is.EqualTo(expectedXCount));
- Assert.That(upliftVanCalculationGrid.RightGridZBottom, Is.EqualTo(expectedZBottom).Within(tolerance));
- Assert.That(upliftVanCalculationGrid.RightGridZTop, Is.EqualTo(expectedZTop).Within(tolerance));
- Assert.That(upliftVanCalculationGrid.RightGridZCount, Is.EqualTo(expectedZCount));
- });
- }
+ private static void CheckValuesRightGrid(UpliftVanCalculationGrid upliftVanCalculationGrid, double expectedXLeft, double expectedXRight, bool isGridsAutomatic = false)
+ {
+ var expectedXCount= 0;
+ var expectedZBottom = 0.0;
+ var expectedZTop = 0.0;
+ var expectedZCount = 0;
+ if (!isGridsAutomatic)
+ {
+ expectedXCount= 6;
+ expectedZBottom = -0.09;
+ expectedZTop = 3.91;
+ expectedZCount = 3;
+ }
+ Assert.Multiple(() =>
+ {
+ Assert.That(upliftVanCalculationGrid.RightGridXLeft, Is.EqualTo(expectedXLeft).Within(tolerance));
+ Assert.That(upliftVanCalculationGrid.RightGridXRight, Is.EqualTo(expectedXRight).Within(tolerance));
+ Assert.That(upliftVanCalculationGrid.RightGridXCount, Is.EqualTo(expectedXCount));
+ Assert.That(upliftVanCalculationGrid.RightGridZBottom, Is.EqualTo(expectedZBottom).Within(tolerance));
+ Assert.That(upliftVanCalculationGrid.RightGridZTop, Is.EqualTo(expectedZTop).Within(tolerance));
+ Assert.That(upliftVanCalculationGrid.RightGridZCount, Is.EqualTo(expectedZCount));
+ });
+ }
- private static SlipCircleDefinition CreateSlipCircleDefinitionSpecified()
- {
- var slipCircleDefinition = new SlipCircleDefinition
- {
- GridSizeDetermination = GridSizeDetermination.Specified,
- UpliftVanLeftGridVerticalPointCount = 36,
- UpliftVanLeftGridVerticalPointDistance = 2,
- UpliftVanLeftGridHorizontalPointCount = 14,
- UpliftVanLeftGridHorizontalPointDistance = 2,
- UpliftVanRightGridVerticalPointCount = 3,
- UpliftVanRightGridVerticalPointDistance = 2,
- UpliftVanRightGridHorizontalPointCount = 6,
- UpliftVanRightGridHorizontalPointDistance = 2
- };
- return slipCircleDefinition;
- }
+ private static void CheckValuesTangentLines(UpliftVanCalculationGrid upliftVanCalculationGrid)
+ {
+ var expectedZBottom = 0.0;
+ var expectedZTop = 0.0;
+ var expectedCount = 0;
+
+ if (!upliftVanCalculationGrid.IsTangentLinesAutomatic)
+ {
+ expectedZBottom = bottomLayerSoilProfile1D - specifiedTangentDistance;
+ expectedCount = (int) Math.Round((surfaceLevelSoilProfile1D - expectedZBottom) / specifiedTangentDistance) + 1;
+ expectedZTop = expectedZBottom + (expectedCount - 1) * specifiedTangentDistance;
+ }
+
+ Assert.Multiple(() =>
+ {
+ Assert.That(upliftVanCalculationGrid.TangentLineZTop, Is.EqualTo(expectedZTop).Within(tolerance));
+ Assert.That(upliftVanCalculationGrid.TangentLineZBottom, Is.EqualTo(expectedZBottom).Within(tolerance));
+ Assert.That(upliftVanCalculationGrid.TangentLineCount, Is.EqualTo(expectedCount));
+ Assert.That(upliftVanCalculationGrid.TangentLineLevels, Is.Empty);
+ });
+ }
+
+ private static SlipCircleDefinition CreateSlipCircleDefinitionSpecified(bool isGridSpecified, bool isTangentLinesSpecified)
+ {
+ var slipCircleDefinition = new SlipCircleDefinition
+ {
+ GridSizeDetermination = isGridSpecified ? GridSizeDetermination.Specified : GridSizeDetermination.Automatic,
+ UpliftVanLeftGridVerticalPointCount = 36,
+ UpliftVanLeftGridVerticalPointDistance = 2,
+ UpliftVanLeftGridHorizontalPointCount = 14,
+ UpliftVanLeftGridHorizontalPointDistance = 2,
+ UpliftVanRightGridVerticalPointCount = 3,
+ UpliftVanRightGridVerticalPointDistance = 2,
+ UpliftVanRightGridHorizontalPointCount = 6,
+ UpliftVanRightGridHorizontalPointDistance = 2,
+ UpliftVanTangentLinesDefinition = isTangentLinesSpecified ? TangentLinesDefinition.Specified: TangentLinesDefinition.OnBoundaryLines,
+ UpliftVanTangentLinesDistance = specifiedTangentDistance
+ };
+ return slipCircleDefinition;
+ }
}
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs
===================================================================
diff -u -r5516 -r5662
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs (.../FillEngineFromMacroStabilityWrapperInput.cs) (revision 5516)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs (.../FillEngineFromMacroStabilityWrapperInput.cs) (revision 5662)
@@ -179,13 +179,13 @@
if (kernelSearchAreaConditions.AutoTangentLines)
{
SlipCircleDefinition.UpliftVanTangentLinesDefinition = TangentLinesDefinition.OnBoundaryLines;
- SlipCircleDefinition.UpliftVanTangentLinesDistance =
- (kernelSearchAreaConditions.TangentLineZTop - kernelSearchAreaConditions.TangentLineZBottom) /
- kernelSearchAreaConditions.TangentLineNumber;
}
else
{
SlipCircleDefinition.UpliftVanTangentLinesDefinition = TangentLinesDefinition.Specified;
+ SlipCircleDefinition.UpliftVanTangentLinesDistance =
+ (kernelSearchAreaConditions.TangentLineZTop - kernelSearchAreaConditions.TangentLineZBottom) /
+ (kernelSearchAreaConditions.TangentLineNumber - 1);
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/BishopGridCreator.cs
===================================================================
diff -u -r5627 -r5662
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/BishopGridCreator.cs (.../BishopGridCreator.cs) (revision 5627)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/BishopGridCreator.cs (.../BishopGridCreator.cs) (revision 5662)
@@ -40,50 +40,55 @@
{
var bishopCalculationGrid = new BishopCalculationGrid
{
- IsGridsAutomatic = false,
- IsTangentLinesAutomatic = false
+ IsGridsAutomatic = slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Automatic,
+ IsTangentLinesAutomatic = slipCircleDefinition.BishopTangentLinesDefinition == TangentLinesDefinition.OnBoundaryLines,
+ GridXLeft = 0,
+ GridXRight = 0,
+ GridXCount = 0,
+ GridZBottom = 0,
+ GridZTop = 0,
+ GridZCount = 0,
+ TangentLineZTop = 0,
+ TangentLineZBottom = 0,
+ TangentLineCount = 0
};
- if (slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Specified)
+ if (slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Automatic)
{
- // Define specified active (left) grid
- if (surfaceLine != null)
- {
- // Use middle of the dike for X-coordinate
- GeometryPoint dikeTopAtRiverPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
- GeometryPoint dikeTopAtPolderPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
- double gridXCoordinate = (dikeTopAtRiverPoint.X + dikeTopAtPolderPoint.X) * 0.5;
- double gridYCoordinate = surfaceLine.Geometry.GetZatX(gridXCoordinate);
- double gridWidth = slipCircleDefinition.BishopGridHorizontalPointDistance *
- (slipCircleDefinition.BishopGridHorizontalPointCount - 1);
- double gridHeight = slipCircleDefinition.BishopGridVerticalPointDistance *
- (slipCircleDefinition.BishopGridVerticalPointCount - 1);
- if (gridPosition == MStabGridPosition.Right)
- {
- bishopCalculationGrid.GridXLeft = gridXCoordinate;
- bishopCalculationGrid.GridXRight = gridXCoordinate + gridWidth;
- }
- else
- {
- bishopCalculationGrid.GridXLeft = Math.Max(surfaceLine.Geometry[0].X, gridXCoordinate - gridWidth);
- bishopCalculationGrid.GridXRight = gridXCoordinate;
- }
+ return bishopCalculationGrid;
+ }
- bishopCalculationGrid.GridXCount = slipCircleDefinition.BishopGridHorizontalPointCount;
- bishopCalculationGrid.GridZBottom = gridYCoordinate;
- bishopCalculationGrid.GridZTop = gridYCoordinate + gridHeight;
- bishopCalculationGrid.GridZCount = slipCircleDefinition.BishopGridVerticalPointCount;
+ // Define specified active (left) grid
+ if (surfaceLine != null)
+ {
+ // Use middle of the dike for X-coordinate
+ GeometryPoint dikeTopAtRiverPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ GeometryPoint dikeTopAtPolderPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ double gridXCoordinate = (dikeTopAtRiverPoint.X + dikeTopAtPolderPoint.X) * 0.5;
+ double gridYCoordinate = surfaceLine.Geometry.GetZatX(gridXCoordinate);
+ double gridWidth = slipCircleDefinition.BishopGridHorizontalPointDistance *
+ (slipCircleDefinition.BishopGridHorizontalPointCount - 1);
+ double gridHeight = slipCircleDefinition.BishopGridVerticalPointDistance *
+ (slipCircleDefinition.BishopGridVerticalPointCount - 1);
+ if (gridPosition == MStabGridPosition.Right)
+ {
+ bishopCalculationGrid.GridXLeft = gridXCoordinate;
+ bishopCalculationGrid.GridXRight = gridXCoordinate + gridWidth;
}
+ else
+ {
+ bishopCalculationGrid.GridXLeft = Math.Max(surfaceLine.Geometry[0].X, gridXCoordinate - gridWidth);
+ bishopCalculationGrid.GridXRight = gridXCoordinate;
+ }
- // Tangent lines are defined in another method
+ bishopCalculationGrid.GridXCount = slipCircleDefinition.BishopGridHorizontalPointCount;
+ bishopCalculationGrid.GridZBottom = gridYCoordinate;
+ bishopCalculationGrid.GridZTop = gridYCoordinate + gridHeight;
+ bishopCalculationGrid.GridZCount = slipCircleDefinition.BishopGridVerticalPointCount;
}
- else
- {
- // code for slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Automatic
- bishopCalculationGrid.GridXLeft = 0;
- bishopCalculationGrid.IsGridsAutomatic = true;
- }
+ // Tangent lines are defined in another method
+
return bishopCalculationGrid;
}
@@ -97,10 +102,11 @@
switch (slipCircleDefinition.BishopTangentLinesDefinition)
{
case TangentLinesDefinition.OnBoundaryLines:
- // In the kernel, the tangent lines are set to the boundaries, no need to do anything here.
- bishopCalculationGrid.IsTangentLinesAutomatic = false;
+ // In the Macrostability kernel, the automatic tangent lines are set to the boundaries, no need to do anything here.
+ bishopCalculationGrid.IsTangentLinesAutomatic = true;
break;
case TangentLinesDefinition.Specified:
+ bishopCalculationGrid.IsTangentLinesAutomatic = false;
DetermineTangentLinesSpecified(bishopCalculationGrid, soilProfile1D,
slipCircleDefinition.BishopTangentLinesDistance);
break;
@@ -126,15 +132,12 @@
bottomTangentLines = Math.Min(bottomTangentLines, surfaceLevel);
double topTangentLines = bottomTangentLines;
var tangentLinesCount = 1;
- bishopCalculationGrid.TangentLineLevels.Add(topTangentLines);
while (topTangentLines < surfaceLevel)
{
topTangentLines += distance;
- bishopCalculationGrid.TangentLineLevels.Add(topTangentLines);
tangentLinesCount++;
}
- bishopCalculationGrid.TangentLineLevels.Reverse();
bishopCalculationGrid.TangentLineCount = tangentLinesCount;
bishopCalculationGrid.TangentLineZTop = topTangentLines;
bishopCalculationGrid.TangentLineZBottom = bottomTangentLines;
Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs
===================================================================
diff -u -r5634 -r5662
--- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs (.../FactoryForSoilProfiles.cs) (revision 5634)
+++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs (.../FactoryForSoilProfiles.cs) (revision 5662)
@@ -95,7 +95,7 @@
/// Create two layer soil profile with pleistocene sand layer only
///
/// soil profile
- public static SoilProfile1D CreateClaySandProfile(out SoilList soilList, double topLevelSandLayer = -5)
+ public static SoilProfile1D CreateClaySandProfile(out SoilList soilList, double topLevelClayLayer = 10, double topLevelSandLayer = -5)
{
var soilProfile = new SoilProfile1D();
@@ -111,7 +111,7 @@
{
Name = GetNewUniqueLayerId(soilProfile)
};
- layer.TopLevel = 10.0;
+ layer.TopLevel = topLevelClayLayer;
layer.Soil = soil1;
layer.IsAquifer = false;
soilProfile.Layers.Add(layer);
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreator.cs
===================================================================
diff -u -r5627 -r5662
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreator.cs (.../UpliftVanGridCreator.cs) (revision 5627)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreator.cs (.../UpliftVanGridCreator.cs) (revision 5662)
@@ -39,65 +39,77 @@
{
var upliftVanCalculationGrid = new UpliftVanCalculationGrid
{
- IsGridsAutomatic = false,
- IsTangentLinesAutomatic = false
+ IsGridsAutomatic = slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Automatic,
+ IsTangentLinesAutomatic = slipCircleDefinition.UpliftVanTangentLinesDefinition == TangentLinesDefinition.OnBoundaryLines,
+ RightGridXLeft = 0,
+ RightGridXRight = 0,
+ RightGridXCount = 0,
+ RightGridZTop = 0,
+ RightGridZBottom = 0,
+ RightGridZCount = 0,
+ LeftGridXLeft = 0,
+ LeftGridXRight = 0,
+ LeftGridXCount = 0,
+ LeftGridZBottom = 0,
+ LeftGridZTop = 0,
+ LeftGridZCount = 0,
+ TangentLineZTop = 0,
+ TangentLineZBottom = 0,
+ TangentLineCount = 0
};
- if (slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Specified)
+ if (slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Automatic)
{
- // Define specified active (left) grid
- if (surfaceLine != null)
- {
- // Use middle of the dike for X-coordinate
- GeometryPoint dikeTopAtRiverPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
- GeometryPoint dikeTopAtPolderPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
- double gridXCoordinate = (dikeTopAtRiverPoint.X + dikeTopAtPolderPoint.X) * 0.5;
- double gridYCoordinate = surfaceLine.Geometry.GetZatX(gridXCoordinate);
- double gridWidth = slipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance *
- (slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount - 1);
- double gridHeight = slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance *
- (slipCircleDefinition.UpliftVanLeftGridVerticalPointCount - 1);
- upliftVanCalculationGrid.LeftGridXLeft = gridXCoordinate;
- upliftVanCalculationGrid.LeftGridXRight = gridXCoordinate + gridWidth;
- upliftVanCalculationGrid.LeftGridXCount = slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount;
- upliftVanCalculationGrid.LeftGridZBottom = gridYCoordinate;
- upliftVanCalculationGrid.LeftGridZTop = gridYCoordinate + gridHeight;
- upliftVanCalculationGrid.LeftGridZCount = slipCircleDefinition.UpliftVanLeftGridVerticalPointCount;
- }
+ return upliftVanCalculationGrid;
+ }
- // Define specified passive (right) grid
- if (surfaceLine != null)
- {
- const double gridOffset = 0.2;
- GeometryPoint dikeToeAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
+ // Define specified active (left) grid
+ if (surfaceLine != null)
+ {
+ // Use middle of the dike for X-coordinate
+ GeometryPoint dikeTopAtRiverPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
+ GeometryPoint dikeTopAtPolderPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
+ double gridXCoordinate = (dikeTopAtRiverPoint.X + dikeTopAtPolderPoint.X) * 0.5;
+ double gridYCoordinate = surfaceLine.Geometry.GetZatX(gridXCoordinate);
+ double gridWidth = slipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance *
+ (slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount - 1);
+ double gridHeight = slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance *
+ (slipCircleDefinition.UpliftVanLeftGridVerticalPointCount - 1);
+ upliftVanCalculationGrid.LeftGridXLeft = gridXCoordinate;
+ upliftVanCalculationGrid.LeftGridXRight = gridXCoordinate + gridWidth;
+ upliftVanCalculationGrid.LeftGridXCount = slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount;
+ upliftVanCalculationGrid.LeftGridZBottom = gridYCoordinate;
+ upliftVanCalculationGrid.LeftGridZTop = gridYCoordinate + gridHeight;
+ upliftVanCalculationGrid.LeftGridZCount = slipCircleDefinition.UpliftVanLeftGridVerticalPointCount;
+ }
- // X-coordinates settings of the grid
- double gridWidth = slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance *
- (slipCircleDefinition.UpliftVanRightGridHorizontalPointCount - 1);
- // The grid starts at either lowest uplift factor point X-coordinate - gridWidth or dike toe at polder X-coordinate, whichever is largest
- double gridXCoordinate = Math.Max(slipCircleDefinition.XCoordinateLowestUpliftFactorPoint - gridWidth, dikeToeAtPolder.X);
- upliftVanCalculationGrid.RightGridXLeft = gridXCoordinate;
- // The grid is limited to the right boundary of the surface line
- double boundaryRight = surfaceLine.CharacteristicPoints.Geometry.GetGeometryBounds().Right;
- upliftVanCalculationGrid.RightGridXRight = Math.Min(gridXCoordinate + gridWidth, boundaryRight);
- upliftVanCalculationGrid.RightGridXCount = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount;
+ // Define specified passive (right) grid
+ if (surfaceLine != null)
+ {
+ const double gridOffset = 0.2;
+ GeometryPoint dikeToeAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder);
- // Z-coordinates settings of the grid
- double gridHeight = slipCircleDefinition.UpliftVanRightGridVerticalPointDistance *
- (slipCircleDefinition.UpliftVanRightGridVerticalPointCount - 1);
- upliftVanCalculationGrid.RightGridZBottom = dikeToeAtPolder.Z + gridOffset;
- upliftVanCalculationGrid.RightGridZTop = upliftVanCalculationGrid.RightGridZBottom + gridHeight;
- upliftVanCalculationGrid.RightGridZCount = slipCircleDefinition.UpliftVanRightGridVerticalPointCount;
- }
+ // X-coordinates settings of the grid
+ double gridWidth = slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance *
+ (slipCircleDefinition.UpliftVanRightGridHorizontalPointCount - 1);
+ // The grid starts at either lowest uplift factor point X-coordinate - gridWidth or dike toe at polder X-coordinate, whichever is largest
+ double gridXCoordinate = Math.Max(slipCircleDefinition.XCoordinateLowestUpliftFactorPoint - gridWidth, dikeToeAtPolder.X);
+ upliftVanCalculationGrid.RightGridXLeft = gridXCoordinate;
+ // The grid is limited to the right boundary of the surface line
+ double boundaryRight = surfaceLine.CharacteristicPoints.Geometry.GetGeometryBounds().Right;
+ upliftVanCalculationGrid.RightGridXRight = Math.Min(gridXCoordinate + gridWidth, boundaryRight);
+ upliftVanCalculationGrid.RightGridXCount = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount;
- // Tangent lines are defined in another method
+ // Z-coordinates settings of the grid
+ double gridHeight = slipCircleDefinition.UpliftVanRightGridVerticalPointDistance *
+ (slipCircleDefinition.UpliftVanRightGridVerticalPointCount - 1);
+ upliftVanCalculationGrid.RightGridZBottom = dikeToeAtPolder.Z + gridOffset;
+ upliftVanCalculationGrid.RightGridZTop = upliftVanCalculationGrid.RightGridZBottom + gridHeight;
+ upliftVanCalculationGrid.RightGridZCount = slipCircleDefinition.UpliftVanRightGridVerticalPointCount;
}
- else
- {
- // code for slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Automatic
- upliftVanCalculationGrid.IsGridsAutomatic = true;
- }
+ // Tangent lines are defined in another method
+
return upliftVanCalculationGrid;
}
@@ -111,10 +123,11 @@
switch (slipCircleDefinition.UpliftVanTangentLinesDefinition)
{
case TangentLinesDefinition.OnBoundaryLines:
- // In the kernel, the tangent lines are set to the boundaries, no need to do anything here.
- upliftVanCalculationGrid.IsTangentLinesAutomatic = false;
+ // In the Macrostability kernel, the automatic tangent lines are set to the boundaries, no need to do anything here.
+ upliftVanCalculationGrid.IsTangentLinesAutomatic = true;
break;
case TangentLinesDefinition.Specified:
+ upliftVanCalculationGrid.IsTangentLinesAutomatic = false;
DetermineTangentLinesSpecified(upliftVanCalculationGrid, soilProfile1D,
slipCircleDefinition.UpliftVanTangentLinesDistance);
break;
@@ -140,15 +153,12 @@
bottomTangentLines = Math.Min(bottomTangentLines, surfaceLevel);
double topTangentLines = bottomTangentLines;
var tangentLinesCount = 1;
- upliftVanCalculationGrid.TangentLineLevels.Add(topTangentLines);
while (topTangentLines < surfaceLevel)
{
topTangentLines += distance;
- upliftVanCalculationGrid.TangentLineLevels.Add(topTangentLines);
tangentLinesCount++;
}
-
- upliftVanCalculationGrid.TangentLineLevels.Reverse();
+
upliftVanCalculationGrid.TangentLineCount = tangentLinesCount;
upliftVanCalculationGrid.TangentLineZTop = topTangentLines;
upliftVanCalculationGrid.TangentLineZBottom = bottomTangentLines;
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs
===================================================================
diff -u -r5627 -r5662
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 5627)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 5662)
@@ -47,8 +47,8 @@
public class MacroStabilityInwardsKernelWrapperTests
{
private const string testFolder = @"..\..\..\Deltares.DamEngine.IntegrationTests\TestFiles";
- private readonly string inputXmlForDamEngine = Path.Combine(testFolder, "StabilityDesign1Dbased.xml");
private const double tolerance4Decimals = 0.000051;
+ private readonly string inputXmlForDamEngine = Path.Combine(testFolder, "StabilityDesign1Dbased.xml");
[Test]
[TestCase(0.8, true, false, PrepareResult.NotRelevant)]
@@ -57,7 +57,7 @@
public void TestPrepare(double upliftCriterionStability, bool isInputValid, bool expectedIsUplift, PrepareResult expectedPrepareResult)
{
// Setup
- DamKernelInput kernelInput = CreateDamKernelInputForTest(MStabModelType.UpliftVan, MStabSearchMethod.Grid, GridSizeDetermination.Specified);
+ DamKernelInput kernelInput = CreateDamKernelInputForTest(MStabModelType.UpliftVan);
kernelInput.Location.ModelFactors.UpliftCriterionStability = upliftCriterionStability;
var kernelWrapper = new MacroStabilityInwardsKernelWrapper
{
@@ -74,10 +74,10 @@
{
kernelInput.Location.SurfaceLine.CharacteristicPoints.Clear();
}
-
+
// Call
PrepareResult prepareResult = kernelWrapper.Prepare(kernelInput, 0, out _, out IKernelDataOutput kernelDataOutput);
-
+
// Assert
var damMacroStabilityOutput = (MacroStabilityOutput) kernelDataOutput;
Assert.Multiple(() =>
@@ -116,16 +116,16 @@
});
// Validate the input when valid input is provided. Expected no messages.
- DamKernelInput kernelInput = CreateDamKernelInputForTest(MStabModelType.UpliftVan, MStabSearchMethod.Grid, GridSizeDetermination.Specified);
+ DamKernelInput kernelInput = CreateDamKernelInputForTest(MStabModelType.UpliftVan);
PrepareResult prepareResult = kernelWrapper.Prepare(kernelInput, 0, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput);
Assert.That(prepareResult, Is.EqualTo(PrepareResult.Successful));
messages.Clear();
-
+
errorCount = kernelWrapper.Validate(kernelDataInput, kernelDataOutput, out messages);
Assert.Multiple(() =>
{
Assert.That(errorCount, Is.EqualTo(0));
- Assert.That(((MacroStabilityOutput)kernelDataOutput).CalculationResult, Is.EqualTo(CalculationResult.NoRun));
+ Assert.That(((MacroStabilityOutput) kernelDataOutput).CalculationResult, Is.EqualTo(CalculationResult.NoRun));
});
}
@@ -135,7 +135,7 @@
[TestCase(MStabModelType.BishopUpliftVan)]
public void TestPostProcess(MStabModelType modelType)
{
- DamKernelInput kernelInput = CreateDamKernelInputForTest(modelType, MStabSearchMethod.Grid, GridSizeDetermination.Specified);
+ DamKernelInput kernelInput = CreateDamKernelInputForTest(modelType);
var kernelWrapper = new MacroStabilityInwardsKernelWrapper
{
FailureMechanismParametersMStab = new FailureMechanismParametersMStab
@@ -147,7 +147,7 @@
}
}
};
-
+
var macroStabilityOutput = new MacroStabilityOutput
{
CalculationResult = CalculationResult.Succeeded,
@@ -335,7 +335,7 @@
Assert.Multiple(() =>
{
Assert.That(result.CalculationResult, Is.EqualTo(CalculationResult.Succeeded));
- Assert.That(((UpliftSituation)result.StabilityDesignResults.UpliftSituation).IsUplift, Is.True);
+ Assert.That(((UpliftSituation) result.StabilityDesignResults.UpliftSituation).IsUplift, Is.True);
});
if (index == 0)
{
@@ -465,7 +465,7 @@
public void TestFullCalculationSucceedsWithWarningsWithBadTangentLines()
{
// Prepare the wrapper. Result is input for the calculation dll
- DamKernelInput kernelInput = CreateDamKernelInputForTest(MStabModelType.UpliftVan, MStabSearchMethod.Grid, GridSizeDetermination.Specified);
+ DamKernelInput kernelInput = CreateDamKernelInputForTest(MStabModelType.UpliftVan);
var kernelWrapper = new MacroStabilityInwardsKernelWrapper
{
FailureMechanismParametersMStab = new FailureMechanismParametersMStab
@@ -502,14 +502,18 @@
}
[Test]
- [TestCase(MStabSearchMethod.Grid, GridSizeDetermination.Specified, 1.2812, 4)]
- [TestCase(MStabSearchMethod.Grid, GridSizeDetermination.Automatic, 1.4752, 3)]
- [TestCase(MStabSearchMethod.BeeSwarm, GridSizeDetermination.Specified, 2.2597, 3)]
- [TestCase(MStabSearchMethod.BeeSwarm, GridSizeDetermination.Automatic, 1.1284, 894)]
- public void TestFullCalculationSucceedsWithUpliftVan(MStabSearchMethod searchMethod, GridSizeDetermination gridSizeDetermination, double expectedSafetyFactor, int expectedLogMessageCount)
+ [TestCase(MStabSearchMethod.Grid, GridSizeDetermination.Specified, TangentLinesDefinition.OnBoundaryLines, 1.2812, 4)]
+ [TestCase(MStabSearchMethod.Grid, GridSizeDetermination.Automatic, TangentLinesDefinition.OnBoundaryLines, 1.4752, 3)]
+ [TestCase(MStabSearchMethod.BeeSwarm, GridSizeDetermination.Specified, TangentLinesDefinition.OnBoundaryLines, 2.2763, 3)]
+ [TestCase(MStabSearchMethod.BeeSwarm, GridSizeDetermination.Automatic, TangentLinesDefinition.OnBoundaryLines, 1.1205, 926)]
+ [TestCase(MStabSearchMethod.Grid, GridSizeDetermination.Specified, TangentLinesDefinition.Specified, 0.4909, 24)]
+ [TestCase(MStabSearchMethod.Grid, GridSizeDetermination.Automatic, TangentLinesDefinition.Specified, 1.1475, 3)]
+ [TestCase(MStabSearchMethod.BeeSwarm, GridSizeDetermination.Specified, TangentLinesDefinition.Specified, 1.7680, 4)]
+ [TestCase(MStabSearchMethod.BeeSwarm, GridSizeDetermination.Automatic, TangentLinesDefinition.Specified, 1.1146, 827)]
+ public void TestFullCalculationSucceedsWithUpliftVan(MStabSearchMethod searchMethod, GridSizeDetermination gridSizeDetermination, TangentLinesDefinition tangentLinesDefinition, double expectedSafetyFactor, int expectedLogMessageCount)
{
// Prepare the wrapper. Result is input for the calculation dll
- DamKernelInput kernelInput = CreateDamKernelInputForTest(MStabModelType.UpliftVan, searchMethod, gridSizeDetermination);
+ DamKernelInput kernelInput = CreateDamKernelInputForTest(MStabModelType.UpliftVan, searchMethod, gridSizeDetermination, tangentLinesDefinition);
var kernelWrapper = new MacroStabilityInwardsKernelWrapper
{
FailureMechanismParametersMStab = new FailureMechanismParametersMStab
@@ -521,7 +525,7 @@
}
}
};
-
+
PrepareResult prepareResult = kernelWrapper.Prepare(kernelInput, 0, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput);
Assert.That(prepareResult, Is.EqualTo(PrepareResult.Successful));
@@ -540,12 +544,69 @@
});
Assert.That(macroStabilityOutput.StabilityOutputItems[0].SafetyFactor, Is.EqualTo(expectedSafetyFactor).Within(tolerance4Decimals));
- if (searchMethod == MStabSearchMethod.Grid && gridSizeDetermination == GridSizeDetermination.Specified)
+ if (searchMethod == MStabSearchMethod.Grid &&
+ gridSizeDetermination == GridSizeDetermination.Specified &&
+ tangentLinesDefinition == TangentLinesDefinition.OnBoundaryLines)
{
CheckDesignResultsForUpliftVanSpecifiedGrid(kernelInput, kernelWrapper, macroStabilityOutput);
}
}
+ [Test]
+ public void CalculationUpliftBasedOnDamEngineXmlWorks()
+ {
+ const string calcDir = "TestStabInwardsBishop";
+ if (Directory.Exists(calcDir))
+ {
+ Directory.Delete(calcDir, true); // delete previous results
+ }
+
+ Directory.CreateDirectory(calcDir);
+ string inputString = File.ReadAllText(inputXmlForDamEngine);
+ inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
+ inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
+ var engineInterface = new EngineInterface(inputString);
+ Assert.That(engineInterface.DamProjectData, Is.Not.Null);
+ engineInterface.DamProjectData.DamProjectCalculationSpecification.CurrentSpecification.StabilityModelType =
+ MStabModelType.UpliftVan;
+
+ Output output = GeneralHelper.RunAfterInputValidation(engineInterface);
+
+ Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.EqualTo(1.6099).Within(tolerance4Decimals));
+ }
+
+ [Test]
+ [SetUICulture("nl-NL")]
+ public void TestLanguageNLThrowsExceptionWhenInputIsNull()
+ {
+ var kernelWrapper = new MacroStabilityInwardsKernelWrapper();
+ Assert.That(() => kernelWrapper.Execute(null, null, out _), Throws.InstanceOf().With.Message.EqualTo("Geen invoer object gedefinieerd voor Macrostabiliteit"));
+ }
+
+ [Test]
+ [SetUICulture("en-US")]
+ public void TestLanguageENThrowsExceptionWhenStabilityInputIsNull()
+ {
+ var kernelWrapper = new MacroStabilityInwardsKernelWrapper();
+ Assert.That(() => kernelWrapper.Execute(null, null, out _), Throws.InstanceOf().With.Message.EqualTo("No input object defined for Macro Stability"));
+ }
+
+ [Test]
+ [SetUICulture("nl-NL")]
+ public void TestThrowsExceptionWhenStabilityOutputIsNull()
+ {
+ var kernelWrapper = new MacroStabilityInwardsKernelWrapper();
+ Assert.That(() => kernelWrapper.PostProcess(new DamKernelInput(), null, null, "", out _), Throws.InstanceOf().With.Message.EqualTo("Geen uitvoer object gedefinieerd voor Macrostabiliteit"));
+ }
+
+ [Test]
+ [SetUICulture("nl-NL")]
+ public void TestThrowsExceptionWhenDamKernelInputIsNull()
+ {
+ var kernelWrapper = new MacroStabilityInwardsKernelWrapper();
+ Assert.That(() => kernelWrapper.PostProcess(null, null, null, "", out _), Throws.InstanceOf().With.Message.EqualTo("Geen Dam invoer object gedefinieerd voor Macrostabiliteit"));
+ }
+
private static void CheckDesignResultsForUpliftVanSpecifiedGrid(DamKernelInput kernelInput, MacroStabilityInwardsKernelWrapper kernelWrapper, MacroStabilityOutput macroStabilityOutput)
{
// Fill the design results
@@ -613,64 +674,9 @@
});
}
}
-
- [Test]
- public void CalculationUpliftBasedOnDamEngineXmlWorks()
- {
- const string calcDir = "TestStabInwardsBishop";
- if (Directory.Exists(calcDir))
- {
- Directory.Delete(calcDir, true); // delete previous results
- }
- Directory.CreateDirectory(calcDir);
- string inputString = File.ReadAllText(inputXmlForDamEngine);
- inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
- inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
- var engineInterface = new EngineInterface(inputString);
- Assert.That(engineInterface.DamProjectData, Is.Not.Null);
- engineInterface.DamProjectData.DamProjectCalculationSpecification.CurrentSpecification.StabilityModelType =
- MStabModelType.UpliftVan;
-
- Output output = GeneralHelper.RunAfterInputValidation(engineInterface);
-
- Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.EqualTo(1.6099).Within(tolerance4Decimals));
- }
-
- [Test]
- [SetUICulture("nl-NL")]
- public void TestLanguageNLThrowsExceptionWhenInputIsNull()
+ private static DamKernelInput CreateDamKernelInputForTest(MStabModelType modelType, MStabSearchMethod searchMethod = MStabSearchMethod.Grid, GridSizeDetermination gridSizeDetermination = GridSizeDetermination.Specified, TangentLinesDefinition tangentLinesDefinition = TangentLinesDefinition.OnBoundaryLines)
{
- var kernelWrapper = new MacroStabilityInwardsKernelWrapper();
- Assert.That(() => kernelWrapper.Execute(null, null, out _), Throws.InstanceOf().With.Message.EqualTo("Geen invoer object gedefinieerd voor Macrostabiliteit"));
- }
-
- [Test]
- [SetUICulture("en-US")]
- public void TestLanguageENThrowsExceptionWhenStabilityInputIsNull()
- {
- var kernelWrapper = new MacroStabilityInwardsKernelWrapper();
- Assert.That(() => kernelWrapper.Execute(null, null, out _), Throws.InstanceOf().With.Message.EqualTo("No input object defined for Macro Stability"));
- }
-
- [Test]
- [SetUICulture("nl-NL")]
- public void TestThrowsExceptionWhenStabilityOutputIsNull()
- {
- var kernelWrapper = new MacroStabilityInwardsKernelWrapper();
- Assert.That(() => kernelWrapper.PostProcess(new DamKernelInput(), null, null, "", out _), Throws.InstanceOf().With.Message.EqualTo("Geen uitvoer object gedefinieerd voor Macrostabiliteit"));
- }
-
- [Test]
- [SetUICulture("nl-NL")]
- public void TestThrowsExceptionWhenDamKernelInputIsNull()
- {
- var kernelWrapper = new MacroStabilityInwardsKernelWrapper();
- Assert.That(() => kernelWrapper.PostProcess(null, null, null, "", out _), Throws.InstanceOf().With.Message.EqualTo("Geen Dam invoer object gedefinieerd voor Macrostabiliteit"));
- }
-
- private static DamKernelInput CreateDamKernelInputForTest(MStabModelType modelType, MStabSearchMethod searchMethod, GridSizeDetermination gridSizeDetermination)
- {
Location location = DamEngineDataTestFactory.CreateLocation(FactoryForSurfaceLines.CreateSurfaceLineTutorial1());
// Correction needed in order to make surface line as lengthy as needed to perform a proper calculation.
location.SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X = 100;
@@ -714,15 +720,15 @@
sd.UpliftVanRightGridVerticalPointCount = 3;
sd.UpliftVanRightGridHorizontalPointDistance = 1;
sd.UpliftVanRightGridVerticalPointDistance = 1;
- sd.UpliftVanTangentLinesDefinition = TangentLinesDefinition.OnBoundaryLines;
+ sd.UpliftVanTangentLinesDefinition = tangentLinesDefinition;
sd.UpliftVanTangentLinesDistance = 1;
sd.GridSizeDetermination = gridSizeDetermination;
-
+
damKernelInput.DamFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.Model = modelType;
damKernelInput.DamFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.SearchMethod = searchMethod;
-
- damKernelInput.CurrentEmbankmentSoil = damKernelInput.Location.GetDikeEmbankmentSoil();
-
+
+ damKernelInput.CurrentEmbankmentSoil = damKernelInput.Location.GetDikeEmbankmentSoil();
+
return damKernelInput;
}