Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs
===================================================================
diff -u -r1343 -r1372
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs (.../RegionalScenariosCalculation.cs) (revision 1343)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs (.../RegionalScenariosCalculation.cs) (revision 1372)
@@ -247,7 +247,7 @@
if (soilGeometryProbabilities.Count == 0)
{
evaluationJob.FailedEvaluatedLocations.Add(location);
- SendMessage(new LogMessage(LogMessageType.Warning, location, string.Format("Location has no soilprofiles: ") +
+ SendMessage(new LogMessage(LogMessageType.Warning, location, "Location has no soilprofiles: " +
string.Format("Segment: {0}", location.Segment.Name)));
}
@@ -327,7 +327,7 @@
catch (Exception e)
{
job.CalculationResult = CalculationResult.UnexpectedError;
- SendMessage(new LogMessage(LogMessageType.Warning, job, String.Format(job.LocationName + " Error: {0}", e.Message)));
+ SendMessage(new LogMessage(LogMessageType.Warning, job, string.Format(job.LocationName + " Error: {0}", e.Message)));
}
}
@@ -337,7 +337,7 @@
///
private void ProcessJob(RegionalScenarioProfileResult job)
{
- Debug.WriteLine(String.Format("Job {0}, location {1}, Scenario {2}", job.FailureMechanismType.ToString(), job.LocationName, job.ScenarioType.ToString()));
+ Debug.WriteLine("Job {0}, location {1}, Scenario {2}", job.FailureMechanismType.ToString(), job.LocationName, job.ScenarioType.ToString());
switch (job.FailureMechanismType)
{
case FailureMechanismSystemType.StabilityInside:
@@ -357,13 +357,13 @@
///
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);
+ job.CurrentSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; // must this be a copy?
+ job.CurrentSpecification.FailureMechanismSystemType = job.FailureMechanismType;
+ job.CurrentSpecification.FailureMechanismParametersMStab.MStabParameters.Model = job.MstabModelOption;
+ job.CurrentSpecification.AssessmentScenarioJobSettings.LoadSituation = job.LoadSituation;
+ job.CurrentSpecification.AssessmentScenarioJobSettings.DikeDrySensitivity = job.DikeDrySensitivity;
+ job.CurrentSpecification.AssessmentScenarioJobSettings.HydraulicShortcutType = job.HydraulicShortcutType;
+ var calculator = CreateKernelWrapper(job.CurrentSpecification);
var boezemLevelHbp = job.Location.BoezemLevelHbp;
var boezemLevelLbp = job.Location.BoezemLevelLbp;
@@ -373,7 +373,7 @@
job.Location.BoezemLevelHbp = job.Location.BoezemLevelTp;
job.Location.BoezemLevelLbp = job.Location.BoezemLevelTp;
}
- PerformJob(job, calculator, currentSpecification);
+ PerformJob(job, calculator);
job.Location.BoezemLevelHbp = boezemLevelHbp;
job.Location.BoezemLevelLbp = boezemLevelLbp;
}
@@ -386,13 +386,13 @@
{
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);
+ job.CurrentSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; // must this be a copy?
+ job.CurrentSpecification.FailureMechanismSystemType = job.FailureMechanismType;
+ job.CurrentSpecification.PipingModelType = job.PipingModelOption;
+ job.CurrentSpecification.AssessmentScenarioJobSettings.LoadSituation = job.LoadSituation;
+ job.CurrentSpecification.AssessmentScenarioJobSettings.DikeDrySensitivity = job.DikeDrySensitivity;
+ job.CurrentSpecification.AssessmentScenarioJobSettings.HydraulicShortcutType = job.HydraulicShortcutType;
+ var calculator = CreateKernelWrapper(job.CurrentSpecification);
// For piping waterlevel needs to be set here. Piping kernel only uses waterlevelhigh which is set from BoezemLevelHbp.
var boezemLevelHbp = job.Location.BoezemLevelHbp;
switch (job.LoadSituation)
@@ -404,7 +404,7 @@
job.Location.BoezemLevelHbp = job.Location.BoezemLevelTp;
break;
}
- PerformJob(job, calculator, currentSpecification);
+ PerformJob(job, calculator);
job.Location.BoezemLevelHbp = boezemLevelHbp;
}
else
@@ -425,21 +425,21 @@
return kernelWrapper;
}
- private void PerformJob(RegionalScenarioProfileResult job, IKernelWrapper calculator, DamFailureMechanismeCalculationSpecification currentSpecification)
+ private void PerformJob(RegionalScenarioProfileResult job, IKernelWrapper calculator)
{
- IKernelDataInput kernelDataInput;
- IKernelDataOutput kernelDataOutput;
- DamKernelInput damKernelInput;
lock (runningJobs)
{
runningJobs[calculator] = job;
}
- var calculationCreationMessages = CreateKernelWrapperforJob(calculator, job.FailureMechanismType, job.ScenarioType, job.Location, job.SoilGeometryProbability,
- out kernelDataInput, out kernelDataOutput, out damKernelInput);
+
+ CreateKernelWrapperforJob(calculator, job);
+ var kernelDataInput = (job.KernelDataInput as IKernelDataInput);
+ var kernelDataOutput = (job.KernelDataOutput as IKernelDataOutput);
+ var damKernelInput = (job.DamKernelInput as DamKernelInput);
// Check if prepare is ok
var errorFound = false;
- foreach (var calculationCreationMessage in calculationCreationMessages)
+ foreach (var calculationCreationMessage in job.CalculationMessages)
{
if (calculationCreationMessage.MessageType == LogMessageType.Error)
{
@@ -448,13 +448,13 @@
break;
}
}
- if (!errorFound && calculationCreationMessages.Count > 0)
+ if (!errorFound && job.CalculationMessages.Count > 0)
{
job.CalculationResult = CalculationResult.NoRun;
}
// if preparation has error or shows not relevant, then skip this
- if (!errorFound && calculationCreationMessages.Count == 0)
+ if (!errorFound && job.CalculationMessages.Count == 0)
{
List messages;
calculator.Execute(kernelDataInput, kernelDataOutput, out messages);
@@ -471,6 +471,7 @@
string resultMessage = "";
List results;
calculator.PostProcess(damKernelInput, kernelDataOutput, null, resultMessage, out results);
+ job.Results = results;
var stbOutput = kernelDataOutput as DamMacroStabilityOutput;
if (stbOutput != null)
{
@@ -494,7 +495,7 @@
}
else
{
- job.RegionalResultType = (currentSpecification.FailureMechanismParametersMStab.MStabParameters.IsProbabilistic ? RegionalResultType.ProbabilityOfFailure : RegionalResultType.SafetyFactor);
+ job.RegionalResultType = (job.CurrentSpecification.FailureMechanismParametersMStab.MStabParameters.IsProbabilistic ? RegionalResultType.ProbabilityOfFailure : RegionalResultType.SafetyFactor);
}
job.SafetyFactor = double.NaN;
job.ProbabilityOfFailure = double.NaN;
@@ -506,26 +507,30 @@
}
}
- private List CreateKernelWrapperforJob(IKernelWrapper kernelWrapper, FailureMechanismSystemType failureMechanismType, ScenarioType scenarioType,
- Location location, SoilGeometryProbability soilGeometryProbability, out IKernelDataInput kernelDataInput,
- out IKernelDataOutput kernelDataOutput, out DamKernelInput damKernelInput)
+ private void CreateKernelWrapperforJob(IKernelWrapper kernelWrapper, RegionalScenarioProfileResult job)
{
// Todo Bka: eliminate damProjectData usages.
- var calculationMessages = new List();
+ job.CalculationMessages = new List();
// Prepare input
- damKernelInput = new DamKernelInput();
+ job.DamKernelInput = new DamKernelInput();
var projectPath = damProjectData.ProjectPath != "" ? damProjectData.ProjectPath : Directory.GetCurrentDirectory();
+ var damKernelInput = job.DamKernelInput as DamKernelInput;
damKernelInput.ProjectDir = projectPath;
damKernelInput.CalculationDir = Path.Combine(projectPath, damProjectData.CalculationMap);
- damKernelInput.Location = location;
- damKernelInput.SubSoilScenario = soilGeometryProbability;
+ damKernelInput.Location = job.Location;
+ damKernelInput.SubSoilScenario = job.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);
+ damKernelInput.DamFailureMechanismeCalculationSpecification.FailureMechanismSystemType = job.FailureMechanismType;
+ damKernelInput.RiverLevelHigh = job.Location.BoezemLevelHbp;
+ damKernelInput.RiverLevelLow = job.Location.BoezemLevelLbp;
+ damKernelInput.FilenamePrefix = string.Format("Loc({0})_Sce({1})", job.Location.Name, job.ScenarioType);
+ damKernelInput.SubSoilScenario.SegmentFailureMechanismType = job.FailureMechanismType;
+ IKernelDataInput kernelDataInput;
+ IKernelDataOutput kernelDataOutput;
+ PrepareResult prepareResult = kernelWrapper.Prepare(damKernelInput, 0, out kernelDataInput, out kernelDataOutput);
+ job.KernelDataInput = kernelDataInput;
+ job.KernelDataOutput = 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)
@@ -540,33 +545,14 @@
}
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?
+ job.CalculationMessages.Add(new LogMessage(LogMessageType.Error, null,
+ string.Format(Resources.DesignCalculatorPrepareError, job.Location.Name,
+ job.SoilGeometryProbability, ""))); // TODO #The correct regional scenario ID?
}
- }
- return calculationMessages;
+ }
}
///
- /// Log messages
- ///
- ///
- private void SendStabilityMessage(LogMessage logMessage)
- {
- lock (runningJobs)
- {
- if (logMessage.Subject != null)
- {
- var job = (RegionalScenarioProfileResult)runningJobs[(ICalculation)logMessage.Subject];
- logMessage.Subject = job.Location;
- }
- }
-
- SendMessage(logMessage);
- }
-
- ///
/// Fill the results for the scenarios
///
private void FillResults(List tasks)
@@ -635,8 +621,9 @@
CalculationResult = CalculationResult.RunFailed,
SafetyFactor = double.NaN
};
+ evaluationJob.Results.Add(scenariosResult);
SendMessage(new LogMessage(LogMessageType.Warning, location,
- String.Format("Error in location {0}: {1}", location.Name, e.Message)));
+ string.Format("Error in location {0}: {1}", location.Name, e.Message)));
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/RegionalAssessmentResults/RegionalScenarioProfileResult.cs
===================================================================
diff -u -r1065 -r1372
--- DamEngine/trunk/src/Deltares.DamEngine.Data/RegionalAssessmentResults/RegionalScenarioProfileResult.cs (.../RegionalScenarioProfileResult.cs) (revision 1065)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/RegionalAssessmentResults/RegionalScenarioProfileResult.cs (.../RegionalScenarioProfileResult.cs) (revision 1372)
@@ -19,7 +19,11 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System;
+using System.Collections.Generic;
using Deltares.DamEngine.Data.General;
+using Deltares.DamEngine.Data.General.Results;
+using Deltares.DamEngine.Data.Standard.Logging;
namespace Deltares.DamEngine.Data.RegionalAssessmentResults
{
@@ -230,5 +234,54 @@
return soilGeometryProbability.Probability;
}
}
+
+ ///
+ /// Gets or sets the current specification.
+ ///
+ ///
+ /// The current specification.
+ ///
+ public DamFailureMechanismeCalculationSpecification CurrentSpecification { get; set; }
+
+ ///
+ /// Gets or sets the calculation messages.
+ ///
+ ///
+ /// The calculation messages.
+ ///
+ public List CalculationMessages { get; set;}
+
+ ///
+ /// Gets or sets the kernel data input.
+ ///
+ ///
+ /// The kernel data input.
+ ///
+ public Object KernelDataInput { get; set; }
+
+ ///
+ /// Gets or sets the kernel data output.
+ ///
+ ///
+ /// The kernel data output.
+ ///
+ public Object KernelDataOutput { get; set; }
+
+ ///
+ /// Gets or sets the dam kernel input.
+ ///
+ ///
+ /// The dam kernel input.
+ ///
+ public Object DamKernelInput { get; set; }
+
+ ///
+ /// Gets or sets the results.
+ ///
+ ///
+ /// The results.
+ ///
+ public List Results { get; set; }
+
}
}