Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/PlLinesCreatorTest.cs =================================================================== diff -u -r5227 -r5235 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/PlLinesCreatorTest.cs (.../PlLinesCreatorTest.cs) (revision 5227) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/PlLinesCreatorTest.cs (.../PlLinesCreatorTest.cs) (revision 5235) @@ -1463,73 +1463,84 @@ { const double cDampingFactor = 0.3; SurfaceLine2 surfaceLineTutorial1 = FactoryForSurfaceLines.CreateSurfaceLineTutorial1(); + var plLineCreator = new Calculators.PlLinesCreator.PlLinesCreator { - var plLineCreator = new Calculators.PlLinesCreator.PlLinesCreator + SoilProfile = FactoryForSoilProfiles.CreateClaySandProfile(), + SurfaceLine = surfaceLineTutorial1, + WaterLevelRiverHigh = 4.0, + WaterLevelPolder = -0.5, + ModelParametersForPlLines = { - SoilProfile = FactoryForSoilProfiles.CreateClaySandProfile(), - SurfaceLine = surfaceLineTutorial1, - WaterLevelRiverHigh = 4.0, - WaterLevelPolder = -0.5, - ModelParametersForPlLines = - { - DampingFactorPl4 = cDampingFactor - } - }; + DampingFactorPl4 = cDampingFactor + } + }; - PlLine plLine = plLineCreator.CreatePlLineByExpertKnowledge(PlLineType.Pl4, 0.02); + PlLine plLine = plLineCreator.CreatePlLineByExpertKnowledge(PlLineType.Pl4, 0.02); - Assert.That(plLine.Exists(), Is.False); - } + Assert.That(plLine.Exists(), Is.False); } - ///// - ///// This test evaluates the same stuation as CreatePL3For1DGeometryWithExpertKnowledgeRRD() - ///// The difference is that here the geometry is entered as a 2d-geometry - ///// - //[Test] - //public void CreatePL3For2DGeometryWithExpertKnowledgeRRD() - //{ - // string soilGeometry2DName = @"TestData\PLLineCreation.sti"; - // string soilDatabaseName = @"TestData\PLLineCreation.mdb"; - // string cDikeMaterial = "HW-OBO"; - // const double cDampingFactor = 0.3; - // var surfaceLineTutorial1 = FactoryForSurfaceLines.CreateSurfaceLineTutorial1(); - // { - // PLLinesCreator plLineCreator = new PLLinesCreator(); - // plLineCreator.SoilGeometryType = SoilGeometryType.SoilGeometry2D; - // plLineCreator.SoilProfile = null; - // plLineCreator.SoilGeometry2DName = soilGeometry2DName; - // plLineCreator.SoilBaseDB = SoilbaseDB.Create(soilDatabaseName); - // plLineCreator.SoilList = plLineCreator.SoilBaseDB.CreateSoilList(); - // plLineCreator.DikeEmbankmentMaterial = plLineCreator.SoilBaseDB.GetSoil(cDikeMaterial); - // plLineCreator.SurfaceLine = surfaceLineTutorial1; - // plLineCreator.WaterLevelRiverHigh = 4.0; - // plLineCreator.WaterLevelPolder = -0.5; + /// + /// This test evaluates the same situation as CreatePL3For1DGeometryWithExpertKnowledgeRRD() + /// The difference is that here the geometry is entered as a 2D-geometry + /// + [Test, Ignore("the expected results are wrong (uplift expected but no uplift), this will be solved in MWDAM-2356")] + public void CreatePL3For2DGeometryWithExpertKnowledgeRRD() + { + const double cDampingFactor = 0.3; + SurfaceLine2 surfaceLineTutorial1 = FactoryForSurfaceLines.CreateSurfaceLineTutorial1(); + SoilProfile1D soilProfile1D = FactoryForSoilProfiles.CreateClaySandClaySandProfile(); + + var soilSurfaceProfile = new SoilSurfaceProfile + { + SoilProfile = soilProfile1D, + SurfaceLine2 = surfaceLineTutorial1, + DikeEmbankmentMaterial = new Soil("HW-OBO", 12.0, 10.0) + }; + SoilProfile2D soilProfile2D = soilSurfaceProfile.ConvertToSoilProfile2D(); + + var plLineCreator = new Calculators.PlLinesCreator.PlLinesCreator + { + SoilProfile2D = soilProfile2D, + SoilProfileType = SoilProfileType.ProfileType2D, + SurfaceLine = surfaceLineTutorial1, + WaterLevelRiverHigh = 4.0, + WaterLevelPolder = -0.5, + ModelParametersForPlLines = + { + DampingFactorPl3 = cDampingFactor + } + }; - // plLineCreator.ModelParametersForPlLines.DampingFactorPL3 = cDampingFactor; - // PLLine plLine = plLineCreator.CreatePLLineByExpertKnowledge(PLLineType.PL3, 0.02); + // In this case no HeadInPlLine3 is specified, then the head of PL3 will be equal to WaterLevelRiverHigh + PlLine plLine = plLineCreator.CreatePlLineByExpertKnowledge(PlLineType.Pl3, 0.02); + CheckPl3For1DGeometryWithExpertKnowledgeRrd(plLine); - // //double headAtDikeToe = plLineCreator.WaterLevelRiver - (plLineCreator.WaterLevelRiver - plLineCreator.WaterLevelPolder) * 0.01 * cDampingFactor; + // In this case HeadInPlLine3 is specified (with same value as WaterLevelRiverHigh above, so result should be the same) + // Change WaterLevelRiverHigh to be sure the value of HeadInPlLine3 is really used + plLineCreator.WaterLevelRiverHigh = 3.0; + plLineCreator.HeadInPlLine3 = 4.0; + plLine = plLineCreator.CreatePlLineByExpertKnowledge(PlLineType.Pl3, 0.02); + CheckPl3For1DGeometryWithExpertKnowledgeRrd(plLine); - // // PLLine is supposed to have adjusted points at both banks of the ditch + // Specify Head PL2, so it is used for damping, but give it the same value as WaterLevelPolder. + // This will give the same result as when Head PL2 is not specified, because in that case, WaterLevelPolder ius used for damping. + plLineCreator.HeadInPlLine2 = -0.5; + plLine = plLineCreator.CreatePlLineByExpertKnowledge(PlLineType.Pl3, 0.02); + CheckPl3For1DGeometryWithExpertKnowledgeRrd(plLine); - // Assert.AreEqual(4, plLine.Points.Count); + // Specify Head PL2, so it is used for damping, but now use different value as WaterLevelPolder to force different result. + plLineCreator.HeadInPlLine2 = -5.0; + plLine = plLineCreator.CreatePlLineByExpertKnowledge(PlLineType.Pl3, 0.02); + CheckPl3For1DGeometryWithExpertKnowledgeRrdWithHeadPl2Specified(plLine); + + + + + } - // Assert.AreEqual(0.0, plLine.Points[0].X, Tolerance); // start - // Assert.AreEqual(4.0, plLine.Points[0].Z, Tolerance); // water level at river - // Assert.AreEqual(10.0, plLine.Points[1].X, Tolerance); // entry point - // Assert.AreEqual(4.0, plLine.Points[1].Z, Tolerance); // water level at river - // Assert.AreEqual(61.5, plLine.Points[2].X, Tolerance); // left ditch bank - // Assert.AreEqual(1.6376, plLine.Points[2].Z, Tolerance); // - // Assert.AreEqual(75.0, plLine.Points[3].X, Tolerance); // end - // Assert.AreEqual(1.3676, plLine.Points[3].Z, Tolerance); // headAtDikeEnd - - // //Assert.AreEqual(?, plLine.ZFromX(plLineCreator.SurfaceLine.GetDikeToeInward().X), Tolerance); // headAtDikeToe - // } - //} - /// - /// This test evaluates the same situation as CreatePL3For1DGeometryWithExpertKnowledgeRRD() + /// This test evaluates the same situation as CreatePL3For2DGeometryWithExpertKnowledgeRRD() /// The difference is that here the geometry is entered as a 1d-geometry /// [Test] @@ -1561,12 +1572,12 @@ CheckPl3For1DGeometryWithExpertKnowledgeRrd(plLine); // Specify Head PL2, so it is used for damping, but give it the same value as WaterLevelPolder. - // This will give the same result as when Head PL2 is not specified, because in that case, WaterLevelPolder ius used for damping. + // This will give the same result as when Head PL2 is not specified, because in that case, WaterLevelPolder is used for damping. plLineCreator.HeadInPlLine2 = -0.5; plLine = plLineCreator.CreatePlLineByExpertKnowledge(PlLineType.Pl3, 0.02); CheckPl3For1DGeometryWithExpertKnowledgeRrd(plLine); - // Specify Head PL2, so it is used for damping, but now use diffeent value as WaterLevelPolder to force different result. + // Specify Head PL2, so it is used for damping, but now use different value as WaterLevelPolder to force different result. plLineCreator.HeadInPlLine2 = -5.0; plLine = plLineCreator.CreatePlLineByExpertKnowledge(PlLineType.Pl3, 0.02); CheckPl3For1DGeometryWithExpertKnowledgeRrdWithHeadPl2Specified(plLine); @@ -2195,55 +2206,43 @@ }); } - ///// - ///// Define input based on 2d geometry for PLLine creator - ///// - ///// - ///// - //private static PLLinesCreator DefinePLLineCreatorFor2DGeometry(SurfaceLine2 surfaceline) - //{ - // string soilGeometry2DName = @"TestData\1D1.sti"; - // string soilDatabaseName = @"TestData\soilmaterials.mdb"; - // string cDikeMaterial = "OA"; - // PLLinesCreator plLineCreator = new PLLinesCreator(); - // Assert.IsNotNull(plLineCreator); - // plLineCreator.SoilGeometryType = SoilGeometryType.SoilGeometry2D; - // plLineCreator.SoilProfile = null; - // plLineCreator.SoilGeometry2DName = soilGeometry2DName; - // plLineCreator.SoilBaseDB = SoilbaseDB.Create(soilDatabaseName); - // plLineCreator.DikeEmbankmentMaterial = plLineCreator.SoilBaseDB.GetSoil(cDikeMaterial); - // plLineCreator.WaterLevelRiverHigh = 4.0; - // plLineCreator.ModelParametersForPlLines.PenetrationLength = 1.0; - // plLineCreator.HeadInPLLine2 = 0.0; - // plLineCreator.ModelParametersForPlLines.DampingFactorPL3 = 0.3; - // plLineCreator.ModelParametersForPlLines.DampingFactorPL4 = 0.4; - // plLineCreator.ModelParametersForPlLines.PLLineCreationMethod = PLLineCreationMethod.ExpertKnowledgeRRD; - // plLineCreator.SurfaceLine = surfaceline; - // plLineCreator.WaterLevelPolder = plLineCreator.SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z - 1.0; - // return plLineCreator; - //} - - //[Test] - //public void CreatePL1For2DGeometryWithExpertKnowledgeRRD() - //{ - // const double tolerance = 0.0001; - // var surfacelineSimpleDike = FactoryForSurfaceLines.CreateSurfacelineSimpleDike(); - // { - // PLLinesCreator plLineCreator = DefinePLLineCreatorFor2DGeometry(surfacelineSimpleDike); - // PLLine plLine = plLineCreator.CreatePLLineByExpertKnowledge(PLLineType.PL1, 0.02); - // Assert.AreEqual(6, plLine.Points.Count); - // Assert.AreEqual(0.0, plLine.Points[0].X, tolerance); - // Assert.AreEqual(4.0, plLine.Points[0].Z, tolerance); - // Assert.AreEqual(3.0, plLine.Points[1].X, tolerance); - // Assert.AreEqual(4.0, plLine.Points[1].Z, tolerance); - // Assert.AreEqual(4, plLine.Points[2].X, tolerance); - // Assert.AreEqual(3.5, plLine.Points[2].Z, tolerance); - // Assert.AreEqual(7, plLine.Points[3].X, tolerance); - // Assert.AreEqual(2.5, plLine.Points[3].Z, tolerance); - // Assert.AreEqual(10, plLine.Points[4].X, tolerance); - // Assert.AreEqual(0.9, plLine.Points[4].Z, tolerance); - // Assert.AreEqual(12, plLine.Points[5].X, tolerance); - // Assert.AreEqual(0.9, plLine.Points[5].Z, tolerance); - // } - //} + [Test] + public void CreatePL1For2DGeometryWithExpertKnowledgeRRD() + { + var plLineCreator = new Calculators.PlLinesCreator.PlLinesCreator + { + SoilProfileType = SoilProfileType.ProfileType2D, + SoilProfile = null, + WaterLevelRiverHigh = 4.0, + ModelParametersForPlLines = + { + PenetrationLength = 1.0, + DampingFactorPl3 = 0.3, + DampingFactorPl4 = 0.4, + PlLineCreationMethod = PlLineCreationMethod.ExpertKnowledgeRRD + }, + HeadInPlLine2 = 0.0, + SurfaceLine = FactoryForSurfaceLines.CreateSurfacelineSimpleDike() + }; + plLineCreator.WaterLevelPolder = plLineCreator.SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z - 1.0; + + PlLine plLine = plLineCreator.CreatePlLineByExpertKnowledge(PlLineType.Pl1, 0.02); + + Assert.That(plLine.Points, Has.Count.EqualTo(6)); + Assert.Multiple(() => + { + Assert.That(plLine.Points[0].X, Is.EqualTo(0.0).Within(tolerance4Decimals)); + Assert.That(plLine.Points[0].Z, Is.EqualTo(4.0).Within(tolerance4Decimals)); + Assert.That(plLine.Points[1].X, Is.EqualTo(3.0).Within(tolerance4Decimals)); + Assert.That(plLine.Points[1].Z, Is.EqualTo(4.0).Within(tolerance4Decimals)); + Assert.That(plLine.Points[2].X, Is.EqualTo(4.0).Within(tolerance4Decimals)); + Assert.That(plLine.Points[2].Z, Is.EqualTo(3.5).Within(tolerance4Decimals)); + Assert.That(plLine.Points[3].X, Is.EqualTo(7.0).Within(tolerance4Decimals)); + Assert.That(plLine.Points[3].Z, Is.EqualTo(2.5).Within(tolerance4Decimals)); + Assert.That(plLine.Points[4].X, Is.EqualTo(10.0).Within(tolerance4Decimals)); + Assert.That(plLine.Points[4].Z, Is.EqualTo(0.9).Within(tolerance4Decimals)); + Assert.That(plLine.Points[5].X, Is.EqualTo(12.0).Within(tolerance4Decimals)); + Assert.That(plLine.Points[5].Z, Is.EqualTo(0.9).Within(tolerance4Decimals)); + }); + } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/PlLinesCreator/PlLinesCreator.cs =================================================================== diff -u -r4934 -r5235 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/PlLinesCreator/PlLinesCreator.cs (.../PlLinesCreator.cs) (revision 4934) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/PlLinesCreator/PlLinesCreator.cs (.../PlLinesCreator.cs) (revision 5235) @@ -474,8 +474,8 @@ ThrowIfInsufficientSoilGeometryData(); ThrowIfNoSurfaceLine(); ThrowIfSurfaceLineContainsNoPoints(); - // Soilprofile is used to check if there is really an aquifer below toe of dike at river. - // The assumption is made that if there is an aquifer at the riverside and at the the polderside, + // Soil profile is used to check if there is really an aquifer below toe of dike at river. + // The assumption is made that if there is an aquifer at the riverside and at the polderside, // that there is a connection between these aquifers. // In the uplift calculation there will also be a check on the existence of an aquifer. SoilProfile1D actualSoilProfile = GetSoilProfileBelowPoint(SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtRiver).X + offset); @@ -498,7 +498,7 @@ plLine.Points.Add(new PlLinePoint(SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtRiver).X, headValue)); plLine.Points.Add(new PlLinePoint(SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X, headAtPolderDikeToe)); - // Now continue PlLine to the end with a slope of slopegradient + // Now continue PlLine to the end with a slope of slope gradient AddTailOfPl3OrPl4WithSlopeGradient(slopeGradient, plLine); if (IsAdjustPL3AndPL4SoNoUpliftWillOccurEnabled) @@ -792,8 +792,8 @@ where point.X >= startSurfacePoint.X orderby point.X select point; - // Adjustment will only be applied if the value to adjust to is smaller than the previous adjusted value (to avoid that the PL3/PL4 will be adjusted to the - // polderside of the ditch i.s.o. the dikeside of the ditch. + // Adjustment will only be applied if the value to adjust to is smaller than the previous adjusted value + // (to avoid that the PL3/PL4 will be adjusted to the polder side of the ditch i.s.o. the dike side of the ditch). // So we remember which was the last adjusted value in lastAdjustedHeadOfPlLine. var lastAdjustedHeadOfPlLine = Double.MaxValue; Fisheye: Tag 5235 refers to a dead (removed) revision in file `DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/TestFiles/1D1.sti'. Fisheye: No comparison available. Pass `N' to diff? Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/TestFiles/soilmaterials.mdb =================================================================== diff -u -r2893 -r5235 Binary files differ