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);