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