/// <summary> /// Gets the value for the initial failure mechanism result per failure mechanism section as a probability. /// </summary> /// <param name="sectionResult">The section result to get the initial failure mechanism result probability for.</param> /// <param name="calculationScenarios">All semi probabilistic calculation scenarios in the failure mechanism.</param> /// <param name="norm">The norm to assess for.</param> /// <returns>The calculated initial failure mechanism result probability; or <see cref="double.NaN"/> when there /// are no relevant calculations, when not all relevant calculations are performed or when the /// contributions of the relevant calculations don't add up to 1.</returns> /// <exception cref="ArgumentNullException">Thrown when any parameter is <c>null</c>.</exception> public static double GetInitialFailureMechanismResultProbability(this AdoptableWithProfileProbabilityFailureMechanismSectionResult sectionResult, IEnumerable <SemiProbabilisticPipingCalculationScenario> calculationScenarios, double norm) { if (sectionResult == null) { throw new ArgumentNullException(nameof(sectionResult)); } if (calculationScenarios == null) { throw new ArgumentNullException(nameof(calculationScenarios)); } SemiProbabilisticPipingCalculationScenario[] relevantScenarios = sectionResult.GetRelevantCalculationScenarios <SemiProbabilisticPipingCalculationScenario>( calculationScenarios, (scenario, lineSegments) => scenario.IsSurfaceLineIntersectionWithReferenceLineInSection(lineSegments)) .ToArray(); if (!CalculationScenarioHelper.ScenariosAreValid(relevantScenarios)) { return(double.NaN); } double totalInitialFailureMechanismResult = 0; foreach (SemiProbabilisticPipingCalculationScenario scenario in relevantScenarios) { DerivedSemiProbabilisticPipingOutput derivedOutput = DerivedSemiProbabilisticPipingOutputFactory.Create(scenario.Output, norm); totalInitialFailureMechanismResult += derivedOutput.PipingProbability * (double)scenario.Contribution; } return(totalInitialFailureMechanismResult); }
public void Constructor_CalculationWithOutput_ExpectedValues(double sectionLength) { // Setup var failureMechanism = new PipingFailureMechanism(); var mocks = new MockRepository(); IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism, mocks); mocks.ReplayAll(); var calculation = new SemiProbabilisticPipingCalculationScenario { Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput() }; var failureMechanismSection = new FailureMechanismSection("test", new[] { new Point2D(0, 0), new Point2D(sectionLength, 0) }); // Call var row = new SemiProbabilisticPipingScenarioRow(calculation, failureMechanism, failureMechanismSection, assessmentSection); // Assert DerivedSemiProbabilisticPipingOutput expectedDerivedOutput = DerivedSemiProbabilisticPipingOutputFactory.Create(calculation.Output, assessmentSection.FailureMechanismContribution.NormativeProbability); Assert.AreEqual(expectedDerivedOutput.PipingProbability, row.FailureProbability); Assert.AreEqual(expectedDerivedOutput.UpliftProbability, row.FailureProbabilityUplift); Assert.AreEqual(expectedDerivedOutput.HeaveProbability, row.FailureProbabilityHeave); Assert.AreEqual(expectedDerivedOutput.SellmeijerProbability, row.FailureProbabilitySellmeijer); Assert.AreEqual(Math.Min(1.0, expectedDerivedOutput.PipingProbability * failureMechanism.PipingProbabilityAssessmentInput.GetN( failureMechanismSection.Length)), row.SectionFailureProbability); mocks.VerifyAll(); }
public void Constructor_ValidSellmeijerProbability_ExpectedValues(double sellmeijerProbability) { // Setup var random = new Random(21); double upliftFactorOfSafety = random.NextDouble(); double upliftReliability = random.NextDouble(); double upliftProbability = random.NextDouble(); double heaveFactorOfSafety = random.NextDouble(); double heaveReliability = random.NextDouble(); double heaveProbability = random.NextDouble(); double sellmeijerFactorOfSafety = random.NextDouble(); double sellmeijerReliability = random.NextDouble(); double pipingProbability = random.NextDouble(); double pipingReliability = random.NextDouble(); // Call var output = new DerivedSemiProbabilisticPipingOutput( upliftFactorOfSafety, upliftReliability, upliftProbability, heaveFactorOfSafety, heaveReliability, heaveProbability, sellmeijerFactorOfSafety, sellmeijerReliability, sellmeijerProbability, pipingProbability, pipingReliability); // Assert Assert.AreEqual(sellmeijerProbability, output.SellmeijerProbability); }
/// <summary> /// Creates a new instance of <see cref="SemiProbabilisticPipingOutputProperties"/>. /// </summary> /// <param name="output">The output to show the properties for.</param> /// <param name="norm">The norm to assess for.</param> /// <exception cref="ArgumentNullException">Thrown when <paramref name="output"/> is <c>null</c>.</exception> public SemiProbabilisticPipingOutputProperties(SemiProbabilisticPipingOutput output, double norm) { if (output == null) { throw new ArgumentNullException(nameof(output)); } Data = output; derivedOutput = DerivedSemiProbabilisticPipingOutputFactory.Create(output, norm); }
public void GetProperties_WithData_ReturnExpectedValues() { // Setup const double norm = 0.1; var random = new Random(22); double upliftEffectiveStress = random.NextDouble(); double heaveGradient = random.NextDouble(); double sellmeijerCreepCoefficient = random.NextDouble(); double sellmeijerCriticalFall = random.NextDouble(); double sellmeijerReducedFall = random.NextDouble(); double upliftFactorOfSafety = random.NextDouble(); double heaveFactorOfSafety = random.NextDouble(); double sellmeijerFactorOfSafety = random.NextDouble(); var output = new SemiProbabilisticPipingOutput(new SemiProbabilisticPipingOutput.ConstructionProperties { UpliftEffectiveStress = upliftEffectiveStress, HeaveGradient = heaveGradient, SellmeijerCreepCoefficient = sellmeijerCreepCoefficient, SellmeijerCriticalFall = sellmeijerCriticalFall, SellmeijerReducedFall = sellmeijerReducedFall, UpliftFactorOfSafety = upliftFactorOfSafety, HeaveFactorOfSafety = heaveFactorOfSafety, SellmeijerFactorOfSafety = sellmeijerFactorOfSafety }); // Call var properties = new SemiProbabilisticPipingOutputProperties(output, norm); // Assert DerivedSemiProbabilisticPipingOutput expectedDerivedOutput = DerivedSemiProbabilisticPipingOutputFactory.Create(output, norm); Assert.AreEqual(upliftFactorOfSafety, properties.UpliftFactorOfSafety, properties.UpliftFactorOfSafety.GetAccuracy()); Assert.AreEqual(expectedDerivedOutput.UpliftReliability, properties.UpliftReliability, properties.UpliftReliability.GetAccuracy()); Assert.AreEqual(ProbabilityFormattingHelper.Format(expectedDerivedOutput.UpliftProbability), properties.UpliftProbability); Assert.AreEqual(heaveFactorOfSafety, properties.HeaveFactorOfSafety, properties.HeaveFactorOfSafety.GetAccuracy()); Assert.AreEqual(expectedDerivedOutput.HeaveReliability, properties.HeaveReliability, properties.HeaveReliability.GetAccuracy()); Assert.AreEqual(ProbabilityFormattingHelper.Format(expectedDerivedOutput.HeaveProbability), properties.HeaveProbability); Assert.AreEqual(sellmeijerFactorOfSafety, properties.SellmeijerFactorOfSafety, properties.SellmeijerFactorOfSafety.GetAccuracy()); Assert.AreEqual(expectedDerivedOutput.SellmeijerReliability, properties.SellmeijerReliability, properties.SellmeijerReliability.GetAccuracy()); Assert.AreEqual(ProbabilityFormattingHelper.Format(expectedDerivedOutput.SellmeijerProbability), properties.SellmeijerProbability); Assert.AreEqual(ProbabilityFormattingHelper.Format(expectedDerivedOutput.PipingProbability), properties.PipingProbability); Assert.AreEqual(expectedDerivedOutput.PipingReliability, properties.PipingReliability, properties.PipingReliability.GetAccuracy()); Assert.AreEqual(upliftEffectiveStress, properties.UpliftEffectiveStress, properties.UpliftEffectiveStress.GetAccuracy()); Assert.AreEqual(heaveGradient, properties.HeaveGradient, properties.HeaveGradient.GetAccuracy()); Assert.AreEqual(sellmeijerCreepCoefficient, properties.SellmeijerCreepCoefficient, properties.SellmeijerCreepCoefficient.GetAccuracy()); Assert.AreEqual(sellmeijerCriticalFall, properties.SellmeijerCriticalFall, properties.SellmeijerCriticalFall.GetAccuracy()); Assert.AreEqual(sellmeijerReducedFall, properties.SellmeijerReducedFall, properties.SellmeijerReducedFall.GetAccuracy()); }
public void Constructor_DefaultPropertiesSet() { // Setup var random = new Random(21); double upliftFactorOfSafety = random.NextDouble(); double upliftReliability = random.NextDouble(); double upliftProbability = random.NextDouble(); double heaveFactorOfSafety = random.NextDouble(); double heaveReliability = random.NextDouble(); double heaveProbability = random.NextDouble(); double sellmeijerFactorOfSafety = random.NextDouble(); double sellmeijerReliability = random.NextDouble(); double sellmeijerProbability = random.NextDouble(); double pipingProbability = random.NextDouble(); double pipingReliability = random.NextDouble(); // Call var output = new DerivedSemiProbabilisticPipingOutput( upliftFactorOfSafety, upliftReliability, upliftProbability, heaveFactorOfSafety, heaveReliability, heaveProbability, sellmeijerFactorOfSafety, sellmeijerReliability, sellmeijerProbability, pipingProbability, pipingReliability); // Assert Assert.AreEqual(3, output.HeaveFactorOfSafety.NumberOfDecimalPlaces); Assert.AreEqual(upliftFactorOfSafety, output.UpliftFactorOfSafety, output.UpliftFactorOfSafety.GetAccuracy()); Assert.AreEqual(5, output.UpliftReliability.NumberOfDecimalPlaces); Assert.AreEqual(upliftReliability, output.UpliftReliability, output.UpliftReliability.GetAccuracy()); Assert.AreEqual(upliftProbability, output.UpliftProbability); Assert.AreEqual(3, output.HeaveFactorOfSafety.NumberOfDecimalPlaces); Assert.AreEqual(heaveFactorOfSafety, output.HeaveFactorOfSafety, output.HeaveFactorOfSafety.GetAccuracy()); Assert.AreEqual(5, output.HeaveReliability.NumberOfDecimalPlaces); Assert.AreEqual(heaveReliability, output.HeaveReliability, output.HeaveReliability.GetAccuracy()); Assert.AreEqual(heaveProbability, output.HeaveProbability); Assert.AreEqual(3, output.SellmeijerFactorOfSafety.NumberOfDecimalPlaces); Assert.AreEqual(sellmeijerFactorOfSafety, output.SellmeijerFactorOfSafety, output.SellmeijerFactorOfSafety.GetAccuracy()); Assert.AreEqual(5, output.SellmeijerReliability.NumberOfDecimalPlaces); Assert.AreEqual(sellmeijerReliability, output.SellmeijerReliability, output.SellmeijerReliability.GetAccuracy()); Assert.AreEqual(sellmeijerProbability, output.SellmeijerProbability); Assert.AreEqual(pipingProbability, output.PipingProbability); Assert.AreEqual(5, output.PipingReliability.NumberOfDecimalPlaces); Assert.AreEqual(pipingReliability, output.PipingReliability, output.PipingReliability.GetAccuracy()); }
public void GivenScenarioRow_WhenOutputChangedAndUpdate_ThenDerivedOutputUpdated() { // Given var failureMechanism = new PipingFailureMechanism(); var mocks = new MockRepository(); IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism, mocks); mocks.ReplayAll(); var calculation = new SemiProbabilisticPipingCalculationScenario { Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput() }; FailureMechanismSection failureMechanismSection = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); var row = new SemiProbabilisticPipingScenarioRow(calculation, failureMechanism, failureMechanismSection, assessmentSection); // Precondition DerivedSemiProbabilisticPipingOutput expectedDerivedOutput = DerivedSemiProbabilisticPipingOutputFactory.Create(calculation.Output, assessmentSection.FailureMechanismContribution.NormativeProbability); Assert.AreEqual(expectedDerivedOutput.PipingProbability, row.FailureProbability); Assert.AreEqual(expectedDerivedOutput.UpliftProbability, row.FailureProbabilityUplift); Assert.AreEqual(expectedDerivedOutput.HeaveProbability, row.FailureProbabilityHeave); Assert.AreEqual(expectedDerivedOutput.SellmeijerProbability, row.FailureProbabilitySellmeijer); Assert.AreEqual(expectedDerivedOutput.PipingProbability * failureMechanism.PipingProbabilityAssessmentInput.GetN( failureMechanismSection.Length), row.SectionFailureProbability); var random = new Random(11); // When calculation.Output = PipingTestDataGenerator.GetSemiProbabilisticPipingOutput(random.NextDouble(), random.NextDouble(), random.NextDouble()); row.Update(); // Then DerivedSemiProbabilisticPipingOutput newExpectedDerivedOutput = DerivedSemiProbabilisticPipingOutputFactory.Create(calculation.Output, assessmentSection.FailureMechanismContribution.NormativeProbability); Assert.AreEqual(newExpectedDerivedOutput.PipingProbability, row.FailureProbability); Assert.AreEqual(newExpectedDerivedOutput.UpliftProbability, row.FailureProbabilityUplift); Assert.AreEqual(newExpectedDerivedOutput.HeaveProbability, row.FailureProbabilityHeave); Assert.AreEqual(newExpectedDerivedOutput.SellmeijerProbability, row.FailureProbabilitySellmeijer); Assert.AreEqual(newExpectedDerivedOutput.PipingProbability * failureMechanism.PipingProbabilityAssessmentInput.GetN( failureMechanismSection.Length), row.SectionFailureProbability); mocks.VerifyAll(); }
public void Create_ValidData_ReturnsExpectedValue() { // Setup var calculatorResult = new SemiProbabilisticPipingOutput(new SemiProbabilisticPipingOutput.ConstructionProperties { UpliftFactorOfSafety = 1.2, HeaveFactorOfSafety = 1.4, SellmeijerFactorOfSafety = 0.9 }); // Call DerivedSemiProbabilisticPipingOutput derivedOutput = DerivedSemiProbabilisticPipingOutputFactory.Create(calculatorResult, 0.1); // Assert Assert.AreEqual(0.0030333773290253025, derivedOutput.UpliftProbability, 1e-6); Assert.AreEqual(0.00017624686431291146, derivedOutput.HeaveProbability, 1e-6); Assert.AreEqual(0.13596896289025881, derivedOutput.SellmeijerProbability, 1e-6); Assert.AreEqual(3.57331, derivedOutput.PipingReliability, derivedOutput.PipingReliability.GetAccuracy()); }
private void CreateDerivedOutput() { derivedOutput = CalculationScenario.HasOutput ? DerivedSemiProbabilisticPipingOutputFactory.Create(CalculationScenario.Output, assessmentSection.FailureMechanismContribution.NormativeProbability) : null; }