Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreator.cs =================================================================== diff -u -r3047 -r3048 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreator.cs (.../UpliftVanGridCreator.cs) (revision 3047) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/UpliftVanGridCreator.cs (.../UpliftVanGridCreator.cs) (revision 3048) @@ -42,53 +42,61 @@ IsTangentLinesAutomatic = false }; - // Define specified active (left) grid - if (surfaceLine != null) + if (slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Specified) { - // Use middle of the dike for X-coordinate - var dikeTopAtRiverPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver); - var 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.BishopGridHorizontalPointCount - 1); - double gridHeight = slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance * - (slipCircleDefinition.UpliftVanRightGridVerticalPointCount - 1); - upliftVanCalculationGrid.LeftGridXLeft = gridXCoordinate; - upliftVanCalculationGrid.LeftGridXRight = gridXCoordinate + gridWidth; - upliftVanCalculationGrid.LeftGridXCount = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount; - upliftVanCalculationGrid.LeftGridZBottom = gridYCoordinate; - upliftVanCalculationGrid.LeftGridZTop = gridYCoordinate + gridHeight; - upliftVanCalculationGrid.LeftGridZCount = slipCircleDefinition.UpliftVanRightGridVerticalPointCount; - } + // Define specified active (left) grid + if (surfaceLine != null) + { + // Use middle of the dike for X-coordinate + var dikeTopAtRiverPoint = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver); + var 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.BishopGridHorizontalPointCount - 1); + double gridHeight = slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance * + (slipCircleDefinition.UpliftVanRightGridVerticalPointCount - 1); + upliftVanCalculationGrid.LeftGridXLeft = gridXCoordinate; + upliftVanCalculationGrid.LeftGridXRight = gridXCoordinate + gridWidth; + upliftVanCalculationGrid.LeftGridXCount = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount; + upliftVanCalculationGrid.LeftGridZBottom = gridYCoordinate; + upliftVanCalculationGrid.LeftGridZTop = gridYCoordinate + gridHeight; + upliftVanCalculationGrid.LeftGridZCount = slipCircleDefinition.UpliftVanRightGridVerticalPointCount; + } - // Define specified passive (right) grid - if (surfaceLine != null) - { - const double gridOffset = 0.2; - var dikeToeAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); + // Define specified passive (right) grid + if (surfaceLine != null) + { + const double gridOffset = 0.2; + var dikeToeAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder); - // X-coordinates settings of the grid - double gridWidth = slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance * - (slipCircleDefinition.UpliftVanRightGridHorizontalPointCount - 1); - // The grid starts at either last uplift point X-coordinate or dike toe at polder X-coordinate, whichever is largest - double gridXCoordinate = Math.Max(slipCircleDefinition.XCoordinateLastUpliftPoint - gridWidth, dikeToeAtPolder.X); - upliftVanCalculationGrid.RightGridXLeft = gridXCoordinate; - // The grid is limited to the right boundary of the surfaceline - double boundaryRight = surfaceLine.CharacteristicPoints.Geometry.GetGeometryBounds().Right; - upliftVanCalculationGrid.RightGridXRight = Math.Min(gridXCoordinate + gridWidth, boundaryRight); - upliftVanCalculationGrid.RightGridXCount = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount; + // X-coordinates settings of the grid + double gridWidth = slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance * + (slipCircleDefinition.UpliftVanRightGridHorizontalPointCount - 1); + // The grid starts at either last uplift point X-coordinate or dike toe at polder X-coordinate, whichever is largest + double gridXCoordinate = Math.Max(slipCircleDefinition.XCoordinateLastUpliftPoint - gridWidth, dikeToeAtPolder.X); + upliftVanCalculationGrid.RightGridXLeft = gridXCoordinate; + // The grid is limited to the right boundary of the surfaceline + double boundaryRight = surfaceLine.CharacteristicPoints.Geometry.GetGeometryBounds().Right; + upliftVanCalculationGrid.RightGridXRight = Math.Min(gridXCoordinate + gridWidth, boundaryRight); + upliftVanCalculationGrid.RightGridXCount = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount; - // 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; + // 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; + } + + // Tangent lines are defined in another method } + else + { + // code for slipCircleDefinition.GridSizeDetermination == GridSizeDetermination.Automatic + upliftVanCalculationGrid.IsGridsAutomatic = true; + } - // Tangent lines are defined in another method - return upliftVanCalculationGrid; } @@ -97,7 +105,7 @@ /// The slip circle definition. /// The soil profile1 d. /// The minimum circle depth. - public static void DetermineTangentLines(UpliftVanCalculationGrid upliftVanCalculationGrid, SlipCircleDefinition slipCircleDefinition, + public static void DetermineTangentLines(UpliftVanCalculationGrid upliftVanCalculationGrid, SlipCircleDefinition slipCircleDefinition, SoilProfile1D soilProfile1D, double minimumCircleDepth) { switch (slipCircleDefinition.UpliftVanTangentLinesDefinition) @@ -106,14 +114,14 @@ DetermineTangentLinesOnBoundaryLines(upliftVanCalculationGrid, soilProfile1D); break; case TangentLinesDefinition.Specified: - DetermineTangentLinesSpecified(upliftVanCalculationGrid, soilProfile1D, + DetermineTangentLinesSpecified(upliftVanCalculationGrid, soilProfile1D, slipCircleDefinition.UpliftVanTangentLinesDistance, minimumCircleDepth); break; } } - private static void DetermineTangentLinesOnBoundaryLines(UpliftVanCalculationGrid upliftVanCalculationGrid, + private static void DetermineTangentLinesOnBoundaryLines(UpliftVanCalculationGrid upliftVanCalculationGrid, SoilProfile1D soilProfile1D) { upliftVanCalculationGrid.IsTangentLinesAutomatic = false; @@ -125,7 +133,7 @@ } private static void DetermineTangentLinesSpecified(UpliftVanCalculationGrid upliftVanCalculationGrid, - SoilProfile1D soilProfile1D, double distance, double minimumCircleDepth) + SoilProfile1D soilProfile1D, double distance, double minimumCircleDepth) { if (!(distance > 0)) { Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs =================================================================== diff -u -r3042 -r3048 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs (.../FillMacroStabilityWrapperInputFromEngine.cs) (revision 3042) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs (.../FillMacroStabilityWrapperInputFromEngine.cs) (revision 3048) @@ -310,11 +310,19 @@ GridZBottom = damUpliftVanCalculationGrid.RightGridZBottom }; - // kernelSearchAreaConditions.AutoTangentLines = damUpliftVanCalculationGrid.IsTangentLinesAutomatic; - kernelUpliftVanCalculationGrid.TangentLines = GetTangentLines(damUpliftVanCalculationGrid.TangentLineZBottom, - damUpliftVanCalculationGrid.TangentLineZTop, - damUpliftVanCalculationGrid.TangentLineCount) - .ToArray(); + kernelSearchAreaConditions.AutoSearchArea = damUpliftVanCalculationGrid.IsGridsAutomatic; + kernelSearchAreaConditions.AutoTangentLines = damUpliftVanCalculationGrid.IsTangentLinesAutomatic; + if (kernelSearchAreaConditions.AutoTangentLines) + { + kernelSearchAreaConditions.TangentLineNumber = damUpliftVanCalculationGrid.TangentLineCount; + kernelSearchAreaConditions.TangentLineZTop = damUpliftVanCalculationGrid.TangentLineZTop; + kernelSearchAreaConditions.TangentLineZBottom = damUpliftVanCalculationGrid.TangentLineZBottom; + + } + else + { + kernelUpliftVanCalculationGrid.TangentLines = damUpliftVanCalculationGrid.TangentLineLevels.ToArray(); + } } private static IEnumerable GetTangentLines(double tangentLineZBottom, double tangentLineZTop, int nrOfTangentLines)