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; + } + } } }