// 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.Collections.Generic; using System.IO; using System.Linq; using Core.Common.Base; using Core.Common.Base.Data; using Core.Common.Base.Geometry; using Core.Common.Controls.Commands; using Core.Common.Gui; using Core.Common.Utils.IO; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Probabilistics; using Ringtoets.Common.IO.ReferenceLines; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.HeightStructures.Data; using Ringtoets.HydraRing.Data; using Ringtoets.Integration.Data; using Ringtoets.Integration.Plugin.FileImporters; using Ringtoets.Piping.Data; using Ringtoets.Piping.Plugin.FileImporter; using Ringtoets.StabilityPointStructures.Data; using Ringtoets.StabilityStoneCover.Data; using Ringtoets.WaveImpactAsphaltCover.Data; namespace Demo.Ringtoets.Commands { /// /// Command that adds a new with demo data to the project tree. /// public class AddNewDemoAssessmentSectionCommand : ICommand { private readonly IProjectOwner projectOwner; public AddNewDemoAssessmentSectionCommand(IProjectOwner projectOwner) { this.projectOwner = projectOwner; } public bool Checked { get { return false; } } public void Execute() { var project = (RingtoetsProject) projectOwner.Project; project.AssessmentSections.Add(CreateNewDemoAssessmentSection()); project.NotifyObservers(); } private AssessmentSection CreateNewDemoAssessmentSection() { var demoAssessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { Id = "6-3", Name = "Demo traject" }; InitializeDemoReferenceLine(demoAssessmentSection); InitializeDemoHydraulicBoundaryDatabase(demoAssessmentSection); InitializeDemoFailureMechanismSections(demoAssessmentSection); InitializeGrassCoverErosionInwardsData(demoAssessmentSection); InitializeGrassCoverErosionOutwardsData(demoAssessmentSection); InitializeHeightStructuresData(demoAssessmentSection); InitializeDemoPipingData(demoAssessmentSection); InitializeStabilityPointStructuresData(demoAssessmentSection); InitializeStabilityStoneCoverData(demoAssessmentSection); InitializeWaveImpactAsphaltCoverData(demoAssessmentSection); return demoAssessmentSection; } private void InitializeDemoReferenceLine(AssessmentSection demoAssessmentSection) { using (var embeddedResourceFileWriter = new EmbeddedResourceFileWriter(GetType().Assembly, true, "traject_6-3.shp", "traject_6-3.dbf", "traject_6-3.prj", "traject_6-3.shx")) { var importer = new ReferenceLineImporter(demoAssessmentSection, Path.Combine(embeddedResourceFileWriter.TargetFolderPath, "traject_6-3.shp")); importer.Import(); } } private void InitializeDemoFailureMechanismSections(AssessmentSection demoAssessmentSection) { using (var embeddedResourceFileWriter = new EmbeddedResourceFileWriter(GetType().Assembly, true, "traject_6-3_vakken.shp", "traject_6-3_vakken.dbf", "traject_6-3_vakken.prj", "traject_6-3_vakken.shx")) { IFailureMechanism[] failureMechanisms = demoAssessmentSection.GetFailureMechanisms().ToArray(); for (int i = 0; i < failureMechanisms.Length; i++) { if (i == 0) { var importer = new FailureMechanismSectionsImporter(failureMechanisms[i], demoAssessmentSection.ReferenceLine, Path.Combine(embeddedResourceFileWriter.TargetFolderPath, "traject_6-3_vakken.shp")); importer.Import(); } else { // Copy same FailureMechanismSection instances to other failure mechanisms foreach (FailureMechanismSection section in failureMechanisms[0].Sections) { FailureMechanismSection clonedSection = DeepCloneSection(section); failureMechanisms[i].AddSection(clonedSection); } } } } } private static FailureMechanismSection DeepCloneSection(FailureMechanismSection section) { return new FailureMechanismSection(section.Name, section.Points.Select(p => new Point2D(p.X, p.Y))); } #region FailureMechanisms #region GrassCoverErosionInwardsFailureMechanism private static void InitializeGrassCoverErosionInwardsData(AssessmentSection demoAssessmentSection) { GrassCoverErosionInwardsFailureMechanism failureMechanism = demoAssessmentSection.GrassCoverErosionInwards; var calculation = new GrassCoverErosionInwardsCalculation(); failureMechanism.CalculationsGroup.Children.Add(calculation); calculation.InputParameters.HydraulicBoundaryLocation = demoAssessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001); calculation.InputParameters.NotifyObservers(); } #endregion #region GrassCoverErosionOutwardsFailureMechanism private static void InitializeGrassCoverErosionOutwardsData(AssessmentSection demoAssessmentSection) { GrassCoverErosionOutwardsFailureMechanism failureMechanism = demoAssessmentSection.GrassCoverErosionOutwards; var calculation = new GrassCoverErosionOutwardsWaveConditionsCalculation(); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculation); calculation.InputParameters.HydraulicBoundaryLocation = demoAssessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001); calculation.InputParameters.NotifyObservers(); } private static void SetGrassCoverErosionOutwardsHydraulicBoundaryLocationDesignWaterLevelValues(GrassCoverErosionOutwardsFailureMechanism failureMechanism) { ObservableList locations = failureMechanism.HydraulicBoundaryLocations; locations.ElementAt(0).DesignWaterLevel = (RoundedDouble) 7.19; locations.ElementAt(1).DesignWaterLevel = (RoundedDouble) 7.19; locations.ElementAt(2).DesignWaterLevel = (RoundedDouble) 7.18; locations.ElementAt(3).DesignWaterLevel = (RoundedDouble) 7.18; locations.ElementAt(4).DesignWaterLevel = (RoundedDouble) 7.18; locations.ElementAt(5).DesignWaterLevel = (RoundedDouble) 7.39; locations.ElementAt(6).DesignWaterLevel = (RoundedDouble) 7.39; locations.ElementAt(7).DesignWaterLevel = (RoundedDouble) 7.39; locations.ElementAt(8).DesignWaterLevel = (RoundedDouble) 7.40; locations.ElementAt(9).DesignWaterLevel = (RoundedDouble) 7.40; locations.ElementAt(10).DesignWaterLevel = (RoundedDouble) 7.40; locations.ElementAt(11).DesignWaterLevel = (RoundedDouble) 7.40; locations.ElementAt(12).DesignWaterLevel = (RoundedDouble) 7.41; locations.ElementAt(13).DesignWaterLevel = (RoundedDouble) 7.41; locations.ElementAt(14).DesignWaterLevel = (RoundedDouble) 7.41; locations.ElementAt(15).DesignWaterLevel = (RoundedDouble) 6.91; locations.ElementAt(16).DesignWaterLevel = (RoundedDouble) 7.53; locations.ElementAt(17).DesignWaterLevel = (RoundedDouble) 7.81; } private static void SetGrassCoverErosionOutwardsHydraulicBoundaryLocationDesignWaterLevelCalculationConvergence(ICollection locations) { foreach (HydraulicBoundaryLocation hydraulicBoundaryLocation in locations) { hydraulicBoundaryLocation.DesignWaterLevelCalculationConvergence = CalculationConvergence.CalculatedConverged; } } private static void SetGrassCoverErosionOutwardsHydraulicBoundaryLocationWaveHeightValues(GrassCoverErosionOutwardsFailureMechanism failureMechanism) { ObservableList locations = failureMechanism.HydraulicBoundaryLocations; locations.ElementAt(0).WaveHeight = (RoundedDouble) 4.99; locations.ElementAt(1).WaveHeight = (RoundedDouble) 5.04; locations.ElementAt(2).WaveHeight = (RoundedDouble) 4.87; locations.ElementAt(3).WaveHeight = (RoundedDouble) 4.73; locations.ElementAt(4).WaveHeight = (RoundedDouble) 4.59; locations.ElementAt(5).WaveHeight = (RoundedDouble) 3.35; locations.ElementAt(6).WaveHeight = (RoundedDouble) 3.83; locations.ElementAt(7).WaveHeight = (RoundedDouble) 4.00; locations.ElementAt(8).WaveHeight = (RoundedDouble) 4.20; locations.ElementAt(9).WaveHeight = (RoundedDouble) 4.41; locations.ElementAt(10).WaveHeight = (RoundedDouble) 4.50; locations.ElementAt(11).WaveHeight = (RoundedDouble) 4.57; locations.ElementAt(12).WaveHeight = (RoundedDouble) 4.63; locations.ElementAt(13).WaveHeight = (RoundedDouble) 4.68; locations.ElementAt(14).WaveHeight = (RoundedDouble) 4.17; locations.ElementAt(15).WaveHeight = (RoundedDouble) 11.14; locations.ElementAt(16).WaveHeight = (RoundedDouble) 9.24; locations.ElementAt(17).WaveHeight = (RoundedDouble) 5.34; } private static void SetGrassCoverErosionOutwardsHydraulicBoundaryLocationWaveHeightCalculationConvergence(ICollection locations) { foreach (HydraulicBoundaryLocation hydraulicBoundaryLocation in locations) { hydraulicBoundaryLocation.WaveHeightCalculationConvergence = CalculationConvergence.CalculatedConverged; } } #endregion #region HeightStructuresFailureMechanism private static void InitializeHeightStructuresData(AssessmentSection demoAssessmentSection) { HeightStructuresFailureMechanism failureMechanism = demoAssessmentSection.HeightStructures; var calculation = new HeightStructuresCalculation(); failureMechanism.CalculationsGroup.Children.Add(calculation); calculation.InputParameters.HydraulicBoundaryLocation = demoAssessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001); calculation.InputParameters.NotifyObservers(); } #endregion #region PipingFailureMechanism private void InitializeDemoPipingData(AssessmentSection demoAssessmentSection) { var pipingFailureMechanism = demoAssessmentSection.PipingFailureMechanism; using (var embeddedResourceFileWriter = new EmbeddedResourceFileWriter(GetType().Assembly, true, "DR6_surfacelines.csv", "DR6_surfacelines.krp.csv")) { var surfaceLinesImporter = new PipingSurfaceLinesCsvImporter(pipingFailureMechanism.SurfaceLines, demoAssessmentSection.ReferenceLine, Path.Combine(embeddedResourceFileWriter.TargetFolderPath, "DR6_surfacelines.csv")); surfaceLinesImporter.Import(); } using (var embeddedResourceFileWriter = new EmbeddedResourceFileWriter(GetType().Assembly, true, "DR6.soil")) { var soilProfilesImporter = new PipingSoilProfilesImporter(pipingFailureMechanism.StochasticSoilModels, Path.Combine(embeddedResourceFileWriter.TargetFolderPath, "DR6.soil")); soilProfilesImporter.Import(); } var calculation = new PipingCalculationScenario(pipingFailureMechanism.GeneralInput); pipingFailureMechanism.CalculationsGroup.Children.Add(calculation); var originalPhreaticLevelExit = calculation.InputParameters.PhreaticLevelExit; calculation.InputParameters.PhreaticLevelExit = new NormalDistribution(originalPhreaticLevelExit.Mean.NumberOfDecimalPlaces) { Mean = (RoundedDouble) 3.0, StandardDeviation = originalPhreaticLevelExit.StandardDeviation }; calculation.InputParameters.SurfaceLine = pipingFailureMechanism.SurfaceLines.First(sl => sl.Name == "PK001_0001"); var stochasticSoilModel = pipingFailureMechanism.StochasticSoilModels.First(sm => sm.Name == "PK001_0001_Piping"); calculation.InputParameters.StochasticSoilModel = stochasticSoilModel; calculation.InputParameters.StochasticSoilProfile = stochasticSoilModel.StochasticSoilProfiles.First(sp => sp.SoilProfile.Name == "W1-6_0_1D1"); calculation.InputParameters.HydraulicBoundaryLocation = demoAssessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001); calculation.InputParameters.NotifyObservers(); } #endregion #region StabilityPointStructuresFailureMechanism private static void InitializeStabilityPointStructuresData(AssessmentSection demoAssessmentSection) { StabilityPointStructuresFailureMechanism failureMechanism = demoAssessmentSection.StabilityPointStructures; var calculation = new StabilityPointStructuresCalculation(); failureMechanism.CalculationsGroup.Children.Add(calculation); calculation.InputParameters.HydraulicBoundaryLocation = demoAssessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001); calculation.InputParameters.NotifyObservers(); } #endregion #region StabilityStoneCoverFailureMechanism private static void InitializeStabilityStoneCoverData(AssessmentSection demoAssessmentSection) { StabilityStoneCoverFailureMechanism failureMechanism = demoAssessmentSection.StabilityStoneCover; var calculation = new StabilityStoneCoverWaveConditionsCalculation(); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculation); calculation.InputParameters.HydraulicBoundaryLocation = demoAssessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001); calculation.InputParameters.NotifyObservers(); } #endregion #region WaveImpactAsphaltCoverFailureMechanism private static void InitializeWaveImpactAsphaltCoverData(AssessmentSection demoAssessmentSection) { WaveImpactAsphaltCoverFailureMechanism failureMechanism = demoAssessmentSection.WaveImpactAsphaltCover; var calculation = new WaveImpactAsphaltCoverWaveConditionsCalculation(); failureMechanism.WaveConditionsCalculationGroup.Children.Add(calculation); calculation.InputParameters.HydraulicBoundaryLocation = demoAssessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001); calculation.InputParameters.NotifyObservers(); } #endregion #endregion #region HydraulicBoundaryDatabase private void InitializeDemoHydraulicBoundaryDatabase(AssessmentSection demoAssessmentSection) { using (var embeddedResourceFileWriter = new EmbeddedResourceFileWriter(GetType().Assembly, false, "HRD dutch coast south.sqlite", "HLCD.sqlite")) { using (var hydraulicBoundaryDatabaseImporter = new HydraulicBoundaryDatabaseImporter()) { var filePath = Path.Combine(embeddedResourceFileWriter.TargetFolderPath, "HRD dutch coast south.sqlite"); hydraulicBoundaryDatabaseImporter.Import(demoAssessmentSection, filePath); } } SetHydraulicBoundaryLocationDesignWaterLevelValues(demoAssessmentSection.HydraulicBoundaryDatabase.Locations); SetHydraulicBoundaryLocationDesignWaterLevelCalculationConvergence(demoAssessmentSection.HydraulicBoundaryDatabase.Locations); SetHydraulicBoundaryLocationWaveHeightValues(demoAssessmentSection.HydraulicBoundaryDatabase.Locations); SetHydraulicBoundaryLocationWaveHeightCalculationConvergence(demoAssessmentSection.HydraulicBoundaryDatabase.Locations); demoAssessmentSection.GrassCoverErosionOutwards.SetGrassCoverErosionOutwardsHydraulicBoundaryLocations(demoAssessmentSection.HydraulicBoundaryDatabase); SetGrassCoverErosionOutwardsHydraulicBoundaryLocationDesignWaterLevelValues(demoAssessmentSection.GrassCoverErosionOutwards); SetGrassCoverErosionOutwardsHydraulicBoundaryLocationDesignWaterLevelCalculationConvergence( demoAssessmentSection.GrassCoverErosionOutwards.HydraulicBoundaryLocations); SetGrassCoverErosionOutwardsHydraulicBoundaryLocationWaveHeightValues(demoAssessmentSection.GrassCoverErosionOutwards); SetGrassCoverErosionOutwardsHydraulicBoundaryLocationWaveHeightCalculationConvergence( demoAssessmentSection.GrassCoverErosionOutwards.HydraulicBoundaryLocations); } private static void SetHydraulicBoundaryLocationDesignWaterLevelValues(ICollection locations) { locations.ElementAt(0).DesignWaterLevel = (RoundedDouble) 5.78; locations.ElementAt(1).DesignWaterLevel = (RoundedDouble) 5.77; locations.ElementAt(2).DesignWaterLevel = (RoundedDouble) 5.77; locations.ElementAt(3).DesignWaterLevel = (RoundedDouble) 5.77; locations.ElementAt(4).DesignWaterLevel = (RoundedDouble) 5.77; locations.ElementAt(5).DesignWaterLevel = (RoundedDouble) 5.93; locations.ElementAt(6).DesignWaterLevel = (RoundedDouble) 5.93; locations.ElementAt(7).DesignWaterLevel = (RoundedDouble) 5.93; locations.ElementAt(8).DesignWaterLevel = (RoundedDouble) 5.93; locations.ElementAt(9).DesignWaterLevel = (RoundedDouble) 5.93; locations.ElementAt(10).DesignWaterLevel = (RoundedDouble) 5.93; locations.ElementAt(11).DesignWaterLevel = (RoundedDouble) 5.93; locations.ElementAt(12).DesignWaterLevel = (RoundedDouble) 5.93; locations.ElementAt(13).DesignWaterLevel = (RoundedDouble) 5.93; locations.ElementAt(14).DesignWaterLevel = (RoundedDouble) 5.93; locations.ElementAt(15).DesignWaterLevel = (RoundedDouble) 5.54; locations.ElementAt(16).DesignWaterLevel = (RoundedDouble) 5.86; locations.ElementAt(17).DesignWaterLevel = (RoundedDouble) 6.0; } private static void SetHydraulicBoundaryLocationDesignWaterLevelCalculationConvergence(ICollection locations) { foreach (HydraulicBoundaryLocation hydraulicBoundaryLocation in locations) { hydraulicBoundaryLocation.DesignWaterLevelCalculationConvergence = CalculationConvergence.CalculatedConverged; } } private static void SetHydraulicBoundaryLocationWaveHeightValues(ICollection locations) { locations.ElementAt(0).WaveHeight = (RoundedDouble) 4.13374; locations.ElementAt(1).WaveHeight = (RoundedDouble) 4.19044; locations.ElementAt(2).WaveHeight = (RoundedDouble) 4.01717; locations.ElementAt(3).WaveHeight = (RoundedDouble) 3.87408; locations.ElementAt(4).WaveHeight = (RoundedDouble) 3.73281; locations.ElementAt(5).WaveHeight = (RoundedDouble) 2.65268; locations.ElementAt(6).WaveHeight = (RoundedDouble) 3.04333; locations.ElementAt(7).WaveHeight = (RoundedDouble) 3.19952; locations.ElementAt(8).WaveHeight = (RoundedDouble) 3.3554; locations.ElementAt(9).WaveHeight = (RoundedDouble) 3.52929; locations.ElementAt(10).WaveHeight = (RoundedDouble) 3.62194; locations.ElementAt(11).WaveHeight = (RoundedDouble) 3.6851; locations.ElementAt(12).WaveHeight = (RoundedDouble) 3.72909; locations.ElementAt(13).WaveHeight = (RoundedDouble) 3.74794; locations.ElementAt(14).WaveHeight = (RoundedDouble) 3.29686; locations.ElementAt(15).WaveHeight = (RoundedDouble) 9.57558; locations.ElementAt(16).WaveHeight = (RoundedDouble) 8.01959; locations.ElementAt(17).WaveHeight = (RoundedDouble) 4.11447; } private static void SetHydraulicBoundaryLocationWaveHeightCalculationConvergence(ICollection locations) { foreach (HydraulicBoundaryLocation hydraulicBoundaryLocation in locations) { hydraulicBoundaryLocation.WaveHeightCalculationConvergence = CalculationConvergence.CalculatedConverged; } } #endregion } }