Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs =================================================================== diff -u -r1211 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 1211) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 1212) @@ -74,7 +74,9 @@ var location = damKernelInput.Location; double waterLevel = damKernelInput.RiverLevelHigh; UpliftSituation upliftSituation; - PlLines plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, waterLevel, out upliftSituation); + PlLines plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, waterLevel, + damKernelInput.DamFailureMechanismeCalculationSpecification.AssessmentScenarioJobSettings.HydraulicShortcutType, + out upliftSituation); EvaluateUpliftSituation(damKernelInput, out kernelDataInput, plLines, damPipingBlighInput, waterLevel, damPipingBlighOutput); return PrepareResult.Successful; } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapper.cs =================================================================== diff -u -r1211 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapper.cs (.../DamMacroStabilityOutwardsKernelWrapper.cs) (revision 1211) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapper.cs (.../DamMacroStabilityOutwardsKernelWrapper.cs) (revision 1212) @@ -205,7 +205,9 @@ damKernelInput.RiverLevelLow, subSoilScenario, null, requiredSafetyFactor.Value, - kernelDataInput.FailureMechanismParametersMStab, out errorMessages); + kernelDataInput.FailureMechanismParametersMStab, + damKernelInput.DamFailureMechanismeCalculationSpecification.AssessmentScenarioJobSettings, + out errorMessages); mstabXml.Save(stabilityProjectFilename + ".xml"); return mstabXml; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityCommon/MStabXmlDoc.cs =================================================================== diff -u -r1203 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityCommon/MStabXmlDoc.cs (.../MStabXmlDoc.cs) (revision 1203) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityCommon/MStabXmlDoc.cs (.../MStabXmlDoc.cs) (revision 1212) @@ -64,6 +64,7 @@ /// The embankment design parameters. /// The required safety factor. /// The input failure mechanism parameters m stab. + /// /// The error messages. /// /// @@ -75,6 +76,7 @@ SoilGeometryProbability subSoilScenario, EmbankmentDesignParameters embankmentDesignParameters, double requiredSafetyFactor, FailureMechanismParametersMStab inputFailureMechanismParametersMStab, + RegionalAssessmentScenarioJobSettings regionalAssessmentScenarioJobSettings, out List errorMessages) { @@ -199,7 +201,7 @@ var waterLevel = riverLevelHigh; UpliftSituation upliftSituation; failureMechanismParametersMStab.PlLines = PlLinesHelper.CreatePlLinesForStability( - location, subSoilScenario, waterLevel, soilGeometry2DName, riverLevelLow, out upliftSituation); + location, subSoilScenario, waterLevel, soilGeometry2DName, riverLevelLow, regionalAssessmentScenarioJobSettings, out upliftSituation); // Slip circle definition for Uplift Van; TODO: Combine with code in StabilityCalculation if (failureMechanismParametersMStab.MStabParameters.Model == MStabModelType.UpliftVan) Index: DamEngine/trunk/src/Deltares.DamEngine.Data/General/RegionalAssessmentScenarioJobSettings.cs =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.Data/General/RegionalAssessmentScenarioJobSettings.cs (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/General/RegionalAssessmentScenarioJobSettings.cs (revision 1212) @@ -0,0 +1,87 @@ +// Copyright (C) Stichting Deltares 2018. All rights reserved. +// +// This file is part of the Dam Engine. +// +// The Dam Engine is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero 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. + +namespace Deltares.DamEngine.Data.General +{ + /// + /// Class holding the settings for a regional assessment scenario job + /// + public class RegionalAssessmentScenarioJobSettings + { + private LoadSituation loadSituation = LoadSituation.Wet; + private DikeDrySensitivity dikeDrySensitivity = DikeDrySensitivity.None; + private HydraulicShortcutType hydraulicShortcutType = HydraulicShortcutType.NoHydraulicShortcut; + + /// + /// Gets or sets the load situation. + /// + /// + /// The load situation. + /// + public LoadSituation LoadSituation + { + get + { + return loadSituation; + } + set + { + loadSituation = value; + } + } + + /// + /// Gets or sets the dike dry sensitivity. + /// + /// + /// The dike dry sensitivity. + /// + public DikeDrySensitivity DikeDrySensitivity + { + get + { + return dikeDrySensitivity; + } + set + { + dikeDrySensitivity = value; + } + } + + /// + /// Gets or sets the type of the hydraulic shortcut. + /// + /// + /// The type of the hydraulic shortcut. + /// + public HydraulicShortcutType HydraulicShortcutType + { + get + { + return hydraulicShortcutType; + } + set + { + hydraulicShortcutType = value; + } + } + } +} Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/MStabXmlDocTests.cs =================================================================== diff -u -r1149 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/MStabXmlDocTests.cs (.../MStabXmlDocTests.cs) (revision 1149) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityCommon/MStabXmlDocTests.cs (.../MStabXmlDocTests.cs) (revision 1212) @@ -85,7 +85,9 @@ riverLevelLow, subSoilScenario, null, requiredSafetyFactor, - failureMechanismParametersMStab, out errorMessages); + failureMechanismParametersMStab, + new RegionalAssessmentScenarioJobSettings(), + out errorMessages); mstabXml.Save(xmlFileName); Assert.IsTrue(File.Exists(xmlFileName)); Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijerVnk/DamPipingSellmeijerVnkKernelWrapper.cs =================================================================== diff -u -r1211 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijerVnk/DamPipingSellmeijerVnkKernelWrapper.cs (.../DamPipingSellmeijerVnkKernelWrapper.cs) (revision 1211) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijerVnk/DamPipingSellmeijerVnkKernelWrapper.cs (.../DamPipingSellmeijerVnkKernelWrapper.cs) (revision 1212) @@ -67,7 +67,9 @@ var location = damKernelInput.Location; double riverLevel = damKernelInput.RiverLevelHigh; UpliftSituation upliftSituation; - var plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, riverLevel, out upliftSituation); + var plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, riverLevel, + damKernelInput.DamFailureMechanismeCalculationSpecification.AssessmentScenarioJobSettings.HydraulicShortcutType, + out upliftSituation); var upliftLocationDeterminator = new UpliftLocationDeterminator { PlLines = plLines, Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/DamPipingHelper.cs =================================================================== diff -u -r1122 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/DamPipingHelper.cs (.../DamPipingHelper.cs) (revision 1122) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/DamPipingHelper.cs (.../DamPipingHelper.cs) (revision 1212) @@ -76,7 +76,10 @@ ThrowHelper.ThrowIfArgumentNull(soilProfile.BottomAquiferLayer, string.Format(Resources.NoBottomAquiferLayer, soilProfile.Name)); UpliftSituation upliftSituation; - plLines = PlLinesHelper.CreatePlLinesForPiping(damKernelInput.Location, damKernelInput.SubSoilScenario.SoilProfile1D, damKernelInput.RiverLevelHigh, out upliftSituation); + plLines = PlLinesHelper.CreatePlLinesForPiping(damKernelInput.Location, damKernelInput.SubSoilScenario.SoilProfile1D, + damKernelInput.RiverLevelHigh, + damKernelInput.DamFailureMechanismeCalculationSpecification.AssessmentScenarioJobSettings.HydraulicShortcutType, + out upliftSituation); UpliftLocationDeterminator upliftLocationDeterminator = new UpliftLocationDeterminator { Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/RegionalAssessment/RegionalScenariosCalculationTests.cs =================================================================== diff -u -r1185 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/RegionalAssessment/RegionalScenariosCalculationTests.cs (.../RegionalScenariosCalculationTests.cs) (revision 1185) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/RegionalAssessment/RegionalScenariosCalculationTests.cs (.../RegionalScenariosCalculationTests.cs) (revision 1212) @@ -54,19 +54,6 @@ var engineInterface = new EngineInterface(inputString); Assert.IsNotNull(engineInterface.DamProjectData); - // Fake data that is not properly cummunicated as of yet (8/2/2018) - engineInterface.DamProjectData.DamProjectType = DamProjectType.AssessmentRegional; - //var dj = engineInterface.DamProjectData.DikeJob; - // engineInterface.DamProjectData.LocationJobs[0].Location.BoezemLevelHbp = -0.5; - // engineInterface.DamProjectData.LocationJobs[0].Location.BoezemLevelTp = -0.15; - // engineInterface.DamProjectData.LocationJobs[0].Location.BoezemLevelLbp = -0.3; - // engineInterface.DamProjectData.LocationJobs[0].Location.DredgingDepth = -4.8; - // engineInterface.DamProjectData.LocationJobs[0].Location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope = 1; - // engineInterface.DamProjectData.LocationJobs[0].Location.ModelFactors.RequiredSafetyFactorPiping = 1; - // engineInterface.DamProjectData.LocationJobs[0].Location.ModelFactors.RequiredSafetyFactorStabilityOuterSlope = 1; - // engineInterface.DamProjectData.LocationJobs[0].Location.ModelFactors.UpliftCriterionStability = 1.2; - // engineInterface.DamProjectData.LocationJobs[0].Location.ModelFactors.UpliftCriterionPiping = 1.2; - engineInterface.DamProjectData.MaxCalculationCores = 1; string outputString = engineInterface.Run(); @@ -79,47 +66,47 @@ // scenario03: 3 results Assert.AreEqual(3, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults.Length); Assert.AreEqual("Segment_235_1D1", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults[0].SoilProfileName); - Assert.AreEqual(0.261, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults[0].RegionalResult.SafetyFactor); + Assert.AreEqual(0.261, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults[0].RegionalResult.SafetyFactor, tolerance); Assert.AreEqual("Segment_235_1D3", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults[1].SoilProfileName); - Assert.AreEqual(0.384, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults[1].RegionalResult.SafetyFactor); + Assert.AreEqual(0.384, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults[1].RegionalResult.SafetyFactor, tolerance); Assert.AreEqual("Segment_235_1D5", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults[2].SoilProfileName); - Assert.AreEqual(0.697, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults[2].RegionalResult.SafetyFactor); + Assert.AreEqual(0.697, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults[2].RegionalResult.SafetyFactor, tolerance); // scenario07: 3 results Assert.AreEqual(3, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults.Length); Assert.AreEqual("Segment_235_1D1", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults[0].SoilProfileName); - Assert.AreEqual(0.251, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults[0].RegionalResult.SafetyFactor); + Assert.AreEqual(0.251, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults[0].RegionalResult.SafetyFactor, tolerance); Assert.AreEqual("Segment_235_1D3", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults[1].SoilProfileName); - Assert.AreEqual(0.452, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults[1].RegionalResult.SafetyFactor); + Assert.AreEqual(0.452, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults[1].RegionalResult.SafetyFactor, tolerance); Assert.AreEqual("Segment_235_1D5", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults[2].SoilProfileName); - Assert.AreEqual(0.576, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults[2].RegionalResult.SafetyFactor); + Assert.AreEqual(0.576, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults[2].RegionalResult.SafetyFactor, tolerance); // scenario08: 9 results - Assert.AreEqual(9, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults.Length); - Assert.AreEqual("Segment_235_1D2", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[0].SoilProfileName); - Assert.AreEqual(0.373, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[0].RegionalResult.SafetyFactor); - Assert.AreEqual("Segment_235_1D4", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[1].SoilProfileName); - Assert.AreEqual(0.601, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[1].RegionalResult.SafetyFactor); - Assert.AreEqual("Segment_235_1D6", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[2].SoilProfileName); - Assert.AreEqual(0.761, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[2].RegionalResult.SafetyFactor); - Assert.AreEqual("Segment_235_1D7", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[3].SoilProfileName); - Assert.AreEqual(0.389, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[3].RegionalResult.SafetyFactor); - Assert.AreEqual("Segment_235_1D8", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[4].SoilProfileName); - Assert.AreEqual(0.369, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[4].RegionalResult.SafetyFactor); - Assert.AreEqual("Segment_235_1D9", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[5].SoilProfileName); - Assert.AreEqual(0.618, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[5].RegionalResult.SafetyFactor); - Assert.AreEqual("Segment_235_1D10", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[6].SoilProfileName); - Assert.AreEqual(0.597, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[6].RegionalResult.SafetyFactor); - Assert.AreEqual("Segment_235_1D11", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[7].SoilProfileName); - Assert.AreEqual(0.779, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[7].RegionalResult.SafetyFactor); - Assert.AreEqual("Segment_235_1D12", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[8].SoilProfileName); - Assert.AreEqual(0.757, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[8].RegionalResult.SafetyFactor); + Assert.AreEqual(9, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults.Length); + Assert.AreEqual("Segment_235_1D2", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[0].SoilProfileName); + Assert.AreEqual(0.373, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[0].RegionalResult.SafetyFactor, tolerance); + Assert.AreEqual("Segment_235_1D4", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[1].SoilProfileName); + Assert.AreEqual(0.601, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[1].RegionalResult.SafetyFactor, tolerance); + Assert.AreEqual("Segment_235_1D6", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[2].SoilProfileName); + Assert.AreEqual(0.761, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[2].RegionalResult.SafetyFactor, tolerance); + Assert.AreEqual("Segment_235_1D7", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[3].SoilProfileName); + Assert.AreEqual(0.389, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[3].RegionalResult.SafetyFactor, tolerance); + Assert.AreEqual("Segment_235_1D8", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[4].SoilProfileName); + Assert.AreEqual(0.369, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[4].RegionalResult.SafetyFactor, tolerance); + Assert.AreEqual("Segment_235_1D9", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[5].SoilProfileName); + Assert.AreEqual(0.618, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[5].RegionalResult.SafetyFactor, tolerance); + Assert.AreEqual("Segment_235_1D10", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[6].SoilProfileName); + Assert.AreEqual(0.597, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[6].RegionalResult.SafetyFactor, tolerance); + Assert.AreEqual("Segment_235_1D11", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[7].SoilProfileName); + Assert.AreEqual(0.779, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[7].RegionalResult.SafetyFactor, tolerance); + Assert.AreEqual("Segment_235_1D12", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[8].SoilProfileName); + Assert.AreEqual(0.757, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[8].RegionalResult.SafetyFactor, tolerance); // scenario10: 3 results - Assert.AreEqual(3, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults.Length); - Assert.AreEqual("Segment_235_1D1", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[0].SoilProfileName); - Assert.AreEqual(90.00, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[0].RegionalResult.SafetyFactor); - Assert.AreEqual("Segment_235_1D3", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[1].SoilProfileName); - Assert.AreEqual(90.00, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[1].RegionalResult.SafetyFactor); - Assert.AreEqual("Segment_235_1D5", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[2].SoilProfileName); - Assert.AreEqual(90.00, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[3].RegionalScenarioProfileResults[2].RegionalResult.SafetyFactor); + Assert.AreEqual(3, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults.Length); + Assert.AreEqual("Segment_235_1D1", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[0].SoilProfileName); + Assert.AreEqual(90.00, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[0].RegionalResult.SafetyFactor, tolerance); + Assert.AreEqual("Segment_235_1D3", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[1].SoilProfileName); + Assert.AreEqual(90.00, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[1].RegionalResult.SafetyFactor, tolerance); + Assert.AreEqual("Segment_235_1D5", output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[2].SoilProfileName); + Assert.AreEqual(90.00, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults[2].RegionalResult.SafetyFactor, tolerance); } } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs =================================================================== diff -u -r1122 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs (.../PlLinesHelper.cs) (revision 1122) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs (.../PlLinesHelper.cs) (revision 1212) @@ -35,12 +35,16 @@ /// Creates the pl lines. /// /// The location. - /// The soil profile. + /// /// The water level. + /// + /// + /// /// The uplift situation. /// public static PlLines CreatePlLinesForStability(Location location, SoilGeometryProbability subSoilScenario, - double waterLevel, string soilGeometry2DName, double? waterLevelRiverLow, out UpliftSituation upliftSituation) + double waterLevel, string soilGeometry2DName, double? waterLevelRiverLow, RegionalAssessmentScenarioJobSettings regionalAssessmentScenarioJobSettings, + out UpliftSituation upliftSituation) { var plLinesCreator = new PlLinesCreator.PlLinesCreator { @@ -63,11 +67,28 @@ PlLineOffsetBelowDikeTopAtPolder = location.PlLineOffsetBelowDikeTopAtPolder, PlLineOffsetBelowShoulderBaseInside = location.PlLineOffsetBelowShoulderBaseInside, PlLineOffsetBelowDikeToeAtPolder = location.PlLineOffsetBelowDikeToeAtPolder, + PlLineOffsetBelowDikeCrestMiddle = location.PlLineOffsetBelowDikeCrestMiddle, + UsePlLineOffsetFactorBelowShoulderCrest = location.UsePlLineOffsetFactorBelowShoulderCrest, DikeEmbankmentMaterial = location.GetDikeEmbankmentSoil(), - IsHydraulicShortcut = false, // TODO: Regional + IsHydraulicShortcut = (regionalAssessmentScenarioJobSettings.HydraulicShortcutType == HydraulicShortcutType.HydraulicShortcut), XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin, + IsUseOvenDryUnitWeight = (regionalAssessmentScenarioJobSettings.DikeDrySensitivity == DikeDrySensitivity.Dry), SoilList = location.SoilList }; + if ((regionalAssessmentScenarioJobSettings.DikeDrySensitivity == DikeDrySensitivity.Dry) && + (regionalAssessmentScenarioJobSettings.LoadSituation == LoadSituation.Dry)) + { + // For dry situation other offsets have to be used as in normal situation +// plLinesCreator.PlLineOffsetBelowDikeTopAtRiver = location.PLLineOffsetDryBelowDikeTopAtRiver; Todo Bka: implement as soon as Tom has solved this. +// plLinesCreator.PlLineOffsetBelowDikeTopAtPolder = location.PLLineOffsetDryBelowDikeTopAtPolder; +// plLinesCreator.PlLineOffsetBelowShoulderBaseInside = location.PLLineOffsetDryBelowShoulderBaseInside; +// plLinesCreator.PlLineOffsetBelowDikeToeAtPolder = location.PLLineOffsetDryBelowDikeToeAtPolder; + plLinesCreator.PlLineOffsetBelowDikeCrestMiddle = location.PlLineOffsetDryBelowDikeCrestMiddle; + plLinesCreator.PlLineOffsetFactorBelowShoulderCrest = location.PlLineOffsetDryFactorBelowShoulderCrest; + plLinesCreator.UsePlLineOffsetBelowDikeCrestMiddle = location.UsePlLineOffsetDryBelowDikeCrestMiddle; + plLinesCreator.UsePlLineOffsetFactorBelowShoulderCrest = location.UsePlLineOffsetDryFactorBelowShoulderCrest; + plLinesCreator.WaterLevelPolder = location.PolderLevelLow; + } var plLines = plLinesCreator.CreateAllPlLines(location); upliftSituation.Pl3HeadAdjusted = plLinesCreator.Pl3HeadAdjusted; upliftSituation.Pl3LocationXMinUplift = plLinesCreator.Pl3LocationXMinUplift; @@ -85,9 +106,11 @@ /// The location. /// The soil profile. /// The water level. + /// /// The uplift situation. /// - public static PlLines CreatePlLinesForPiping(Location location, SoilProfile1D soilProfile, double waterLevel, out UpliftSituation upliftSituation) + public static PlLines CreatePlLinesForPiping(Location location, SoilProfile1D soilProfile, double waterLevel, + HydraulicShortcutType hydraulicShortcut, out UpliftSituation upliftSituation) { var plLinesCreator = new PlLinesCreator.PlLinesCreator { @@ -105,7 +128,7 @@ PlLineOffsetBelowDikeTopAtRiver = location.PlLineOffsetBelowDikeTopAtRiver, PlLineOffsetBelowDikeTopAtPolder = location.PlLineOffsetBelowDikeTopAtPolder, DikeEmbankmentMaterial = location.GetDikeEmbankmentSoil(), - IsHydraulicShortcut = false, // TODO: Regional + IsHydraulicShortcut = hydraulicShortcut == HydraulicShortcutType.HydraulicShortcut, XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin }; var plLines = plLinesCreator.CreateAllPlLines(location); Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs =================================================================== diff -u -r1185 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs (.../RegionalScenariosCalculation.cs) (revision 1185) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs (.../RegionalScenariosCalculation.cs) (revision 1212) @@ -358,16 +358,45 @@ } /// - /// Process a job for failuremechanism Piping + /// Process a job for failuremechanism Stability /// /// + private void ProcessJobStability(RegionalScenarioProfileResult job) + { + var currentSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; // must this be a copy? + currentSpecification.FailureMechanismSystemType = job.FailureMechanismType; + currentSpecification.FailureMechanismParametersMStab.MStabParameters.Model = job.MstabModelOption; + currentSpecification.AssessmentScenarioJobSettings.LoadSituation = job.LoadSituation; + currentSpecification.AssessmentScenarioJobSettings.DikeDrySensitivity = job.DikeDrySensitivity; + currentSpecification.AssessmentScenarioJobSettings.HydraulicShortcutType = job.HydraulicShortcutType; + var calculator = CreateKernelWrapper(currentSpecification); + switch (job.LoadSituation) + { + case LoadSituation.Dry: + job.Location.BoezemLevelHbp = job.Location.BoezemLevelLbp; + break; + case LoadSituation.Wet: + job.Location.BoezemLevelHbp = job.Location.BoezemLevelTp; + job.Location.BoezemLevelLbp = job.Location.BoezemLevelTp; + break; + } + PerformJob(job, calculator, currentSpecification); + } + + /// + /// Process a job for failuremechanism Piping + /// + /// private void ProcessJobPiping(RegionalScenarioProfileResult job) { if (job.Location.ModelFactors.UpliftCriterionPiping.HasValue) { var currentSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; // must this be a copy? currentSpecification.FailureMechanismSystemType = job.FailureMechanismType; currentSpecification.PipingModelType = job.PipingModelOption; + currentSpecification.AssessmentScenarioJobSettings.LoadSituation = job.LoadSituation; + currentSpecification.AssessmentScenarioJobSettings.DikeDrySensitivity = job.DikeDrySensitivity; + currentSpecification.AssessmentScenarioJobSettings.HydraulicShortcutType = job.HydraulicShortcutType; var calculator = CreateKernelWrapper(currentSpecification); // For piping waterlevel needs to be set here. Piping kernel only uses waterlevelhigh which is set from BoezemLevelHbp. switch (job.LoadSituation) @@ -379,41 +408,7 @@ job.Location.BoezemLevelHbp = job.Location.BoezemLevelTp; break; } - PerformJob(job, calculator, currentSpecification); - - // var modelParametersForPLLines = new ModelParametersForPlLines(); - // var calculator = GetCalculatorForPipingModel(job, modelParametersForPLLines); - // double waterLevel; - // switch (job.LoadSituation) - // { - // case LoadSituation.Dry: - // waterLevel = job.Location.BoezemLevelLbp; - // break; - // default: // LoadSituation.Wet - // waterLevel = job.Location.BoezemLevelTp; - // break; - // } - // //job.SoilGeometryProbability.SoilProfile1D.EnsureUniqueLayerIds(); - // var calculationName = GetCalculationNameForPipingCalculator(job); - // calculator.FilenameCalculation = Path.Combine(Path.Combine(damProjectData.ProjectPath, job.FailureMechanismType.ToString()), calculationName); - // calculator.IsHydraulicShortcut = (job.HydraulicShortcutType == HydraulicShortcutType.HydraulicShortcut); - // double? pipingFactor = calculator.CalculatePipingFactor(job.Location, job.Location.SurfaceLine, job.SoilGeometryProbability.SoilProfile1D, waterLevel); - // job.BaseFileName = calculator.FilenameCalculation; - // - // job.RegionalResultType = RegionalResultType.SafetyFactor; - // if (pipingFactor.HasValue) - // { - // job.SafetyFactor = pipingFactor.Value; - // job.CalculationResult = CalculationResult.Succeeded; - // job.ProbabilityOfFailure = double.NaN; - // job.RegionalResultType = RegionalResultType.SafetyFactor; - // } - // - // else - // { - // job.SafetyFactor = double.NaN; - // job.CalculationResult = CalculationResult.RunFailed; - // } + PerformJob(job, calculator, currentSpecification); } else { @@ -433,109 +428,6 @@ return kernelWrapper; } - private List CreateKernelWrapperforJob(IKernelWrapper kernelWrapper, FailureMechanismSystemType failureMechanismType, ScenarioType scenarioType, - Location location, SoilGeometryProbability soilGeometryProbability, out IKernelDataInput kernelDataInput, - out IKernelDataOutput kernelDataOutput, out DamKernelInput damKernelInput) - { - var calculationMessages = new List(); - // Prepare input - damKernelInput = new DamKernelInput(); - var projectPath = damProjectData.ProjectPath != "" ? damProjectData.ProjectPath : Directory.GetCurrentDirectory(); - damKernelInput.ProjectDir = projectPath; - damKernelInput.CalculationDir = Path.Combine(projectPath, damProjectData.CalculationMap); - damKernelInput.Location = location; - damKernelInput.SubSoilScenario = soilGeometryProbability; - damKernelInput.DamFailureMechanismeCalculationSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; - damKernelInput.RiverLevelHigh = damKernelInput.Location.BoezemLevelHbp; - damKernelInput.RiverLevelLow = damKernelInput.Location.BoezemLevelLbp; - damKernelInput.FilenamePrefix = string.Format("Loc({0})_Sce({1})", location.Name, scenarioType); - damKernelInput.SubSoilScenario.SegmentFailureMechanismType = failureMechanismType; - PrepareResult prepareResult = kernelWrapper.Prepare(damKernelInput, 0, out kernelDataInput, out kernelDataOutput); - - // Sometimes the kernelDataInput is not created (p.e when soilprofileprobablility is meant for - // stability where Piping calc is wanted). In that case, do nothing but just skip. - if (prepareResult == PrepareResult.Successful) - { - - } - else - { - if (prepareResult == PrepareResult.NotRelevant) - { - calculationMessages.Add(new LogMessage(LogMessageType.Info, null, - string.Format(Resources.DesignCalculatorIrrelevant, location.Name, - soilGeometryProbability.ToString(), ""))); // TODO #The correct regional scenario ID? - } - if (prepareResult == PrepareResult.Failed) - { - calculationMessages.Add(new LogMessage(LogMessageType.Error, null, - string.Format(Resources.DesignCalculatorPrepareError, location.Name, - soilGeometryProbability.ToString(), ""))); // TODO #The correct regional scenario ID? - } - } - return calculationMessages; - } - - private string GetCalculationNameForPipingCalculator(RegionalScenarioProfileResult job) - { - string calculationName; - switch (job.PipingModelOption) - { - case PipingModelType.SellmeijerVnk : calculationName = String.Format("Calc(SellmeijerVnk)_Loc({0})_Pro({1}))", - job.LocationName, job.SoilProfileName); - break; - case PipingModelType.Sellmeijer4Forces: calculationName = String.Format("Calc(Sellmeijer4Forces)_Loc({0})_Pro({1}))", - job.LocationName, job.SoilProfileName); - break; - // Set Sellmeijer4Forces as default. - default: calculationName = String.Format("Calc(Sellmeijer4Forces)_Loc({0})_Pro({1}))", - job.LocationName, job.SoilProfileName); - break; - } - calculationName = Regex.Replace(calculationName, @"[\\\/:\*\?""'<>|.]", "_"); - return calculationName; - } - -// /// -// /// Determines the proper calculator for pipng -// /// -// /// -// /// -// /// proper piping calculator -// private PipingCalculator GetCalculatorForPipingModel(RegionalScenarioProfileResult job, ModelParametersForPLLines modelParametersForPlLines) -// { -// PipingCalculator calculator; -// switch (job.PipingModelOption) -// { -// case PipingModelType.SellmeijerVnk: calculator = new PipingCalculatorSellmeijer(modelParametersForPLLines, -// 1.0, null, null, null, job.Location.ModelFactors.UpliftCriterionPiping.Value); -// break; -// case PipingModelType.Sellmeijer4Forces: calculator = new PipingCalculatorSellmeijer4Forces(modelParametersForPLLines, -// 1.0, null, null, job.Location.ModelFactors.UpliftCriterionPiping.Value); -// break; -// case PipingModelType.Bligh: calculator = new PipingCalculatorBligh(modelParametersForPLLines, -// 1.0, null, null, job.Location.ModelFactors.UpliftCriterionPiping.Value); -// break; -// default: -// throw new RegionalScenariosCalculationException(String.Format("Piping model {0} not yet implemented for scenario calculation", job.PipingModelOption)); -// } -// return calculator; -// } - - /// - /// Process a job for failuremechanism Stability - /// - /// - private void ProcessJobStability(RegionalScenarioProfileResult job) - { - var currentSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; // must this be a copy? - currentSpecification.FailureMechanismSystemType = job.FailureMechanismType; - currentSpecification.FailureMechanismParametersMStab.MStabParameters.Model = job.MstabModelOption; - var calculator = CreateKernelWrapper(currentSpecification); - - PerformJob(job, calculator, currentSpecification); - } - private void PerformJob(RegionalScenarioProfileResult job, IKernelWrapper calculator, DamFailureMechanismeCalculationSpecification currentSpecification) { IKernelDataInput kernelDataInput; @@ -605,6 +497,50 @@ } } + private List CreateKernelWrapperforJob(IKernelWrapper kernelWrapper, FailureMechanismSystemType failureMechanismType, ScenarioType scenarioType, + Location location, SoilGeometryProbability soilGeometryProbability, out IKernelDataInput kernelDataInput, + out IKernelDataOutput kernelDataOutput, out DamKernelInput damKernelInput) + { + // Todo Bka: eliminate damProjectData usages. + var calculationMessages = new List(); + // Prepare input + damKernelInput = new DamKernelInput(); + var projectPath = damProjectData.ProjectPath != "" ? damProjectData.ProjectPath : Directory.GetCurrentDirectory(); + damKernelInput.ProjectDir = projectPath; + damKernelInput.CalculationDir = Path.Combine(projectPath, damProjectData.CalculationMap); + damKernelInput.Location = location; + damKernelInput.SubSoilScenario = soilGeometryProbability; + damKernelInput.DamFailureMechanismeCalculationSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; + damKernelInput.RiverLevelHigh = damKernelInput.Location.BoezemLevelHbp; + damKernelInput.RiverLevelLow = damKernelInput.Location.BoezemLevelLbp; + damKernelInput.FilenamePrefix = string.Format("Loc({0})_Sce({1})", location.Name, scenarioType); + damKernelInput.SubSoilScenario.SegmentFailureMechanismType = failureMechanismType; + PrepareResult prepareResult = kernelWrapper.Prepare(damKernelInput, 0, out kernelDataInput, out kernelDataOutput); + + // Sometimes the kernelDataInput is not created (p.e when soilprofileprobablility is meant for + // stability where Piping calc is wanted). In that case, do nothing but just skip. + if (prepareResult == PrepareResult.Successful) + { + + } + else + { + if (prepareResult == PrepareResult.NotRelevant) + { + calculationMessages.Add(new LogMessage(LogMessageType.Info, null, + string.Format(Resources.DesignCalculatorIrrelevant, location.Name, + soilGeometryProbability.ToString(), ""))); // TODO #The correct regional scenario ID? + } + if (prepareResult == PrepareResult.Failed) + { + calculationMessages.Add(new LogMessage(LogMessageType.Error, null, + string.Format(Resources.DesignCalculatorPrepareError, location.Name, + soilGeometryProbability.ToString(), ""))); // TODO #The correct regional scenario ID? + } + } + return calculationMessages; + } + /// /// Log messages /// @@ -666,7 +602,6 @@ } // Combine results - foreach (var scenarioResult in scenariosResult.RegionalScenarioResults) { CombineProfiles(scenarioResult); Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r1211 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapper.cs (.../DamMacroStabilityInwardsKernelWrapper.cs) (revision 1211) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityInwards/DamMacroStabilityInwardsKernelWrapper.cs (.../DamMacroStabilityInwardsKernelWrapper.cs) (revision 1212) @@ -68,6 +68,10 @@ CalculationResult = CalculationResult.NoRun }; kernelDataOutput = damMacroStabilityOutput; + if (damKernelInput.DamFailureMechanismeCalculationSpecification == null) + { + damKernelInput.DamFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification(); + } // Make sure the gridposition is Right. FailureMechanismParametersMStab.MStabParameters.GridPosition = MStabGridPosition.Right; @@ -325,7 +329,9 @@ damKernelInput.RiverLevelLow, subSoilScenario, null, requiredSafetyFactor.Value, - kernelDataInput.FailureMechanismParametersMStab, out errorMessages); + kernelDataInput.FailureMechanismParametersMStab, + damKernelInput.DamFailureMechanismeCalculationSpecification.AssessmentScenarioJobSettings, + out errorMessages); mstabXml.Save(stabilityProjectFilename + ".xml"); return mstabXml; @@ -501,7 +507,9 @@ 0.0, subSoilScenario, null, location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope.Value, - damMacroStabilityInput.FailureMechanismParametersMStab, out errorMessages); + damMacroStabilityInput.FailureMechanismParametersMStab, + damKernelInput.DamFailureMechanismeCalculationSpecification.AssessmentScenarioJobSettings, + out errorMessages); mstabXML.Save(initialgeometryFile + ".xml"); damMacroStabilityInput.DGeoStabilityInputFileName = initialgeometryFile; Index: DamEngine/trunk/src/Deltares.DamEngine.Data/General/DamFailureMechanismeCalculationSpecification.cs =================================================================== diff -u -r877 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Data/General/DamFailureMechanismeCalculationSpecification.cs (.../DamFailureMechanismeCalculationSpecification.cs) (revision 877) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/General/DamFailureMechanismeCalculationSpecification.cs (.../DamFailureMechanismeCalculationSpecification.cs) (revision 1212) @@ -34,15 +34,17 @@ private Enum calculationModel; private FailureMechanismParametersMStab failureMechanismParametersMStab; private static DamProjectType damProjectType; - private StabilityKernelType stabilityKernelType = StabilityKernelType.DamClassic; - + private StabilityKernelType stabilityKernelType = StabilityKernelType.DamClassic; + private RegionalAssessmentScenarioJobSettings regionalAssessmentScenarioJobSettings; + public DamFailureMechanismeCalculationSpecification() { //Todo interface failureMechanismSystemType = FailureMechanismSystemType.StabilityInside; failureMechanismParametersMStab = new FailureMechanismParametersMStab(); CalculationModel = failureMechanismParametersMStab.MStabParameters.Model; FailureMechanismParametersMStab.MStabParameters.GridPosition = MStabGridPosition.Right; + regionalAssessmentScenarioJobSettings = new RegionalAssessmentScenarioJobSettings(); ReadUserSettingsSlipCircleDefinition(); } @@ -146,6 +148,24 @@ set { stabilityKernelType = value; } } + /// + /// Gets or sets the assessment scenario job settings. + /// + /// + /// The assessment scenario job settings. + /// + public RegionalAssessmentScenarioJobSettings AssessmentScenarioJobSettings + { + get + { + return regionalAssessmentScenarioJobSettings; + } + set + { + regionalAssessmentScenarioJobSettings = value; + } + } + public void Assign(DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculation) { this.FailureMechanismSystemType = damFailureMechanismeCalculation.failureMechanismSystemType; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs =================================================================== diff -u -r1211 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs (.../DamPipingSellmeijer4ForcesKernelWrapper.cs) (revision 1211) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingSellmeijer4Forces/DamPipingSellmeijer4ForcesKernelWrapper.cs (.../DamPipingSellmeijer4ForcesKernelWrapper.cs) (revision 1212) @@ -69,7 +69,9 @@ var location = damKernelInput.Location; double waterLevel = damKernelInput.RiverLevelHigh; UpliftSituation upliftSituation; - var plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, waterLevel, out upliftSituation); + var plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, waterLevel, + damKernelInput.DamFailureMechanismeCalculationSpecification.AssessmentScenarioJobSettings.HydraulicShortcutType, + out upliftSituation); EvaluateUpliftSituation(damKernelInput, out kernelDataInput, plLines, waterLevel, damPipingOutput); return PrepareResult.Successful; } Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Deltares.DamEngine.Data.csproj =================================================================== diff -u -r1203 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Deltares.DamEngine.Data.csproj (.../Deltares.DamEngine.Data.csproj) (revision 1203) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Deltares.DamEngine.Data.csproj (.../Deltares.DamEngine.Data.csproj) (revision 1212) @@ -42,6 +42,7 @@ + Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs =================================================================== diff -u -r1121 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs (.../PlLinesHelperTests.cs) (revision 1121) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs (.../PlLinesHelperTests.cs) (revision 1212) @@ -22,6 +22,7 @@ using Deltares.DamEngine.Calculators.KernelWrappers.Common; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.General.PlLines; +using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.TestHelpers.Factories; using NUnit.Framework; @@ -31,7 +32,7 @@ public class PlLinesHelperTests { [Test] - public void TestCreatePlLines() + public void TestCreatePlLinesNoHydraulicShortcut() { // expected values retrieved from debugging Dam Classic (rev.663) // test CanCalculateThePipingFactorUsingSellmeijer4Forces @@ -40,7 +41,8 @@ var soilProfile1D = FactoryForSoilProfiles.CreatePipingSellmeijerProfileWithOneSandlayer(); var riverLevel = 1.0; UpliftSituation upliftSituation; - var plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, riverLevel, out upliftSituation); + var plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, riverLevel, HydraulicShortcutType.NoHydraulicShortcut, + out upliftSituation); Assert.AreEqual(4, plLines.PlLineCount); Assert.AreEqual(8, plLines.Lines[PlLineType.Pl1].Points.Count); Assert.IsTrue(new PlLinePoint(0.000, 1.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[0])); @@ -58,5 +60,138 @@ Assert.AreEqual(0, plLines.Lines[PlLineType.Pl4].Points.Count); } + [Test] + public void TestCreatePlLinesHydraulicShortcut() + { + // expected values retrieved from debugging Dam Classic (rev.663) + // test CanCalculateThePipingFactorUsingSellmeijer4Forces + + // Same as TestCreatePlLinesNoHydraulicShortcut because HeadInPlLine3 is not given. + var location = new Location(); + location.SurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineTutorial1(); + var soilProfile1D = FactoryForSoilProfiles.CreatePipingSellmeijerProfileWithOneSandlayer(); + var riverLevel = 1.0; + UpliftSituation upliftSituation; + var plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, riverLevel, HydraulicShortcutType.HydraulicShortcut, + out upliftSituation); + Assert.AreEqual(4, plLines.PlLineCount); + Assert.AreEqual(8, plLines.Lines[PlLineType.Pl1].Points.Count); + Assert.IsTrue(new PlLinePoint(0.000, 1.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[0])); + Assert.IsTrue(new PlLinePoint(14.900, 1.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[1])); + Assert.IsTrue(new PlLinePoint(34.500, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[2])); + Assert.IsTrue(new PlLinePoint(40.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[3])); + Assert.IsTrue(new PlLinePoint(50.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[4])); + Assert.IsTrue(new PlLinePoint(58.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[5])); + Assert.IsTrue(new PlLinePoint(61.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[6])); + Assert.IsTrue(new PlLinePoint(75.000, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[7])); + Assert.AreEqual(0, plLines.Lines[PlLineType.Pl2].Points.Count); + Assert.AreEqual(2, plLines.Lines[PlLineType.Pl3].Points.Count); + Assert.IsTrue(new PlLinePoint(0.000, 1.000).LocationEquals(plLines.Lines[PlLineType.Pl3].Points[0])); + Assert.IsTrue(new PlLinePoint(75.000, 1.000).LocationEquals(plLines.Lines[PlLineType.Pl3].Points[1])); + Assert.AreEqual(0, plLines.Lines[PlLineType.Pl4].Points.Count); + } + + [Test] + public void TestCreatePlLinesHydraulicShortcutWithHeadPl3() + { + // expected values retrieved from debugging Dam Classic (rev.663) + // test CanCalculateThePipingFactorUsingSellmeijer4Forces + + // Lower Pllines as riverlavel is now 0.5 instead of 1. + var location = new Location(); + location.SurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineTutorial1(); + var soilProfile1D = FactoryForSoilProfiles.CreatePipingSellmeijerProfileWithOneSandlayer(); + var riverLevel = 0.5; + location.HeadPl3 = 1.0; + UpliftSituation upliftSituation; + var plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, riverLevel, HydraulicShortcutType.HydraulicShortcut, + out upliftSituation); + Assert.AreEqual(4, plLines.PlLineCount); + Assert.AreEqual(8, plLines.Lines[PlLineType.Pl1].Points.Count); + Assert.IsTrue(new PlLinePoint(0.000, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[0])); + Assert.IsTrue(new PlLinePoint(12.450, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[1])); + Assert.IsTrue(new PlLinePoint(34.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[2])); + Assert.IsTrue(new PlLinePoint(40.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[3])); + Assert.IsTrue(new PlLinePoint(50.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[4])); + Assert.IsTrue(new PlLinePoint(58.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[5])); + Assert.IsTrue(new PlLinePoint(61.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[6])); + Assert.IsTrue(new PlLinePoint(75.000, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[7])); + Assert.AreEqual(0, plLines.Lines[PlLineType.Pl2].Points.Count); + Assert.AreEqual(2, plLines.Lines[PlLineType.Pl3].Points.Count); + Assert.IsTrue(new PlLinePoint(0.000, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl3].Points[0])); + Assert.IsTrue(new PlLinePoint(75.000, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl3].Points[1])); + Assert.AreEqual(0, plLines.Lines[PlLineType.Pl4].Points.Count); + } + + [Test] + public void TestCreatePlLinesHydraulicShortcutWithHeadPl3AndInBetweenAquifer() + { + // expected values retrieved from debugging Dam Classic (rev.663) + // test CanCalculateThePipingFactorUsingSellmeijer4Forces + + // PL1 is same as TestCreatePlLinesHydraulicShortcutWithHeadPl3 (same riverlevel = 0.5) + // PL3 is same as TestCreatePlLinesNoHydraulicShortcut because HeadInPlLine3 is given with value 1 and there is a + // in between aquifer so Head (1.0) is used instead of riverlevel. + // PL2 and PL4 now generated at riverlevel. + var location = new Location(); + location.SurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineTutorial1(); + var soilProfile1D = FactoryForSoilProfiles.CreatePipingSellmeijerProfileWithOneSandlayer(); + AddLayerToSoilProfile(soilProfile1D, -4, false); + AddLayerToSoilProfile(soilProfile1D, -5, true); + var riverLevel = 0.5; + location.HeadPl3 = 1.0; + UpliftSituation upliftSituation; + var plLines = PlLinesHelper.CreatePlLinesForPiping(location, soilProfile1D, riverLevel, HydraulicShortcutType.HydraulicShortcut, + out upliftSituation); + Assert.AreEqual(4, plLines.PlLineCount); + Assert.AreEqual(8, plLines.Lines[PlLineType.Pl1].Points.Count); + Assert.IsTrue(new PlLinePoint(0.000, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[0])); + Assert.IsTrue(new PlLinePoint(12.450, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[1])); + Assert.IsTrue(new PlLinePoint(34.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[2])); + Assert.IsTrue(new PlLinePoint(40.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[3])); + Assert.IsTrue(new PlLinePoint(50.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[4])); + Assert.IsTrue(new PlLinePoint(58.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[5])); + Assert.IsTrue(new PlLinePoint(61.500, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[6])); + Assert.IsTrue(new PlLinePoint(75.000, 0.000).LocationEquals(plLines.Lines[PlLineType.Pl1].Points[7])); + Assert.AreEqual(2, plLines.Lines[PlLineType.Pl2].Points.Count); + Assert.IsTrue(new PlLinePoint(0.000, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl2].Points[0])); + Assert.IsTrue(new PlLinePoint(75.000, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl2].Points[1])); + Assert.AreEqual(2, plLines.Lines[PlLineType.Pl3].Points.Count); + Assert.IsTrue(new PlLinePoint(0.000, 1.000).LocationEquals(plLines.Lines[PlLineType.Pl3].Points[0])); + Assert.IsTrue(new PlLinePoint(75.000, 1.000).LocationEquals(plLines.Lines[PlLineType.Pl3].Points[1])); + Assert.AreEqual(2, plLines.Lines[PlLineType.Pl4].Points.Count); + Assert.IsTrue(new PlLinePoint(0.000, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl4].Points[0])); + Assert.IsTrue(new PlLinePoint(75.000, 0.500).LocationEquals(plLines.Lines[PlLineType.Pl4].Points[1])); + } + + private void AddLayerToSoilProfile(SoilProfile1D soilProfile, double topLevel, bool isAquifer) + { + var layer = new SoilLayer1D() + { + Name = GetNewUniqueLayerId(soilProfile) + }; + layer.TopLevel = topLevel; + layer.Soil = new Soil("Sand", 22.0, 20.0) + { + PermeabKx = 0.0001, + DiameterD70 = Physics.FactorMicroMeterToMeter * 200.0, + WhitesConstant = 0.25, + BeddingAngle = 37.0 + }; + layer.IsAquifer = isAquifer; + soilProfile.Layers.Add(layer); + } + + private static string GetNewUniqueLayerId(SoilProfile1D soilProfile1D) + { + int num = 0; + string id; + do + { + id = "L" + (object)num++; + } + while (soilProfile1D.GetLayerWithName(id) != null); + return id; + } } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityHorizontalBalance/DamMacroStabilityHorizontalBalanceKernelWrapper.cs =================================================================== diff -u -r1211 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityHorizontalBalance/DamMacroStabilityHorizontalBalanceKernelWrapper.cs (.../DamMacroStabilityHorizontalBalanceKernelWrapper.cs) (revision 1211) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStabilityHorizontalBalance/DamMacroStabilityHorizontalBalanceKernelWrapper.cs (.../DamMacroStabilityHorizontalBalanceKernelWrapper.cs) (revision 1212) @@ -265,7 +265,9 @@ damKernelInput.RiverLevelLow, subSoilScenario, null, requiredSafetyFactor, - kernelDataInput.FailureMechanismParametersMStab, out errorMessages); + kernelDataInput.FailureMechanismParametersMStab, + damKernelInput.DamFailureMechanismeCalculationSpecification.AssessmentScenarioJobSettings, + out errorMessages); mstabXml.Save(stabilityProjectFilename + ".xml"); return mstabXml; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/UpliftHelper.cs =================================================================== diff -u -r1137 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/UpliftHelper.cs (.../UpliftHelper.cs) (revision 1137) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/UpliftHelper.cs (.../UpliftHelper.cs) (revision 1212) @@ -44,7 +44,8 @@ var soilGeometry2DName = damKernelInput.SubSoilScenario.FullStiFileName; UpliftSituation upliftSituation; var plLines = PlLinesHelper.CreatePlLinesForStability(location, damKernelInput.SubSoilScenario, riverLevel, - soilGeometry2DName, riverLevelLow, out upliftSituation); + soilGeometry2DName, riverLevelLow, damKernelInput.DamFailureMechanismeCalculationSpecification.AssessmentScenarioJobSettings, + out upliftSituation); if (plLines != null) { var surfaceLineWithNewHeight = location.SurfaceLine; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapperTests.cs =================================================================== diff -u -r1149 -r1212 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapperTests.cs (.../DamMacroStabilityOutwardsKernelWrapperTests.cs) (revision 1149) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamMacroStabilityOutwards/DamMacroStabilityOutwardsKernelWrapperTests.cs (.../DamMacroStabilityOutwardsKernelWrapperTests.cs) (revision 1212) @@ -509,6 +509,7 @@ // Prepare the wrapper. Result is input for the calculation dll IKernelDataInput damStabilityInput; IKernelDataOutput kernelOutput; + damKernelInput.DamFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification(); kernelWrapper.Prepare(damKernelInput, 0, out damStabilityInput, out kernelOutput); } }