Esempio n. 1
0
        public void DetailedAssessmentDirectFailureMechanismsFromProbabilityWithNValueReturnsCorrectResult(double probability, double nValue, FailureMechanismSectionCategoryGroup expectedCategoryGroup, double expectedProbabilityWithoutNMultiplication)
        {
            var categories = new[]
            {
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.Iv, (Probability)0, (Probability)0.1),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IIv, (Probability)0.1, (Probability)0.2),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IIIv, (Probability)0.2, (Probability)0.3),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IVv, (Probability)0.3, (Probability)0.4),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.Vv, (Probability)0.4, (Probability)0.5),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.VIv, (Probability)0.5, (Probability)1),
            };

            var input             = new DetailedCalculationInputFromProbabilityWithLengthEffect((Probability)probability, categories, nValue);
            var calculationOutput = new FailureMechanismSectionAssemblyCalculator().DetailedAssessmentDirectFailureMechanisms(input);

            Assert.IsNotNull(calculationOutput);
            var expectedProbability = expectedProbabilityWithoutNMultiplication * nValue;

            if (expectedProbability > 1)
            {
                Assert.AreEqual(1, calculationOutput.WarningMessages.Length);
                Assert.AreEqual(WarningMessage.CorrectedProbability, calculationOutput.WarningMessages[0]);
            }
            else
            {
                Assert.IsEmpty(calculationOutput.WarningMessages);
            }

            Assert.IsNotNull(calculationOutput.Result);
            Assert.AreEqual(expectedCategoryGroup, calculationOutput.Result.CategoryGroup);
            Assert.AreEqual(Math.Min(1, expectedProbability), calculationOutput.Result.EstimatedProbabilityOfFailure);
        }
        public CalculationOutput <FailureMechanismSectionAssemblyCategoryResult> DetailedAssessmentDirectFailureMechanisms(DetailedCalculationInputFromProbabilityWithLengthEffect input)
        {
            if (input == null)
            {
                throw new AssemblyToolKernelException(ErrorCode.InputIsNull);
            }

            if (double.IsNaN(input.Probability))
            {
                return(new CalculationOutput <FailureMechanismSectionAssemblyCategoryResult>(new FailureMechanismSectionAssemblyCategoryResult(FailureMechanismSectionCategoryGroup.None, Probability.NaN)));
            }

            var warnings = new List <WarningMessage>();
            var result   = DetailedAssessmentDirectFailureMechanisms(new DetailedCalculationInputFromProbability(input.Probability, input.Categories));

            var adjustedProbability = (double)result.Result.EstimatedProbabilityOfFailure * input.NValue;

            if (adjustedProbability > 1.0)
            {
                warnings.Add(WarningMessage.CorrectedProbability);
            }
            var estimatedProbabilityOfFailure = (Probability)Math.Min(1.0, adjustedProbability);

            return(new CalculationOutput <FailureMechanismSectionAssemblyCategoryResult>(new FailureMechanismSectionAssemblyCategoryResult(result.Result.CategoryGroup, estimatedProbabilityOfFailure), warnings.ToArray()));
        }