Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile2DSurfaceLineHelperTests.cs =================================================================== diff -u -r5765 -r5768 --- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile2DSurfaceLineHelperTests.cs (.../SoilProfile2DSurfaceLineHelperTests.cs) (revision 5765) +++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile2DSurfaceLineHelperTests.cs (.../SoilProfile2DSurfaceLineHelperTests.cs) (revision 5768) @@ -24,7 +24,6 @@ using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.Data.Standard; -using Deltares.DamEngine.TestHelpers; using Deltares.DamEngine.TestHelpers.Factories; using NUnit.Framework; @@ -361,7 +360,7 @@ Assert.That(newSoilProfile2D.Surfaces, Has.Count.EqualTo(testCaseSurfaceLine.SurfaceCount)); } - [Test, TestCaseSource(nameof(ZigZagSurfaceLinesTestCases)), Category(Categories.WorkInProgress)] + [Test, TestCaseSource(nameof(ZigZagSurfaceLinesTestCases))] public void GivenComplexShiftedSoilProfile2D_WhenCombiningWithZigZagSurfaceLine_ThenCorrectNewSoilProfile2DIsCreated(TestCaseZigZagSurfaceLine testCaseSurfaceLine) { // Given Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/IssuesTests.cs =================================================================== diff -u -r5767 -r5768 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/IssuesTests.cs (.../IssuesTests.cs) (revision 5767) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/IssuesTests.cs (.../IssuesTests.cs) (revision 5768) @@ -21,6 +21,7 @@ using System.Globalization; using System.IO; +using System.Linq; using System.Threading; using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.GeometryExport; @@ -83,4 +84,26 @@ Assert.That(engineInterface.DamProjectData.DesignCalculations[0].SafetyFactor, Is.EqualTo(safetyFactor).Within(0.001), "The safety factor is incorrect."); }); } + + [Test] + public void GivenSoilProfileForDwp1FromTutorial_WhenCombiningWithSurfaceLineUsingAShiftOfGeometry_ThenExpectedSoilProfile2DIsCreated() + { + string inputString = File.ReadAllText(tutorialStability2D); + string[] locations = ["DWP_1"]; + inputString = XmlAdapter.SelectLocations(inputString, locations); + var engineInterface = new EngineInterface(inputString); + double shift = engineInterface.DamProjectData.Dike.Locations[0].XSoilGeometry2DOrigin; + SurfaceLine2 surfaceLine = engineInterface.DamProjectData.Dike.Locations[0].SurfaceLine; + string soilName = engineInterface.DamProjectData.Dike.Locations[0].DikeEmbankmentMaterial; + Soil fillingMaterial = engineInterface.DamProjectData.Dike.SoilList.GetSoilByName(soilName); + + SoilProfile2D soilProfile2D = SoilProfile2DSurfaceLineHelper.CombineSurfaceLineWithSoilProfile2D(surfaceLine.Geometry, + engineInterface.DamProjectData.Segments[0].SoilProfileProbabilities[0].SoilProfile2D, fillingMaterial, shift); + Assert.Multiple(() => + { + Assert.That(soilProfile2D.Geometry.Surfaces, Has.Count.EqualTo(20)); + Assert.That(soilProfile2D.Surfaces, Has.Count.EqualTo(20)); + Assert.That(soilProfile2D.Surfaces.Where(s => s.SoilName == fillingMaterial.Name).ToList(), Has.Count.EqualTo(3)); + }); + } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs =================================================================== diff -u -r5764 -r5768 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 5764) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 5768) @@ -73,10 +73,6 @@ public static SoilProfile2D CombineSurfaceLineWithSoilProfile2D(GeometryPointString surfaceLine, SoilProfile2D soilProfile2D, Soil defaultSoil, double shift) { - // Temporary code to revert the changes in MWDAM-2677 because the created geometry with shift > 0 is incorrect - // (new layers do not have the embankment soil as material) - shift = 0; - if (soilProfile2D == null || soilProfile2D.Surfaces.Count == 0) return null; if (surfaceLine == null || surfaceLine.Points.Count == 0) @@ -85,12 +81,17 @@ SoilProfile2D clonedProfile = soilProfile2D.Clone(); GeometryPointString clonedSurfaceLine = surfaceLine.Clone(); RoundCoordinates(clonedProfile.Geometry, clonedSurfaceLine); + GeometryPointString originalSurfaceLine = soilProfile2D.Geometry.SurfaceLine; shift = GeometryObject.RoundValue(shift); if (Math.Abs(shift) >= GeometryConstants.Accuracy) { foreach (Point2D point in clonedProfile.Geometry.Points) point.X += shift; clonedProfile.Geometry.Rebox(); + + foreach (GeometryPoint point in originalSurfaceLine.Points) + point.X += shift; + originalSurfaceLine.SyncCalcPoints(); } if (clonedProfile.Geometry.Right < surfaceLine.GetMinX() || clonedProfile.Geometry.Left > surfaceLine.GetMaxX()) @@ -105,10 +106,11 @@ oldSurfaces.AddRange((IEnumerable) soilProfile2D2.Surfaces); var result = new SoilProfile2D(); + result.Name = soilProfile2D.Name; BuildGeometryModel(clonedSurfaceLine, clonedProfile, ref result); RemoveGeometryDataOfSoilProfileAboveSurfaceLine(clonedSurfaceLine, ref result); - ReconstructSurfaces(ref result, clonedProfile, oldSurfaces, defaultSoil, shift); + ReconstructSurfaces(ref result, originalSurfaceLine, oldSurfaces, defaultSoil, shift); ReconstructPreConsolidations(ref result, clonedProfile, shift); result.Geometry.Rebox(); result.Geometry.UpdateSurfaceLine(); @@ -318,11 +320,10 @@ result.DeleteLoosePoints(); } - private static void ReconstructSurfaces(ref SoilProfile2D result, SoilProfile2D soilProfile2D, List oldSurfaces, + private static void ReconstructSurfaces(ref SoilProfile2D result, GeometryPointString surfaceLine, List oldSurfaces, Soil defaultSoil, double shift) { result.Surfaces.Clear(); - result.Name = soilProfile2D.Name; foreach (GeometrySurface surface in result.Geometry.Surfaces) { var soilLayer2D1 = new SoilLayer2D @@ -342,7 +343,7 @@ if (layerFromOldSurfaces == null) { SoilLayer2D oldLayer = null; - bool isDefaultLayer = IsLayerAboveOriginalSurfaceLine(soilLayer2D2, soilProfile2D.Geometry.SurfaceLine); + bool isDefaultLayer = IsLayerAboveOriginalSurfaceLine(soilLayer2D2, surfaceLine); if (!isDefaultLayer) { oldLayer = DetermineLayerIfSurfaceIsLeftOrRightOfOldSurfaces(surface, oldSurfaces, shift); Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs =================================================================== diff -u -r5767 -r5768 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs (.../MacroStabilityInwardsTests.cs) (revision 5767) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MacroStabilityInwardsTests.cs (.../MacroStabilityInwardsTests.cs) (revision 5768) @@ -70,7 +70,7 @@ Assert.Multiple(() => { - Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.EqualTo(1.156).Within(tolerance)); + Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.EqualTo(1.161).Within(tolerance)); // NumberOfIterations=0 Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.NumberOfIterations, Is.EqualTo(0)); @@ -90,7 +90,7 @@ Assert.Multiple(() => { Assert.That(upliftSituation.IsUplift, Is.EqualTo(true)); - Assert.That(upliftSituation.Pl3MinUplift, Is.EqualTo(1.135).Within(tolerance)); + Assert.That(upliftSituation.Pl3MinUplift, Is.EqualTo(1.141).Within(tolerance)); Assert.That(upliftSituation.Pl3HeadAdjusted, Is.EqualTo(4.400).Within(tolerance)); Assert.That(upliftSituation.Pl3LocationXMinUplift, Is.EqualTo(60.640).Within(tolerance)); Assert.That(upliftSituation.Pl4MinUplift, Is.EqualTo(0.0).Within(tolerance)); @@ -129,7 +129,7 @@ DesignResult result = output.Results.CalculationResults[0]; Assert.Multiple(() => { - Assert.That(result.StabilityDesignResults.SafetyFactor, Is.EqualTo(1.247).Within(tolerance)); + Assert.That(result.StabilityDesignResults.SafetyFactor, Is.EqualTo(1.245).Within(tolerance)); Assert.That(result.StabilityDesignResults.UpliftSituation, Is.Not.Null); }); Assert.Multiple(() => @@ -142,7 +142,7 @@ result = output.Results.CalculationResults[1]; Assert.Multiple(() => { - Assert.That(result.StabilityDesignResults.SafetyFactor, Is.EqualTo(1.156).Within(tolerance)); + Assert.That(result.StabilityDesignResults.SafetyFactor, Is.EqualTo(1.161).Within(tolerance)); Assert.That(result.StabilityDesignResults.UpliftSituation, Is.Not.Null); Assert.That(result.StabilityDesignResults.StabilityModelType, Is.EqualTo(DesignResultStabilityDesignResultsStabilityModelType.UpliftVan)); Assert.That(result.BaseFileName, Is.EqualTo("Loc(DWP_1)_Sce(1)_Pro(DWP_1_stix)")); @@ -151,7 +151,7 @@ result = output.Results.CalculationResults[2]; Assert.Multiple(() => { - Assert.That(result.StabilityDesignResults.SafetyFactor, Is.EqualTo(1.156).Within(tolerance)); + Assert.That(result.StabilityDesignResults.SafetyFactor, Is.EqualTo(1.161).Within(tolerance)); Assert.That(result.StabilityDesignResults.UpliftSituation, Is.Not.Null); Assert.That(result.StabilityDesignResults.StabilityModelType, Is.EqualTo(DesignResultStabilityDesignResultsStabilityModelType.BishopUpliftVan)); Assert.That(result.BaseFileName, Is.EqualTo("Loc(DWP_1)_Sce(1)_Pro(DWP_1_stix)")); @@ -190,7 +190,7 @@ DesignResultStabilityDesignResults result = output.Results.CalculationResults[0].StabilityDesignResults; Assert.Multiple(() => { - Assert.That(result.SafetyFactor, Is.EqualTo(1.072).Within(tolerance)); + Assert.That(result.SafetyFactor, Is.EqualTo(1.153).Within(tolerance)); Assert.That(result.UpliftSituation, Is.Not.Null); }); Assert.Multiple(() => @@ -202,15 +202,15 @@ result = output.Results.CalculationResults[1].StabilityDesignResults; Assert.Multiple(() => { - Assert.That(result.SafetyFactor, Is.EqualTo(1.439).Within(tolerance)); + Assert.That(result.SafetyFactor, Is.EqualTo(1.388).Within(tolerance)); Assert.That(result.UpliftSituation, Is.Not.Null); Assert.That(result.StabilityModelType, Is.EqualTo(DesignResultStabilityDesignResultsStabilityModelType.UpliftVan)); }); // Lowest of Bishop and Uplift Van result = output.Results.CalculationResults[2].StabilityDesignResults; Assert.Multiple(() => { - Assert.That(result.SafetyFactor, Is.EqualTo(1.0722).Within(tolerance)); + Assert.That(result.SafetyFactor, Is.EqualTo(1.1534).Within(tolerance)); Assert.That(result.UpliftSituation, Is.Not.Null); Assert.That(result.StabilityModelType, Is.EqualTo(DesignResultStabilityDesignResultsStabilityModelType.BishopUpliftVan)); }); @@ -251,7 +251,7 @@ Assert.Multiple(() => { Assert.That(result.SafetyFactorSpecified, Is.True); - Assert.That(result.SafetyFactor, Is.EqualTo(1.372).Within(tolerance)); + Assert.That(result.SafetyFactor, Is.EqualTo(1.357).Within(tolerance)); Assert.That(result.UpliftSituation, Is.Not.Null); }); Assert.Multiple(() => @@ -272,7 +272,7 @@ Assert.Multiple(() => { Assert.That(result.SafetyFactorSpecified, Is.True); - Assert.That(result.SafetyFactor, Is.EqualTo(1.372).Within(tolerance)); + Assert.That(result.SafetyFactor, Is.EqualTo(1.357).Within(tolerance)); Assert.That(result.UpliftSituation, Is.Not.Null); Assert.That(result.StabilityModelType, Is.EqualTo(DesignResultStabilityDesignResultsStabilityModelType.BishopUpliftVan)); }); @@ -315,7 +315,7 @@ Assert.Multiple(() => { // No Zone - Assert.That(result.StabilityDesignResults.SafetyFactor, Is.EqualTo(1.359).Within(tolerance)); + Assert.That(result.StabilityDesignResults.SafetyFactor, Is.EqualTo(1.338).Within(tolerance)); Assert.That(result.LocationName, Is.EqualTo("DWP_10_1")); Assert.That(result.ProfileName, Is.EqualTo("DWP_10.stix")); Assert.That(ConversionHelper.ConvertToCalculationResult(result.CalculationResult), Is.EqualTo(CalculationResult.Succeeded)); @@ -325,7 +325,7 @@ Assert.Multiple(() => { // Forbidden Zone, factor = 0.2 - Assert.That(result.StabilityDesignResults.SafetyFactor, Is.EqualTo(1.789).Within(tolerance)); + Assert.That(result.StabilityDesignResults.SafetyFactor, Is.EqualTo(1.866).Within(tolerance)); Assert.That(result.LocationName, Is.EqualTo("DWP_10_4")); Assert.That(result.ProfileName, Is.EqualTo("DWP_10.stix")); Assert.That(ConversionHelper.ConvertToCalculationResult(result.CalculationResult), Is.EqualTo(CalculationResult.Succeeded)); @@ -400,9 +400,9 @@ // Set UseNewMinDistanceDikeToeStartDitch(Use new allowed distance toe-ditch) = true (to force value to be written to XML) // // Parameters: CalcDir - StabilityModel - DesignStrategy - CalculationResult - FoS - EntryPointX - ExitPointX - DikeLength - ShoulderHeight - Iterations - ResultMessage - [TestCase("TestStabInwardsBishopDesignSequential", "Bishop", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.497, 45.387, 2.799, 5, "")] - [TestCase("TestStabInwardsBishopDesignOptimized", "Bishop", "OptimizedSlopeAndShoulderAdaption", CalculationResult.Succeeded, 1.478, 43.760, 3.889, 4, "")] - [TestCase("TestStabInwardsUpliftVanDesignSequential", "UpliftVan", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.480, 47.737, 3.132, 6, "")] + [TestCase("TestStabInwardsBishopDesignSequential", "Bishop", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.476, 45.387, 2.799, 5, "")] + [TestCase("TestStabInwardsBishopDesignOptimized", "Bishop", "OptimizedSlopeAndShoulderAdaption", CalculationResult.Succeeded, 1.466, 43.760, 3.889, 4, "")] + [TestCase("TestStabInwardsUpliftVanDesignSequential", "UpliftVan", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.437, 47.737, 3.132, 6, "")] //ToDo MWDAM-2474 UpliftVan Optimized does not give expected result // [TestCase("TestStabInwardsUpliftVanDesignOptimized", "UpliftVan", "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.214, 0.0, 0.0, 4, "The new shoulder height with topslope exceeds the allowed maximum height.")] public void CanPerformStabilityInwardsDesignTutorialDesignOptimizedSlopeAndShoulderAdaption_OneLocation( @@ -483,7 +483,7 @@ Output output = GetOutputStringForProject(analysisType, true); Assert.That(output.Results.CalculationResults, Is.Not.Null, "No results available"); - Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.EqualTo(1.198).Within(0.0005)); + Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.EqualTo(1.268).Within(0.0005)); } [Test] @@ -838,10 +838,10 @@ /// /// [Test] - [TestCase(double.NaN, 1.247)] // DoC is unchanged - [TestCase(0, 1.247)] - [TestCase(50, 1.275)] - [TestCase(100, 1.304)] + [TestCase(double.NaN, 1.245)] // DoC is unchanged + [TestCase(0, 1.245)] + [TestCase(50, 1.273)] + [TestCase(100, 1.301)] public void GivenStabilityDesignTutorial_WhenCalculatingWithDifferentDegreeOfConsolidation_ThenReturnsADifferentSafetyFactor(double trafficLoadDegreeOfConsolidation, double expectedSafetyFactor) { const string calcDir = "TestEffectOfTrafficLoadDegreeOfConsolidation"; @@ -903,7 +903,7 @@ Assert.Multiple(() => { - Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.EqualTo(1.247).Within(tolerance)); + Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Is.EqualTo(1.245).Within(tolerance)); // NumberOfIterations=0 Assert.That(output.Results.CalculationResults[0].StabilityDesignResults.NumberOfIterations, Is.EqualTo(0)); @@ -923,7 +923,7 @@ Assert.Multiple(() => { Assert.That(upliftSituation.IsUplift, Is.EqualTo(true)); - Assert.That(upliftSituation.Pl3MinUplift, Is.EqualTo(1.135).Within(tolerance)); + Assert.That(upliftSituation.Pl3MinUplift, Is.EqualTo(1.141).Within(tolerance)); Assert.That(upliftSituation.Pl3HeadAdjusted, Is.EqualTo(4.400).Within(tolerance)); Assert.That(upliftSituation.Pl3LocationXMinUplift, Is.EqualTo(60.640).Within(tolerance)); Assert.That(upliftSituation.Pl4MinUplift, Is.EqualTo(0.0).Within(tolerance)); @@ -935,11 +935,11 @@ }); } - [TestCase("DWP_1", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.4, 1.534, 5)] - [TestCase("DWP_1", "OptimizedSlopeAndShoulderAdaption",CalculationResult.Succeeded, 1.4, 1.584, 4)] - [TestCase("DWP_2", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.RunFailed, 1.5, 1.364, 14)] - [TestCase("DWP_2", "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.5, 1.109, 17)] - [TestCase("DWP_13", "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.5, 0.943, 23, "The characteristic points of the surfaceline are not ascending in X-direction.")] + [TestCase("DWP_1", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.4, 1.493, 5)] + [TestCase("DWP_1", "OptimizedSlopeAndShoulderAdaption",CalculationResult.Succeeded, 1.4, 1.571, 4)] + [TestCase("DWP_2", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.5, 1.546, 9)] + [TestCase("DWP_2", "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.5, 1.027, 17)] + [TestCase("DWP_13", "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.5, 0.936, 23, "The characteristic points of the surfaceline are not ascending in X-direction.")] public void GivenTutorialDesign_WhenSpecifiedLocationRunWithGeometryAdaption_ThenGivesExpectedResults(string locationId, string designMethod, CalculationResult calculationResult, double requiredSafetyFactor, double actualSafetyFactor, int iterationCount, string errorMessage= "") { @@ -1008,6 +1008,7 @@ inputString = XmlAdapter.ChangeValueInXml(inputString, "AnalysisType", analysisType); inputString = XmlAdapter.ChangeValueInXml(inputString, "DikeTableHeight", "5.9"); inputString = XmlAdapter.ChangeValueInXml(inputString, "RiverLevel", "5.5"); + inputString = XmlAdapter.ChangeValueInXml(inputString, "RequiredSafetyFactorStabilityInnerSlope", "1.2"); return GeneralHelper.RunAfterInputValidation(inputString, isSuccessful); }