//----------------------------------------------------------------------- // // Copyright (c) 2011 Deltares. All rights reserved. // // B.S.T.I.M. The // tom.the@deltares.nl // 12-05-2011 // Create objects to test Dupuit calcualtion (DikeFlow.exe) //----------------------------------------------------------------------- using Deltares.Geometry; using Deltares.Dam.Data; using Deltares.Geotechnics; using Deltares.Geotechnics.GeotechnicalGeometry; using Deltares.Geotechnics.Soils; using Deltares.Geotechnics.SurfaceLines; namespace Deltares.Dam.TestHelper { public class FactoryForDupuitCalculatorTest { const double tolerance = 0.01; const double limitLeft = 0.0; const double limitRight = 170.8333; const double dikeHeight = 10.0; const double bermHeight = 3.0; const double bermWidth = 10.0; const double crestWidth = 5.0; const double lForeland = 10.0; const double distanceToDitch = 20.0; const double lHinterland = 40.0; const double atanaOuterSlope = 0.3; const double atanaInnerSlope = 0.20; const double atanaDitchSlope = 1.0; const double ditchHeight = 1.0; const double ditchWidth = 0.5; public static SoilList CreateSoilListBm3_4() { var soilList = new SoilList(); soilList.Soils.Add(new Soil() { Name = "Sand", AbovePhreaticLevel = 26.5, BelowPhreaticLevel = 26.5, FrictionAngle = 20.0, Cohesion = 8.0, PermeabKx = 10.0 * DupuitCalculatorFileIO.cFactor_mPerDay_2_mPerSec }); soilList.Soils.Add(new Soil() { Name = "Clay", AbovePhreaticLevel = 26.5, BelowPhreaticLevel = 26.5, FrictionAngle = 20.0, Cohesion = 8.0, PermeabKx = 0.003 * DupuitCalculatorFileIO.cFactor_mPerDay_2_mPerSec }); soilList.Soils.Add(new Soil() { Name = "Surchage", AbovePhreaticLevel = 65.0, BelowPhreaticLevel = 65.0, FrictionAngle = 20.0, Cohesion = 8.0, PermeabKx = 0.003 * DupuitCalculatorFileIO.cFactor_mPerDay_2_mPerSec }); soilList.Soils.Add(new Soil() { Name = "Holland peat ond", AbovePhreaticLevel = 11.5, BelowPhreaticLevel = 11.5, FrictionAngle = 20.0, Cohesion = 8.0, PermeabKx = 0.003 * DupuitCalculatorFileIO.cFactor_mPerDay_2_mPerSec }); soilList.Soils.Add(new Soil() { Name = "Holland peat nst", AbovePhreaticLevel = 11.5, BelowPhreaticLevel = 11.5, FrictionAngle = 20.0, Cohesion = 8.0, PermeabKx = 0.003 * DupuitCalculatorFileIO.cFactor_mPerDay_2_mPerSec }); soilList.Soils.Add(new Soil() { Name = "tiel nst", AbovePhreaticLevel = 15.0, BelowPhreaticLevel = 15.0, FrictionAngle = 20.0, Cohesion = 8.0, PermeabKx = 0.03 * DupuitCalculatorFileIO.cFactor_mPerDay_2_mPerSec }); return soilList; } public static SoilList CreateSoilList() { var soilList = new SoilList(); soilList.Soils.Add(new Soil() { Name = "aquifermaterial", AbovePhreaticLevel = 26.5, BelowPhreaticLevel = 26.5, FrictionAngle = 20.0, Cohesion = 8.0, PermeabKx = 100.0 * DupuitCalculatorFileIO.cFactor_mPerDay_2_mPerSec }); soilList.Soils.Add(new Soil() { Name = "covermaterial", AbovePhreaticLevel = 26.5, BelowPhreaticLevel = 26.5, FrictionAngle = 20.0, Cohesion = 8.0, PermeabKx = 0.03 * DupuitCalculatorFileIO.cFactor_mPerDay_2_mPerSec }); soilList.Soils.Add(new Soil() { Name = "dikematerial", AbovePhreaticLevel = 26.5, BelowPhreaticLevel = 26.5, FrictionAngle = 20.0, Cohesion = 8.0, PermeabKx = 1.0 * DupuitCalculatorFileIO.cFactor_mPerDay_2_mPerSec }); return soilList; } /// /// Create time serie waterlevels for test /// /// public static TimeSerie CreateWaterLevelTimeSerie() { var waterLevelTimeserie = new TimeSerie(); waterLevelTimeserie.StartDateTime = System.DateTime.Now; waterLevelTimeserie.Entries.Add(new TimeSerieEntry(waterLevelTimeserie.StartDateTime, 4.0)); waterLevelTimeserie.Entries.Add(new TimeSerieEntry(waterLevelTimeserie.StartDateTime.AddDays(1.0), 5.0)); waterLevelTimeserie.Entries.Add(new TimeSerieEntry(waterLevelTimeserie.StartDateTime.AddDays(2.0), 6.0)); waterLevelTimeserie.EndDateTime = waterLevelTimeserie.Entries[waterLevelTimeserie.Entries.Count - 1].DateTime; return waterLevelTimeserie; } /// /// Create time serie waterlevels for test /// /// public static TimeSerie CreateSafetyFactorTimeSerie() { var safetyFactorTimeserie = new TimeSerie(); safetyFactorTimeserie.StartDateTime = System.DateTime.Now; safetyFactorTimeserie.Entries.Add(new TimeSerieEntry(safetyFactorTimeserie.StartDateTime, 1.12)); safetyFactorTimeserie.Entries.Add(new TimeSerieEntry(safetyFactorTimeserie.StartDateTime.AddDays(1.0), 1.45)); safetyFactorTimeserie.Entries.Add(new TimeSerieEntry(safetyFactorTimeserie.StartDateTime.AddDays(2.0), 0.95)); safetyFactorTimeserie.EndDateTime = safetyFactorTimeserie.Entries[safetyFactorTimeserie.Entries.Count - 1].DateTime; return safetyFactorTimeserie; } /// /// Create time serie waterlevels for test /// /// public static TimeSerie CreatePolderLevelTimeSerie() { var polderLevelTimeserie = new TimeSerie(); polderLevelTimeserie.StartDateTime = System.DateTime.Now; polderLevelTimeserie.Entries.Add(new TimeSerieEntry(polderLevelTimeserie.StartDateTime, 2.0)); polderLevelTimeserie.Entries.Add(new TimeSerieEntry(polderLevelTimeserie.StartDateTime.AddDays(1.0), 3.0)); polderLevelTimeserie.Entries.Add(new TimeSerieEntry(polderLevelTimeserie.StartDateTime.AddDays(2.0), 4.0)); polderLevelTimeserie.EndDateTime = polderLevelTimeserie.Entries[polderLevelTimeserie.Entries.Count - 1].DateTime; return polderLevelTimeserie; } /// /// Create time serie pllines for test /// /// public static DupuitPLLinesTimeSerie CreateDupuitPLLinesTimeSerie() { var dupuitPPLinesTimeSerie = new DupuitPLLinesTimeSerie(); DupuitTimeSerieEntry dupuitTimeSerieEntry; var dupuitPlLines = new DupuitPLLines(); double head = 0.0; for (int lineIndex = 0; lineIndex < 6; lineIndex++) { var plLine = new PLLine(); plLine.Points.Add(new PLLinePoint() { X = limitLeft, Z = head }); plLine.Points.Add(new PLLinePoint() { X = (limitLeft + limitRight) / 2, Z = head + 1.0 }); plLine.Points.Add(new PLLinePoint() { X = limitRight, Z = head }); dupuitPlLines.PLLines.Add(plLine); head += 1.0; } dupuitTimeSerieEntry = new DupuitTimeSerieEntry(); dupuitTimeSerieEntry.DupuitPlLines = dupuitPlLines; dupuitTimeSerieEntry.TimeInSeconds = 0.0; dupuitPPLinesTimeSerie.Entries.Add(dupuitTimeSerieEntry); dupuitTimeSerieEntry = new DupuitTimeSerieEntry(); dupuitTimeSerieEntry.DupuitPlLines = dupuitPlLines; dupuitTimeSerieEntry.TimeInSeconds = 1.0; dupuitPPLinesTimeSerie.Entries.Add(dupuitTimeSerieEntry); dupuitTimeSerieEntry = new DupuitTimeSerieEntry(); dupuitTimeSerieEntry.DupuitPlLines = dupuitPlLines; dupuitTimeSerieEntry.TimeInSeconds = 2.0; dupuitPPLinesTimeSerie.Entries.Add(dupuitTimeSerieEntry); return dupuitPPLinesTimeSerie; } public static SurfaceLine2 CreateBm3_4SurfaceLine() { var surfaceLine = new SurfaceLine2 { Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; surfaceLine.EnsurePointOfType(-50.000, -5.970, CharacteristicPointType.SurfaceLevelOutside); surfaceLine.EnsurePoint(-38.430, -5.860); surfaceLine.EnsurePoint(-35.900, -5.000); surfaceLine.EnsurePointOfType(-31.900, -5.000, CharacteristicPointType.DikeToeAtRiver); surfaceLine.EnsurePointOfType(-13.300, 1.200, CharacteristicPointType.ShoulderTopOutside); surfaceLine.EnsurePointOfType(-9.300, 1.200, CharacteristicPointType.ShoulderBaseOutside); surfaceLine.EnsurePoint(-2.800, 4.450); surfaceLine.EnsurePointOfType(2.800, 6.050, CharacteristicPointType.DikeTopAtRiver); surfaceLine.EnsurePoint(7.300, 6.180); surfaceLine.EnsurePoint(8.300, 6.150); surfaceLine.EnsurePoint(8.300, 6.350); surfaceLine.EnsurePoint(10.800, 6.279); surfaceLine.EnsurePoint(10.800, 6.079); surfaceLine.EnsurePointOfType(11.800, 6.050, CharacteristicPointType.DikeTopAtPolder); surfaceLine.EnsurePointOfType(26.350, 1.200, CharacteristicPointType.ShoulderBaseInside); surfaceLine.EnsurePointOfType(43.350, 1.200, CharacteristicPointType.ShoulderTopInside); surfaceLine.EnsurePointOfType(49.350, -0.800, CharacteristicPointType.DikeToeAtPolder); surfaceLine.EnsurePoint(50.000, -0.860); surfaceLine.EnsurePointOfType(100.000, -0.860, CharacteristicPointType.SurfaceLevelInside); return surfaceLine; } /// /// /// /// public static SurfaceLine2 CreateExampleSurfaceLine() { var surfaceLine = new SurfaceLine2 { Geometry = new LocalizedGeometryPointString(), CharacteristicPoints = { GeometryMustContainPoint = true } }; // surfaceline double currentX = limitLeft; surfaceLine.EnsurePointOfType(currentX, 0.0, CharacteristicPointType.SurfaceLevelOutside); currentX += lForeland; surfaceLine.EnsurePointOfType(currentX, 0.0, CharacteristicPointType.DikeToeAtRiver); currentX += dikeHeight / atanaOuterSlope; surfaceLine.EnsurePointOfType(currentX, dikeHeight, CharacteristicPointType.DikeTopAtRiver); currentX += crestWidth; surfaceLine.EnsurePointOfType(currentX, dikeHeight, CharacteristicPointType.DikeTopAtPolder); currentX += (dikeHeight - bermHeight) / atanaInnerSlope; surfaceLine.EnsurePointOfType(currentX, bermHeight, CharacteristicPointType.ShoulderBaseInside); currentX += bermWidth; surfaceLine.EnsurePointOfType(currentX, bermHeight, CharacteristicPointType.ShoulderTopInside); currentX += bermHeight / atanaInnerSlope; surfaceLine.EnsurePointOfType(currentX, 0.0, CharacteristicPointType.DikeToeAtPolder); currentX += distanceToDitch; var ditch1Point = new Geometry2DPoint(currentX, 0.0); surfaceLine.EnsurePointOfType(ditch1Point.X, ditch1Point.Z, CharacteristicPointType.DitchDikeSide); currentX += ditchHeight / atanaDitchSlope; var ditch2Point = new Geometry2DPoint(currentX, -ditchHeight); surfaceLine.EnsurePointOfType(ditch2Point.X, ditch2Point.Z, CharacteristicPointType.BottomDitchDikeSide); currentX += ditchWidth; var ditch3Point = new Geometry2DPoint(currentX, -ditchHeight); surfaceLine.EnsurePointOfType(ditch3Point.X, ditch3Point.Z, CharacteristicPointType.BottomDitchPolderSide); currentX += ditchHeight / atanaDitchSlope; var ditch4Point = new Geometry2DPoint(currentX, 0.0); surfaceLine.EnsurePointOfType(ditch4Point.X, ditch4Point.Z, CharacteristicPointType.DitchPolderSide); currentX += lHinterland; surfaceLine.EnsurePointOfType(currentX, 0.0, CharacteristicPointType.SurfaceLevelInside); return surfaceLine; } /// /// Create geoemtry 2D for test /// /// public static Geometry2DData CreateExampleGeometry2D() { using (SurfaceLine2 surfaceLine = CreateExampleSurfaceLine()) { var geometry2D = new Geometry2DData(); var boundaryLine = new Geometry2DBoundaryLine(); boundaryLine.Points.Add(new Geometry2DPoint(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelOutside).X, -18.0)); boundaryLine.Points.Add(new Geometry2DPoint(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X, -18.0)); geometry2D.AddLayer(new Geometry2DLayer() { boundaryLine = boundaryLine, soilName = "aquifermaterial" }); boundaryLine = new Geometry2DBoundaryLine(); boundaryLine.Points.Add(new Geometry2DPoint(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelOutside).X, -8.0)); boundaryLine.Points.Add(new Geometry2DPoint(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X, -8.0)); geometry2D.AddLayer(new Geometry2DLayer() { boundaryLine = boundaryLine, soilName = "aquifermaterial" }); boundaryLine = new Geometry2DBoundaryLine(); boundaryLine.Points.Add(new Geometry2DPoint(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelOutside).X, -7.0)); boundaryLine.Points.Add(new Geometry2DPoint(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X, -7.0)); geometry2D.AddLayer(new Geometry2DLayer() { boundaryLine = boundaryLine, soilName = "covermaterial" }); boundaryLine = new Geometry2DBoundaryLine(); boundaryLine.Points.Add(new Geometry2DPoint(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelOutside).X, -2.0)); boundaryLine.Points.Add(new Geometry2DPoint(surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside).X, -2.0)); geometry2D.AddLayer(new Geometry2DLayer() { boundaryLine = boundaryLine, soilName = "covermaterial" }); var ditchBoundaryLine = new Geometry2DBoundaryLine(); GeometryPoint point = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelOutside); ditchBoundaryLine.Points.Add(new Geometry2DPoint(point.X, point.Z)); point = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchDikeSide); ditchBoundaryLine.Points.Add(new Geometry2DPoint(point.X, point.Z)); point = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchDikeSide); ditchBoundaryLine.Points.Add(new Geometry2DPoint(point.X, point.Z)); point = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.BottomDitchPolderSide); ditchBoundaryLine.Points.Add(new Geometry2DPoint(point.X, point.Z)); point = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DitchPolderSide); ditchBoundaryLine.Points.Add(new Geometry2DPoint(point.X, point.Z)); point = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.SurfaceLevelInside); ditchBoundaryLine.Points.Add(new Geometry2DPoint(point.X, point.Z)); geometry2D.AddLayer(new Geometry2DLayer() { boundaryLine = ditchBoundaryLine, soilName = "covermaterial" }); var surfaceBoundaryLine = new Geometry2DBoundaryLine(); foreach (var surfaceLinePoint in surfaceLine.Geometry.Points) { surfaceBoundaryLine.Points.Add(new Geometry2DPoint(surfaceLinePoint.X, surfaceLinePoint.Z)); } geometry2D.AddLayer(new Geometry2DLayer() { boundaryLine = surfaceBoundaryLine, soilName = "dikematerial" }); return geometry2D; } } } }