public void GivenScenarioRow_WhenOutputChangedAndUpdate_ThenDerivedOutputUpdated() { // Given var calculation = new GrassCoverErosionInwardsCalculationScenario { Output = new TestGrassCoverErosionInwardsOutput() }; var row = new GrassCoverErosionInwardsScenarioRow(calculation); // Precondition ProbabilityAssessmentOutput expectedDerivedOutput = ProbabilityAssessmentOutputFactory.Create(calculation.Output.OvertoppingOutput.Reliability); Assert.AreEqual(expectedDerivedOutput.Probability, row.FailureProbability); var random = new Random(11); // When calculation.Output = new GrassCoverErosionInwardsOutput(new TestOvertoppingOutput(random.NextDouble()), null, null); row.Update(); // Then ProbabilityAssessmentOutput newExpectedDerivedOutput = ProbabilityAssessmentOutputFactory.Create(calculation.Output.OvertoppingOutput.Reliability); Assert.AreEqual(newExpectedDerivedOutput.Probability, row.FailureProbability); }
public void GivenScenarioRow_WhenOutputChangedAndUpdate_ThenDerivedOutputUpdated() { // Given var calculation = new StructuresCalculationScenario <HeightStructuresInput> { Output = new TestStructuresOutput() }; var row = new HeightStructuresScenarioRow(calculation); // Precondition ProbabilityAssessmentOutput expectedDerivedOutput = ProbabilityAssessmentOutputFactory.Create(calculation.Output.Reliability); Assert.AreEqual(expectedDerivedOutput.Probability, row.FailureProbability); var random = new Random(11); // When calculation.Output = new TestStructuresOutput(random.NextDouble()); row.Update(); // Then ProbabilityAssessmentOutput newExpectedDerivedOutput = ProbabilityAssessmentOutputFactory.Create(calculation.Output.Reliability); Assert.AreEqual(newExpectedDerivedOutput.Probability, row.FailureProbability); }
/// <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 probabilistic calculation scenarios in the failure mechanism.</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 <GrassCoverErosionInwardsCalculationScenario> calculationScenarios) { if (sectionResult == null) { throw new ArgumentNullException(nameof(sectionResult)); } if (calculationScenarios == null) { throw new ArgumentNullException(nameof(calculationScenarios)); } GrassCoverErosionInwardsCalculationScenario[] relevantScenarios = sectionResult.GetRelevantCalculationScenarios <GrassCoverErosionInwardsCalculationScenario>( calculationScenarios, (scenario, lineSegments) => scenario.IsDikeProfileIntersectionWithReferenceLineInSection(lineSegments)) .ToArray(); if (!CalculationScenarioHelper.ScenariosAreValid(relevantScenarios)) { return(double.NaN); } double totalInitialFailureMechanismResult = 0; foreach (GrassCoverErosionInwardsCalculationScenario scenario in relevantScenarios) { ProbabilityAssessmentOutput derivedOutput = ProbabilityAssessmentOutputFactory.Create(scenario.Output.OvertoppingOutput.Reliability); totalInitialFailureMechanismResult += derivedOutput.Probability * (double)scenario.Contribution; } return(totalInitialFailureMechanismResult); }
/// <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 probabilistic calculation scenarios in the failure mechanism.</param> /// <typeparam name="T">The type of the structure which can be assigned to the calculation.</typeparam> /// <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 <T>(this AdoptableFailureMechanismSectionResult sectionResult, IEnumerable <StructuresCalculationScenario <T> > calculationScenarios) where T : IStructuresCalculationInput <StructureBase>, new() { if (sectionResult == null) { throw new ArgumentNullException(nameof(sectionResult)); } if (calculationScenarios == null) { throw new ArgumentNullException(nameof(calculationScenarios)); } StructuresCalculationScenario <T>[] relevantScenarios = sectionResult.GetRelevantCalculationScenarios <StructuresCalculationScenario <T> >( calculationScenarios, (scenario, lineSegments) => scenario.IsStructureIntersectionWithReferenceLineInSection(lineSegments)) .ToArray(); if (!CalculationScenarioHelper.ScenariosAreValid(relevantScenarios)) { return(double.NaN); } double totalInitialFailureMechanismResult = 0; foreach (StructuresCalculationScenario <T> scenario in relevantScenarios) { ProbabilityAssessmentOutput derivedOutput = ProbabilityAssessmentOutputFactory.Create(scenario.Output.Reliability); totalInitialFailureMechanismResult += derivedOutput.Probability * (double)scenario.Contribution; } return(totalInitialFailureMechanismResult); }
public void Constructor_DifferentInputs_ExpectedValues(double reliability, double expectedResult) { // Call ProbabilityAssessmentOutput probabilityAssessmentOutput = ProbabilityAssessmentOutputFactory.Create(reliability); // Assert Assert.AreEqual(reliability, probabilityAssessmentOutput.Reliability, probabilityAssessmentOutput.Reliability.GetAccuracy()); Assert.AreEqual(expectedResult, probabilityAssessmentOutput.Probability, 1e-6); }
public void Constructor_ExpectedValues() { // Setup var random = new Random(5); double probability = random.NextDouble(); double reliability = random.NextDouble(); // Call var probabilityAssessmentOutput = new ProbabilityAssessmentOutput(probability, reliability); // Assert Assert.AreEqual(probability, probabilityAssessmentOutput.Probability); Assert.AreEqual(5, probabilityAssessmentOutput.Reliability.NumberOfDecimalPlaces); Assert.AreEqual(reliability, probabilityAssessmentOutput.Reliability, probabilityAssessmentOutput.Reliability.GetAccuracy()); }
public void Constructor_WithCalculationWithOutput_PropertiesFromCalculation() { // Setup var calculation = new StructuresCalculationScenario <HeightStructuresInput> { Output = new TestStructuresOutput() }; // Call var row = new HeightStructuresScenarioRow(calculation); // Assert ProbabilityAssessmentOutput expectedDerivedOutput = ProbabilityAssessmentOutputFactory.Create(calculation.Output.Reliability); Assert.AreEqual(expectedDerivedOutput.Probability, row.FailureProbability); }
public void Constructor_WithCalculationWithOutput_PropertiesFromCalculation() { // Setup var calculation = new GrassCoverErosionInwardsCalculationScenario { Output = new TestGrassCoverErosionInwardsOutput() }; // Call var row = new GrassCoverErosionInwardsScenarioRow(calculation); // Assert ProbabilityAssessmentOutput expectedDerivedOutput = ProbabilityAssessmentOutputFactory.Create(calculation.Output.OvertoppingOutput.Reliability); Assert.AreEqual(expectedDerivedOutput.Probability, row.FailureProbability); }
public void GivenScenarioRow_WhenOutputSetAndUpdate_ThenDerivedOutputUpdated() { // Given var calculation = new StructuresCalculationScenario <HeightStructuresInput>(); var row = new HeightStructuresScenarioRow(calculation); // Precondition Assert.IsNaN(row.FailureProbability); // When calculation.Output = new TestStructuresOutput(); row.Update(); // Then ProbabilityAssessmentOutput expectedDerivedOutput = ProbabilityAssessmentOutputFactory.Create(calculation.Output.Reliability); Assert.AreEqual(expectedDerivedOutput.Probability, row.FailureProbability); }
public void GivenScenarioRow_WhenOutputSetAndUpdate_ThenDerivedOutputUpdated() { // Given var calculation = new GrassCoverErosionInwardsCalculationScenario(); var row = new GrassCoverErosionInwardsScenarioRow(calculation); // Precondition Assert.IsNaN(row.FailureProbability); // When calculation.Output = new TestGrassCoverErosionInwardsOutput(); row.Update(); // Then ProbabilityAssessmentOutput expectedDerivedOutput = ProbabilityAssessmentOutputFactory.Create(calculation.Output.OvertoppingOutput.Reliability); Assert.AreEqual(expectedDerivedOutput.Probability, row.FailureProbability); }
private void CreateProbabilityAssessmentOutput() { probabilityAssessmentOutput = CalculationScenario.HasOutput ? ProbabilityAssessmentOutputFactory.Create(CalculationScenario.Output.OvertoppingOutput.Reliability) : null; }