Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/MStabXmlDoc.cs
===================================================================
diff -u -r711 -r715
--- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/MStabXmlDoc.cs (.../MStabXmlDoc.cs) (revision 711)
+++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/MStabXmlDoc.cs (.../MStabXmlDoc.cs) (revision 715)
@@ -3,12 +3,11 @@
using System.IO;
using System.Xml.Linq;
using Deltares.DamEngine.Calculators.General;
+using Deltares.DamEngine.Calculators.KernelWrappers.Common;
using Deltares.DamEngine.Calculators.KernelWrappers.DamMacroStability.Assemblers;
using Deltares.DamEngine.Calculators.Properties;
-using Deltares.DamEngine.Calculators.Stability;
-using Deltares.DamEngine.Data.Design;
using Deltares.DamEngine.Data.General;
-using Deltares.DamEngine.Data.General.PlLines;
+using Deltares.DamEngine.Data.Design;
using Deltares.DamEngine.Data.Geotechnics;
using Deltares.DamEngine.Data.Standard.Logging;
@@ -21,23 +20,24 @@
///
///
///
- ///
- ///
+ ///
///
///
///
///
///
///
///
- public static XDocument CreateMStabXmlDoc(string mstabProjectFilename, DesignScenario scenario, SoilProfile1D soilProfile,
- string soilGeometry2DName, double riverLevel,
+ public static XDocument CreateMStabXmlDoc(string mstabProjectFilename, DesignScenario scenario,
+ SoilGeometryProbability subSoilScenario, double riverLevel,
MStabDesignEmbankment mstabDesignEmbankment, SurfaceLine2 surfaceLine,
- double trafficLoad, double requiredSafetyFactor, out List errorMessages)
+ double? trafficLoad, double requiredSafetyFactor, out List errorMessages)
{
errorMessages = new List();
- SoilProfile1D profile1D = soilProfile;
+ var profile1D = subSoilScenario.SoilProfile1D;
+ var soilGeometry2DName = subSoilScenario.StiFileName;
+
ConsistencyCheck(scenario, profile1D, soilGeometry2DName);
FailureMechanismeParamatersMStab failureMechanismeParamatersMStab = new FailureMechanismeParamatersMStab();
@@ -72,8 +72,9 @@
-scenario.Location.XSoilGeometry2DOrigin;
failureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.PLLineAssignment =
CalculationHelper.PLLineCreationMethod2PLLineAssignment(scenario.Location.ModelParametersForPLLines.PLLineCreationMethod);
- failureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.IntrusionVerticalWaterPressureType =
- scenario.Location.IntrusionVerticalWaterPressure.Value;
+ if (scenario.Location.IntrusionVerticalWaterPressure != null)
+ failureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.IntrusionVerticalWaterPressureType =
+ scenario.Location.IntrusionVerticalWaterPressure.Value;
failureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.PenetrationLength =
scenario.Location.ModelParametersForPLLines.PenetrationLength;
@@ -86,7 +87,7 @@
failureMechanismeParamatersMStab.RiverLevel = riverLevel; // scenario.RiverLevel;
failureMechanismeParamatersMStab.DikeTableHeight =
scenario.DikeTableHeight ?? surfaceLine.GetDefaultDikeTableHeight() ?? 0;
- failureMechanismeParamatersMStab.TrafficLoad = trafficLoad;
+ if (trafficLoad != null) failureMechanismeParamatersMStab.TrafficLoad = trafficLoad.Value;
// Horizontal balance; TODO: Combine with code in StabilityCalculation
if (failureMechanismeParamatersMStab.MStabParameters.Model == MStabModelType.HorizontalBalance)
@@ -103,9 +104,7 @@
surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).X;
failureMechanismeParamatersMStab.MStabParameters.HorizontalBalanceArea.YTop = riverLevel;
failureMechanismeParamatersMStab.MStabParameters.HorizontalBalanceArea.YBottom =
- profile1D.InBetweenAquiferLayer != null
- ? profile1D.InBetweenAquiferLayer.TopLevel
- : profile1D.BottomAquiferLayer.TopLevel;
+ profile1D.InBetweenAquiferLayer?.TopLevel ?? profile1D.BottomAquiferLayer.TopLevel;
int planeCount =
(int)(Math.Round((failureMechanismeParamatersMStab.MStabParameters.HorizontalBalanceArea.YTop -
failureMechanismeParamatersMStab.MStabParameters.HorizontalBalanceArea.YBottom) / 0.25));
@@ -160,30 +159,39 @@
errorMessages.Add(logMessage);
}
- var currentSurfaceLine = scenario.GetMostRecentSurfaceLine(soilProfile, Path.GetFileName(soilGeometry2DName));
+ var currentSurfaceLine = scenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D, Path.GetFileName(soilGeometry2DName));
if (currentSurfaceLine == null)
{
currentSurfaceLine = surfaceLine;
}
- SoilProfileType soilProfileType = SoilProfileType.ProfileType1D;
- if (string.IsNullOrEmpty(soilGeometry2DName))
- {
- soilProfileType = SoilProfileType.ProfileTypeStiFile;
- }
-
var waterLevel = riverLevelHigh.Value;
- failureMechanismeParamatersMStab.PLLines = CalculationHelper.CreateAllPLLines(waterLevel,
- scenario.Location, soilGeometry2DName, soilProfileType);
+ UpliftSituation upliftSituation;
+ failureMechanismeParamatersMStab.PLLines = PlLinesHelper.CreatePlLinesForStability(
+ scenario.Location, subSoilScenario, waterLevel, soilGeometry2DName, out upliftSituation);
+ // // ToDo zant Move this CreateAllPLLines to CalculationHelper. riverLevelLow used for stability outwards only
+ // var calculator = new StabilityCalculator(failureMechanismeParamatersMStab,
+ // ProgramType.MStab,
+ // scenario.Location.ModelParametersForPLLines,
+ // scenario.Location.TrafficLoad,
+ // scenario.Location.MinimalCircleDepth,
+ // requiredSafetyFactor,
+ // "",
+ // null,
+ // scenario.Location.GaugePLLines,
+ // scenario.Location.Gauges,
+ // scenario.Location.SoilList);
+ // failureMechanismeParamatersMStab.PLLines = calculator.CreateAllPLLines(
+ // scenario.Location, surfaceLine, soilProfile, soilGeometry2DName, waterLevel, riverLevelLow);
+
// Slip circle definition for Uplift Van; TODO: Combine with code in StabilityCalculation
if (failureMechanismeParamatersMStab.MStabParameters.Model == MStabModelType.UpliftVan)
{
// Determine right side of slip plane grid (right grid)
// This is the location with the lowest uplift factor or, if present, the second NWO point
- var upliftLocationAndResult = CalculationHelper.GetLocationWithLowestUpliftFactor(currentSurfaceLine, soilProfile,
- soilGeometry2DName,
- failureMechanismeParamatersMStab.PLLines,
+ var upliftLocationAndResult = CalculationHelper.GetLocationWithLowestUpliftFactor(currentSurfaceLine,
+ subSoilScenario.SoilProfile1D, soilGeometry2DName, failureMechanismeParamatersMStab.PLLines,
scenario.Location);
double upliftCriterion =
scenario.GetUpliftCriterionStability(scenario.Location.ModelFactors.UpliftCriterionStability);