Index: DamEngine/branches/DamEngine 19.2/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculatorTask.cs
===================================================================
diff -u -r3249 -r3250
--- DamEngine/branches/DamEngine 19.2/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculatorTask.cs (.../OperationalCalculatorTask.cs) (revision 3249)
+++ DamEngine/branches/DamEngine 19.2/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculatorTask.cs (.../OperationalCalculatorTask.cs) (revision 3250)
@@ -20,6 +20,7 @@
// All rights reserved.
using System.Collections.Generic;
+using Deltares.DamEngine.Data.Design;
using Deltares.DamEngine.Data.General;
using Deltares.DamEngine.Data.General.TimeSeries;
using Deltares.DamEngine.Data.Standard.Calculation;
@@ -49,6 +50,14 @@
public SoilGeometryProbability SoiProfileProbability { get; set; }
///
+ /// Gets or sets the design scenario
+ ///
+ ///
+ /// The design scenario.
+ ///
+ public DesignScenario DesignScenario { get; set; }
+
+ ///
/// Gets or sets the project path.
///
///
Index: DamEngine/branches/DamEngine 19.2/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculator.cs
===================================================================
diff -u -r3249 -r3250
--- DamEngine/branches/DamEngine 19.2/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculator.cs (.../OperationalCalculator.cs) (revision 3249)
+++ DamEngine/branches/DamEngine 19.2/src/Deltares.DamEngine.Calculators/DikesOperational/OperationalCalculator.cs (.../OperationalCalculator.cs) (revision 3250)
@@ -30,6 +30,7 @@
using Deltares.DamEngine.Calculators.KernelWrappers.Common;
using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces;
using Deltares.DamEngine.Calculators.Properties;
+using Deltares.DamEngine.Data.Design;
using Deltares.DamEngine.Data.General;
using Deltares.DamEngine.Data.General.Results;
using Deltares.DamEngine.Data.General.Specifications.Extensions;
@@ -124,6 +125,8 @@
foreach (var entry in series.Entries)
{
var location = locations.First(l => series.LocationId == l.Name);
+ var designScenario = location.Scenarios[entryIndex];
+ designScenario.Location = location;
var sensorValues = values[entry.DateTime][location];
if (!ContainsMissingValues(sensorValues, series.MissVal))
{
@@ -140,6 +143,7 @@
{
Location = location,
SoiProfileProbability = soiProfileProbability,
+ DesignScenario = designScenario,
ProjectPath = projectPath,
CalculationMap = damProjectData.CalculationMap,
FailureMechanismeCalculationSpecification = damProjectData
@@ -186,16 +190,18 @@
private void RunOperationalCalculatorTask(object operationalCalculatorTask)
{
- OperationalCalculatorTask task = (OperationalCalculatorTask)operationalCalculatorTask;
- Debug.WriteLine("Start calculation Location '{0}', soilprofile '{1}'", task.Location, task.SoiProfileProbability);
- CalculateOneTimeEntry(task.Location, task.SoiProfileProbability, task.ProjectPath,
+ OperationalCalculatorTask task = (OperationalCalculatorTask) operationalCalculatorTask;
+ Debug.WriteLine("Start calculation Location '{0}', soilprofile '{1}'", task.Location,
+ task.SoiProfileProbability);
+ CalculateOneTimeEntry(task.Location, task.SoiProfileProbability, task.DesignScenario, task.ProjectPath,
task.CalculationMap, task.FailureMechanismeCalculationSpecification,
task.TimeSerieEntry, task.TimeStepIndex,
task.CalculationMessages);
Debug.WriteLine("End calculation Location '{0}', soilprofile '{1}'", task.Location, task.SoiProfileProbability);
}
private void CalculateOneTimeEntry(Location location, SoilGeometryProbability soiProfileProbability,
+ DesignScenario designScenario,
string projectPath, string calculationMap,
DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification,
TimeSerieEntry timeSerieEntry, int timeStepIndex,
@@ -218,7 +224,7 @@
timeStepIndex,
damFailureMechanismeCalculationSpecification.StabilityModelType,
DateToTimeStamp(timeSerieEntry.DateTime));
- //SynchronizeScenarioDataWithLocationData(designScenario, location);
+ SynchronizeScenarioDataWithLocationData(designScenario, location);
IKernelDataInput kernelDataInput;
IKernelDataOutput kernelDataOutput;
@@ -251,10 +257,10 @@
{
calculationMessages.Add(new LogMessage(LogMessageType.Error, null,
string.Format(Resources.OperationalCalculatorPrepareError,
- location.Name,
- soiProfileProbability,
- timeStepIndex,
- DateToTimeStamp(timeSerieEntry.DateTime))));
+ location.Name,
+ soiProfileProbability,
+ timeStepIndex,
+ DateToTimeStamp(timeSerieEntry.DateTime))));
}
}
}
@@ -483,7 +489,7 @@
// TODO log info
string message =
string.Format("Sensor with name '{0}' and parameter id '{1}' not found in the input time series",
- sensor.Name, TimeSerie.WaterPressureParameterId);
+ sensor.Name, TimeSerie.WaterPressureParameterId);
throw new OperationalCalculatorException(message);
}
@@ -496,7 +502,7 @@
/// The time series.
/// if set to true [has first series entries].
private static void ThrowIfTimeEntryCountDontMatch(HashSet firstSeriesEntries, TimeSerie timeSeries,
- bool hasFirstSeriesEntries)
+ bool hasFirstSeriesEntries)
{
if (hasFirstSeriesEntries)
{
@@ -509,17 +515,17 @@
private void ThrowIfSensorsAreMissingInInputFile(Location location)
{
var sensorsNotFound = (
- from sensor in location.SensorLocation.Sensors
- let series = inputTimeSerieCollection.GetSeriesByLocationId(sensor.Name)
- where !series.Any()
- select sensor.Name).ToList();
+ from sensor in location.SensorLocation.Sensors
+ let series = inputTimeSerieCollection.GetSeriesByLocationId(sensor.Name)
+ where !series.Any()
+ select sensor.Name).ToList();
if (sensorsNotFound.Any())
{
// TODO log info
string message =
string.Format("Sensor with name '{0}' and parameter id '{1}' not found in the input time series",
- string.Join(", ", sensorsNotFound.ToArray()), TimeSerie.WaterPressureParameterId);
+ string.Join(", ", sensorsNotFound.ToArray()), TimeSerie.WaterPressureParameterId);
throw new OperationalCalculatorException(message);
}
@@ -549,5 +555,21 @@
}
return false;
}
+
+ ///
+ /// Synchronizes the scenario data with location data.
+ /// Note that scenario data is leading when available.
+ ///
+ /// The scenario.
+ /// The location.
+ private void SynchronizeScenarioDataWithLocationData(DesignScenario designScenario, Location location)
+ {
+ location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope = designScenario.RequiredSafetyFactorStabilityInnerSlope;
+ location.ModelFactors.RequiredSafetyFactorStabilityOuterSlope = designScenario.RequiredSafetyFactorStabilityOuterSlope;
+ if (designScenario.DikeTableHeight.HasValue)
+ {
+ location.DikeTableHeight = designScenario.DikeTableHeight ?? 0;
+ }
+ }
}
}