Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/UpliftHelper.cs =================================================================== diff -u -r1965 -r2049 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/UpliftHelper.cs (.../UpliftHelper.cs) (revision 1965) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/UpliftHelper.cs (.../UpliftHelper.cs) (revision 2049) @@ -32,37 +32,66 @@ /// public class UpliftHelper { + /// + /// Determines the stability uplift situation. + /// + /// The dam kernel input. + /// if set to true [use rivel level low]. + /// The uplift situation public static UpliftSituation DetermineStabilityUplift(DamKernelInput damKernelInput, bool useRivelLevelLow) { - var location = damKernelInput.Location; - var upliftCriterion = damKernelInput.Location.ModelFactors.UpliftCriterionStability; + UpliftSituation upliftSituation; + var plLines = DeterminePlLinesForStability(damKernelInput, useRivelLevelLow, out upliftSituation); + upliftSituation.IsUplift = DetermineIsUplift(plLines, damKernelInput.Location, damKernelInput.SubSoilScenario); + return upliftSituation; + } + + /// + /// Determines the pl lines for stability. + /// + /// The dam kernel input. + /// if set to true [use rivel level low]. + /// The uplift situation. + /// pl lines + public static PlLines DeterminePlLinesForStability(DamKernelInput damKernelInput, bool useRivelLevelLow, + out UpliftSituation upliftSituation) + { var riverLevel = damKernelInput.RiverLevelHigh; double? riverLevelLow = null; if (useRivelLevelLow) { riverLevelLow = damKernelInput.RiverLevelLow; } - UpliftSituation upliftSituation; SensorPlLineCreatorSettings sensorPlLineCreatorSettings = new SensorPlLineCreatorSettings(); - sensorPlLineCreatorSettings.SensorLocation = location.SensorLocation; + sensorPlLineCreatorSettings.SensorLocation = damKernelInput.Location.SensorLocation; sensorPlLineCreatorSettings.DateTime = damKernelInput.TimeStepDateTime; - var plLines = PlLinesHelper.CreatePlLinesForStability(location, damKernelInput.SubSoilScenario, riverLevel, + var plLines = PlLinesHelper.CreatePlLinesForStability(damKernelInput.Location, damKernelInput.SubSoilScenario, riverLevel, riverLevelLow, damKernelInput.DamFailureMechanismeCalculationSpecification.AssessmentScenarioJobSettings, sensorPlLineCreatorSettings, out upliftSituation); + return plLines; + } + + /// + /// Determines if there is uplift. + /// + /// The pl lines. + /// The location. + /// The sub soil scenario. + /// true if there is uplift + public static bool DetermineIsUplift(PlLines plLines, Location location, SoilGeometryProbability subSoilScenario) + { + var isUplift = false; + var upliftCriterion = location.ModelFactors.UpliftCriterionStability; if (plLines != null) { var surfaceLineWithNewHeight = location.SurfaceLine; double? upliftFactor = GetLowestUpliftFactor(surfaceLineWithNewHeight, - damKernelInput.SubSoilScenario.SoilProfile1D, damKernelInput.SubSoilScenario.FullStiFileName, - damKernelInput.SubSoilScenario.SoilProfile2D, plLines, location); - upliftSituation.IsUplift = (upliftFactor < upliftCriterion); + subSoilScenario.SoilProfile1D, subSoilScenario.FullStiFileName, + subSoilScenario.SoilProfile2D, plLines, location); + isUplift = (upliftFactor < upliftCriterion); } - else - { - upliftSituation.IsUplift = false; - } - return upliftSituation; + return isUplift; } private static double? GetLowestUpliftFactor(SurfaceLine2 surfaceLine, SoilProfile1D soilProfile1D, string soilGeometry2DName,