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); }
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]); } }
/// <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)); }
/// <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())); }