// 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 Core.Common.Base;
using Core.Common.Base.Geometry;
using Ringtoets.Common.Data.AssessmentSection;
using Ringtoets.Common.Data.Contribution;
using Ringtoets.Common.Data.FailureMechanism;
using Ringtoets.GrassCoverErosionInwards.Data;
using Ringtoets.HeightStructures.Data;
using Ringtoets.HydraRing.Data;
using Ringtoets.Integration.Data.Properties;
using Ringtoets.Integration.Data.StandAlone;
using Ringtoets.Piping.Data;
namespace Ringtoets.Integration.Data
{
///
/// The section to be assessed by the user for safety in regards of various failure mechanisms.
///
public sealed class AssessmentSection : Observable, IAssessmentSection
{
private ReferenceLine referenceLine;
private FailureMechanismContribution contribution;
///
/// Initializes a new instance of the class.
///
/// The composition of the assessment section, e.g. what
/// type of elements can be found within the assessment section.
public AssessmentSection(AssessmentSectionComposition composition)
{
Name = Resources.AssessmentSection_DisplayName;
PipingFailureMechanism = new PipingFailureMechanism();
GrassCoverErosionInwards = new GrassCoverErosionInwardsFailureMechanism();
MacrostabilityInwards = new MacrostabilityInwardsFailureMechanism();
MacrostabilityOutwards = new MacrostabilityOutwardsFailureMechanism();
Microstability = new MicrostabilityFailureMechanism();
StabilityStoneCover = new StabilityStoneCoverFailureMechanism();
WaveImpactAsphaltCover = new WaveImpactAsphaltCoverFailureMechanism();
WaterPressureAsphaltCover = new WaterPressureAsphaltCoverFailureMechanism();
GrassCoverErosionOutwards = new GrassCoverErosionOutwardsFailureMechanism();
GrassCoverSlipOffOutwards = new GrassCoverSlipOffOutwardsFailureMechanism();
GrassCoverSlipOffInwards = new GrassCoverSlipOffInwardsFailureMechanism();
HeightStructures = new HeightStructuresFailureMechanism();
ClosingStructure = new ClosingStructureFailureMechanism();
StrengthStabilityPointConstruction = new StrengthStabilityPointConstructionFailureMechanism();
StrengthStabilityLengthwiseConstruction = new StrengthStabilityLengthwiseConstructionFailureMechanism();
PipingStructure = new PipingStructureFailureMechanism();
DuneErosion = new DuneErosionFailureMechanism();
TechnicalInnovation = new TechnicalInnovationFailureMechanism();
FailureMechanismContribution = new FailureMechanismContribution(GetContributingFailureMechanisms(), 30, 30000);
ChangeComposition(composition);
}
///
/// Gets the "Dijken en dammen - Piping" failure mechanism.
///
public PipingFailureMechanism PipingFailureMechanism { get; private set; }
///
/// Gets the "Dijken en dammen - Grasbekleding erosie kruin en binnentalud" failure mechanism.
///
public GrassCoverErosionInwardsFailureMechanism GrassCoverErosionInwards { get; private set; }
///
/// Gets the "Dijken en dammen - Macrostabiliteit binnenwaarts" failure mechanism.
///
public MacrostabilityInwardsFailureMechanism MacrostabilityInwards { get; private set; }
///
/// Gets the "Dijken en dammen - Macrostabiliteit buitenwaarts" failure mechanism.
///
public MacrostabilityOutwardsFailureMechanism MacrostabilityOutwards { get; private set; }
///
/// Gets the "Dijken en dammen - Microstabiliteit" failure mechanism.
///
public MicrostabilityFailureMechanism Microstability { get; private set; }
///
/// Gets the "Dijken en dammen - Stabiliteit steenzetting" failure mechanism.
///
public StabilityStoneCoverFailureMechanism StabilityStoneCover { get; private set; }
///
/// Gets the "Dijken en dammen - Golfklappen op asfaltbekledingen" failure mechanism.
///
public WaveImpactAsphaltCoverFailureMechanism WaveImpactAsphaltCover { get; private set; }
///
/// Gets the "Dijken en dammen - Wateroverdruk bij asfaltbekleding" failure mechanism.
///
public WaterPressureAsphaltCoverFailureMechanism WaterPressureAsphaltCover { get; private set; }
///
/// Gets the "Dijken en dammen - Grasbekleding erosie buitentalud" failure mechanism.
///
public GrassCoverErosionOutwardsFailureMechanism GrassCoverErosionOutwards { get; private set; }
///
/// Gets the "Dijken en dammen - Grasbekleding afschuiven buitentalud" failure mechanism.
///
public GrassCoverSlipOffOutwardsFailureMechanism GrassCoverSlipOffOutwards { get; private set; }
///
/// Gets the "Dijken en dammen - Grasbekleding afschuiven binnentalud" failure mechanism.
///
public GrassCoverSlipOffInwardsFailureMechanism GrassCoverSlipOffInwards { get; private set; }
///
/// Gets the "Kunstwerken - Hoogte kunstwerk" failure mechanism.
///
public HeightStructuresFailureMechanism HeightStructures { get; private set; }
///
/// Gets the "Kunstwerken - Betrouwbaarheid sluiting kunstwerk" failure mechanism.
///
public ClosingStructureFailureMechanism ClosingStructure { get; private set; }
///
/// Gets the "Kunstwerken - Piping bij kunstwerk" failure mechanism.
///
public PipingStructureFailureMechanism PipingStructure { get; private set; }
///
/// Gets the "Kunstwerken - Sterkte en stabiliteit puntconstructies" failure mechanism.
///
public StrengthStabilityPointConstructionFailureMechanism StrengthStabilityPointConstruction { get; private set; }
///
/// Gets the "Kunstwerken - Sterkte en stabiliteit langsconstructies" failure mechanism.
///
public StrengthStabilityLengthwiseConstructionFailureMechanism StrengthStabilityLengthwiseConstruction { get; private set; }
///
/// Gets the "Duinwaterkering - Duinafslag" failure mechanism.
///
public DuneErosionFailureMechanism DuneErosion { get; private set; }
///
/// Gets the "Technische innovaties - Technische innovaties" failure mechanism.
///
public TechnicalInnovationFailureMechanism TechnicalInnovation { get; private set; }
public string Name { get; set; }
public string Comments { get; set; }
public AssessmentSectionComposition Composition { get; private set; }
public ReferenceLine ReferenceLine
{
get
{
return referenceLine;
}
set
{
referenceLine = value;
PipingFailureMechanism.NormProbabilityInput.SectionLength = value == null ? double.NaN : Math2D.Length(value.Points);
}
}
public FailureMechanismContribution FailureMechanismContribution
{
get
{
return contribution;
}
private set
{
contribution = value;
PipingFailureMechanism.NormProbabilityInput.Norm = value.Norm;
HeightStructures.NormProbabilityInput.Norm = value.Norm;
}
}
public HydraulicBoundaryDatabase HydraulicBoundaryDatabase { get; set; }
public long StorageId { get; set; }
public IEnumerable GetFailureMechanisms()
{
yield return PipingFailureMechanism;
yield return GrassCoverErosionInwards;
yield return MacrostabilityInwards;
yield return MacrostabilityOutwards;
yield return Microstability;
yield return StabilityStoneCover;
yield return WaveImpactAsphaltCover;
yield return WaterPressureAsphaltCover;
yield return GrassCoverErosionOutwards;
yield return GrassCoverSlipOffOutwards;
yield return GrassCoverSlipOffInwards;
yield return HeightStructures;
yield return ClosingStructure;
yield return PipingStructure;
yield return StrengthStabilityPointConstruction;
yield return StrengthStabilityLengthwiseConstruction;
yield return DuneErosion;
yield return TechnicalInnovation;
}
private IEnumerable GetContributingFailureMechanisms()
{
yield return PipingFailureMechanism;
yield return GrassCoverErosionInwards;
yield return MacrostabilityInwards;
yield return StabilityStoneCover;
yield return WaveImpactAsphaltCover;
yield return GrassCoverErosionOutwards;
yield return GrassCoverSlipOffOutwards;
yield return HeightStructures;
yield return ClosingStructure;
yield return PipingStructure;
yield return StrengthStabilityPointConstruction;
yield return DuneErosion;
}
public void ChangeComposition(AssessmentSectionComposition newComposition)
{
switch (newComposition)
{
case AssessmentSectionComposition.Dike:
PipingFailureMechanism.Contribution = 24;
GrassCoverErosionInwards.Contribution = 24;
MacrostabilityInwards.Contribution = 4;
StabilityStoneCover.Contribution = 3;
WaveImpactAsphaltCover.Contribution = 1;
GrassCoverErosionOutwards.Contribution = 5;
GrassCoverSlipOffOutwards.Contribution = 1;
HeightStructures.Contribution = 24;
ClosingStructure.Contribution = 4;
PipingStructure.Contribution = 2;
StrengthStabilityPointConstruction.Contribution = 2;
DuneErosion.Contribution = 0;
FailureMechanismContribution.UpdateContributions(GetContributingFailureMechanisms(), 30);
break;
case AssessmentSectionComposition.Dune:
PipingFailureMechanism.Contribution = 0;
GrassCoverErosionInwards.Contribution = 0;
MacrostabilityInwards.Contribution = 0;
StabilityStoneCover.Contribution = 0;
WaveImpactAsphaltCover.Contribution = 0;
GrassCoverErosionOutwards.Contribution = 0;
GrassCoverSlipOffOutwards.Contribution = 0;
HeightStructures.Contribution = 0;
ClosingStructure.Contribution = 0;
PipingStructure.Contribution = 0;
StrengthStabilityPointConstruction.Contribution = 0;
DuneErosion.Contribution = 70;
FailureMechanismContribution.UpdateContributions(GetContributingFailureMechanisms(), 30);
break;
case AssessmentSectionComposition.DikeAndDune:
PipingFailureMechanism.Contribution = 24;
GrassCoverErosionInwards.Contribution = 24;
MacrostabilityInwards.Contribution = 4;
StabilityStoneCover.Contribution = 3;
WaveImpactAsphaltCover.Contribution = 1;
GrassCoverErosionOutwards.Contribution = 5;
GrassCoverSlipOffOutwards.Contribution = 1;
HeightStructures.Contribution = 24;
ClosingStructure.Contribution = 4;
PipingStructure.Contribution = 2;
StrengthStabilityPointConstruction.Contribution = 2;
DuneErosion.Contribution = 10;
FailureMechanismContribution.UpdateContributions(GetContributingFailureMechanisms(), 20);
break;
default:
throw new NotImplementedException();
}
Composition = newComposition;
}
}
}