// Copyright (C) Stichting Deltares 2016. All rights reserved. // // This file is part of Ringtoets. // // Ringtoets is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System; using System.Collections.Generic; using System.Linq; using Core.Common.Base.Data; using NUnit.Framework; using Ringtoets.ClosingStructures.Data; using Ringtoets.Common.Data; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Probability; using Ringtoets.Common.Data.Structures; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.HeightStructures.Data; using Ringtoets.HydraRing.Data; using Ringtoets.Integration.Data; using Ringtoets.Piping.Data; using Ringtoets.Piping.Data.TestUtil; using Ringtoets.Piping.KernelWrapper.TestUtil; using Ringtoets.Revetment.Data; using Ringtoets.StabilityPointStructures.Data; using Ringtoets.StabilityStoneCover.Data; using Ringtoets.WaveImpactAsphaltCover.Data; namespace Ringtoets.Integration.Service.Test { [TestFixture] public class RingtoetsDataSynchronizationServiceTest { [Test] public void ClearFailureMechanismCalculationOutputs_WithoutAssessmentSection_ThrowsArgumentNullException() { // Call TestDelegate test = () => RingtoetsDataSynchronizationService.ClearFailureMechanismCalculationOutputs(null); // Assert var exception = Assert.Throws(test); Assert.AreEqual("assessmentSection", exception.ParamName); } [Test] public void ClearFailureMechanismCalculationOutputs_WithAssessmentSection_ClearsFailureMechanismCalculationsOutputAndReturnsAffectedCalculations() { // Setup AssessmentSection assessmentSection = GetFullyConfiguredAssessmentSection(); IEnumerable expectedAffectedItems = assessmentSection.GetFailureMechanisms() .SelectMany(f => f.Calculations) .Where(c => c.HasOutput) .ToList(); // Call IEnumerable affectedItems = RingtoetsDataSynchronizationService.ClearFailureMechanismCalculationOutputs(assessmentSection); // Assert CollectionAssert.IsEmpty(assessmentSection.GetFailureMechanisms().SelectMany(f => f.Calculations).Where(c => c.HasOutput)); CollectionAssert.AreEquivalent(expectedAffectedItems, affectedItems); } [Test] public void ClearAllCalculationOutputAndHydraulicBoundaryLocations_AssessmentSectionNull_ThrowsArgumentNullException() { // Call TestDelegate test = () => RingtoetsDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(null); // Assert var exception = Assert.Throws(test); Assert.AreEqual("assessmentSection", exception.ParamName); } [Test] public void ClearAllCalculationOutputAndHydraulicBoundaryLocations_VariousCalculations_ClearsHydraulicBoundaryLocationAndCalculationsAndReturnsAffectedCalculations() { // Setup var assessmentSection = GetFullyConfiguredAssessmentSection(); var expectedAffectedItems = new List(); expectedAffectedItems.AddRange(assessmentSection.ClosingStructures.Calculations .Cast>() .Where(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); expectedAffectedItems.AddRange(assessmentSection.GrassCoverErosionInwards.Calculations .Cast() .Where(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); expectedAffectedItems.AddRange(assessmentSection.GrassCoverErosionOutwards.Calculations .Cast() .Where(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); expectedAffectedItems.AddRange(assessmentSection.HeightStructures.Calculations .Cast>() .Where(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); expectedAffectedItems.AddRange(assessmentSection.PipingFailureMechanism.Calculations .Cast() .Where(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); expectedAffectedItems.AddRange(assessmentSection.StabilityPointStructures.Calculations .Cast>() .Where(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); expectedAffectedItems.AddRange(assessmentSection.StabilityStoneCover.Calculations .Cast() .Where(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); expectedAffectedItems.AddRange(assessmentSection.WaveImpactAsphaltCover.Calculations .Cast() .Where(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); // Call IEnumerable affectedItems = RingtoetsDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(assessmentSection); // Assert Assert.IsFalse(assessmentSection.ClosingStructures.Calculations.Cast>() .Any(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); Assert.IsFalse(assessmentSection.GrassCoverErosionInwards.Calculations.Cast() .Any(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); Assert.IsFalse(assessmentSection.GrassCoverErosionOutwards.Calculations.Cast() .Any(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); Assert.IsFalse(assessmentSection.HeightStructures.Calculations.Cast>() .Any(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); Assert.IsFalse(assessmentSection.PipingFailureMechanism.Calculations.Cast() .Any(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); Assert.IsFalse(assessmentSection.StabilityPointStructures.Calculations.Cast>() .Any(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); Assert.IsFalse(assessmentSection.StabilityStoneCover.Calculations.Cast() .Any(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); Assert.IsFalse(assessmentSection.WaveImpactAsphaltCover.Calculations.Cast() .Any(c => c.InputParameters.HydraulicBoundaryLocation != null || c.HasOutput)); CollectionAssert.AreEquivalent(expectedAffectedItems, affectedItems); } [Test] public void ClearHydraulicBoundaryLocationOutput_HydraulicBoundaryDatabaseNull_ThrowsArgumentNullException() { // Setup var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); // Call TestDelegate test = () => RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(null, failureMechanism); // Assert var exception = Assert.Throws(test); Assert.AreEqual("hydraulicBoundaryDatabase", exception.ParamName); } [Test] public void ClearHydraulicBoundaryLocationOutput_FailureMechanismNull_ThrowsArgumentNullException() { // Setup var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); // Call TestDelegate test = () => RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(hydraulicBoundaryDatabase, null); // Assert var exception = Assert.Throws(test); Assert.AreEqual("failureMechanism", exception.ParamName); } [Test] [TestCase(1.0, 3.0)] [TestCase(3.8, double.NaN)] [TestCase(double.NaN, 6.9)] public void ClearHydraulicBoundaryLocationOutput_LocationWithData_ClearsDataAndReturnsTrue( double waveHeight, double designWaterLevel) { // Setup var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase() }; var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test", 0, 0) { WaveHeight = (RoundedDouble) waveHeight, DesignWaterLevel = (RoundedDouble) designWaterLevel }; assessmentSection.HydraulicBoundaryDatabase.Locations.Add(hydraulicBoundaryLocation); // Call bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection.GrassCoverErosionOutwards); // Assert Assert.IsNaN(hydraulicBoundaryLocation.DesignWaterLevel); Assert.IsNaN(hydraulicBoundaryLocation.WaveHeight); Assert.AreEqual(CalculationConvergence.NotCalculated, hydraulicBoundaryLocation.DesignWaterLevelCalculationConvergence); Assert.AreEqual(CalculationConvergence.NotCalculated, hydraulicBoundaryLocation.WaveHeightCalculationConvergence); Assert.IsTrue(affected); } [Test] public void ClearHydraulicBoundaryLocationOutput_HydraulicBoundaryDatabaseWithoutLocations_ReturnsFalse() { // Setup var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase() }; // Call bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection.GrassCoverErosionOutwards); // Assert Assert.IsFalse(affected); } [Test] public void ClearHydraulicBoundaryLocationOutput_LocationWithoutWaveHeightAndDesignWaterLevel_ReturnsFalse() { // Setup var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase() }; var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test", 0, 0); assessmentSection.HydraulicBoundaryDatabase.Locations.Add(hydraulicBoundaryLocation); // Call bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(assessmentSection.HydraulicBoundaryDatabase, assessmentSection.GrassCoverErosionOutwards); // Assert Assert.IsFalse(affected); } [Test] [TestCase(3.5, double.NaN)] [TestCase(double.NaN, 8.3)] public void ClearHydraulicBoundaryLocationOutput_LocationWithoutDataAndGrassCoverErosionOutwardsLocationWithData_ClearDataAndReturnTrue( double designWaterLevel, double waveHeight) { // Setup var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test", 0, 0); var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase { Locations = { hydraulicBoundaryLocation } }; var grassCoverErosionOutwardsHydraulicBoundaryLocation = hydraulicBoundaryLocation; grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevel = (RoundedDouble) designWaterLevel; grassCoverErosionOutwardsHydraulicBoundaryLocation.WaveHeight = (RoundedDouble) waveHeight; var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism { HydraulicBoundaryLocations = { grassCoverErosionOutwardsHydraulicBoundaryLocation } }; // Call bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(hydraulicBoundaryDatabase, failureMechanism); // Assert Assert.IsNaN(grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevel); Assert.IsNaN(grassCoverErosionOutwardsHydraulicBoundaryLocation.WaveHeight); Assert.AreEqual(CalculationConvergence.NotCalculated, grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevelCalculationConvergence); Assert.AreEqual(CalculationConvergence.NotCalculated, grassCoverErosionOutwardsHydraulicBoundaryLocation.WaveHeightCalculationConvergence); Assert.IsTrue(affected); } [Test] public void ClearHydraulicBoundaryLocationOutput_LocationWithoutDataAndGrassCoverErosionOutwardsLocationWithoutData_ReturnFalse() { // Setup var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test", 0, 0); var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase { Locations = { hydraulicBoundaryLocation } }; var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism { HydraulicBoundaryLocations = { hydraulicBoundaryLocation } }; // Call bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(hydraulicBoundaryDatabase, failureMechanism); // Assert Assert.IsFalse(affected); } [Test] [TestCase(3.5, double.NaN)] [TestCase(double.NaN, 8.3)] public void ClearHydraulicBoundaryLocationOutput_LocationWithDataAndGrassCoverErosionOutwardsLocationWithData_ClearDataAndReturnTrue( double designWaterLevel, double waveHeight) { // Setup var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test", 0, 0) { DesignWaterLevel = (RoundedDouble) designWaterLevel, WaveHeight = (RoundedDouble) waveHeight }; var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase { Locations = { hydraulicBoundaryLocation } }; var grassCoverErosionOutwardsHydraulicBoundaryLocation = hydraulicBoundaryLocation; var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism { HydraulicBoundaryLocations = { grassCoverErosionOutwardsHydraulicBoundaryLocation } }; // Call bool affected = RingtoetsDataSynchronizationService.ClearHydraulicBoundaryLocationOutput(hydraulicBoundaryDatabase, failureMechanism); // Assert Assert.IsNaN(hydraulicBoundaryLocation.DesignWaterLevel); Assert.IsNaN(hydraulicBoundaryLocation.WaveHeight); Assert.AreEqual(CalculationConvergence.NotCalculated, hydraulicBoundaryLocation.DesignWaterLevelCalculationConvergence); Assert.AreEqual(CalculationConvergence.NotCalculated, hydraulicBoundaryLocation.WaveHeightCalculationConvergence); Assert.IsNaN(grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevel); Assert.IsNaN(grassCoverErosionOutwardsHydraulicBoundaryLocation.WaveHeight); Assert.AreEqual(CalculationConvergence.NotCalculated, grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevelCalculationConvergence); Assert.AreEqual(CalculationConvergence.NotCalculated, grassCoverErosionOutwardsHydraulicBoundaryLocation.WaveHeightCalculationConvergence); Assert.IsTrue(affected); } private static AssessmentSection GetFullyConfiguredAssessmentSection() { var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, string.Empty, 0, 0); assessmentSection.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase { Locations = { hydraulicBoundaryLocation } }; SetFullyConfiguredStructuresFailureMechanism( assessmentSection.ClosingStructures, hydraulicBoundaryLocation); SetFullyConfiguredFailureMechanism(assessmentSection.GrassCoverErosionInwards, hydraulicBoundaryLocation); SetFullyConfiguredFailureMechanism(assessmentSection.GrassCoverErosionOutwards, hydraulicBoundaryLocation); SetFullyConfiguredStructuresFailureMechanism( assessmentSection.HeightStructures, hydraulicBoundaryLocation); SetFullyConfiguredFailureMechanism(assessmentSection.PipingFailureMechanism, hydraulicBoundaryLocation); SetFullyConfiguredStructuresFailureMechanism( assessmentSection.StabilityPointStructures, hydraulicBoundaryLocation); SetFullyConfiguredFailureMechanism(assessmentSection.StabilityStoneCover, hydraulicBoundaryLocation); SetFullyConfiguredFailureMechanism(assessmentSection.WaveImpactAsphaltCover, hydraulicBoundaryLocation); return assessmentSection; } private static void SetFullyConfiguredFailureMechanism(PipingFailureMechanism failureMechanism, HydraulicBoundaryLocation hydraulicBoundaryLocation) { var calculation = new PipingCalculation(new GeneralPipingInput()); var calculationWithOutput = new PipingCalculation(new GeneralPipingInput()) { Output = new TestPipingOutput(), SemiProbabilisticOutput = new TestPipingSemiProbabilisticOutput() }; var calculationWithOutputAndHydraulicBoundaryLocation = new PipingCalculation(new GeneralPipingInput()) { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new TestPipingOutput(), SemiProbabilisticOutput = new TestPipingSemiProbabilisticOutput() }; var calculationWithHydraulicBoundaryLocation = new PipingCalculation(new GeneralPipingInput()) { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; var subCalculation = new PipingCalculation(new GeneralPipingInput()); var subCalculationWithOutput = new PipingCalculation(new GeneralPipingInput()) { Output = new TestPipingOutput(), SemiProbabilisticOutput = new TestPipingSemiProbabilisticOutput() }; var subCalculationWithOutputAndHydraulicBoundaryLocation = new PipingCalculation(new GeneralPipingInput()) { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new TestPipingOutput(), SemiProbabilisticOutput = new TestPipingSemiProbabilisticOutput() }; var subCalculationWithHydraulicBoundaryLocation = new PipingCalculation(new GeneralPipingInput()) { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; failureMechanism.CalculationsGroup.Children.Add(calculation); failureMechanism.CalculationsGroup.Children.Add(calculationWithOutput); failureMechanism.CalculationsGroup.Children.Add(calculationWithOutputAndHydraulicBoundaryLocation); failureMechanism.CalculationsGroup.Children.Add(calculationWithHydraulicBoundaryLocation); failureMechanism.CalculationsGroup.Children.Add(new CalculationGroup { Children = { subCalculation, subCalculationWithOutput, subCalculationWithOutputAndHydraulicBoundaryLocation, subCalculationWithHydraulicBoundaryLocation } }); } private static void SetFullyConfiguredFailureMechanism(GrassCoverErosionInwardsFailureMechanism failureMechanism, HydraulicBoundaryLocation hydraulicBoundaryLocation) { var calculation = new GrassCoverErosionInwardsCalculation(); var calculationWithOutput = new GrassCoverErosionInwardsCalculation { Output = new GrassCoverErosionInwardsOutput(0, false, new ProbabilityAssessmentOutput(0, 0, 0, 0, 0), 0) }; var calculationWithOutputAndHydraulicBoundaryLocation = new GrassCoverErosionInwardsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new GrassCoverErosionInwardsOutput(0, false, new ProbabilityAssessmentOutput(0, 0, 0, 0, 0), 0) }; var calculationWithHydraulicBoundaryLocation = new GrassCoverErosionInwardsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; var subCalculation = new GrassCoverErosionInwardsCalculation(); var subCalculationWithOutput = new GrassCoverErosionInwardsCalculation { Output = new GrassCoverErosionInwardsOutput(0, false, new ProbabilityAssessmentOutput(0, 0, 0, 0, 0), 0) }; var subCalculationWithOutputAndHydraulicBoundaryLocation = new GrassCoverErosionInwardsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new GrassCoverErosionInwardsOutput(0, false, new ProbabilityAssessmentOutput(0, 0, 0, 0, 0), 0) }; var subCalculationWithHydraulicBoundaryLocation = new GrassCoverErosionInwardsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; failureMechanism.CalculationsGroup.Children.Add(calculation); failureMechanism.CalculationsGroup.Children.Add(calculationWithOutput); failureMechanism.CalculationsGroup.Children.Add(calculationWithOutputAndHydraulicBoundaryLocation); failureMechanism.CalculationsGroup.Children.Add(calculationWithHydraulicBoundaryLocation); failureMechanism.CalculationsGroup.Children.Add(new CalculationGroup { Children = { subCalculation, subCalculationWithOutput, subCalculationWithOutputAndHydraulicBoundaryLocation, subCalculationWithHydraulicBoundaryLocation } }); } private static void SetFullyConfiguredStructuresFailureMechanism( ICalculatableFailureMechanism failureMechanism, HydraulicBoundaryLocation hydraulicBoundaryLocation) where TStructureBase : StructureBase where TCalculationInput : StructuresInputBase, new() { var calculation = new StructuresCalculation(); var calculationWithOutput = new StructuresCalculation { Output = new ProbabilityAssessmentOutput(0, 0, 0, 0, 0) }; var calculationWithOutputAndHydraulicBoundaryLocation = new StructuresCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new ProbabilityAssessmentOutput(0, 0, 0, 0, 0) }; var calculationWithHydraulicBoundaryLocation = new StructuresCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; var subCalculation = new StructuresCalculation(); var subCalculationWithOutput = new StructuresCalculation { Output = new ProbabilityAssessmentOutput(0, 0, 0, 0, 0) }; var subCalculationWithOutputAndHydraulicBoundaryLocation = new StructuresCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new ProbabilityAssessmentOutput(0, 0, 0, 0, 0) }; var subCalculationWithHydraulicBoundaryLocation = new StructuresCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; failureMechanism.CalculationsGroup.Children.Add(calculation); failureMechanism.CalculationsGroup.Children.Add(calculationWithOutput); failureMechanism.CalculationsGroup.Children.Add(calculationWithOutputAndHydraulicBoundaryLocation); failureMechanism.CalculationsGroup.Children.Add(calculationWithHydraulicBoundaryLocation); failureMechanism.CalculationsGroup.Children.Add(new CalculationGroup { Children = { subCalculation, subCalculationWithOutput, subCalculationWithOutputAndHydraulicBoundaryLocation, subCalculationWithHydraulicBoundaryLocation } }); } private static void SetFullyConfiguredFailureMechanism(StabilityStoneCoverFailureMechanism failureMechanism, HydraulicBoundaryLocation hydraulicBoundaryLocation) { var calculation = new StabilityStoneCoverWaveConditionsCalculation(); var calculationWithOutput = new StabilityStoneCoverWaveConditionsCalculation { Output = new StabilityStoneCoverWaveConditionsOutput(Enumerable.Empty(), Enumerable.Empty()) }; var calculationWithOutputAndHydraulicBoundaryLocation = new StabilityStoneCoverWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new StabilityStoneCoverWaveConditionsOutput(Enumerable.Empty(), Enumerable.Empty()) }; var calculationWithHydraulicBoundaryLocation = new StabilityStoneCoverWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; var subCalculation = new StabilityStoneCoverWaveConditionsCalculation(); var subCalculationWithOutput = new StabilityStoneCoverWaveConditionsCalculation { Output = new StabilityStoneCoverWaveConditionsOutput(Enumerable.Empty(), Enumerable.Empty()) }; var subCalculationWithOutputAndHydraulicBoundaryLocation = new StabilityStoneCoverWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new StabilityStoneCoverWaveConditionsOutput(Enumerable.Empty(), Enumerable.Empty()) }; var subCalculationWithHydraulicBoundaryLocation = new StabilityStoneCoverWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculation); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculationWithOutput); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculationWithOutputAndHydraulicBoundaryLocation); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculationWithHydraulicBoundaryLocation); failureMechanism.WaveConditionsCalculationGroup.Children.Add(new CalculationGroup { Children = { subCalculation, subCalculationWithOutput, subCalculationWithOutputAndHydraulicBoundaryLocation, subCalculationWithHydraulicBoundaryLocation } }); } private static void SetFullyConfiguredFailureMechanism(WaveImpactAsphaltCoverFailureMechanism failureMechanism, HydraulicBoundaryLocation hydraulicBoundaryLocation) { var calculation = new WaveImpactAsphaltCoverWaveConditionsCalculation(); var calculationWithOutput = new WaveImpactAsphaltCoverWaveConditionsCalculation { Output = new WaveImpactAsphaltCoverWaveConditionsOutput(Enumerable.Empty()) }; var calculationWithOutputAndHydraulicBoundaryLocation = new WaveImpactAsphaltCoverWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new WaveImpactAsphaltCoverWaveConditionsOutput(Enumerable.Empty()) }; var calculationWithHydraulicBoundaryLocation = new WaveImpactAsphaltCoverWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; var subCalculation = new WaveImpactAsphaltCoverWaveConditionsCalculation(); var subCalculationWithOutput = new WaveImpactAsphaltCoverWaveConditionsCalculation { Output = new WaveImpactAsphaltCoverWaveConditionsOutput(Enumerable.Empty()) }; var subCalculationWithOutputAndHydraulicBoundaryLocation = new WaveImpactAsphaltCoverWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new WaveImpactAsphaltCoverWaveConditionsOutput(Enumerable.Empty()) }; var subCalculationWithHydraulicBoundaryLocation = new WaveImpactAsphaltCoverWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculation); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculationWithOutput); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculationWithOutputAndHydraulicBoundaryLocation); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculationWithHydraulicBoundaryLocation); failureMechanism.WaveConditionsCalculationGroup.Children.Add(new CalculationGroup { Children = { subCalculation, subCalculationWithOutput, subCalculationWithOutputAndHydraulicBoundaryLocation, subCalculationWithHydraulicBoundaryLocation } }); } private static void SetFullyConfiguredFailureMechanism(GrassCoverErosionOutwardsFailureMechanism failureMechanism, HydraulicBoundaryLocation hydraulicBoundaryLocation) { var calculation = new GrassCoverErosionOutwardsWaveConditionsCalculation(); var calculationWithOutput = new GrassCoverErosionOutwardsWaveConditionsCalculation { Output = new GrassCoverErosionOutwardsWaveConditionsOutput(Enumerable.Empty()) }; var calculationWithOutputAndHydraulicBoundaryLocation = new GrassCoverErosionOutwardsWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new GrassCoverErosionOutwardsWaveConditionsOutput(Enumerable.Empty()) }; var calculationWithHydraulicBoundaryLocation = new GrassCoverErosionOutwardsWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; var subCalculation = new GrassCoverErosionOutwardsWaveConditionsCalculation(); var subCalculationWithOutput = new GrassCoverErosionOutwardsWaveConditionsCalculation { Output = new GrassCoverErosionOutwardsWaveConditionsOutput(Enumerable.Empty()) }; var subCalculationWithOutputAndHydraulicBoundaryLocation = new GrassCoverErosionOutwardsWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation }, Output = new GrassCoverErosionOutwardsWaveConditionsOutput(Enumerable.Empty()) }; var subCalculationWithHydraulicBoundaryLocation = new GrassCoverErosionOutwardsWaveConditionsCalculation { InputParameters = { HydraulicBoundaryLocation = hydraulicBoundaryLocation } }; failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculation); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculationWithOutput); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculationWithOutputAndHydraulicBoundaryLocation); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculationWithHydraulicBoundaryLocation); failureMechanism.WaveConditionsCalculationGroup.Children.Add(new CalculationGroup { Children = { subCalculation, subCalculationWithOutput, subCalculationWithOutputAndHydraulicBoundaryLocation, subCalculationWithHydraulicBoundaryLocation } }); } } }