Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PipingCalculationConfigurationHelper.cs =================================================================== diff -u -re473fe41d29060803b0d8f560a48ec8b9618bea4 -r0a3678eabc5460352ffbfff25a9dca65edfef546 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PipingCalculationConfigurationHelper.cs (.../PipingCalculationConfigurationHelper.cs) (revision e473fe41d29060803b0d8f560a48ec8b9618bea4) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PipingCalculationConfigurationHelper.cs (.../PipingCalculationConfigurationHelper.cs) (revision 0a3678eabc5460352ffbfff25a9dca65edfef546) @@ -17,16 +17,18 @@ /// and the . /// /// Surface lines to generate the structure for and to use to configure - /// with. + /// with. /// The soil models from which profiles are taken to configure with. + /// + /// /// - public static IEnumerable GenerateCalculationsStructure(IEnumerable surfaceLines, IEnumerable soilModels) + public static IEnumerable GenerateCalculationsStructure(IEnumerable surfaceLines, IEnumerable soilModels, GeneralPipingInput generalInput, SemiProbabilisticPipingInput semiProbabilisticInput) { if (surfaceLines == null) { return Enumerable.Empty(); } - var pipingCalculationGroups = surfaceLines.Select(sl => CreateCalculationGroup(sl, soilModels)); + var pipingCalculationGroups = surfaceLines.Select(sl => CreateCalculationGroup(sl, soilModels, generalInput, semiProbabilisticInput)); return pipingCalculationGroups; } @@ -58,26 +60,26 @@ return soilProfileObjectsForCalculation; } - private static IPipingCalculationItem CreateCalculationGroup(RingtoetsPipingSurfaceLine surfaceLine, IEnumerable soilModels) + private static IPipingCalculationItem CreateCalculationGroup(RingtoetsPipingSurfaceLine surfaceLine, IEnumerable soilModels, GeneralPipingInput generalInput, SemiProbabilisticPipingInput semiProbabilisticInput) { var pipingCalculationGroup = new PipingCalculationGroup(surfaceLine.Name, true); if (soilModels != null) { foreach (var profile in GetPipingSoilProfilesForSurfaceLine(surfaceLine, soilModels)) { - pipingCalculationGroup.Children.Add(CreatePipingCalculation(surfaceLine, profile, pipingCalculationGroup.Children)); + pipingCalculationGroup.Children.Add(CreatePipingCalculation(surfaceLine, profile, pipingCalculationGroup.Children, generalInput, semiProbabilisticInput)); } } return pipingCalculationGroup; } - private static IPipingCalculationItem CreatePipingCalculation(RingtoetsPipingSurfaceLine surfaceLine, PipingSoilProfile profile, IEnumerable calculations) + private static IPipingCalculationItem CreatePipingCalculation(RingtoetsPipingSurfaceLine surfaceLine, PipingSoilProfile profile, IEnumerable calculations, GeneralPipingInput generalInput, SemiProbabilisticPipingInput semiProbabilisticInput) { var nameBase = string.Format("{0} {1}", surfaceLine.Name, profile.Name); var name = NamingHelper.GetUniqueName(calculations, nameBase, c => c.Name); - return new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()) + return new PipingCalculation(generalInput, semiProbabilisticInput) { Name = name, InputParameters = Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs =================================================================== diff -u -r7b59ab6aaa9f81445151848d8b3aa651062ee6b7 -r0a3678eabc5460352ffbfff25a9dca65edfef546 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision 7b59ab6aaa9f81445151848d8b3aa651062ee6b7) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision 0a3678eabc5460352ffbfff25a9dca65edfef546) @@ -587,7 +587,7 @@ { var dialog = new PipingSurfaceLineSelectionDialog(Parent, pipingFailureMechanism.SurfaceLines); dialog.ShowDialog(); - foreach(var item in PipingCalculationConfigurationHelper.GenerateCalculationsStructure(dialog.SelectedSurfaceLines, pipingFailureMechanism.StochasticSoilModels)) + foreach (var item in PipingCalculationConfigurationHelper.GenerateCalculationsStructure(dialog.SelectedSurfaceLines, (IEnumerable)pipingFailureMechanism.StochasticSoilModels, pipingFailureMechanism.GeneralInput, pipingFailureMechanism.SemiProbabilisticInput)) { pipingCalculationGroup.Children.Add(item); } Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs =================================================================== diff -u -r7b59ab6aaa9f81445151848d8b3aa651062ee6b7 -r0a3678eabc5460352ffbfff25a9dca65edfef546 --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 7b59ab6aaa9f81445151848d8b3aa651062ee6b7) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 0a3678eabc5460352ffbfff25a9dca65edfef546) @@ -764,14 +764,14 @@ var view = new PipingSurfaceLineSelectionDialog(Gui.MainWindow, nodeData.AvailablePipingSurfaceLines); view.ShowDialog(); - GeneratePipingCalculations(nodeData.WrappedData, view.SelectedSurfaceLines, nodeData.AvailableStochasticSoilModels); + GeneratePipingCalculations(nodeData.WrappedData, view.SelectedSurfaceLines, nodeData.AvailableStochasticSoilModels, nodeData.PipingFailureMechanism.GeneralInput, nodeData.PipingFailureMechanism.SemiProbabilisticInput); nodeData.NotifyObservers(); } - private void GeneratePipingCalculations(PipingCalculationGroup target, IEnumerable surfaceLines, IEnumerable soilModels) + private void GeneratePipingCalculations(PipingCalculationGroup target, IEnumerable surfaceLines, IEnumerable soilModels, GeneralPipingInput generalInput, SemiProbabilisticPipingInput semiProbabilisticInput) { - foreach (var group in PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, soilModels)) + foreach (var group in PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, soilModels, generalInput, semiProbabilisticInput)) { target.Children.Add(group); } Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PipingCalculationConfigurationHelperTest.cs =================================================================== diff -u -r3227558c8a8b0542e82d0597f0fc480954a6a44d -r0a3678eabc5460352ffbfff25a9dca65edfef546 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PipingCalculationConfigurationHelperTest.cs (.../PipingCalculationConfigurationHelperTest.cs) (revision 3227558c8a8b0542e82d0597f0fc480954a6a44d) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PipingCalculationConfigurationHelperTest.cs (.../PipingCalculationConfigurationHelperTest.cs) (revision 0a3678eabc5460352ffbfff25a9dca65edfef546) @@ -1,8 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using Core.Common.Base.Geometry; using NUnit.Framework; using Ringtoets.Piping.Data; +using Ringtoets.Piping.Data.TestUtil; using Ringtoets.Piping.Primitives; namespace Ringtoets.Piping.Forms.Test @@ -230,7 +232,7 @@ new PipingSoilLayer(-5.0), new PipingSoilLayer(-2.0), new PipingSoilLayer(1.0) - }, SoilProfileType.SoilProfile1D, 1); + }, SoilProfileType.SoilProfile1D, 1); var soilProfile2 = new PipingSoilProfile("Profile 2", -8.0, new[] { new PipingSoilLayer(-4.0), @@ -250,7 +252,7 @@ new StochasticSoilProfile(1.0, SoilProfileType.SoilProfile1D, 1) { SoilProfile = soilProfile1 - }, + } }); var soilModel2 = new StochasticSoilModel(1, "A", "B"); @@ -300,7 +302,7 @@ public void GenerateCalculationsStructure_WithoutSurfaceLines_ReturnsEmptyCollection() { // Call - var result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(null, null).ToList(); + var result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(null, null, null, null).ToList(); // Assert Assert.AreEqual(0, result.Count); @@ -310,13 +312,111 @@ public void GenerateCalculationsStructure_WithEmptySurfaceLines_ReturnsEmptyCollection() { // Call - var result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(Enumerable.Empty(), null).ToList(); + var result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(Enumerable.Empty(), null, null, null).ToList(); // Assert Assert.AreEqual(0, result.Count); } [Test] + public void GenerateCalculationsStructure_WithSurfaceLineAndSoilModelWithoutGeneralInput_ThrowsArgumentNullException() + { + // Setup + var soilProfile1 = new PipingSoilProfile("Profile 1", -10.0, new[] + { + new PipingSoilLayer(-5.0), + new PipingSoilLayer(-2.0), + new PipingSoilLayer(1.0) + }, SoilProfileType.SoilProfile1D, 1); + + var soilModel = new StochasticSoilModel(1, "A", "B"); + soilModel.Geometry.AddRange(new[] + { + new Point2D(1.0, 0.0), + new Point2D(5.0, 0.0) + }); + soilModel.StochasticSoilProfiles.Add( + new StochasticSoilProfile(0.3, SoilProfileType.SoilProfile1D, 1) + { + SoilProfile = soilProfile1 + } + ); + var availableSoilModels = new[] + { + soilModel + }; + + var surfaceLine = new RingtoetsPipingSurfaceLine(); + surfaceLine.SetGeometry(new[] + { + new Point3D(3.0, 5.0, 0.0), + new Point3D(3.0, 0.0, 1.0), + new Point3D(3.0, -5.0, 0.0) + }); + + var surfaceLines = new[] + { + surfaceLine + }; + + // Call + TestDelegate test = () => PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels, null, new SemiProbabilisticPipingInput()).ToList(); + + // Assert + var parameter = Assert.Throws(test).ParamName; + Assert.AreEqual("generalInputParameters", parameter); + } + + [Test] + public void GenerateCalculationsStructure_WithSurfaceLineAndSoilModelWithoutSemiProbabilisticInput_ThrowsArgumentNullException() + { + // Setup + var soilProfile1 = new PipingSoilProfile("Profile 1", -10.0, new[] + { + new PipingSoilLayer(-5.0), + new PipingSoilLayer(-2.0), + new PipingSoilLayer(1.0) + }, SoilProfileType.SoilProfile1D, 1); + + var soilModel = new StochasticSoilModel(1, "A", "B"); + soilModel.Geometry.AddRange(new[] + { + new Point2D(1.0, 0.0), + new Point2D(5.0, 0.0) + }); + soilModel.StochasticSoilProfiles.Add( + new StochasticSoilProfile(0.3, SoilProfileType.SoilProfile1D, 1) + { + SoilProfile = soilProfile1 + } + ); + var availableSoilModels = new[] + { + soilModel + }; + + var surfaceLine = new RingtoetsPipingSurfaceLine(); + surfaceLine.SetGeometry(new[] + { + new Point3D(3.0, 5.0, 0.0), + new Point3D(3.0, 0.0, 1.0), + new Point3D(3.0, -5.0, 0.0) + }); + + var surfaceLines = new[] + { + surfaceLine + }; + + // Call + TestDelegate test = () => PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels, new GeneralPipingInput(), null).ToList(); + + // Assert + var parameter = Assert.Throws(test).ParamName; + Assert.AreEqual("semiProbabilisticInputParameters", parameter); + } + + [Test] public void GenerateCalculationsStructure_WithSurfaceLinesWithoutSoilModels_ReturnsFourEmptyGroups() { // Setup @@ -346,7 +446,7 @@ }; // Call - var result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(ringtoetsPipingSurfaceLines, null).ToList(); + var result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(ringtoetsPipingSurfaceLines, null, null, null).ToList(); // Assert Assert.AreEqual(4, result.Count); @@ -397,7 +497,7 @@ }; // Call - var result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(ringtoetsPipingSurfaceLines, Enumerable.Empty()).ToList(); + var result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(ringtoetsPipingSurfaceLines, Enumerable.Empty(), null, null).ToList(); // Assert Assert.AreEqual(4, result.Count); @@ -471,7 +571,7 @@ }; // Call - IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels).ToList(); + IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels, new GeneralPipingInput(), new SemiProbabilisticPipingInput()).ToList(); // Assert Assert.AreEqual(1, result.Count()); @@ -520,7 +620,7 @@ }; // Call - IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels).ToList(); + IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels, null, null).ToList(); // Assert Assert.AreEqual(1, result.Count()); @@ -583,7 +683,7 @@ }; // Call - IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels).ToList(); + IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels, null, null).ToList(); // Assert Assert.AreEqual(1, result.Count()); @@ -622,7 +722,7 @@ new StochasticSoilProfile(1.0, SoilProfileType.SoilProfile1D, 1) { SoilProfile = soilProfile1 - }, + } }); var soilModel2 = new StochasticSoilModel(1, "A", "B"); @@ -658,7 +758,7 @@ }; // Call - IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels).ToList(); + IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels, new GeneralPipingInput(), new SemiProbabilisticPipingInput()).ToList(); // Assert Assert.AreEqual(1, result.Count()); @@ -710,7 +810,7 @@ new StochasticSoilProfile(1.0, SoilProfileType.SoilProfile1D, 2) { SoilProfile = soilProfile2 - }, + } }); var soilModel2 = new StochasticSoilModel(1, "A", "B"); @@ -760,7 +860,7 @@ }; // Call - IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels).ToList(); + IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels, new GeneralPipingInput(), new SemiProbabilisticPipingInput()).ToList(); // Assert Assert.AreEqual(2, result.Count()); @@ -790,7 +890,7 @@ } [Test] - public void GenerateCalculationsStructure_Always_CreateCalculationsWithSurfaceLineNameAndSoilProfileName() + public void GenerateCalculationsStructure_Always_CreateCalculationsWithSurfaceLineNameSoilProfileNameGeneralInputAndSemiProbabilisticInput() { // Setup var soilProfile1 = new PipingSoilProfile("Profile 1", -10.0, new[] @@ -844,17 +944,26 @@ surfaceLine }; + GeneralPipingInput generalInput = new GeneralPipingInput(); + SemiProbabilisticPipingInput semiProbabilisticInput = new SemiProbabilisticPipingInput(); + // Call - IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels).ToList(); + IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels, generalInput, semiProbabilisticInput).ToList(); // Assert var group = result.First(sl => sl.Name == surfaceLine.Name) as PipingCalculationGroup; Assert.NotNull(group); - var calculationInput1 = (PipingCalculation)group.Children[0]; - var calculationInput2 = (PipingCalculation)group.Children[1]; + var calculationInput1 = (PipingCalculation) group.Children[0]; + var calculationInput2 = (PipingCalculation) group.Children[1]; Assert.AreEqual(string.Format("{0} {1}", surfaceLine.Name, soilProfile1.Name), calculationInput1.Name); Assert.AreEqual(string.Format("{0} {1}", surfaceLine.Name, soilProfile2.Name), calculationInput2.Name); + + Assert.AreSame(semiProbabilisticInput, calculationInput1.SemiProbabilisticParameters); + Assert.AreSame(semiProbabilisticInput, calculationInput2.SemiProbabilisticParameters); + + CompareGeneralInputToInput(generalInput, calculationInput1); + CompareGeneralInputToInput(generalInput, calculationInput2); } [Test] @@ -924,20 +1033,35 @@ }; // Call - IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels).ToList(); + IEnumerable result = PipingCalculationConfigurationHelper.GenerateCalculationsStructure(surfaceLines, availableSoilModels, new GeneralPipingInput(), new SemiProbabilisticPipingInput()).ToList(); // Assert var group = result.First(sl => sl.Name == surfaceLine.Name) as PipingCalculationGroup; Assert.NotNull(group); - var calculationInput1 = (PipingCalculation)group.Children[0]; - var calculationInput2 = (PipingCalculation)group.Children[1]; - var calculationInput3 = (PipingCalculation)group.Children[2]; + var calculationInput1 = (PipingCalculation) group.Children[0]; + var calculationInput2 = (PipingCalculation) group.Children[1]; + var calculationInput3 = (PipingCalculation) group.Children[2]; Assert.AreEqual(string.Format("{0} {1}", surfaceLine.Name, soilProfile1.Name), calculationInput1.Name); Assert.AreEqual(string.Format("{0} {1} (1)", surfaceLine.Name, soilProfile2.Name), calculationInput2.Name); Assert.AreEqual(string.Format("{0} {1} (2)", surfaceLine.Name, soilProfile3.Name), calculationInput3.Name); } #endregion + + private static void CompareGeneralInputToInput(GeneralPipingInput generalInput, PipingCalculation calculationInput) + { + Assert.AreEqual(generalInput.BeddingAngle, calculationInput.InputParameters.BeddingAngle); + Assert.AreEqual(generalInput.CriticalHeaveGradient, calculationInput.InputParameters.CriticalHeaveGradient); + Assert.AreEqual(generalInput.Gravity, calculationInput.InputParameters.Gravity); + Assert.AreEqual(generalInput.MeanDiameter70, calculationInput.InputParameters.MeanDiameter70); + Assert.AreEqual(generalInput.SandParticlesVolumicWeight, calculationInput.InputParameters.SandParticlesVolumicWeight); + Assert.AreEqual(generalInput.SellmeijerModelFactor, calculationInput.InputParameters.SellmeijerModelFactor); + Assert.AreEqual(generalInput.SellmeijerReductionFactor, calculationInput.InputParameters.SellmeijerReductionFactor); + Assert.AreEqual(generalInput.UpliftModelFactor, calculationInput.InputParameters.UpliftModelFactor); + Assert.AreEqual(generalInput.WaterKinematicViscosity, calculationInput.InputParameters.WaterKinematicViscosity); + Assert.AreEqual(generalInput.WaterVolumetricWeight, calculationInput.InputParameters.WaterVolumetricWeight); + Assert.AreEqual(generalInput.WhitesDragCoefficient, calculationInput.InputParameters.WhitesDragCoefficient); + } } } \ No newline at end of file