Ejemplo n.º 1
0
        public void ConstructorPassesAllPropertiesCorrectly(double nValue)
        {
            var probabilityDistributionFactor = 0.4;
            var signalingStandard             = (Probability)0.123;
            var lowerBoundaryStandard         = (Probability)0.456;

            var input = new CalculateFailureMechanismSectionCategoriesInput(signalingStandard, lowerBoundaryStandard, probabilityDistributionFactor, nValue);

            Assert.AreEqual(signalingStandard, input.SignalingStandard);
            Assert.AreEqual(lowerBoundaryStandard, input.LowerBoundaryStandard);
            Assert.AreEqual(probabilityDistributionFactor, input.ProbabilityDistributionFactor);
            Assert.AreEqual(nValue, input.NValue);
        }
        public void CalculateGeotechnicFailureMechanismSectionCategoriesWithHighNTest()
        {
            var signalingStandard             = new Probability(1 / 3000.0);
            var lowerBoundaryStandard         = new Probability(1 / 1000.0);
            var probabilityDistributionFactor = 0.5;
            var nValue            = 2.5;
            var input             = new CalculateFailureMechanismSectionCategoriesInput(signalingStandard, lowerBoundaryStandard, probabilityDistributionFactor, nValue);
            var calculationResult = new CategoriesCalculator().CalculateGeotechnicFailureMechanismSectionCategories(input);

            Assert.IsNotNull(calculationResult.Result);
            Assert.IsNotNull(calculationResult.WarningMessages);

            Assert.AreEqual(1, calculationResult.WarningMessages.Length);
            Assert.AreEqual(WarningMessage.CorrectedSectionSpecificNValue, calculationResult.WarningMessages[0]);

            var result = calculationResult.Result;
            var signalingStandardOnSection = signalingStandard;
            var lowerBoundaryOnSection     = lowerBoundaryStandard;

            Assert.AreEqual(6, result.Length);
            var firstCategory = result[0];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.Iv, firstCategory.CategoryGroup);
            Assert.AreEqual(0, firstCategory.LowerBoundary, 1e-8);
            Assert.AreEqual(1 / 30.0 * signalingStandardOnSection, firstCategory.UpperBoundary, 1e-8);
            var category2 = result[1];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.IIv, category2.CategoryGroup);
            Assert.AreEqual(1 / 30.0 * signalingStandardOnSection, category2.LowerBoundary, 1e-8);
            Assert.AreEqual(signalingStandardOnSection, category2.UpperBoundary, 1e-8);
            var category3 = result[2];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.IIIv, category3.CategoryGroup);
            Assert.AreEqual(signalingStandardOnSection, category3.LowerBoundary, 1e-8);
            Assert.AreEqual(lowerBoundaryOnSection, category3.UpperBoundary, 1e-8);
            var category4 = result[3];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.IVv, category4.CategoryGroup);
            Assert.AreEqual(lowerBoundaryOnSection, category4.LowerBoundary, 1e-8);
            Assert.AreEqual(lowerBoundaryStandard, category4.UpperBoundary, 1e-8);
            var category5 = result[4];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.Vv, category5.CategoryGroup);
            Assert.AreEqual(lowerBoundaryStandard, category5.LowerBoundary, 1e-8);
            Assert.AreEqual(30.0 * lowerBoundaryStandard, category5.UpperBoundary, 1e-8);
            var category6 = result[5];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.VIv, category6.CategoryGroup);
            Assert.AreEqual(30.0 * lowerBoundaryStandard, category6.LowerBoundary, 1e-8);
            Assert.AreEqual(1, category6.UpperBoundary, 1e-8);
        }
        public void CalculateFailureMechanismSectionCategoriesTest(double signalingStandard, double lowerBoundaryStandard)
        {
            var probabilityDistributionFactor = 0.5;
            var nValue            = 2.5;
            var input             = new CalculateFailureMechanismSectionCategoriesInput((Probability)signalingStandard, (Probability)lowerBoundaryStandard, probabilityDistributionFactor, nValue);
            var calculationResult = new CategoriesCalculator().CalculateFailureMechanismSectionCategories(input);

            Assert.IsNotNull(calculationResult.Result);
            Assert.IsNotNull(calculationResult.WarningMessages);
            Assert.IsEmpty(calculationResult.WarningMessages);

            var result = calculationResult.Result;

            var signalingStandardOnSection = signalingStandard * probabilityDistributionFactor / nValue;
            var lowerBoundaryOnSection     = lowerBoundaryStandard * probabilityDistributionFactor / nValue;

            Assert.AreEqual(6, result.Length);
            var firstCategory = result[0];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.Iv, firstCategory.CategoryGroup);
            Assert.AreEqual(0, firstCategory.LowerBoundary, 1e-8);
            Assert.AreEqual(1 / 30.0 * signalingStandardOnSection, firstCategory.UpperBoundary, 1e-8);
            var category2 = result[1];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.IIv, category2.CategoryGroup);
            Assert.AreEqual(1 / 30.0 * signalingStandardOnSection, category2.LowerBoundary, 1e-8);
            Assert.AreEqual(signalingStandardOnSection, category2.UpperBoundary, 1e-8);
            var category3 = result[2];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.IIIv, category3.CategoryGroup);
            Assert.AreEqual(signalingStandardOnSection, category3.LowerBoundary, 1e-8);
            Assert.AreEqual(lowerBoundaryOnSection, category3.UpperBoundary, 1e-8);
            var category4 = result[3];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.IVv, category4.CategoryGroup);
            Assert.AreEqual(lowerBoundaryOnSection, category4.LowerBoundary, 1e-8);
            Assert.AreEqual(lowerBoundaryStandard, category4.UpperBoundary, 1e-8);
            var category5 = result[4];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.Vv, category5.CategoryGroup);
            Assert.AreEqual(lowerBoundaryStandard, category5.LowerBoundary, 1e-8);
            Assert.AreEqual(30.0 * lowerBoundaryStandard, category5.UpperBoundary, 1e-8);
            var category6 = result[5];

            Assert.AreEqual(FailureMechanismSectionCategoryGroup.VIv, category6.CategoryGroup);
            Assert.AreEqual(30.0 * lowerBoundaryStandard, category6.LowerBoundary, 1e-8);
            Assert.AreEqual(1, category6.UpperBoundary, 1e-8);
        }
Ejemplo n.º 4
0
 public void ConstructrValidatesNValue(double nValue, ErrorCode expectedInnerExceptionCode)
 {
     try
     {
         var input = new CalculateFailureMechanismSectionCategoriesInput((Probability)0.123, (Probability)0.456, 0.04, nValue);
         Assert.Fail("Expected exception");
     }
     catch (AssemblyToolKernelException e)
     {
         Assert.AreEqual(1, e.Code.Length);
         Assert.AreEqual(ErrorCode.InvalidNValue, e.Code[0]);
         Assert.IsNotNull(e.InnerException);
         Assert.IsInstanceOf <AssemblyToolKernelException>(e.InnerException);
         var innerException = (AssemblyToolKernelException)e.InnerException;
         Assert.AreEqual(1, innerException.Code.Length);
         Assert.AreEqual(expectedInnerExceptionCode, innerException.Code[0]);
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Calculates category boundaries (probabilities) for usages in assembly of WBI2017 assessment results on failure mechanism level.
        /// This method implements "WBI-0-1" from the Functional Design.
        /// </summary>
        /// <param name="input">The input for this method, consisting of an signaling standard, a lower boundary standard and probability distribution factor and an N-value that takes the length-effect into account.</param>
        /// <returns>A collection of <see cref="FailureMechanismCategory"/> that contains all assembly categories with their boundaries.</returns>
        /// <exception cref="AssemblyToolKernelException">Thrown when inconsistent boundaries were calculated.</exception>
        public CalculationOutput <FailureMechanismSectionCategory[]> CalculateFailureMechanismSectionCategories(CalculateFailureMechanismSectionCategoriesInput input)
        {
            Probability iToII   = (Probability)(1 / 30.0 * input.ProbabilityDistributionFactor * input.SignalingStandard / input.NValue);
            Probability iItoIII = (Probability)(input.ProbabilityDistributionFactor * input.SignalingStandard / input.NValue);
            Probability iIItoIV = (Probability)(input.ProbabilityDistributionFactor * input.LowerBoundaryStandard / input.NValue);

            var categories = new[]
            {
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.Iv, (Probability)0, iToII),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IIv, iToII, iItoIII),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IIIv, iItoIII, iIItoIV),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IVv, iIItoIV, input.LowerBoundaryStandard),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.Vv, input.LowerBoundaryStandard, 30 * input.LowerBoundaryStandard),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.VIv, 30 * input.LowerBoundaryStandard, (Probability)1)
            };

            return(new CalculationOutput <FailureMechanismSectionCategory[]>(categories));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Calculates category boundaries (probabilities) for usages in assembly of WBI2017 assessment results on failure mechanism level.
        /// This method implements "WBI-0-2" from the Functional Design.
        /// </summary>
        /// <param name="input">The input for this method, consisting of an signaling standard, a lower boundary standard and probability distribution factor and an N-value that takes the length-effect into account.</param>
        /// <returns>A collection of <see cref="FailureMechanismCategory"/> that contains all assembly categories with their boundaries.</returns>
        /// <exception cref="AssemblyToolKernelException">Thrown when inconsistent boundaries were calculated.</exception>
        public CalculationOutput <FailureMechanismSectionCategory[]> CalculateGeotechnicFailureMechanismSectionCategories(CalculateFailureMechanismSectionCategoriesInput input)
        {
            var warnings = new List <WarningMessage>();

            var factor = input.ProbabilityDistributionFactor * 10 / input.NValue;

            if (factor > 1)
            {
                warnings.Add(WarningMessage.CorrectedSectionSpecificNValue);
                factor = 1;
            }

            var iToII   = 1 / 30.0 * factor * input.SignalingStandard;
            var iItoIII = factor * input.SignalingStandard;
            var iIItoIV = factor * input.LowerBoundaryStandard;

            var categories = new[]
            {
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.Iv, (Probability)0, iToII),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IIv, iToII, iItoIII),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IIIv, iItoIII, iIItoIV),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.IVv, iIItoIV, input.LowerBoundaryStandard),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.Vv, input.LowerBoundaryStandard, 30 * input.LowerBoundaryStandard),
                new FailureMechanismSectionCategory(FailureMechanismSectionCategoryGroup.VIv, 30 * input.LowerBoundaryStandard, (Probability)1)
            };

            return(new CalculationOutput <FailureMechanismSectionCategory[]>(categories, warnings.ToArray()));
        }