Index: dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlOutput.cs =================================================================== diff -u -r743 -r754 --- dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlOutput.cs (.../FillDamUiFromXmlOutput.cs) (revision 743) +++ dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlOutput.cs (.../FillDamUiFromXmlOutput.cs) (revision 754) @@ -106,10 +106,13 @@ } if (designResult.StabilityDesignResults != null) { - desResult.NumberOfIterations = designResult.StabilityDesignResults.NumberOfIterations; //Vullen daar waar beschikbaar CreateDesignResultsStbilityOutput + CreateDesignResultsStabilityOutput(designResult, desResult); } - desResult.Scenario.CalculationResult = desResult.CalculationResult; - desResult.Scenario.CalculationResults.Add(desResult); + if (desResult.Scenario != null) + { + desResult.Scenario.CalculationResult = desResult.CalculationResult; + desResult.Scenario.CalculationResults.Add(desResult); + } damProjectData.DesignCalculations.Add(desResult); } } @@ -207,5 +210,37 @@ surfaceLine.AddCharacteristicPoint(geometryPoint, ConversionHelper.ConvertToDamPointType(inputPoint.PointType)); } } + + + private static void CreateDesignResultsStabilityOutput(DesignResult designResult, CsvExportData desResult) + { + desResult.ResultMessage = designResult.StabilityDesignResults.ResultMessage; + if (designResult.StabilityDesignResults.RedesignedSurfaceLine != null) + { + desResult.RedesignedSurfaceLine2Stability = new SurfaceLine2(); + var surfaceLine = ConvertXmlSurfaceLineToSurfaceLine2(designResult.StabilityDesignResults.RedesignedSurfaceLine); + desResult.RedesignedSurfaceLine2Stability = surfaceLine; + } + if (designResult.StabilityDesignResults.SafetyFactorSpecified) desResult.StabilitySafetyFactor = designResult.StabilityDesignResults.SafetyFactor; + if (designResult.StabilityDesignResults.Zone1SafetyFactorSpecified) desResult.Zone1SafetyFactorStability = designResult.StabilityDesignResults.Zone1SafetyFactor; + if (designResult.StabilityDesignResults.Zone1EntryPointXSpecified) desResult.LocalZone1EntryPointX = designResult.StabilityDesignResults.Zone1EntryPointX; + if (designResult.StabilityDesignResults.Zone1ExitPointXSpecified) desResult.LocalZone1ExitPointX = designResult.StabilityDesignResults.Zone1ExitPointX; + if (designResult.StabilityDesignResults.Zone2SafetyFactorSpecified) desResult.Zone2SafetyFactorStability = designResult.StabilityDesignResults.Zone2SafetyFactor; + if (designResult.StabilityDesignResults.Zone2EntryPointXSpecified) desResult.LocalZone2EntryPointX = designResult.StabilityDesignResults.Zone2EntryPointX; + if (designResult.StabilityDesignResults.Zone2ExitPointXSpecified) desResult.LocalZone2ExitPointX = designResult.StabilityDesignResults.Zone2ExitPointX; + if (designResult.StabilityDesignResults.NumberOfIterationsSpecified) desResult.NumberOfIterations = designResult.StabilityDesignResults.NumberOfIterations; + + if (designResult.StabilityDesignResults.UpliftSituation != null) + { + var uplift = designResult.StabilityDesignResults.UpliftSituation; + desResult.IsUplift = uplift.IsUplift; + desResult.Pl3MinUplift = uplift.Pl3MinUplift; + desResult.Pl3HeadAdjusted = uplift.Pl3HeadAdjusted; + desResult.Pl3LocalLocationXMinUplift = uplift.Pl3LocationXMinUplift; + desResult.Pl4MinUplift = uplift.Pl4MinUplift; + desResult.Pl4HeadAdjusted = uplift.Pl4HeadAdjusted; + desResult.Pl4LocalLocationXMinUplift = uplift.Pl4LocationXMinUplift; + } + } } } Index: dam clients/DamUI/trunk/src/Dam/Tests/DamPipingBenchmarkTest.cs =================================================================== diff -u -r746 -r754 --- dam clients/DamUI/trunk/src/Dam/Tests/DamPipingBenchmarkTest.cs (.../DamPipingBenchmarkTest.cs) (revision 746) +++ dam clients/DamUI/trunk/src/Dam/Tests/DamPipingBenchmarkTest.cs (.../DamPipingBenchmarkTest.cs) (revision 754) @@ -35,7 +35,6 @@ [TestFixture] public class DamPipingBenchmarkTest { - const string CmstabProgramPath = ".\\DGeoStability.exe"; const double cTolerance = 0.0005; /// Index: dam clients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs =================================================================== diff -u -r726 -r754 --- dam clients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs (.../FillDamUiFromXmlOutputTests.cs) (revision 726) +++ dam clients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs (.../FillDamUiFromXmlOutputTests.cs) (revision 754) @@ -1,4 +1,6 @@ // Copyright (C) Stichting Deltares 2017. All rights reserved. + +using System; using System.Collections.Generic; // // This file is part of the application DAM - UI. @@ -23,10 +25,17 @@ using Deltares.Dam.Data; using Deltares.Dam.Data.DamEngineIo; using Deltares.DamEngine.Io; +using Deltares.DamEngine.Io.XmlInput; using Deltares.DamEngine.Io.XmlOutput; +using Deltares.Geometry; +using Deltares.Geotechnics.SurfaceLines; using Deltares.Standard.Logging; using KellermanSoftware.CompareNetObjects; using NUnit.Framework; +using Location = Deltares.Dam.Data.Location; +using SurfaceLine = Deltares.DamEngine.Io.XmlOutput.SurfaceLine; +using SurfaceLinePoint = Deltares.DamEngine.Io.XmlOutput.SurfaceLinePoint; +using UpliftSituation = Deltares.DamEngine.Io.XmlOutput.UpliftSituation; namespace Deltares.Dam.Tests.DamEngineIo { @@ -56,71 +65,188 @@ damProjectData.CalculationMessages.Add(new LogMessage(LogMessageType.Warning, null, "Warning 1")); return damProjectData; } + [Test] - public void SimpleTest() + public void SimpleTestPiping() { - var damProjectData = CreateInputProjectData(); - var output = CreateTestOutput(); - FillDamUiFromXmlOutput.AddOutputToDamProjectData(damProjectData, output); + var inputProjectData = CreateInputProjectData(true); + var output = CreateTestOutput(true); + + const string inputFilename = "OutputFilePiping.xml"; + var combinedDamProjectData = FillDamUiFromXmlOutput.AddOutputToDamProjectData(inputProjectData, output); - const string inputFilename = "OutputFile.xml"; - var expectedDamProjectData = FillDamUiFromXmlOutput.AddOutputToDamProjectData(damProjectData, output); - // Input input = FillXmlInputFromDamUi.CreateInput(expectedDamProjectData); + Assert.AreEqual(4, combinedDamProjectData.DesignCalculations.Count); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[0].Scenario); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[1].Scenario); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[2].Scenario); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[3].Scenario); + + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[0].ProfileName); + Assert.AreNotEqual("", combinedDamProjectData.DesignCalculations[0].ProfileName); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[0].Calculation); + Assert.AreNotEqual("", combinedDamProjectData.DesignCalculations[0].Calculation); + Assert.AreEqual(PipingModelType.Bligh, combinedDamProjectData.DesignCalculations[0].PipingModel); + Assert.AreEqual(0, combinedDamProjectData.DesignCalculations[0].SafetyFactor); + Assert.AreEqual(34.21, combinedDamProjectData.DesignCalculations[0].PipingExitPointX); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[0].PipingExitPointY); + Assert.AreEqual(100.0, combinedDamProjectData.DesignCalculations[0].PipingEntryPointX); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[0].PipingEntryPointY); + Assert.AreEqual(100, combinedDamProjectData.DesignCalculations[0].DikeToeAtRiverXrd); + Assert.AreEqual(null, combinedDamProjectData.DesignCalculations[0].PipingToeAtPolderZ); + + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[1].ProfileName); + Assert.AreNotEqual("", combinedDamProjectData.DesignCalculations[1].ProfileName); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[1].Calculation); + Assert.AreNotEqual("", combinedDamProjectData.DesignCalculations[1].Calculation); + Assert.AreEqual(PipingModelType.Bligh, combinedDamProjectData.DesignCalculations[1].PipingModel); + Assert.AreEqual(1.03, combinedDamProjectData.DesignCalculations[1].SafetyFactor); + Assert.AreEqual(34.21, combinedDamProjectData.DesignCalculations[1].PipingExitPointX); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[1].PipingExitPointY); + Assert.AreEqual(100.0, combinedDamProjectData.DesignCalculations[1].PipingEntryPointX); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[1].PipingEntryPointY); + Assert.AreEqual(null, combinedDamProjectData.DesignCalculations[1].PipingToeAtPolderX); + Assert.AreEqual(null, combinedDamProjectData.DesignCalculations[1].PipingToeAtPolderZ); + Assert.AreEqual(0.2, combinedDamProjectData.DesignCalculations[1].Pl3HeadAdjusted); + Assert.AreEqual(0.7, combinedDamProjectData.DesignCalculations[1].Pl3MinUplift); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[1].Pl3LocationYMinUplift); + + DamXmlSerialization.SaveOutputAsXmlFile(inputFilename, output); output = DamXmlSerialization.LoadOutputFromXmlFile(inputFilename); - DamProjectData actualDamProjectData = FillDamUiFromXmlOutput.AddOutputToDamProjectData(damProjectData, output); + DamProjectData actualDamProjectData = FillDamUiFromXmlOutput.AddOutputToDamProjectData(inputProjectData, output); - CompareDamProjectData(actualDamProjectData, expectedDamProjectData); - Assert.AreEqual(expectedDamProjectData.DesignCalculations[0].CalculationResult, actualDamProjectData.DesignCalculations[0].CalculationResult); - Assert.AreEqual(expectedDamProjectData.DesignCalculations[0].SafetyFactor, actualDamProjectData.DesignCalculations[0].SafetyFactor); - Assert.AreEqual(expectedDamProjectData.DesignCalculations[0].LocationName, actualDamProjectData.DesignCalculations[0].LocationName); + CompareDamProjectData(actualDamProjectData, combinedDamProjectData); + Assert.AreEqual(combinedDamProjectData.DesignCalculations[0].CalculationResult, actualDamProjectData.DesignCalculations[0].CalculationResult); + Assert.AreEqual(combinedDamProjectData.DesignCalculations[0].SafetyFactor, actualDamProjectData.DesignCalculations[0].SafetyFactor); + Assert.AreEqual(combinedDamProjectData.DesignCalculations[0].LocationName, actualDamProjectData.DesignCalculations[0].LocationName); } - private DamProjectData CreateInputProjectData() + [Test] + public void SimpleTestStabilityInside() { + var inputProjectData = CreateInputProjectData(false); + var output = CreateTestOutput(false); + + const string inputFilename = "OutputFileStability.xml"; + var combinedDamProjectData = FillDamUiFromXmlOutput.AddOutputToDamProjectData(inputProjectData, output); + + Assert.AreEqual(4, combinedDamProjectData.DesignCalculations.Count); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[0].Scenario); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[1].Scenario); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[2].Scenario); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[3].Scenario); + + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[0].ProfileName); + Assert.AreNotEqual("", combinedDamProjectData.DesignCalculations[0].ProfileName); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[0].Calculation); + Assert.AreNotEqual("", combinedDamProjectData.DesignCalculations[0].Calculation); + Assert.AreEqual(MStabModelType.Bishop, combinedDamProjectData.DesignCalculations[0].StabilityModel); + Assert.AreEqual(0, combinedDamProjectData.DesignCalculations[0].SafetyFactor); + Assert.AreEqual(null, combinedDamProjectData.DesignCalculations[0].StabilityShoulderHeight); + Assert.AreEqual(null, combinedDamProjectData.DesignCalculations[0].DikeLength); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[0].Zone1EntryPointX); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[0].Zone1EntryPointZ); + Assert.AreEqual(0, combinedDamProjectData.DesignCalculations[0].Zone1SafetyFactorStability); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[0].Pl3HeadAdjusted); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[0].Pl3MinUplift); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[0].Pl3LocationYMinUplift); + Assert.AreEqual(0, combinedDamProjectData.DesignCalculations[0].NumberOfIterations); + + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[1].ProfileName); + Assert.AreNotEqual("", combinedDamProjectData.DesignCalculations[1].ProfileName); + Assert.AreNotEqual(null, combinedDamProjectData.DesignCalculations[1].Calculation); + Assert.AreNotEqual("", combinedDamProjectData.DesignCalculations[1].Calculation); + Assert.AreEqual(MStabModelType.Bishop, combinedDamProjectData.DesignCalculations[1].StabilityModel); + Assert.AreEqual(1.2, combinedDamProjectData.DesignCalculations[1].SafetyFactor); + Assert.AreEqual(null, combinedDamProjectData.DesignCalculations[1].StabilityShoulderHeight); + Assert.AreEqual(2.2, combinedDamProjectData.DesignCalculations[1].Zone1EntryPointX); + Assert.AreEqual(0.22, combinedDamProjectData.DesignCalculations[1].Zone1EntryPointZ, 0.001); + Assert.AreEqual(null, combinedDamProjectData.DesignCalculations[1].Zone1ExitPointX); + Assert.AreEqual(3.3, combinedDamProjectData.DesignCalculations[1].Zone2ExitPointX); + Assert.AreEqual(0.33, combinedDamProjectData.DesignCalculations[1].Zone2ExitPointZ, 0.001); + Assert.AreEqual(1.1, combinedDamProjectData.DesignCalculations[1].Zone1SafetyFactorStability); + Assert.AreEqual(0.2, combinedDamProjectData.DesignCalculations[1].Pl3HeadAdjusted); + Assert.AreEqual(0.7, combinedDamProjectData.DesignCalculations[1].Pl3MinUplift); + Assert.AreEqual(0.0, combinedDamProjectData.DesignCalculations[1].Pl3LocationYMinUplift); + Assert.AreEqual(1, combinedDamProjectData.DesignCalculations[1].NumberOfIterations); + + DamXmlSerialization.SaveOutputAsXmlFile(inputFilename, output); + output = DamXmlSerialization.LoadOutputFromXmlFile(inputFilename); + DamProjectData actualDamProjectData = FillDamUiFromXmlOutput.AddOutputToDamProjectData(inputProjectData, output); + + CompareDamProjectData(actualDamProjectData, combinedDamProjectData); + Assert.AreEqual(combinedDamProjectData.DesignCalculations[0].CalculationResult, actualDamProjectData.DesignCalculations[0].CalculationResult); + Assert.AreEqual(combinedDamProjectData.DesignCalculations[0].SafetyFactor, actualDamProjectData.DesignCalculations[0].SafetyFactor); + Assert.AreEqual(combinedDamProjectData.DesignCalculations[0].LocationName, actualDamProjectData.DesignCalculations[0].LocationName); + } + + private DamProjectData CreateInputProjectData(bool forPiping) + { var project = new DamProjectData(); - var spec = new DamFailureMechanismeCalculationSpecification + DamFailureMechanismeCalculationSpecification spec = null; + if (forPiping) { - FailureMechanismSystemType = FailureMechanismSystemType.Piping, - PipingModelType = PipingModelType.Bligh - }; + spec = new DamFailureMechanismeCalculationSpecification + { + FailureMechanismSystemType = FailureMechanismSystemType.Piping, + PipingModelType = PipingModelType.Bligh + }; + } + else + { + spec = new DamFailureMechanismeCalculationSpecification + { + FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside, + CalculationModel = MStabModelType.Bishop + }; + } project.DamProjectCalculationSpecification.CurrentSpecification = spec; project.WaterBoard.Dikes.Add(new Dike()); - + var surfaceline = CreateSurfaceLine2(); Location location1 = new Location(); location1.Name = "Location 1"; + location1.SurfaceLine2 = surfaceline; var scenario1 = new Scenario(); scenario1.LocationScenarioID = "Scenario 1"; scenario1.Location = location1; location1.Scenarios.Add(scenario1); project.Locations.Add(location1); var location2 = new Location("Location 2"); + location2.SurfaceLine2 = surfaceline; var scenario2 = new Scenario(); scenario2.LocationScenarioID = "Scenario 2"; scenario2.Location = location2; location2.Scenarios.Add(scenario2); project.Locations.Add(location2); var location3 = new Location("Location 3"); + location3.SurfaceLine2 = surfaceline; var scenario3 = new Scenario(); scenario3.LocationScenarioID = "Scenario 3"; scenario3.Location = location3; location3.Scenarios.Add(scenario3); project.Locations.Add(location3); + var location4 = new Location("Location 4"); + location4.SurfaceLine2 = surfaceline; + var scenario4 = new Scenario(); + scenario4.LocationScenarioID = "Scenario 4"; + scenario4.Location = location4; + location4.Scenarios.Add(scenario4); + project.Locations.Add(location4); return project; } - private Output CreateTestOutput() + private Output CreateTestOutput(bool forPiping) { var output = new Output(); output.Results = new OutputResults(); output.Results.CalculationResults = new CalculationResults(); - output.Results.CalculationResults.DesignResults = new DesignResult[3]; - for (int i = 0; i < 3; i++) + output.Results.CalculationResults.DesignResults = new DesignResult[4]; + for (int i = 0; i < 4; i++) { var desResult = new DesignResult { @@ -129,53 +255,129 @@ ProfileName = "Profile " + (i + 1).ToString(), CalculationResult = 1 * i }; - var pipingdesignResults = new DesignResultPipingDesignResults() + var surfaceline = CreateSurfaceLine(); + + var upliftSituation = new UpliftSituation { - ResultMessage = "no run made", - UpliftFactorSpecified = true, - UpliftFactor = 1.3 * i, - HeaveFactorSpecified = true, - HeaveFactor = 1.1 * i, - BlighFactorSpecified = true, - BlighFactor = 1.03 * i, - BlighHcriticalSpecified = true, - BlighHcritical = 0.4, - ExitPointXSpecified = true, - ExitPointX = 34.21 + IsUplift = true, + Pl3HeadAdjusted = 0.2 * i, + Pl3LocationXMinUplift = 2.2 * i, + Pl3MinUplift = 0.7 * i, + Pl4HeadAdjusted = 0.4 * i, + Pl4LocationXMinUplift = 4.4 * i, + Pl4MinUplift = 4.7 * i }; - var surfaceline = new SurfaceLine + + if (forPiping) { - Name = "Surfaceline 1", - Points = new SurfaceLinePoint[3] - }; - var p1 = new SurfaceLinePoint + var pipingdesignResults = new DesignResultPipingDesignResults + { + ResultMessage = "no run made", + UpliftFactorSpecified = true, + UpliftFactor = 1.3 * i, + HeaveFactorSpecified = true, + HeaveFactor = 1.1 * i, + BlighFactorSpecified = true, + BlighFactor = 1.03 * i, + BlighHcriticalSpecified = true, + BlighHcritical = 0.4, + ExitPointXSpecified = true, + ExitPointX = 34.21, + RedesignedSurfaceLine = surfaceline, + UpliftSituation = upliftSituation + }; + desResult.PipingDesignResults = pipingdesignResults; + } + else { - PointType = 0, - X = 0, - Z = 0 - }; - surfaceline.Points[0] = p1; - var p2 = new SurfaceLinePoint - { - PointType = 5, - X = 100, - Z = 10 - }; - surfaceline.Points[1] = p2; - var p3 = new SurfaceLinePoint - { - PointType = 11, - X = 120, - Z = 2 - }; - surfaceline.Points[2] = p3; - pipingdesignResults.RedesignedSurfaceLine = surfaceline; - desResult.PipingDesignResults = pipingdesignResults; + var stabilityResults = new DesignResultStabilityDesignResults + { + ResultMessage = "aok", + SafetyFactor = 1.2 * i, + SafetyFactorSpecified = true, + NumberOfIterationsSpecified = true, + NumberOfIterations = 1 * i, + Zone1SafetyFactorSpecified = true, + Zone1SafetyFactor = 1.1 * i, + Zone1EntryPointXSpecified = true, + Zone1EntryPointX = 2.2 * i, + Zone2ExitPointXSpecified = true, + Zone2ExitPointX = 3.3 * i, + RedesignedSurfaceLine = surfaceline, + UpliftSituation = upliftSituation + }; + desResult.StabilityDesignResults = stabilityResults; + } output.Results.CalculationResults.DesignResults[i] = desResult; } return output; } + private static SurfaceLine CreateSurfaceLine() + { + var surfaceline = new SurfaceLine + { + Name = "Surfaceline 1", + Points = new SurfaceLinePoint[3] + }; + var p1 = new SurfaceLinePoint + { + PointType = 0, + X = 0, + Z = 0 + }; + surfaceline.Points[0] = p1; + var p2 = new SurfaceLinePoint + { + PointType = 5, + X = 100, + Z = 10 + }; + surfaceline.Points[1] = p2; + var p3 = new SurfaceLinePoint + { + PointType = 25, + X = 120, + Z = 2 + }; + surfaceline.Points[2] = p3; + return surfaceline; + } + + private static SurfaceLine2 CreateSurfaceLine2() + { + var surfaceline = new SurfaceLine2 + { + Name = "Surfaceline 1" + }; + surfaceline.CharacteristicPoints.Geometry = surfaceline.Geometry; + var p1 = new CharacteristicPoint + { + CharacteristicPointType = CharacteristicPointType.SurfaceLevelOutside, + GeometryPoint = new GeometryPoint(), + X = 0, + Z = 0 + }; + surfaceline.CharacteristicPoints.Add(p1); + var p2 = new CharacteristicPoint + { + CharacteristicPointType = CharacteristicPointType.DikeToeAtRiver, + GeometryPoint = new GeometryPoint(), + X = 100, + Z = 10 + }; + surfaceline.CharacteristicPoints.Add(p2); + var p3 = new CharacteristicPoint + { + CharacteristicPointType = CharacteristicPointType.SurfaceLevelInside, + GeometryPoint = new GeometryPoint(), + X = 120, + Z = 2 + }; + surfaceline.CharacteristicPoints.Add(p3); + return surfaceline; + } + private void CompareDamProjectData(DamProjectData actual, DamProjectData expected) { var compare = new CompareLogic