/// <summary> /// Calculates the Waternet with extreme circumstances based on the values /// of the <see cref="IMacroStabilityInwardsWaternetInput"/>. /// </summary> /// <param name="input">The input to get the values from.</param> /// <param name="generalInput">General calculation parameters that are the same across all calculations.</param> /// <param name="assessmentLevel">The assessment level to use.</param> /// <returns>A calculated <see cref="MacroStabilityInwardsWaternet"/>, /// or an empty <see cref="MacroStabilityInwardsWaternet"/> when the Waternet /// could not be calculated.</returns> /// <exception cref="ArgumentNullException">Thrown when any parameter is <c>null</c>.</exception> public static MacroStabilityInwardsWaternet CalculateExtreme(IMacroStabilityInwardsWaternetInput input, IGeneralMacroStabilityInwardsWaternetInput generalInput, RoundedDouble assessmentLevel) { if (input == null) { throw new ArgumentNullException(nameof(input)); } if (generalInput == null) { throw new ArgumentNullException(nameof(generalInput)); } IWaternetCalculator calculator = MacroStabilityInwardsCalculatorFactory.Instance .CreateWaternetExtremeCalculator( CreateExtremeCalculatorInput(input, generalInput, assessmentLevel), MacroStabilityInwardsKernelWrapperFactory.Instance); try { WaternetCalculatorResult result = calculator.Calculate(); return(MacroStabilityInwardsWaternetConverter.Convert(result)); } catch (WaternetCalculatorException) { return(new MacroStabilityInwardsWaternet(new MacroStabilityInwardsPhreaticLine[0], new MacroStabilityInwardsWaternetLine[0])); } }
/// <summary> /// Validates the Waternet with daily circumstances based on the values /// of the <see cref="IMacroStabilityInwardsWaternetInput"/>. /// </summary> /// <param name="input">The input to get the values from.</param> /// <param name="generalInput">General calculation parameters that are the same across all calculations.</param> /// <returns>The validation issues found, if any.</returns> /// <exception cref="ArgumentNullException">Thrown when any parameter is <c>null</c>.</exception> /// <exception cref="WaternetCalculationException">Thrown when an error occurs /// during the validation.</exception> public static IEnumerable <MacroStabilityInwardsKernelMessage> ValidateDaily(IMacroStabilityInwardsWaternetInput input, IGeneralMacroStabilityInwardsWaternetInput generalInput) { if (input == null) { throw new ArgumentNullException(nameof(input)); } if (generalInput == null) { throw new ArgumentNullException(nameof(generalInput)); } IWaternetCalculator calculator = MacroStabilityInwardsCalculatorFactory.Instance .CreateWaternetDailyCalculator( CreateDailyCalculatorInput(input, generalInput), MacroStabilityInwardsKernelWrapperFactory.Instance); try { return(calculator.Validate().ToArray()); } catch (WaternetCalculatorException e) { throw new WaternetCalculationException(e.Message, e); } }
private static WaternetCalculatorInput.ConstructionProperties CreateCalculatorInputConstructionProperties(IMacroStabilityInwardsWaternetInput input, IGeneralMacroStabilityInwardsWaternetInput generalInput) { return(new WaternetCalculatorInput.ConstructionProperties { SurfaceLine = input.SurfaceLine, SoilProfile = SoilProfileConverter.Convert(input.SoilProfileUnderSurfaceLine), DrainageConstruction = DrainageConstructionConverter.Convert(input), DikeSoilScenario = input.DikeSoilScenario, WaterLevelRiverAverage = input.WaterLevelRiverAverage, MinimumLevelPhreaticLineAtDikeTopRiver = input.MinimumLevelPhreaticLineAtDikeTopRiver, MinimumLevelPhreaticLineAtDikeTopPolder = input.MinimumLevelPhreaticLineAtDikeTopPolder, LeakageLengthOutwardsPhreaticLine3 = input.LeakageLengthOutwardsPhreaticLine3, LeakageLengthInwardsPhreaticLine3 = input.LeakageLengthInwardsPhreaticLine3, LeakageLengthOutwardsPhreaticLine4 = input.LeakageLengthOutwardsPhreaticLine4, LeakageLengthInwardsPhreaticLine4 = input.LeakageLengthInwardsPhreaticLine4, PiezometricHeadPhreaticLine2Outwards = input.PiezometricHeadPhreaticLine2Outwards, PiezometricHeadPhreaticLine2Inwards = input.PiezometricHeadPhreaticLine2Inwards, AdjustPhreaticLine3And4ForUplift = input.AdjustPhreaticLine3And4ForUplift, WaterVolumetricWeight = generalInput.WaterVolumetricWeight }); }
private static WaternetCalculatorInput CreateExtremeCalculatorInput(IMacroStabilityInwardsWaternetInput input, IGeneralMacroStabilityInwardsWaternetInput generalInput, RoundedDouble assessmentLevel) { WaternetCalculatorInput.ConstructionProperties properties = CreateCalculatorInputConstructionProperties(input, generalInput); properties.PhreaticLineOffsets = PhreaticLineOffsetsConverter.Convert(input.LocationInputExtreme); properties.AssessmentLevel = assessmentLevel; properties.WaterLevelPolder = input.LocationInputExtreme.WaterLevelPolder; properties.PenetrationLength = input.LocationInputExtreme.PenetrationLength; return(new WaternetCalculatorInput(properties)); }
private static WaternetCalculatorInput CreateDailyCalculatorInput(IMacroStabilityInwardsWaternetInput input, IGeneralMacroStabilityInwardsWaternetInput generalInput) { WaternetCalculatorInput.ConstructionProperties properties = CreateCalculatorInputConstructionProperties(input, generalInput); properties.PhreaticLineOffsets = PhreaticLineOffsetsConverter.Convert(input.LocationInputDaily); properties.AssessmentLevel = input.WaterLevelRiverAverage; properties.WaterLevelPolder = input.LocationInputDaily.WaterLevelPolder; properties.PenetrationLength = input.LocationInputDaily.PenetrationLength; return(new WaternetCalculatorInput(properties)); }