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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 4
0
 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);
        }