Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForDamProjectData.cs
===================================================================
diff -u -r4053 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForDamProjectData.cs (.../FactoryForDamProjectData.cs) (revision 4053)
+++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForDamProjectData.cs (.../FactoryForDamProjectData.cs) (revision 4412)
@@ -387,6 +387,7 @@
location.Scenarios.Add(designScenario);
}
+ location.CurrentScenario = location.Scenarios[0];
location.DikeEmbankmentMaterial = "DikeMat";
location.StabilityOptions = new StabilityOptions
{
@@ -494,7 +495,7 @@
designScenario.RequiredSafetyFactorStabilityInnerSlope = 1.0 * factor + 0.64;
designScenario.RequiredSafetyFactorStabilityOuterSlope = 1.0 * factor + 0.65;
designScenario.RequiredSafetyFactorPiping = 1.0 * factor + 0.66;
- designScenario.Location = location;
+ designScenario.LocationName = location.Name;
return designScenario;
}
Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MultiCoreMacroStabilityTests.cs
===================================================================
diff -u -r4331 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MultiCoreMacroStabilityTests.cs (.../MultiCoreMacroStabilityTests.cs) (revision 4331)
+++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/MultiCoreMacroStabilityTests.cs (.../MultiCoreMacroStabilityTests.cs) (revision 4412)
@@ -419,6 +419,165 @@
}
}
+ [Test]
+ [TestCase(1, true)]
+ [TestCase(4, true)]
+ [TestCase(16, true)]
+ [TestCase(1, false)]
+ [TestCase(4, false)]
+ [TestCase(16, false)]
+ public void DesignBishopAdaptionWithScenariosForHeadPL3CalculatesCorrect(int maxCores, bool justOneScenario)
+ {
+ const string inputFilename = "InputFileMultiCoreTestForScenarioAdaption.xml";
+ string fullInputFilename = Path.Combine(mapTestFiles, inputFilename);
+ Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
+ string inputString = File.ReadAllText(fullInputFilename);
+ var engineInterface = new EngineInterface(inputString);
+ engineInterface.DamProjectData.MaxCalculationCores = maxCores;
+ var calcDir = engineInterface.DamProjectData.CalculationMap + "_Cores_" + maxCores;
+ if (justOneScenario)
+ {
+ var firstScenario = engineInterface.DamProjectData.Dike.Locations.First().Scenarios.First();
+ engineInterface.DamProjectData.Dike.ClearScenarios();
+ engineInterface.DamProjectData.Dike.AddScenarioToAllLocations(firstScenario);
+ calcDir = engineInterface.DamProjectData.CalculationMap + "_OneScenario_Cores_" + maxCores;
+ }
+
+ engineInterface.DamProjectData.CalculationMap = calcDir;
+ Assert.IsNotNull(engineInterface.DamProjectData);
+ calcDir = Directory.GetCurrentDirectory() + "\\" + calcDir;
+ if (Directory.Exists(calcDir))
+ {
+ Directory.Delete(calcDir, true); // delete previous results
+ }
+ string result = engineInterface.Validate();
+ Assert.IsTrue(result == null, "Validation must succeed but does not, see output xml in debugger");
+ string outputString = engineInterface.Run();
+ File.WriteAllText("Results_Cores_" + maxCores + ".xml", outputString);
+ Output output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
+ if (justOneScenario)
+ {
+ Assert.AreEqual(9, output.Results.CalculationResults.Length);
+ Assert.AreEqual(1465, output.Results.CalculationMessages.Length);
+ }
+ else
+ {
+ Assert.AreEqual(18, output.Results.CalculationResults.Length);
+ Assert.AreEqual(3299, output.Results.CalculationMessages.Length);
+ }
+ foreach (var designResult in output.Results.CalculationResults)
+ {
+ if (designResult.BaseFileName.Equals("Loc(KR093_0013)_Sce(3)_Pro(segment_627_1D1-KR093_0013-1)_Ite23"))
+ {
+ Assert.AreEqual(9.300, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("3", designResult.ScenarioName);
+ Assert.AreEqual(-0.94, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0013)_Sce(4)_Pro(segment_627_1D1-KR093_0013-1)"))
+ {
+ Assert.AreEqual(7.888, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("4", designResult.ScenarioName);
+ Assert.AreEqual(-0.37, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0013)_Sce(3)_Pro(segment_627_1D2-KR093_0013-2)"))
+ {
+ Assert.AreEqual(7.023, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("3", designResult.ScenarioName);
+ Assert.AreEqual(-0.94, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0013)_Sce(4)_Pro(segment_627_1D2-KR093_0013-2)"))
+ {
+ Assert.AreEqual(5.968, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("4", designResult.ScenarioName);
+ Assert.AreEqual(-0.37, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0013)_Sce(3)_Pro(segment_627_1D3-KR093_0013-3)"))
+ {
+ Assert.AreEqual(7.555, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("3", designResult.ScenarioName);
+ Assert.AreEqual(-0.94, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0013)_Sce(4)_Pro(segment_627_1D3-KR093_0013-3)"))
+ {
+ Assert.AreEqual(6.477, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("4", designResult.ScenarioName);
+ Assert.AreEqual(-0.37, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0018)_Sce(3)_Pro(segment_629_1D1-KR093_0018-1)"))
+ {
+ Assert.AreEqual(7.353, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("3", designResult.ScenarioName);
+ Assert.AreEqual(-1.00, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0018)_Sce(4)_Pro(segment_629_1D1-KR093_0018-1)"))
+ {
+ Assert.AreEqual(6.278, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("4", designResult.ScenarioName);
+ Assert.AreEqual(-0.61, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0018)_Sce(3)_Pro(segment_629_1D2-KR093_0018-2)"))
+ {
+ Assert.AreEqual(5.945, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("3", designResult.ScenarioName);
+ Assert.AreEqual(-1.00, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0018)_Sce(4)_Pro(segment_629_1D2-KR093_0018-2)"))
+ {
+ Assert.AreEqual(1.225, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("4", designResult.ScenarioName);
+ Assert.AreEqual(-0.37, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0018)_Sce(3)_Pro(segment_629_1D3-KR093_0018-3)"))
+ {
+ Assert.AreEqual(1.608, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("3", designResult.ScenarioName);
+ Assert.AreEqual(-1.00, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0018)_Sce(4)_Pro(segment_629_1D3-KR093_0018-3)"))
+ {
+ Assert.AreEqual(1.397, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("4", designResult.ScenarioName);
+ Assert.AreEqual(-0.37, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0019)_Sce(3)_Pro(segment_629_1D1-KR093_0019-1)"))
+ {
+ Assert.AreEqual(4.557, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("3", designResult.ScenarioName);
+ Assert.AreEqual(-1.03, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0019)_Sce(4)_Pro(segment_629_1D1-KR093_0019-1)"))
+ {
+ Assert.AreEqual(3.985, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("4", designResult.ScenarioName);
+ Assert.AreEqual(-0.57, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0019)_Sce(3)_Pro(segment_629_1D2-KR093_0019-2)"))
+ {
+ Assert.AreEqual(4.087, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("3", designResult.ScenarioName);
+ Assert.AreEqual(-1.03, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0019)_Sce(4)_Pro(segment_629_1D2-KR093_0019-2)"))
+ {
+ Assert.AreEqual(3.418, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("4", designResult.ScenarioName);
+ Assert.AreEqual(-0.37, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0019)_Sce(3)_Pro(segment_629_1D3-KR093_0019-3)"))
+ {
+ Assert.AreEqual(4.432, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("3", designResult.ScenarioName);
+ Assert.AreEqual(-1.03, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ if (designResult.BaseFileName.Equals("Loc(KR093_0019)_Sce(4)_Pro(segment_629_1D3-KR093_0019-3)"))
+ {
+ Assert.AreEqual(3.745, designResult.StabilityDesignResults.SafetyFactor, tolerance);
+ Assert.AreEqual("4", designResult.ScenarioName);
+ Assert.AreEqual(-0.37, designResult.StabilityDesignResults.UpliftSituation.Pl3HeadAdjusted, tol2Digits);
+ }
+ }
+ }
+
private static void RemoveTestWorkingDirectory(string testWorkingFolder)
{
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs
===================================================================
diff -u -r4331 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs (.../PlLinesHelper.cs) (revision 4331)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/PlLinesHelper.cs (.../PlLinesHelper.cs) (revision 4412)
@@ -110,10 +110,6 @@
public static PlLines CreatePlLinesForStabilityExpertKnowledge(Location location, SoilGeometryProbability subSoilScenario,
double waterLevel, double? waterLevelRiverLow, out UpliftSituation upliftSituation)
{
- if (location.CurrentScenario == null)
- {
- location.CurrentScenario = location.Scenarios[0];
- }
var plLinesCreator = new PlLinesCreator.PlLinesCreator
{
WaterLevelRiverLow = waterLevelRiverLow,
@@ -166,10 +162,6 @@
///
public static PlLines CreatePlLinesForPiping(DateTime timeStepDateTime, Location location, SoilProfile1D soilProfile, double waterLevel)
{
- if (location.CurrentScenario == null)
- {
- location.CurrentScenario = location.Scenarios[0];
- }
var plLinesCreator = new PlLinesCreator.PlLinesCreator
{
WaterLevelRiverHigh = waterLevel,
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorCombinedSlopeAndShoulderAdaption.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorCombinedSlopeAndShoulderAdaption.cs (.../DesignCalculatorCombinedSlopeAndShoulderAdaption.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorCombinedSlopeAndShoulderAdaption.cs (.../DesignCalculatorCombinedSlopeAndShoulderAdaption.cs) (revision 4412)
@@ -50,19 +50,19 @@
/// The kernel data input.
/// The kernel data output.
/// The dam kernel input.
- /// The design scenario.
/// The calculation messages.
/// The design calculations.
///
///
///
public static void PerformDesignCalculationCombinedSlopeAdaptionAndShoulderAdaption(
IKernelWrapper kernelWrapper, IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput,
- DamKernelInput damKernelInput, DesignScenario designScenario,
+ DamKernelInput damKernelInput,
List calculationMessages, List designCalculations)
{
List designResults;
Location location = damKernelInput.Location;
+ DesignScenario designScenario = location.CurrentScenario;
SoilGeometryProbability subSoilScenario = damKernelInput.SubSoilScenario;
const int maxRedesignIterations = 200;
var resultMessage = "";
@@ -72,20 +72,29 @@
EmbankmentDesignParameters embankmentDesignParameters;
// Prepare the kernel for design
- kernelWrapper.PrepareDesign(kernelDataInput, kernelDataOutput, damKernelInput, iterationIndex, out embankmentDesignParameters);
- SurfaceLine2 surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D).FullDeepClone();
+ kernelWrapper.PrepareDesign(kernelDataInput, kernelDataOutput, damKernelInput, iterationIndex,
+ out embankmentDesignParameters);
+ SurfaceLine2 surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D,
+ subSoilScenario.SoilProfile2D);
+ if (surfaceLine == null)
+ {
+ surfaceLine = location.SurfaceLine;
+ }
+ surfaceLine = surfaceLine.FullDeepClone();
try
{
iterationIndex = 1;
bool isRedesignRequired;
- damKernelInput.Location.SurfaceLine = surfaceLine;
+ location.SurfaceLine = surfaceLine;
location.AlignBoundaryPointsOfPl1LineWithAdaptedSurfaceLine(surfaceLine);
List locationCalculationMessages;
- DesignCalculatorUtils.KernelCalculate(out kernelDataInput, kernelWrapper, out kernelDataOutput, damKernelInput, iterationIndex, out locationCalculationMessages);
+ DesignCalculatorUtils.KernelCalculate(out kernelDataInput, kernelWrapper, out kernelDataOutput, damKernelInput,
+ iterationIndex, out locationCalculationMessages);
calculationMessages.AddRange(locationCalculationMessages);
DesignAdvise designAdvise;
string evaluationMessage;
- isRedesignRequired = !kernelWrapper.EvaluateDesign(damKernelInput, kernelDataInput, kernelDataOutput, out designAdvise, out evaluationMessage);
+ isRedesignRequired = !kernelWrapper.EvaluateDesign(damKernelInput, kernelDataInput, kernelDataOutput,
+ out designAdvise, out evaluationMessage);
if (!isRedesignRequired && surfaceLine != null)
{
@@ -94,9 +103,10 @@
}
else
{
- double maxFractionOfDikeHeightForShoulderHeight = location.UseNewMaxHeightShoulderAsFraction ? location.NewMaxHeightShoulderAsFraction : defaultMaxFractionOfDikeHeightForShoulderHeight;
+ double maxFractionOfDikeHeightForShoulderHeight = location.UseNewMaxHeightShoulderAsFraction ?
+ location.NewMaxHeightShoulderAsFraction : defaultMaxFractionOfDikeHeightForShoulderHeight;
double maxShoulderLevel = DesignCalculatorUtils.CalculateMaximumShoulderLevel(surfaceLine,
- maxFractionOfDikeHeightForShoulderHeight);
+ maxFractionOfDikeHeightForShoulderHeight);
while (isRedesignRequired && surfaceLine != null)
{
iterationIndex++;
@@ -110,10 +120,13 @@
double shoulderHeight;
double shoulderLength;
DesignCalculatorUtils.DetermineNewShoulderLengthAndHeight(location.StabilityShoulderGrowDeltaX,
- location.StabilityShoulderGrowSlope, surfaceLine, limitPointForShoulderDesign, out shoulderHeight, out shoulderLength);
+ location.StabilityShoulderGrowSlope,
+ surfaceLine, limitPointForShoulderDesign,
+ out shoulderHeight, out shoulderLength);
// Create new shoulder
- var surfaceLineShoulderAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, designScenario.PolderLevel);
+ var surfaceLineShoulderAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location,
+ designScenario.PolderLevel);
surfaceLineShoulderAdapter.MaxShoulderLevel = maxShoulderLevel;
surfaceLine = surfaceLineShoulderAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false);
@@ -123,12 +136,14 @@
throw new SurfaceLineException(validationError.Text);
}
- designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, surfaceLine);
+ designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D,
+ surfaceLine);
}
else if (designAdvise == DesignAdvise.SlopeInwards)
{
// If exit point of circle is in the slope (inward) of the dike or the top of the shoulder then adapt slope
- var surfaceLineSlopeAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location, designScenario.PolderLevel);
+ var surfaceLineSlopeAdapter = new SurfaceLineSlopeAdapter(surfaceLine, location,
+ designScenario.PolderLevel);
surfaceLine = surfaceLineSlopeAdapter.ConstructNewSurfaceLine(location.StabilitySlopeAdaptionDeltaX);
ValidationResult validationError = surfaceLine.Validate().FirstOrDefault(vr => vr.MessageType == ValidationResultType.Error);
@@ -137,31 +152,31 @@
throw new SurfaceLineException(validationError.Text);
}
- designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, surfaceLine);
+ designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D,
+ surfaceLine);
}
else
{
throw new NotImplementedException();
}
// Calculate again
- designScenario.Location.AlignBoundaryPointsOfPl1LineWithAdaptedSurfaceLine(surfaceLine);
- damKernelInput.Location.SurfaceLine = surfaceLine;
+ location.AlignBoundaryPointsOfPl1LineWithAdaptedSurfaceLine(surfaceLine);
+ location.SurfaceLine = surfaceLine;
kernelWrapper.PrepareDesign(kernelDataInput, kernelDataOutput, damKernelInput, iterationIndex, out embankmentDesignParameters);
- if (damKernelInput.SubSoilScenario.SoilProfileType == SoilProfileType.ProfileType2D)
+ if (subSoilScenario.SoilProfileType == SoilProfileType.ProfileType2D)
{
Soil embankmentSoil =
- damKernelInput.Location.SoilList.GetSoilByName(embankmentDesignParameters
- .EmbankmentMaterialname);
- damKernelInput.SubSoilScenario.SoilProfile2D =
- AdaptProfile2DToNewSurfaceLine(damKernelInput.SubSoilScenario.SoilProfile2D, surfaceLine, embankmentSoil);
+ location.SoilList.GetSoilByName(embankmentDesignParameters.EmbankmentMaterialname);
+ subSoilScenario.SoilProfile2D =
+ AdaptProfile2DToNewSurfaceLine(subSoilScenario.SoilProfile2D, surfaceLine, embankmentSoil);
}
DesignCalculatorUtils.KernelCalculate(out kernelDataInput, kernelWrapper, out kernelDataOutput, damKernelInput,
iterationIndex, out locationCalculationMessages);
calculationMessages.AddRange(locationCalculationMessages);
- isRedesignRequired = !kernelWrapper.EvaluateDesign(damKernelInput, kernelDataInput, kernelDataOutput, out designAdvise,
- out evaluationMessage);
+ isRedesignRequired = !kernelWrapper.EvaluateDesign(damKernelInput, kernelDataInput, kernelDataOutput,
+ out designAdvise, out evaluationMessage);
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs (.../PlLinesHelperTests.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/PlLinesHelperTests.cs (.../PlLinesHelperTests.cs) (revision 4412)
@@ -39,7 +39,7 @@
// expected values retrieved from debugging Dam Classic (rev.663)
// test CanCalculateThePipingFactorUsingSellmeijer4Forces
var location = new Location();
- location.Scenarios.Add(new DesignScenario());
+ location.CurrentScenario = new DesignScenario();
location.SurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineTutorial1();
SoilProfile1D soilProfile1D = FactoryForSoilProfiles.CreatePipingSellmeijerProfileWithOneSandlayer();
var riverLevel = 1.0;
@@ -70,7 +70,7 @@
// Same as TestCreatePlLinesNoHydraulicShortcut because HeadInPlLine3 is not given.
var location = new Location();
- location.Scenarios.Add(new DesignScenario());
+ location.CurrentScenario= new DesignScenario();
location.SurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineTutorial1();
SoilProfile1D soilProfile1D = FactoryForSoilProfiles.CreatePipingSellmeijerProfileWithOneSandlayer();
var riverLevel = 1.0;
@@ -108,7 +108,7 @@
{
HeadPl3 = 1.0
};
- location.Scenarios.Add(scenario);
+ location.CurrentScenario = scenario;
location.SurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineTutorial1();
SoilProfile1D soilProfile1D = FactoryForSoilProfiles.CreatePipingSellmeijerProfileWithOneSandlayer();
AddLayerToSoilProfile(soilProfile1D, -4, false);
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorSingle.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorSingle.cs (.../DesignCalculatorSingle.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorSingle.cs (.../DesignCalculatorSingle.cs) (revision 4412)
@@ -47,14 +47,15 @@
/// The design scenario.
/// The calculation messages.
/// The design calculations.
- public static void PerformSingleCalculation(IKernelWrapper kernelWrapper, IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput,
- DamKernelInput damKernelInput, DesignScenario designScenario,
+ public static void PerformSingleCalculation(IKernelWrapper kernelWrapper, IKernelDataInput kernelDataInput,
+ IKernelDataOutput kernelDataOutput, DamKernelInput damKernelInput,
List calculationMessages, List designCalculations)
{
// Perform validation
var designResults = new List();
var locationCalculationMessages = new List();
List validationMessages;
+ DesignScenario designScenario = damKernelInput.Location.CurrentScenario;
designScenario.CalculationResult = CalculationResult.NoRun;
try
{
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapperTests.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapperTests.cs (.../DamPipingBlighKernelWrapperTests.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapperTests.cs (.../DamPipingBlighKernelWrapperTests.cs) (revision 4412)
@@ -56,7 +56,7 @@
UpliftCriterionPiping = 1.0
}
};
- location.Scenarios.Add(new DesignScenario());
+ location.CurrentScenario = new DesignScenario();
var damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification
{
FailureMechanismSystemType = FailureMechanismSystemType.Piping,
@@ -97,7 +97,7 @@
var designScenario = new DesignScenario
{
LocationScenarioID = "1",
- Location = location
+ LocationName = location.Name
};
List results;
kernelWrapper.PostProcess(damKernelInput, damPipingOutput, designScenario, "", out results);
@@ -128,7 +128,7 @@
var location = new Location();
location.SurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineTutorial1();
location.ModelFactors.UpliftCriterionPiping = 1.0;
- location.Scenarios.Add(new DesignScenario());
+ location.CurrentScenario = new DesignScenario();
var subSoilScenario = new SoilGeometryProbability();
subSoilScenario.SoilProfile1D = FactoryForSoilProfiles.CreateClaySandProfileForPipingBligh();
subSoilScenario.SegmentFailureMechanismType = SegmentFailureMechanismType.Piping;
@@ -221,7 +221,7 @@
var designScenario = new DesignScenario
{
LocationScenarioID = "1",
- Location = new Location()
+ LocationName = "nieuw"
};
List results;
kernelWrapper.PostProcess(input, output, designScenario, "", out results);
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Sensors/SensorPLLineCreatorTest.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Sensors/SensorPLLineCreatorTest.cs (.../SensorPLLineCreatorTest.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Sensors/SensorPLLineCreatorTest.cs (.../SensorPLLineCreatorTest.cs) (revision 4412)
@@ -408,7 +408,7 @@
{
RiverLevel = 5
};
- location.Scenarios[0].PolderLevel = -1;
+ location.CurrentScenario.PolderLevel = -1;
location.AddSensorLocation();
location.SensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.LocationData;
location.SensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.LocationData;
Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SurfaceLine2Tests.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SurfaceLine2Tests.cs (.../SurfaceLine2Tests.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SurfaceLine2Tests.cs (.../SurfaceLine2Tests.cs) (revision 4412)
@@ -33,6 +33,116 @@
[Test]
public void TestAddingCharacteristicPointsOnSameLocationDoesNotAddDoublePointsInGeometry()
{
+ SurfaceLine2 surfaceLine = FillSurfaceLine2();
+ Assert.AreEqual(10, surfaceLine.CharacteristicPoints.Count);
+ ValidateSurfaceLine(surfaceLine);
+ }
+
+ private static void ValidateSurfaceLine(SurfaceLine2 surfaceLine)
+ {
+ var tolerance = 0.001;
+ Assert.AreEqual(2, surfaceLine.CharacteristicPoints.Count(cp => Math.Abs(cp.X - 13.0) < tolerance && Math.Abs(cp.Z - 5.4) < tolerance));
+ // Because TrafficLoadOutside and DikeTopAtPolder are on the same location, 1 point less should be in the geometry
+ Assert.AreEqual(9, surfaceLine.Geometry.Points.Count);
+ Assert.AreEqual(1, surfaceLine.Geometry.Points.Count(cp => Math.Abs(cp.X - 13.0) < tolerance && Math.Abs(cp.Z - 5.4) < tolerance));
+ }
+
+ [Test]
+ public void TestDeepCloneWithoutGeometryMustContainPoint()
+ {
+ SurfaceLine2 surfaceLine = FillSurfaceLine2();
+ Assert.AreEqual(10, surfaceLine.CharacteristicPoints.Count);
+ Assert.AreEqual(9, surfaceLine.Geometry.Points.Count);
+ // Note: resetting GeometryMustContainPoint to false after filling the surface line will erase all Characteristic Points.
+ // So the actual code should NEVER reset the GeometryMustContainPoint for filled surface lines.
+ surfaceLine.CharacteristicPoints.GeometryMustContainPoint = false;
+ Assert.AreEqual(0, surfaceLine.CharacteristicPoints.Count);
+ var newSurfaceLine = surfaceLine.FullDeepClone();
+ surfaceLine.CharacteristicPoints.Clear();
+ surfaceLine.Geometry.CalcPoints.Clear();
+ surfaceLine.Geometry.SyncPoints();
+ Assert.AreEqual(0, newSurfaceLine.CharacteristicPoints.Count);
+ Assert.AreEqual(9, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void TestDeepCloneWithGeometryMustContainPoint()
+ {
+ SurfaceLine2 surfaceLine = FillSurfaceLine2();
+ Assert.AreEqual(10, surfaceLine.CharacteristicPoints.Count);
+ Assert.AreEqual(9, surfaceLine.Geometry.Points.Count);
+ // Note: resetting GeometryMustContainPoint to true after filling the surface line reset the Characteristic Points to be
+ // equal to the amount of geometry points, keeping only one type, possibly making the surface line invalid.
+ // So the actual code should NEVER reset the GeometryMustContainPoint for filled surface lines.
+ surfaceLine.CharacteristicPoints.GeometryMustContainPoint = true;
+ Assert.AreEqual(9, surfaceLine.Geometry.Points.Count);
+ Assert.AreEqual(9, surfaceLine.CharacteristicPoints.Count);
+ var newSurfaceLine = surfaceLine.FullDeepClone();
+ surfaceLine.CharacteristicPoints.Clear();
+ surfaceLine.Geometry.CalcPoints.Clear();
+ surfaceLine.Geometry.SyncPoints();
+ Assert.AreEqual(9, newSurfaceLine.CharacteristicPoints.Count);
+ Assert.AreEqual(9, newSurfaceLine.Geometry.Points.Count);
+ }
+
+ [Test]
+ public void TestDeepCloneWithoutSettingGeometryMustContainPoint()
+ {
+ SurfaceLine2 surfaceLine = FillSurfaceLine2();
+ Assert.AreEqual(10, surfaceLine.CharacteristicPoints.Count);
+ Assert.AreEqual(9, surfaceLine.Geometry.Points.Count);
+ var newSurfaceLine = surfaceLine.FullDeepClone();
+ surfaceLine.CharacteristicPoints.Clear();
+ surfaceLine.Geometry.CalcPoints.Clear();
+ surfaceLine.Geometry.SyncPoints();
+ Assert.AreEqual(10, newSurfaceLine.CharacteristicPoints.Count);
+ Assert.AreEqual(9, newSurfaceLine.Geometry.Points.Count);
+ var tolerance = 1e-8;
+ surfaceLine = FillSurfaceLine2();
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[0].X, newSurfaceLine.CharacteristicPoints[0].X, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[0].Z, newSurfaceLine.CharacteristicPoints[0].Z, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[0].CharacteristicPointType,
+ newSurfaceLine.CharacteristicPoints[0].CharacteristicPointType);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[1].X, newSurfaceLine.CharacteristicPoints[1].X, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[1].Z, newSurfaceLine.CharacteristicPoints[1].Z, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[1].CharacteristicPointType,
+ newSurfaceLine.CharacteristicPoints[1].CharacteristicPointType);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[2].X, newSurfaceLine.CharacteristicPoints[2].X, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[2].Z, newSurfaceLine.CharacteristicPoints[2].Z, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[2].CharacteristicPointType,
+ newSurfaceLine.CharacteristicPoints[2].CharacteristicPointType);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[3].X, newSurfaceLine.CharacteristicPoints[3].X, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[3].Z, newSurfaceLine.CharacteristicPoints[3].Z, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[3].CharacteristicPointType,
+ newSurfaceLine.CharacteristicPoints[3].CharacteristicPointType);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[4].X, newSurfaceLine.CharacteristicPoints[4].X, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[4].Z, newSurfaceLine.CharacteristicPoints[4].Z, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[4].CharacteristicPointType,
+ newSurfaceLine.CharacteristicPoints[4].CharacteristicPointType);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[5].X, newSurfaceLine.CharacteristicPoints[5].X, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[5].Z, newSurfaceLine.CharacteristicPoints[5].Z, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[5].CharacteristicPointType,
+ newSurfaceLine.CharacteristicPoints[5].CharacteristicPointType);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[6].X, newSurfaceLine.CharacteristicPoints[6].X, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[6].Z, newSurfaceLine.CharacteristicPoints[6].Z, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[6].CharacteristicPointType,
+ newSurfaceLine.CharacteristicPoints[6].CharacteristicPointType);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[7].X, newSurfaceLine.CharacteristicPoints[7].X, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[7].Z, newSurfaceLine.CharacteristicPoints[7].Z, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[7].CharacteristicPointType,
+ newSurfaceLine.CharacteristicPoints[7].CharacteristicPointType);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[8].X, newSurfaceLine.CharacteristicPoints[8].X, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[8].Z, newSurfaceLine.CharacteristicPoints[8].Z, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[8].CharacteristicPointType,
+ newSurfaceLine.CharacteristicPoints[8].CharacteristicPointType);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[9].X, newSurfaceLine.CharacteristicPoints[9].X, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[9].Z, newSurfaceLine.CharacteristicPoints[9].Z, tolerance);
+ Assert.AreEqual(surfaceLine.CharacteristicPoints[9].CharacteristicPointType,
+ newSurfaceLine.CharacteristicPoints[9].CharacteristicPointType);
+ }
+
+ private SurfaceLine2 FillSurfaceLine2()
+ {
var surfaceLine = new SurfaceLine2();
surfaceLine.CharacteristicPoints.Geometry = surfaceLine.Geometry;
AddPointToSurfaceLine(surfaceLine, 0.0, 0.0, CharacteristicPointType.SurfaceLevelOutside);
@@ -46,12 +156,7 @@
AddPointToSurfaceLine(surfaceLine, 18.0, 1.0, CharacteristicPointType.DikeToeAtPolder);
AddPointToSurfaceLine(surfaceLine, 24.0, 1.0, CharacteristicPointType.SurfaceLevelInside);
surfaceLine.Geometry.SyncCalcPoints();
- Assert.AreEqual(10, surfaceLine.CharacteristicPoints.Count);
- var tolerance = 0.001;
- Assert.AreEqual(2, surfaceLine.CharacteristicPoints.Count(cp => Math.Abs(cp.X - 13.0) < tolerance && Math.Abs(cp.Z - 5.4) < tolerance));
- // Because TrafficLoadOutside and DikeTopAtPolder are on the same location, 1 point less should be in the geometry
- Assert.AreEqual(9, surfaceLine.Geometry.Points.Count);
- Assert.AreEqual(1, surfaceLine.Geometry.Points.Count(cp => Math.Abs(cp.X - 13.0) < tolerance && Math.Abs(cp.Z - 5.4) < tolerance));
+ return surfaceLine;
}
private void AddPointToSurfaceLine(SurfaceLine2 surfaceLine, double xCoordinate, double zCoordinate, CharacteristicPointType characteristicPointType)
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/General/Dike.cs
===================================================================
diff -u -r4053 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Data/General/Dike.cs (.../Dike.cs) (revision 4053)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/General/Dike.cs (.../Dike.cs) (revision 4412)
@@ -172,20 +172,29 @@
}
}
- public virtual List Scenarios
+ ///
+ /// Clears all the scenarios.
+ ///
+ public void ClearScenarios()
{
- get
+ foreach (Location location in Locations)
{
- var scenarios = new List();
- foreach (Location location in Locations)
- {
- scenarios.AddRange(location.Scenarios);
- }
-
- return scenarios;
+ location.Scenarios.Clear();
}
}
+ ///
+ /// Adds given scenario to all locations
+ ///
+ ///
+ public void AddScenarioToAllLocations(DesignScenario designScenario)
+ {
+ foreach (Location location in Locations)
+ {
+ location.Scenarios.Add(designScenario);
+ }
+ }
+
public string Description { get; set; } = "";
///
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs
===================================================================
diff -u -r4396 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs (.../DesignCalculator.cs) (revision 4396)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculator.cs (.../DesignCalculator.cs) (revision 4412)
@@ -85,42 +85,40 @@
/// The kernel data input.
/// The kernel data output.
/// The dam kernel input.
- /// The design scenario.
/// The calculation messages.
/// The design calculations.
public static void PerformDesignCalculation(
IKernelWrapper kernelWrapper, IKernelDataInput kernelDataInput,
IKernelDataOutput kernelDataOutput, DamKernelInput damKernelInput,
- DesignScenario designScenario,
List calculationMessages, List designCalculations)
{
// During the design calculation the location.SurfaceLine is adapted; so store a copy to restore it after the calculation
Location location = damKernelInput.Location;
+ DesignScenario designScenario = location.CurrentScenario;
SurfaceLine2 orgLocationSurfaceLine = location.SurfaceLine.FullDeepClone();
try
{
- if (damKernelInput.Location.RedesignDikeShoulder)
+ if (location.RedesignDikeShoulder)
{
// Redesign the surfaceline with shoulder and or slope adaption
switch (kernelWrapper.GetDesignStrategy(damKernelInput))
{
case DesignStrategy.ShoulderPerPoint:
DesignCalculatorShoulderPerPoint.PerformDesignCalculationShoulderPerPoint(
kernelWrapper, kernelDataInput, kernelDataOutput,
- damKernelInput, designScenario, calculationMessages,
- designCalculations);
+ damKernelInput, calculationMessages, designCalculations);
break;
case DesignStrategy.NoDesignPossible:
throw new NotImplementedException("No design is possible for this failure mechanism");
case DesignStrategy.SlopeAdaptionBeforeShoulderAdaption:
DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.PerformDesignCalculationFirstSlopeAdaptionThenShoulderAdaption(
- kernelWrapper, kernelDataInput, kernelDataOutput, damKernelInput, designScenario,
- calculationMessages, designCalculations);
+ kernelWrapper, kernelDataInput, kernelDataOutput, damKernelInput, calculationMessages,
+ designCalculations);
break;
case DesignStrategy.OptimizedSlopeAndShoulderAdaption:
DesignCalculatorCombinedSlopeAndShoulderAdaption.PerformDesignCalculationCombinedSlopeAdaptionAndShoulderAdaption(
- kernelWrapper, kernelDataInput, kernelDataOutput, damKernelInput, designScenario,
- calculationMessages, designCalculations);
+ kernelWrapper, kernelDataInput, kernelDataOutput, damKernelInput, calculationMessages,
+ designCalculations);
break;
}
}
@@ -161,7 +159,7 @@
for (var designScenarioIndex = 0; designScenarioIndex < location.Scenarios.Count; designScenarioIndex++)
{
DesignScenario designScenario = location.Scenarios[designScenarioIndex];
- designScenario.Location = location;
+ designScenario.LocationName = location.Name;
string projectPath = damProjectData.ProjectPath != ""
? damProjectData.ProjectPath
: Directory.GetCurrentDirectory();
@@ -282,16 +280,12 @@
switch (analysisType)
{
case AnalysisType.AdaptGeometry:
- PerformDesignCalculation(
- kernelWrapper, kernelDataInput, kernelDataOutput,
- damKernelInput, designScenario, calculationMessages,
- designResults);
+ PerformDesignCalculation(kernelWrapper, kernelDataInput, kernelDataOutput,
+ damKernelInput, calculationMessages, designResults);
break;
case AnalysisType.NoAdaption:
- DesignCalculatorSingle.PerformSingleCalculation(
- kernelWrapper, kernelDataInput, kernelDataOutput,
- damKernelInput, designScenario, calculationMessages,
- designResults);
+ DesignCalculatorSingle.PerformSingleCalculation(kernelWrapper, kernelDataInput, kernelDataOutput,
+ damKernelInput, calculationMessages, designResults);
break;
}
}
@@ -383,7 +377,8 @@
{
// Synchronize scenario data (Note: do not attempt to synchronize the ModelFactors as these are set by the direct
// properties in the scenario such as the Required Safeties. ModelFactors is just a place holder.
- location.CurrentScenario = location.SynchronizeCurrentScenarioWithScenarioData(designScenario);
+ location.CurrentScenario = location.SynchronizeCurrentScenarioWithScenarioData(designScenario);
+ location.Scenarios.Clear();
location.PlLineOffsetBelowDikeToeAtPolder = designScenario.PlLineOffsetBelowDikeToeAtPolder;
location.PlLineOffsetBelowDikeTopAtPolder = designScenario.PlLineOffsetBelowDikeTopAtPolder;
location.PlLineOffsetBelowDikeTopAtRiver = designScenario.PlLineOffsetBelowDikeTopAtRiver;
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorShoulderPerPoint.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorShoulderPerPoint.cs (.../DesignCalculatorShoulderPerPoint.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorShoulderPerPoint.cs (.../DesignCalculatorShoulderPerPoint.cs) (revision 4412)
@@ -53,21 +53,26 @@
/// The kernel data input.
/// The kernel data output.
/// The dam kernel input.
- /// The design scenario.
/// The calculation messages.
/// The design calculations.
///
public static void PerformDesignCalculationShoulderPerPoint
(IKernelWrapper kernelWrapper, IKernelDataInput kernelDataInput,
IKernelDataOutput kernelDataOutput, DamKernelInput damKernelInput,
- DesignScenario designScenario,
List calculationMessages, List designCalculations)
{
var designResults = new List();
Location location = damKernelInput.Location;
SoilGeometryProbability subSoilScenario = damKernelInput.SubSoilScenario;
- SurfaceLine2 surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D);
- damKernelInput.Location.SurfaceLine = surfaceLine;
+ DesignScenario designScenario = location.CurrentScenario;
+ SurfaceLine2 surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D,
+ subSoilScenario.SoilProfile2D);
+ if (surfaceLine == null)
+ {
+ surfaceLine = location.SurfaceLine;
+ }
+ surfaceLine = surfaceLine.FullDeepClone();
+ location.SurfaceLine = surfaceLine;
try
{
List locationCalculationMessages;
@@ -128,7 +133,7 @@
newSurfaceLine = surfaceLineShoulderAdapter.ConstructNewSurfaceLine(desiredShoulderLength, desiredShoulderHeight, true);
}
- damKernelInput.Location.SurfaceLine = newSurfaceLine;
+ location.SurfaceLine = newSurfaceLine;
kernelWrapper.Prepare(damKernelInput, 0, out kernelDataInput, out kernelDataOutput);
kernelWrapper.Execute(kernelDataInput, kernelDataOutput, out locationCalculationMessages);
// Process output
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Design/DesignScenario.cs
===================================================================
diff -u -r4331 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Design/DesignScenario.cs (.../DesignScenario.cs) (revision 4331)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Design/DesignScenario.cs (.../DesignScenario.cs) (revision 4412)
@@ -59,6 +59,11 @@
/// The location scenario identifier.
///
public string LocationScenarioID { get; set; }
+
+ ///
+ /// The name of the location to which the scenario belongs
+ ///
+ public string LocationName { get; set; }
///
/// Gets or sets the polder level.
@@ -274,9 +279,6 @@
///
public double? HeadPl4 { get; set; }
- /// Aggregation relationship.
- public Location Location { get; set; }
-
///
/// Clears the errors.
///
@@ -384,7 +386,7 @@
///
public override string ToString()
{
- return $"Location={Location.Name}, ID={LocationScenarioID} RiverLevel={RiverLevel} " +
+ return $"Location={LocationName}, ID={LocationScenarioID} RiverLevel={RiverLevel} " +
$"RiverLevelLow={(RiverLevelLow.HasValue ? RiverLevelLow.ToString() : "?")} " +
$"DikeTableHeight={(DikeTableHeight.HasValue ? DikeTableHeight.ToString() : "?")} " +
$"SafetyFactorStabilityInnerSlope={modelFactors.RequiredSafetyFactorStabilityInnerSlope} " +
@@ -448,17 +450,17 @@
{
//return redesignedSurfaceLines.ContainsKey(objectAsKey) ? redesignedSurfaceLines[objectAsKey] ?? Location.SurfaceLine : Location.SurfaceLine;
// For debugging: following code is the same as above, but better debuggable
- SurfaceLine2 surfaceline = Location.SurfaceLine;
+ SurfaceLine2 surfaceLine = null;
if (redesignedSurfaceLines.ContainsKey(objectAsKey))
{
SurfaceLine2 s = redesignedSurfaceLines[objectAsKey];
if (s != null)
{
- surfaceline = s;
+ surfaceLine = s;
}
}
- return surfaceline;
+ return surfaceLine;
}
return null;
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 4412)
@@ -184,7 +184,7 @@
var designScenario = new DesignScenario
{
- Location = kernelInput.Location
+ LocationName = kernelInput.Location.Name
};
var resultSlice = new StabilityResultSlice
{
@@ -512,7 +512,7 @@
// Fill the design results
var designScenario = new DesignScenario
{
- Location = kernelInput.Location
+ LocationName = kernelInput.Location.Name
};
kernelWrapper.PostProcess(kernelInput, macroStabilityOutput, designScenario, "", out List results);
Assert.IsTrue(results.Count > 0);
@@ -605,7 +605,7 @@
// Fill the design results
var designScenario = new DesignScenario
{
- Location = kernelInput.Location
+ LocationName = kernelInput.Location.Name
};
kernelWrapper.PostProcess(kernelInput, macroStabilityOutput, designScenario, "", out List results);
Assert.IsTrue(results.Count > 0);
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/TestHelpers/DamEngineDataTestFactory.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/TestHelpers/DamEngineDataTestFactory.cs (.../DamEngineDataTestFactory.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/TestHelpers/DamEngineDataTestFactory.cs (.../DamEngineDataTestFactory.cs) (revision 4412)
@@ -40,7 +40,7 @@
{
var scenario = new DesignScenario
{
- Location = location,
+ LocationName = location.Name,
LocationScenarioID = "ScenarioID"
};
return scenario;
@@ -55,7 +55,7 @@
{
var location = new Location();
var scenario = new DesignScenario();
- location.Scenarios.Add(scenario);
+ location.CurrentScenario = scenario;
location.Name = "LocationName";
location.DikeEmbankmentMaterial = "OB1";
location.ShoulderEmbankmentMaterial = "OB2";
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapperTests.cs
===================================================================
diff -u -r4294 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapperTests.cs (.../WtiPipingSellmeijerRevisedKernelWrapperTests.cs) (revision 4294)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapperTests.cs (.../WtiPipingSellmeijerRevisedKernelWrapperTests.cs) (revision 4412)
@@ -122,7 +122,7 @@
var designScenario = new DesignScenario
{
- Location = input.Location
+ LocationName = input.Location.Name
};
List results;
kernelWrapper.PostProcess(input, output, designScenario, "", out results);
@@ -367,9 +367,9 @@
var designScenario = new DesignScenario
{
LocationScenarioID = "1",
- Location = location
+ LocationName = location.Name
};
- location.Scenarios.Add(designScenario);
+ location.CurrentScenario = designScenario;
var subSoilScenario = new SoilGeometryProbability
{
SoilProfile1D = FactoryForSoilProfiles.CreatePipingSellmeijerProfileWithOneSandlayer(),
@@ -474,7 +474,7 @@
DampingFactorPl4 = 0.10
}
};
- location.Scenarios.Add(new DesignScenario());
+ location.CurrentScenario = new DesignScenario();
var subSoilScenario = new SoilGeometryProbability
{
SoilProfile1D = FactoryForSoilProfiles.CreatePipingSellmeijerProfileWithOneSandlayer(),
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/General/Location.cs
===================================================================
diff -u -r4396 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Data/General/Location.cs (.../Location.cs) (revision 4396)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/General/Location.cs (.../Location.cs) (revision 4412)
@@ -451,6 +451,7 @@
// Synchronize scenario data (Note: do not attempt to synchronize the ModelFactors as these are set by the direct
// properties in the scenario such as the Required Safeties. ModelFactors is just a place holder.
var newCurrentScenario = new DesignScenario();
+ newCurrentScenario.LocationName = Name;
newCurrentScenario.LocationScenarioID = designScenario.LocationScenarioID;
newCurrentScenario.PolderLevel = designScenario.PolderLevel;
newCurrentScenario.RiverLevel = designScenario.RiverLevel;
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs
===================================================================
diff -u -r4229 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 4229)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamPipingBligh/DamPipingBlighKernelWrapper.cs (.../DamPipingBlighKernelWrapper.cs) (revision 4412)
@@ -205,7 +205,7 @@
// The following 2 parameters are dependent on the position of the point and have to be recalculated for the current point
double dCoverLayer = DamPipingHelper.DetermineHeightCoverLayer(topLevelAquifer, point.Z); // point.Z is surfacelevel
damPipingBlighInput.DTotal = dCoverLayer;
- double referenceLevel = Math.Max(location.Scenarios[0].PolderLevel, point.Z); // point.Z is surfacelevel
+ double referenceLevel = Math.Max(location.CurrentScenario.PolderLevel, point.Z); // point.Z is surfacelevel
damPipingBlighInput.HExit = referenceLevel;
// Calculate the piping safety factor using the level of the given point
@@ -308,7 +308,7 @@
// bij zeedijken en de maatgevende hoogwaterstand (MHW bij rivierdijken) en de waterstand binnendijks ter plaatse van het uittredepunt,
// rekening houdend met zeespiegelrijzing etc.(zie paragraaf 3.7.2). In dien ter plaatse van het uittreepunt of de opbarstlocatie
// geen vrije waterstand heerst kan gerekend worden met het maaiveldniveau, rekening houdend met eventuele maaiveld daling (zie paragraaf 3.7.2)."
- double referenceLevel = Math.Max(location.Scenarios[0].PolderLevel, surfaceLevel);
+ double referenceLevel = Math.Max(location.CurrentScenario.PolderLevel, surfaceLevel);
kernelDataInput = new DamPipingBlighInput
{
HRiver = waterLevel,
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/General/Results/DesignResult.cs
===================================================================
diff -u -r4076 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Data/General/Results/DesignResult.cs (.../DesignResult.cs) (revision 4076)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/General/Results/DesignResult.cs (.../DesignResult.cs) (revision 4412)
@@ -68,7 +68,7 @@
{
if (scenario != null)
{
- LocationName = scenario.Location.Name;
+ LocationName = scenario.LocationName;
ScenarioName = scenario.LocationScenarioID;
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs
===================================================================
diff -u -r4373 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 4373)
+++ DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 4412)
@@ -486,14 +486,18 @@
}
}
- // Set locations for scenarios
+ // Set location name for scenarios
foreach (Location location in project.Dike.Locations)
{
foreach (DesignScenario designScenario in location.Scenarios)
{
- designScenario.Location = location;
+ designScenario.LocationName = location.Name;
}
+ if (location.CurrentScenario == null)
+ {
+ location.CurrentScenario = location.Scenarios[0];
+ }
location.SoilList = project.Dike.SoilList;
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.cs (.../DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.cs (.../DesignCalculatorFirstSlopeAdaptionThenShoulderAdaption.cs) (revision 4412)
@@ -50,18 +50,18 @@
/// The kernel data input.
/// The kernel data output.
/// The dam kernel input.
- /// The design scenario.
/// The calculation messages.
/// The design calculations.
///
///
///
public static void PerformDesignCalculationFirstSlopeAdaptionThenShoulderAdaption(IKernelWrapper kernelWrapper,
IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, DamKernelInput damKernelInput,
- DesignScenario designScenario, List calculationMessages, List designCalculations)
+ List calculationMessages, List designCalculations)
{
Location location = damKernelInput.Location;
SoilGeometryProbability subSoilScenario = damKernelInput.SubSoilScenario;
+ DesignScenario designScenario = location.CurrentScenario;
const int maxRedesignIterations = 200;
var resultMessage = "";
List designResults;
@@ -72,8 +72,13 @@
// Prepare the kernel for design
kernelWrapper.PrepareDesign(kernelDataInput, kernelDataOutput, damKernelInput, iterationIndex, out embankmentDesignParameters);
- SurfaceLine2 surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D).FullDeepClone();
-
+ SurfaceLine2 surfaceLine = designScenario.GetMostRecentSurfaceLine(subSoilScenario.SoilProfile1D,
+ subSoilScenario.SoilProfile2D);
+ if (surfaceLine == null)
+ {
+ surfaceLine = location.SurfaceLine;
+ }
+ surfaceLine = surfaceLine.FullDeepClone();
try
{
iterationIndex = 1;
@@ -92,7 +97,7 @@
}
else
{
- double maxFractionOfDikeHeightForShoulderHeight = designScenario.Location.UseNewMaxHeightShoulderAsFraction ? designScenario.Location.NewMaxHeightShoulderAsFraction : defaultMaxFractionOfDikeHeightForShoulderHeight;
+ double maxFractionOfDikeHeightForShoulderHeight = location.UseNewMaxHeightShoulderAsFraction ? location.NewMaxHeightShoulderAsFraction : defaultMaxFractionOfDikeHeightForShoulderHeight;
double maxShoulderLevel = DesignCalculatorUtils.CalculateMaximumShoulderLevel(surfaceLine, maxFractionOfDikeHeightForShoulderHeight);
// First slope adaption
@@ -131,7 +136,7 @@
// Recalculate new surfaceline
location.AlignBoundaryPointsOfPl1LineWithAdaptedSurfaceLine(surfaceLine);
- damKernelInput.Location.SurfaceLine = surfaceLine;
+ location.SurfaceLine = surfaceLine;
kernelWrapper.PrepareDesign(kernelDataInput, kernelDataOutput, damKernelInput, iterationIndex, out embankmentDesignParameters);
DesignCalculatorUtils.KernelCalculate(out kernelDataInput, kernelWrapper, out kernelDataOutput, damKernelInput, iterationIndex, out locationCalculationMessages);
calculationMessages.AddRange(locationCalculationMessages);
@@ -150,12 +155,12 @@
double shoulderHeight;
double shoulderLength;
GeometryPoint limitPointForShoulderDesign = surfaceLine.GetLimitPointForShoulderDesign();
- DesignCalculatorUtils.DetermineNewShoulderLengthAndHeight(designScenario.Location.StabilityShoulderGrowDeltaX,
- designScenario.Location.StabilityShoulderGrowSlope, surfaceLine, limitPointForShoulderDesign,
+ DesignCalculatorUtils.DetermineNewShoulderLengthAndHeight(location.StabilityShoulderGrowDeltaX,
+ location.StabilityShoulderGrowSlope, surfaceLine, limitPointForShoulderDesign,
out shoulderHeight, out shoulderLength);
// Create new shoulder
- var surfaceLineShoulderAdapter = new SurfaceLineShoulderAdapter(surfaceLine, designScenario.Location, designScenario.PolderLevel);
+ var surfaceLineShoulderAdapter = new SurfaceLineShoulderAdapter(surfaceLine, location, designScenario.PolderLevel);
surfaceLineShoulderAdapter.MaxShoulderLevel = maxShoulderLevel;
surfaceLineShoulderAdapter.SlopeOfNewShoulder = currentCoTangent;
surfaceLine = surfaceLineShoulderAdapter.ConstructNewSurfaceLine(shoulderLength, shoulderHeight, false);
@@ -169,8 +174,8 @@
designScenario.SetRedesignedSurfaceLine(subSoilScenario.SoilProfile1D, subSoilScenario.SoilProfile2D, surfaceLine);
// Recalculate new surfaceline
- designScenario.Location.AlignBoundaryPointsOfPl1LineWithAdaptedSurfaceLine(surfaceLine);
- damKernelInput.Location.SurfaceLine = surfaceLine;
+ location.AlignBoundaryPointsOfPl1LineWithAdaptedSurfaceLine(surfaceLine);
+ location.SurfaceLine = surfaceLine;
kernelWrapper.PrepareDesign(kernelDataInput, kernelDataOutput, damKernelInput, iterationIndex, out embankmentDesignParameters);
DesignCalculatorUtils.KernelCalculate(out kernelDataInput, kernelWrapper, out kernelDataOutput, damKernelInput, iterationIndex, out locationCalculationMessages);
calculationMessages.AddRange(locationCalculationMessages);
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/General/Sensors/SensorLocation.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Data/General/Sensors/SensorLocation.cs (.../SensorLocation.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/General/Sensors/SensorLocation.cs (.../SensorLocation.cs) (revision 4412)
@@ -23,6 +23,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
+using Deltares.DamEngine.Data.Design;
using Deltares.DamEngine.Data.General.Sensors.Specifications;
using Deltares.DamEngine.Data.General.Specifications.Extensions;
using Deltares.DamEngine.Data.Geometry;
@@ -259,6 +260,20 @@
}
}
+ private DesignScenario CurrentScenario
+ {
+ get
+ {
+ var scenario = Location.CurrentScenario;
+ if (scenario == null)
+ {
+ scenario = Location.Scenarios[0];
+ }
+
+ return scenario;
+ }
+ }
+
///
/// Gets the polder level.
///
@@ -269,7 +284,7 @@
{
get
{
- return Location.Scenarios[0].PolderLevel;
+ return CurrentScenario.PolderLevel;
}
}
@@ -283,15 +298,15 @@
{
get
{
- return Location.Scenarios[0].HeadPl3;
+ return CurrentScenario.HeadPl3;
}
}
public double? HeadPl4
{
get
{
- return Location.Scenarios[0].HeadPl4;
+ return CurrentScenario.HeadPl4;
}
}
@@ -454,7 +469,7 @@
{
if (SourceTypePl1WaterLevelAtPolder == DataSourceTypeSensors.LocationData)
{
- return Location.Scenarios[0].PolderLevel;
+ return CurrentScenario.PolderLevel;
}
if (SourceTypePl1WaterLevelAtPolder == DataSourceTypeSensors.Sensor)
@@ -467,7 +482,7 @@
{
if (SourceTypePl3 == DataSourceTypeSensors.LocationData)
{
- return Location.Scenarios[0].HeadPl3;
+ return CurrentScenario.HeadPl3;
}
if (SourceTypePl3 == DataSourceTypeSensors.Sensor)
@@ -480,7 +495,7 @@
{
if (SourceTypePl4 == DataSourceTypeSensors.LocationData)
{
- return Location.Scenarios[0].HeadPl4;
+ return CurrentScenario.HeadPl4;
}
if (SourceTypePl4 == DataSourceTypeSensors.Sensor)
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Sensors/SensorLocationTests.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Sensors/SensorLocationTests.cs (.../SensorLocationTests.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Sensors/SensorLocationTests.cs (.../SensorLocationTests.cs) (revision 4412)
@@ -43,7 +43,7 @@
var factory = new SensorFactory();
var scenario = new DesignScenario();
- location.Scenarios.Add(scenario);
+ location.CurrentScenario = scenario;
SensorLocation sensorLocation = factory.CreateSensorLocation(location);
return sensorLocation;
}
@@ -387,7 +387,7 @@
}
};
SensorLocation sensorLocation = CreateValidSensorLocation();
- location.Scenarios[0].PolderLevel = testValue;
+ location.CurrentScenario.PolderLevel = testValue;
sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.LocationData;
@@ -530,7 +530,7 @@
};
SensorLocation sensorLocation = CreateValidSensorLocation();
- location.Scenarios[0].HeadPl3 = testValue;
+ location.CurrentScenario.HeadPl3 = testValue;
sensorLocation.SourceTypePl3 = DataSourceTypeSensors.LocationData;
// call
@@ -600,7 +600,7 @@
};
SensorLocation sensorLocation = CreateValidSensorLocation();
- location.Scenarios[0].HeadPl4 = testValue;
+ location.CurrentScenario.HeadPl4 = testValue;
sensorLocation.SourceTypePl4 = DataSourceTypeSensors.LocationData;
// call
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapper.cs
===================================================================
diff -u -r4331 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapper.cs (.../WtiPipingSellmeijerRevisedKernelWrapper.cs) (revision 4331)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapper.cs (.../WtiPipingSellmeijerRevisedKernelWrapper.cs) (revision 4412)
@@ -79,7 +79,7 @@
double waterLevel = damKernelInput.RiverLevelHigh;
if (double.IsNaN(waterLevel))
{
- waterLevel = location.Scenarios[0].RiverLevel;
+ waterLevel = location.CurrentScenario.RiverLevel;
}
PlLines plLines =
@@ -325,7 +325,7 @@
// The following 2 parameters are dependent on the position of the point and have to be recalculated for the current point
double dCoverLayer = DamPipingHelper.DetermineHeightCoverLayer(topLevelAquifer, point.Z); // point.Z is surfacelevel
damPipingInput.DTotal = dCoverLayer;
- double referenceLevel = Math.Max(location.Scenarios[0].PolderLevel, point.Z); // point.Z is surfacelevel
+ double referenceLevel = Math.Max(location.CurrentScenario.PolderLevel, point.Z); // point.Z is surfacelevel
damPipingInput.HExit = referenceLevel;
// Initialize result as no run.
damPipingOutput.CalculationResult = CalculationResult.NoRun;
@@ -547,7 +547,7 @@
// bij zeedijken en de maatgevende hoogwaterstand (MHW bij rivierdijken) en de waterstand binnendijks ter plaatse van het uittredepunt,
// rekening houdend met zeespiegelrijzing etc.(zie paragraaf 3.7.2). In dien ter plaatse van het uittreepunt of de opbarstlocatie
// geen vrije waterstand heerst kan gerekend worden met het maaiveldniveau, rekening houdend met eventuele maaiveld daling (zie paragraaf 3.7.2)."
- double referenceLevel = Math.Max(location.Scenarios[0].PolderLevel, surfaceLevel);
+ double referenceLevel = Math.Max(location.CurrentScenario.PolderLevel, surfaceLevel);
Soil inBetweenAquiferlayerSoil = soilProfile1D.BottomAquiferLayer.Soil;
if (soilProfile1D.InBetweenAquiferLayer != null)
@@ -563,8 +563,8 @@
rExit = 1 - location.ModelParametersForPlLines.DampingFactorPl4;
}
- EffectiveThicknessCalculator effectiveThicknessCalculator = CreateEffectiveThicknessCalculator(soilProfile1D, surfaceLine, location.Scenarios[0].PolderLevel,
- Physics.UnitWeightOfwater, xExit);
+ EffectiveThicknessCalculator effectiveThicknessCalculator = CreateEffectiveThicknessCalculator(soilProfile1D,
+ surfaceLine, location.CurrentScenario.PolderLevel, Physics.UnitWeightOfwater, xExit);
effectiveThicknessCalculator.Calculate();
double effectiveStress = effectiveThicknessCalculator.EffectiveStress;
Index: DamEngine/trunk/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs
===================================================================
diff -u -r4052 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs (.../FillDamFromXmlInputTests.cs) (revision 4052)
+++ DamEngine/trunk/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs (.../FillDamFromXmlInputTests.cs) (revision 4412)
@@ -20,6 +20,7 @@
// All rights reserved.
using System.Collections.Generic;
+using Deltares.DamEngine.Data.Design;
using Deltares.DamEngine.Data.General;
using Deltares.DamEngine.Io;
using Deltares.DamEngine.Io.XmlInput;
@@ -122,6 +123,11 @@
DamProjectData expectedDamProjectData = FactoryForDamProjectData.CreateExampleDamProjectData();
Location location = expectedDamProjectData.Dike.Locations[0];
location.Name = id;
+ location.CurrentScenario.LocationName = id;
+ foreach (DesignScenario scenario in location.Scenarios)
+ {
+ scenario.LocationName = id;
+ }
// When Writing Xml
string xmlString;
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculator.cs
===================================================================
diff -u -r4358 -r4412
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculator.cs (.../OperationalCalculator.cs) (revision 4358)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculator.cs (.../OperationalCalculator.cs) (revision 4412)
@@ -119,7 +119,6 @@
{
// For Operational only ONE scenario is allowed (decided by Irene/Bernard on 30-07-2020). So that's the one that must be used.
designScenario = location.Scenarios[0];
- designScenario.Location = location;
}
IDictionary sensorValues = values[entry.DateTime][location];
@@ -593,6 +592,7 @@
{
if (designScenario != null)
{
+ location.CurrentScenario = location.SynchronizeCurrentScenarioWithScenarioData(designScenario);
location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope =
designScenario.RequiredSafetyFactorStabilityInnerSlope;
location.ModelFactors.RequiredSafetyFactorStabilityOuterSlope =