Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/LayerDetector.cs
===================================================================
diff -u -r3522 -r3790
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/LayerDetector.cs (.../LayerDetector.cs) (revision 3522)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/LayerDetector.cs (.../LayerDetector.cs) (revision 3790)
@@ -19,7 +19,9 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System;
using System.Collections.Generic;
+using System.Linq;
using Deltares.DamEngine.Data.Geometry;
using Deltares.DamEngine.Data.Standard;
@@ -87,12 +89,40 @@
DeleteDuplicateCurve();
}
+ private void FillCurveListBasedOnPoints(GeometryLoop loop)
+ {
+ var tel = 0;
+ GeometryCurve curve = new GeometryCurve();
+ foreach (var loopCalcPoint in loop.CalcPoints)
+ {
+ if (tel == 0) //(tel % 2 == 0)
+ {
+ curve.HeadPoint = loopCalcPoint;
+ }
+ else
+ {
+ curve.EndPoint = loopCalcPoint;
+ loop.CurveList.Add(curve);
+ curve = new GeometryCurve();
+ curve.HeadPoint = loopCalcPoint;
+ }
+ tel++;
+ }
+ //curve = new GeometryCurve(loop.CurveList.Last().EndPoint, loop.CurveList.First().HeadPoint);
+ curve.EndPoint = loop.CurveList.First().HeadPoint;
+ loop.CurveList.Add(curve);
+ }
+
private void GetIntersectionPointList()
{
foreach (var surface in soilSurfaces)
{
if (intersectionSurfacesList.Contains(surface) == false)
{
+ if (surface.GeometrySurface.OuterLoop.CurveList.Count == 0)
+ {
+ FillCurveListBasedOnPoints(surface.GeometrySurface.OuterLoop);
+ }
foreach (var curve in surface.GeometrySurface.OuterLoop.CurveList)
{
FindIntersections(curve.HeadPoint, curve.EndPoint, surface);
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs
===================================================================
diff -u -r3782 -r3790
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3782)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3790)
@@ -763,8 +763,6 @@
// In the following prepareDesign calls just return the stored embankmentDesignParameters
embankmentDesignParameters = FailureMechanismParametersMStab.EmbankmentDesignParameters;
}
-
- throw new MacroStabilityException(Resources.MacroStabilityKernelWrapper_PrepareForMacroStabilityDidNotSucceed);
}
///
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2D.cs
===================================================================
diff -u -r3522 -r3790
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2D.cs (.../SoilProfile2D.cs) (revision 3522)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2D.cs (.../SoilProfile2D.cs) (revision 3790)
@@ -21,6 +21,7 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using Deltares.DamEngine.Data.Geometry;
using Deltares.DamEngine.Data.Standard.Language;
using Deltares.DamEngine.Data.Standard.Validation;
@@ -84,7 +85,44 @@
public virtual SoilProfile1D GetSoilProfile1D(double x)
{
const double diff = 0.001;
-
+ if (Geometry.Surfaces.Count == 0)
+ {
+
+ foreach (var soilLayer2D in Surfaces)
+ {
+ var loop = new GeometryLoop();
+ var tel = 0;
+ GeometryCurve curve = new GeometryCurve();
+ foreach (var outerLoopCalcPoint in soilLayer2D.GeometrySurface.OuterLoop.CalcPoints)
+ {
+ Geometry.Points.Add(outerLoopCalcPoint);
+ loop.CalcPoints.Add(outerLoopCalcPoint);
+ Geometry.Surfaces.Add(soilLayer2D.GeometrySurface);
+ if (tel == 0)
+ {
+ curve.HeadPoint = outerLoopCalcPoint;
+ }
+ else
+ {
+ curve.EndPoint = outerLoopCalcPoint;
+ loop.CurveList.Add(curve);
+ curve = new GeometryCurve();
+ curve.HeadPoint = outerLoopCalcPoint;
+ }
+ tel++;
+ }
+ curve.EndPoint = loop.CurveList.First().HeadPoint;
+ Geometry.Curves.Add(curve);
+ loop.CurveList.Add(curve);
+ Geometry.Loops.Add(loop);
+ var surface = new GeometrySurface();
+ surface.OuterLoop = loop;
+ Geometry.Surfaces.Add(surface);
+ }
+
+ Geometry.Right = Geometry.MaxGeometryPointsX;
+ Geometry.Left = Geometry.MinGeometryPointsX;
+ }
var soilProfile = new SoilProfile1D
{
Name = "Generated at x = " + x + " from " + Name
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorShoulderPerPoint.cs
===================================================================
diff -u -r3522 -r3790
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorShoulderPerPoint.cs (.../DesignCalculatorShoulderPerPoint.cs) (revision 3522)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorShoulderPerPoint.cs (.../DesignCalculatorShoulderPerPoint.cs) (revision 3790)
@@ -65,7 +65,7 @@
var designResults = new List();
var location = damKernelInput.Location;
var subSoilScenario = damKernelInput.SubSoilScenario;
- var surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName);
+ var surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D);
damKernelInput.Location.SurfaceLine = surfaceLine;
try
{
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorCombinedSlopeAndShoulderAdaption.cs
===================================================================
diff -u -r3522 -r3790
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorCombinedSlopeAndShoulderAdaption.cs (.../DesignCalculatorCombinedSlopeAndShoulderAdaption.cs) (revision 3522)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorCombinedSlopeAndShoulderAdaption.cs (.../DesignCalculatorCombinedSlopeAndShoulderAdaption.cs) (revision 3790)
@@ -72,7 +72,7 @@
// Prepare the kernel for design
kernelWrapper.PrepareDesign(kernelDataInput, kernelDataOutput, damKernelInput, iterationIndex, out embankmentDesignParameters);
- SurfaceLine2 surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName).FullDeepClone();
+ SurfaceLine2 surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D).FullDeepClone();
try
{
iterationIndex = 1;
@@ -89,7 +89,7 @@
if (!isRedesignRequired && surfaceLine != null)
{
// Set redesigned surfaceline to original, so in case no redesign is needed, the original surfaceline will be returned
- designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, surfaceLine);
+ designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, surfaceLine);
}
else
{
@@ -123,7 +123,7 @@
throw new SurfaceLineException(validationError.Text);
}
- designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, surfaceLine);
+ designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, surfaceLine);
}
else if (designAdvise == DesignAdvise.SlopeInwards)
{
@@ -136,7 +136,7 @@
{
throw new SurfaceLineException(validationError.Text);
}
- designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, surfaceLine);
+ designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, surfaceLine);
}
else
{
@@ -147,14 +147,24 @@
designScenario.Location.AlignBoundaryPointsOfPl1LineWithAdaptedSurfaceLine(surfaceLine);
damKernelInput.Location.SurfaceLine = surfaceLine;
kernelWrapper.PrepareDesign(kernelDataInput, kernelDataOutput, damKernelInput, iterationIndex, out embankmentDesignParameters);
- DesignCalculatorUtils.KernelCalculate(out kernelDataInput, kernelWrapper, out kernelDataOutput, damKernelInput, iterationIndex, out locationCalculationMessages);
+ if (damKernelInput.SubSoilScenario.SoilProfileType == SoilProfileType.ProfileType2D)
+ {
+ var embankmentSoil =
+ damKernelInput.Location.SoilList.GetSoilByName(embankmentDesignParameters
+ .EmbankmentMaterialname);
+ damKernelInput.SubSoilScenario.SoilProfile2D =
+ AdaptProfile2DToNewSurfaceLine(damKernelInput.SubSoilScenario.SoilProfile2D, surfaceLine, embankmentSoil);
+ }
+ DesignCalculatorUtils.KernelCalculate(out kernelDataInput, kernelWrapper, out kernelDataOutput, damKernelInput,
+ iterationIndex, out locationCalculationMessages);
calculationMessages.AddRange(locationCalculationMessages);
- isRedesignRequired = !kernelWrapper.EvaluateDesign(damKernelInput, kernelDataInput, kernelDataOutput, out designAdvise, out evaluationMessage);
+ isRedesignRequired = !kernelWrapper.EvaluateDesign(damKernelInput, kernelDataInput, kernelDataOutput, out designAdvise,
+ out evaluationMessage);
}
}
calculationMessages.AddRange(locationCalculationMessages);
designScenario.CalculationResult = CalculationResult.Succeeded;
- designScenario.SetResultMessage(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, "Succes");
+ designScenario.SetResultMessage(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, "Succes");
kernelWrapper.PostProcess(damKernelInput, kernelDataOutput, designScenario, resultMessage, out designResults);
designCalculations.AddRange(designResults);
}
@@ -167,14 +177,40 @@
errorMessage = errorMessage + ";" + innerException.Message;
innerException = innerException.InnerException;
}
- designScenario.SetResultMessage(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, errorMessage);
+ designScenario.SetResultMessage(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, errorMessage);
designScenario.CalculationResult = CalculationResult.RunFailed;
// Redesign not succesful, so no redesigned surfaceline will be returned
- designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, null);
+ designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, null);
kernelWrapper.PostProcess(damKernelInput, kernelDataOutput, designScenario, errorMessage, out designResults);
designCalculations.AddRange(designResults);
throw new DesignCalculatorException(Resources.DesignUnsuccessful + " " + errorMessage);
}
}
+
+ private static SoilProfile2D AdaptProfile2DToNewSurfaceLine(SoilProfile2D soilProfile2D, SurfaceLine2 surfaceLine, Soil dikeEmbankmentSoil)
+ {
+ var topX = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).X;
+ var soilProfile1D = soilProfile2D.GetSoilProfile1D(topX);
+ var soilSurfaceProfile = new SoilSurfaceProfile
+ {
+ SoilProfile = soilProfile1D,
+ SurfaceLine2 = surfaceLine,
+ Name = soilProfile2D.Name,
+ DikeEmbankmentMaterial = dikeEmbankmentSoil
+ };
+ // Convert the soilSurfaceProfile to a SoilProfile2D to be able to edit it properly.
+ var soilProfile2DNew = soilSurfaceProfile.ConvertToSoilProfile2D();
+ var numberOfCommonSurface = Math.Min(soilProfile2DNew.Surfaces.Count, soilProfile2D.Surfaces.Count);
+ for (int i = 0; i < numberOfCommonSurface; i++)
+ {
+ soilProfile2DNew.Surfaces[i].WaterpressureInterpolationModel =
+ soilProfile2D.Surfaces[i].WaterpressureInterpolationModel;
+ }
+ for (int i = numberOfCommonSurface; i < soilProfile2DNew.Surfaces.Count; i++)
+ {
+ soilProfile2DNew.Surfaces[i].WaterpressureInterpolationModel = WaterpressureInterpolationModel.Automatic;
+ }
+ return soilProfile2DNew;
+ }
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.cs
===================================================================
diff -u -r3522 -r3790
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.cs (.../DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.cs) (revision 3522)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.cs (.../DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.cs) (revision 3790)
@@ -71,7 +71,7 @@
// Prepare the kernel for design
kernelWrapper.PrepareDesign(kernelDataInput, kernelDataOutput, damKernelInput, iterationIndex, out embankmentDesignParameters);
- SurfaceLine2 surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName).FullDeepClone();
+ SurfaceLine2 surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D).FullDeepClone();
try
{
@@ -87,7 +87,7 @@
if (!isRedesignRequired && surfaceLine != null)
{
// Set redesigned surfaceline to original, so in case no redesign is needed, the original surfaceline will be returned
- designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, surfaceLine);
+ designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, surfaceLine);
}
else
{
@@ -126,7 +126,7 @@
throw new SurfaceLineException(validationError.Text);
}
designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D,
- subSoilScenario.StiFileName, surfaceLine);
+ subSoilScenario.SoilProfile2D, surfaceLine);
// Recalculate new surfaceline
location.AlignBoundaryPointsOfPl1LineWithAdaptedSurfaceLine(surfaceLine);
@@ -164,7 +164,7 @@
{
throw new SurfaceLineException(validationError.Text);
}
- designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, surfaceLine);
+ designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, surfaceLine);
// Recalculate new surfaceline
designScenario.Location.AlignBoundaryPointsOfPl1LineWithAdaptedSurfaceLine(surfaceLine);
@@ -175,7 +175,7 @@
isRedesignRequired = !kernelWrapper.EvaluateDesign(damKernelInput, kernelDataInput, kernelDataOutput, out designAdvise, out evaluationMessage);
}
}
- designScenario.SetResultMessage(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, "Succes");
+ designScenario.SetResultMessage(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, "Succes");
designScenario.CalculationResult = CalculationResult.Succeeded;
kernelWrapper.PostProcess(damKernelInput, kernelDataOutput, designScenario, resultMessage, out designResults);
designCalculations.AddRange(designResults);
@@ -189,10 +189,10 @@
errorMessage = errorMessage + ";" + innerException.Message;
innerException = innerException.InnerException;
}
- designScenario.SetResultMessage(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, errorMessage);
+ designScenario.SetResultMessage(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, errorMessage);
designScenario.CalculationResult = CalculationResult.RunFailed;
// Redesign not succesful, so no redesigned surfaceline will be returned
- designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.StiFileName, null);
+ designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, null);
kernelWrapper.PostProcess(damKernelInput, kernelDataOutput, designScenario, errorMessage, out designResults);
designCalculations.AddRange(designResults);
throw new DesignCalculatorException(Resources.DesignUnsuccessful + " " + errorMessage);
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs
===================================================================
diff -u -r3656 -r3790
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs (.../DesignCalculator.cs) (revision 3656)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs (.../DesignCalculator.cs) (revision 3790)
@@ -195,7 +195,7 @@
designScenario.DikeTableHeight ??
location.SurfaceLine.GetDefaultDikeTableHeight() ?? 0);
designScenario.SetRedesignedSurfaceLine(damKernelInput.SubSoilScenario.SoilProfile1D,
- damKernelInput.SubSoilScenario.StiFileName, adaptedSurfaceLine);
+ damKernelInput.SubSoilScenario.SoilProfile2D, adaptedSurfaceLine);
damKernelInput.Location.SurfaceLine = adaptedSurfaceLine;
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Design/DesignScenario.cs
===================================================================
diff -u -r3522 -r3790
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Design/DesignScenario.cs (.../DesignScenario.cs) (revision 3522)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Design/DesignScenario.cs (.../DesignScenario.cs) (revision 3790)
@@ -522,11 +522,11 @@
/// Get Result Message
///
///
- ///
+ ///
///
- public string GetResultMessage(SoilProfile1D soilProfile, string soilGeometry2DName)
+ public string GetResultMessage(SoilProfile1D soilProfile, SoilProfile2D soilProfile2D)
{
- Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName);
+ Object objectAsKey = GetObjectAsKey(soilProfile, soilProfile2D);
return GetResultMessage(objectAsKey);
}
@@ -544,11 +544,11 @@
/// Set Result Message
///
///
- ///
+ ///
///
- public void SetResultMessage(SoilProfile1D soilProfile, string soilGeometry2DName, string resultMessage)
+ public void SetResultMessage(SoilProfile1D soilProfile, SoilProfile2D soilProfile2D, string resultMessage)
{
- Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName);
+ Object objectAsKey = GetObjectAsKey(soilProfile, soilProfile2D);
SetResultMessage(objectAsKey, resultMessage);
}
@@ -566,11 +566,11 @@
/// Set Redesigned surfaceline
///
///
- ///
+ ///
///
- public void SetRedesignedSurfaceLine(SoilProfile1D soilProfile, string soilGeometry2DName, SurfaceLine2 surfaceLine)
+ public void SetRedesignedSurfaceLine(SoilProfile1D soilProfile, SoilProfile2D soilProfile2D, SurfaceLine2 surfaceLine)
{
- Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName);
+ Object objectAsKey = GetObjectAsKey(soilProfile, soilProfile2D);
SetRedesignedSurfaceLine(objectAsKey, surfaceLine);
}
@@ -583,18 +583,18 @@
{
if (objectAsKey != null)
{
- return redesignedSurfaceLines.ContainsKey(objectAsKey) ? redesignedSurfaceLines[objectAsKey] ?? Location.SurfaceLine : Location.SurfaceLine;
+ //return redesignedSurfaceLines.ContainsKey(objectAsKey) ? redesignedSurfaceLines[objectAsKey] ?? Location.SurfaceLine : Location.SurfaceLine;
// For debugging: following code is the same as above, but better debuggable
- // SurfaceLine2 surfaceline = Location.SurfaceLine;
- // if (redesignedSurfaceLines.ContainsKey(objectAsKey))
- // {
- // var s = redesignedSurfaceLines[objectAsKey];
- // if (s != null)
- // {
- // surfaceline = s;
- // }
- // }
- // return surfaceline;
+ SurfaceLine2 surfaceline = Location.SurfaceLine;
+ if (redesignedSurfaceLines.ContainsKey(objectAsKey))
+ {
+ var s = redesignedSurfaceLines[objectAsKey];
+ if (s != null)
+ {
+ surfaceline = s;
+ }
+ }
+ return surfaceline;
}
return null;
}
@@ -603,12 +603,12 @@
/// Get Most recent surfaceline
///
///
- ///
+ ///
///
- public SurfaceLine2 GetMostRecentSurfaceLine(SoilProfile soilProfile, string soilGeometry2DName)
+ public SurfaceLine2 GetMostRecentSurfaceLine(SoilProfile soilProfile, SoilProfile2D soilProfile2D)
{
var profile1D = soilProfile as SoilProfile1D;
- Object objectAsKey = GetObjectAsKey(profile1D, soilGeometry2DName);
+ Object objectAsKey = GetObjectAsKey(profile1D, soilProfile2D);
return GetMostRecentSurfaceLine(objectAsKey);
}
@@ -617,15 +617,15 @@
///
///
///
- ///
+ ///
///
- private Object GetObjectAsKey(SoilProfile1D soilProfile, string soilGeometry2DName)
+ private Object GetObjectAsKey(SoilProfile1D soilProfile, SoilProfile2D soilProfile2D)
{
if (soilProfile != null)
{
return soilProfile;
}
- return soilGeometry2DName;
+ return soilProfile2D;
}
///