private static void AssertCalculatorInput(GeneralPipingInput generalInput, ProbabilisticPipingInput input, double sectionLength, PipingCalculationInput actualInput) { LogNormalDistribution effectiveThicknessCoverageLayer = DerivedPipingInput.GetEffectiveThicknessCoverageLayer(input, generalInput); LogNormalDistribution saturatedVolumicWeightOfCoverageLayer = DerivedPipingInput.GetSaturatedVolumicWeightOfCoverageLayer(input); VariationCoefficientLogNormalDistribution seepageLength = DerivedPipingInput.GetSeepageLength(input); LogNormalDistribution thicknessAquiferLayer = DerivedPipingInput.GetThicknessAquiferLayer(input); VariationCoefficientLogNormalDistribution darcyPermeability = DerivedPipingInput.GetDarcyPermeability(input); VariationCoefficientLogNormalDistribution diameterD70 = DerivedPipingInput.GetDiameterD70(input); var expectedInput = new PipingCalculationInput( 1300001, sectionLength, input.PhreaticLevelExit.Mean, input.PhreaticLevelExit.StandardDeviation, generalInput.WaterVolumetricWeight, effectiveThicknessCoverageLayer.Mean, effectiveThicknessCoverageLayer.StandardDeviation, saturatedVolumicWeightOfCoverageLayer.Mean, saturatedVolumicWeightOfCoverageLayer.StandardDeviation, saturatedVolumicWeightOfCoverageLayer.Shift, generalInput.UpliftModelFactor.Mean, generalInput.UpliftModelFactor.StandardDeviation, input.DampingFactorExit.Mean, input.DampingFactorExit.StandardDeviation, seepageLength.Mean, seepageLength.CoefficientOfVariation, thicknessAquiferLayer.Mean, thicknessAquiferLayer.StandardDeviation, generalInput.SandParticlesVolumicWeight, generalInput.SellmeijerModelFactor.Mean, generalInput.SellmeijerModelFactor.StandardDeviation, generalInput.BeddingAngle, generalInput.WhitesDragCoefficient, generalInput.WaterKinematicViscosity, darcyPermeability.Mean, darcyPermeability.CoefficientOfVariation, diameterD70.Mean, diameterD70.CoefficientOfVariation, generalInput.Gravity, generalInput.CriticalHeaveGradient.Mean, generalInput.CriticalHeaveGradient.StandardDeviation); HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); }
public void Constructor_WithoutCoverageLayerParameters_ExpectedValues() { // Setup const int hydraulicBoundaryLocationId = 1000; const double sectionLength = 1.1; const double phreaticLevelExitMean = 2.2; const double phreaticLevelExitStandardDeviation = 3.3; const double waterVolumetricWeight = 4.4; const double upliftModelFactorMean = 10.0; const double upliftModelFactorStandardDeviation = 11.1; const double dampingFactorExitMean = 12.2; const double dampingFactorExitStandardDeviation = 13.3; const double seepageLengthMean = 14.4; const double seepageLengthCoefficientOfVariation = 15.5; const double thicknessAquiferLayerMean = 16.6; const double thicknessAquiferLayerStandardDeviation = 17.7; const double sandParticlesVolumicWeight = 18.8; const double sellmeijerModelFactorMean = 19.9; const double sellmeijerModelFactorStandardDeviation = 20.0; const double beddingAngle = 21.1; const double whitesDragCoefficient = 22.2; const double waterKinematicViscosity = 23.3; const double darcyPermeabilityMean = 24.4; const double darcyPermeabilityCoefficientOfVariation = 25.5; const double diameter70Mean = 26.6; const double diameter70CoefficientOfVariation = 27.7; const double gravity = 28.8; const double criticalHeaveGradientMean = 29.9; const double criticalHeaveGradientStandardDeviation = 30.0; // Call var pipingCalculationInput = new PipingCalculationInput( hydraulicBoundaryLocationId, sectionLength, phreaticLevelExitMean, phreaticLevelExitStandardDeviation, waterVolumetricWeight, upliftModelFactorMean, upliftModelFactorStandardDeviation, dampingFactorExitMean, dampingFactorExitStandardDeviation, seepageLengthMean, seepageLengthCoefficientOfVariation, thicknessAquiferLayerMean, thicknessAquiferLayerStandardDeviation, sandParticlesVolumicWeight, sellmeijerModelFactorMean, sellmeijerModelFactorStandardDeviation, beddingAngle, whitesDragCoefficient, waterKinematicViscosity, darcyPermeabilityMean, darcyPermeabilityCoefficientOfVariation, diameter70Mean, diameter70CoefficientOfVariation, gravity, criticalHeaveGradientMean, criticalHeaveGradientStandardDeviation); // Assert Assert.IsInstanceOf <ExceedanceProbabilityCalculationInput>(pipingCalculationInput); Assert.AreEqual(1, pipingCalculationInput.CalculationTypeId); Assert.AreEqual(HydraRingFailureMechanismType.Piping, pipingCalculationInput.FailureMechanismType); Assert.AreEqual(58, pipingCalculationInput.VariableId); Assert.AreEqual(3014, pipingCalculationInput.FaultTreeModelId); Assert.AreEqual(hydraulicBoundaryLocationId, pipingCalculationInput.HydraulicBoundaryLocationId); HydraRingDataEqualityHelper.AreEqual(GetDefaultPipingVariables(false).ToArray(), pipingCalculationInput.Variables.ToArray()); Assert.IsNaN(pipingCalculationInput.Beta); HydraRingSection hydraRingSection = pipingCalculationInput.Section; Assert.AreEqual(1, hydraRingSection.SectionId); Assert.AreEqual(sectionLength, hydraRingSection.SectionLength); Assert.IsNaN(hydraRingSection.CrossSectionNormal); }
/// <summary> /// Performs a section specific calculation. /// </summary> /// <param name="calculation">The calculation containing the input for the section specific calculation.</param> /// <param name="generalInput">The general piping calculation input parameters.</param> /// <param name="sectionLength">The length of the section.</param> /// <param name="hydraulicBoundaryDatabaseFilePath">The path which points to the hydraulic boundary database file.</param> /// <param name="usePreprocessor">Indicator whether to use the preprocessor in the calculation.</param> /// <returns>A <see cref="PartialProbabilisticFaultTreePipingOutput"/>.</returns> /// <exception cref="HydraRingCalculationException">Thrown when an error occurs while performing the calculation.</exception> private IPartialProbabilisticPipingOutput CalculateSectionSpecific(ProbabilisticPipingCalculation calculation, GeneralPipingInput generalInput, double sectionLength, string hydraulicBoundaryDatabaseFilePath, bool usePreprocessor) { NotifyProgress(string.Format(Resources.ProbabilisticPipingCalculationService_Calculate_Executing_calculation_of_type_0, Resources.ProbabilisticPipingCalculationService_SectionSpecific), 2, numberOfCalculators); PipingCalculationInput sectionSpecificCalculationInput = CreateInput( calculation, generalInput, sectionLength, hydraulicBoundaryDatabaseFilePath, usePreprocessor); PerformCalculation(() => sectionSpecificCalculator.Calculate(sectionSpecificCalculationInput), () => sectionSpecificCalculator.LastErrorFileContent, () => sectionSpecificCalculator.OutputDirectory, calculation.Name, Resources.ProbabilisticPipingCalculationService_SectionSpecific); LogNormalDistribution thicknessCoverageLayer = DerivedPipingInput.GetThicknessCoverageLayer(calculation.InputParameters); GeneralResult <TopLevelFaultTreeIllustrationPoint> faultTreeGeneralResult = null; GeneralResult <TopLevelSubMechanismIllustrationPoint> subMechanismGeneralResult = null; if (calculation.InputParameters.ShouldSectionSpecificIllustrationPointsBeCalculated) { try { if (double.IsNaN(thicknessCoverageLayer.Mean)) { subMechanismGeneralResult = ConvertSubMechanismIllustrationPointsResult( sectionSpecificCalculator.IllustrationPointsResult, sectionSpecificCalculator.IllustrationPointsParserErrorMessage); } else { faultTreeGeneralResult = ConvertFaultTreeIllustrationPointsResult( sectionSpecificCalculator.IllustrationPointsResult, sectionSpecificCalculator.IllustrationPointsParserErrorMessage); } } catch (ArgumentException e) { log.WarnFormat(Resources.ProbabilisticPipingCalculationService_Calculate_Error_in_reading_illustrationPoints_for_CalculationName_0_CalculationType_1_with_ErrorMessage_2, calculation.Name, Resources.ProbabilisticPipingCalculationService_SectionSpecific, e.Message); } } return(double.IsNaN(thicknessCoverageLayer.Mean) ? (IPartialProbabilisticPipingOutput) new PartialProbabilisticSubMechanismPipingOutput( sectionSpecificCalculator.ExceedanceProbabilityBeta, subMechanismGeneralResult) : new PartialProbabilisticFaultTreePipingOutput( sectionSpecificCalculator.ExceedanceProbabilityBeta, faultTreeGeneralResult)); }
public void Calculate(PipingCalculationInput input) { Calculate(HydraRingUncertaintiesType.All, input); }
private static PipingCalculationInput CreateInput(ProbabilisticPipingCalculation calculation, GeneralPipingInput generalInput, double sectionLength, string hydraulicBoundaryDatabaseFilePath, bool usePreprocessor) { ProbabilisticPipingInput pipingInput = calculation.InputParameters; LogNormalDistribution thicknessCoverageLayer = DerivedPipingInput.GetThicknessCoverageLayer(pipingInput); VariationCoefficientLogNormalDistribution seepageLength = DerivedPipingInput.GetSeepageLength(pipingInput); LogNormalDistribution thicknessAquiferLayer = DerivedPipingInput.GetThicknessAquiferLayer(pipingInput); VariationCoefficientLogNormalDistribution darcyPermeability = DerivedPipingInput.GetDarcyPermeability(pipingInput); VariationCoefficientLogNormalDistribution diameterD70 = DerivedPipingInput.GetDiameterD70(pipingInput); PipingCalculationInput input; if (double.IsNaN(thicknessCoverageLayer.Mean)) { input = new PipingCalculationInput( pipingInput.HydraulicBoundaryLocation.Id, sectionLength, pipingInput.PhreaticLevelExit.Mean, pipingInput.PhreaticLevelExit.StandardDeviation, generalInput.WaterVolumetricWeight, generalInput.UpliftModelFactor.Mean, generalInput.UpliftModelFactor.StandardDeviation, pipingInput.DampingFactorExit.Mean, pipingInput.DampingFactorExit.StandardDeviation, seepageLength.Mean, seepageLength.CoefficientOfVariation, thicknessAquiferLayer.Mean, thicknessAquiferLayer.StandardDeviation, generalInput.SandParticlesVolumicWeight, generalInput.SellmeijerModelFactor.Mean, generalInput.SellmeijerModelFactor.StandardDeviation, generalInput.BeddingAngle, generalInput.WhitesDragCoefficient, generalInput.WaterKinematicViscosity, darcyPermeability.Mean, darcyPermeability.CoefficientOfVariation, diameterD70.Mean, diameterD70.CoefficientOfVariation, generalInput.Gravity, generalInput.CriticalHeaveGradient.Mean, generalInput.CriticalHeaveGradient.StandardDeviation); } else { LogNormalDistribution effectiveThicknessCoverageLayer = DerivedPipingInput.GetEffectiveThicknessCoverageLayer(pipingInput, generalInput); LogNormalDistribution saturatedVolumicWeightOfCoverageLayer = DerivedPipingInput.GetSaturatedVolumicWeightOfCoverageLayer(pipingInput); input = new PipingCalculationInput( pipingInput.HydraulicBoundaryLocation.Id, sectionLength, pipingInput.PhreaticLevelExit.Mean, pipingInput.PhreaticLevelExit.StandardDeviation, generalInput.WaterVolumetricWeight, effectiveThicknessCoverageLayer.Mean, effectiveThicknessCoverageLayer.StandardDeviation, saturatedVolumicWeightOfCoverageLayer.Mean, saturatedVolumicWeightOfCoverageLayer.StandardDeviation, saturatedVolumicWeightOfCoverageLayer.Shift, generalInput.UpliftModelFactor.Mean, generalInput.UpliftModelFactor.StandardDeviation, pipingInput.DampingFactorExit.Mean, pipingInput.DampingFactorExit.StandardDeviation, seepageLength.Mean, seepageLength.CoefficientOfVariation, thicknessAquiferLayer.Mean, thicknessAquiferLayer.StandardDeviation, generalInput.SandParticlesVolumicWeight, generalInput.SellmeijerModelFactor.Mean, generalInput.SellmeijerModelFactor.StandardDeviation, generalInput.BeddingAngle, generalInput.WhitesDragCoefficient, generalInput.WaterKinematicViscosity, darcyPermeability.Mean, darcyPermeability.CoefficientOfVariation, diameterD70.Mean, diameterD70.CoefficientOfVariation, generalInput.Gravity, generalInput.CriticalHeaveGradient.Mean, generalInput.CriticalHeaveGradient.StandardDeviation); } HydraRingSettingsDatabaseHelper.AssignSettingsFromDatabase(input, hydraulicBoundaryDatabaseFilePath, usePreprocessor); return(input); }