Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj =================================================================== diff -u -r1119 -r1181 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 1119) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 1181) @@ -136,6 +136,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs =================================================================== diff -u -r1167 -r1181 --- DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 1167) +++ DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 1181) @@ -364,14 +364,16 @@ // Regional settings location.DikeTableHeight = inputLocation.DikeTableHeight; var assesmentRegionalOptions = inputLocation.AssesmentRegionalOptions; - location.BoezemLevelHbp = assesmentRegionalOptions.BoezemLevelHbp; - location.BoezemLevelLbp = assesmentRegionalOptions.BoezemLevelLbp; - location.BoezemLevelTp = assesmentRegionalOptions.BoezemLevelTp; - location.RwBankProtectionBottomLevel = assesmentRegionalOptions.RegionalBankProtectionBottomLevel; - location.DredgingDepth = assesmentRegionalOptions.DredgingDepth; - location.DetrimentFactor = assesmentRegionalOptions.DetrimentFactor; - location.DikeMaterialType = ConversionHelper.ConvertToSoilType(assesmentRegionalOptions.DikeMaterialType); - + if (assesmentRegionalOptions != null) + { + location.BoezemLevelHbp = assesmentRegionalOptions.BoezemLevelHbp; + location.BoezemLevelLbp = assesmentRegionalOptions.BoezemLevelLbp; + location.BoezemLevelTp = assesmentRegionalOptions.BoezemLevelTp; + location.RwBankProtectionBottomLevel = assesmentRegionalOptions.RegionalBankProtectionBottomLevel; + location.DredgingDepth = assesmentRegionalOptions.DredgingDepth; + location.DetrimentFactor = assesmentRegionalOptions.DetrimentFactor; + location.DikeMaterialType = ConversionHelper.ConvertToSoilType(assesmentRegionalOptions.DikeMaterialType); + } // Design options var designOptions = inputLocation.DesignOptions; if (designOptions != null) Index: DamEngine/trunk/src/Deltares.DamEngine.Data/General/Results/DesignResult.cs =================================================================== diff -u -r1148 -r1181 --- DamEngine/trunk/src/Deltares.DamEngine.Data/General/Results/DesignResult.cs (.../DesignResult.cs) (revision 1148) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/General/Results/DesignResult.cs (.../DesignResult.cs) (revision 1181) @@ -58,6 +58,17 @@ { get { + if (DamFailureMechanismeCalculation != null) + { + switch (DamFailureMechanismeCalculation.FailureMechanismSystemType) + { + case FailureMechanismSystemType.StabilityInside: + case FailureMechanismSystemType.StabilityOutside: + return StabilityDesignResults.SafetyFactor; + case FailureMechanismSystemType.Piping: + return PipingDesignResults.SafetyFactor(); + } + } return safetyFactor; } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/RegionalAssessment/RegionalScenariosCalculationTests.cs =================================================================== diff -u -r1119 -r1181 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/RegionalAssessment/RegionalScenariosCalculationTests.cs (.../RegionalScenariosCalculationTests.cs) (revision 1119) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/RegionalAssessment/RegionalScenariosCalculationTests.cs (.../RegionalScenariosCalculationTests.cs) (revision 1181) @@ -20,8 +20,10 @@ // All rights reserved. using System.IO; +using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Interface; using Deltares.DamEngine.Io; +using Deltares.DamEngine.TestHelpers; using NUnit.Framework; namespace Deltares.DamEngine.Calculators.Tests.RegionalAssessment @@ -34,7 +36,7 @@ [Test, Category("Work_In_Progress")] public void Test() { - const string calcDir = "TestOutStabBishop"; + const string calcDir = "TestOutAssessment"; if (Directory.Exists(calcDir)) { Directory.Delete(calcDir, true); // delete previous results @@ -45,37 +47,44 @@ const string fileName = @"TestFiles\RegionalAssessment.xml"; string inputString = File.ReadAllText(fileName); - inputString = ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used - inputString = ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used - inputString = ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\"); - inputString = ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb"); + inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used + inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used + //inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\"); + inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\RegionalAssessment.soilmaterials.mdb"); 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(); Assert.IsNotNull(outputString); var output = DamXmlSerialization.LoadOutputFromXmlString(outputString); - Assert.AreEqual(1.282, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.SafetyFactor, tolerance); + Assert.AreEqual(1, output.Results.CalculationResults.LocationResults.Length); + // expected: 18 results overall: 3 Piping Bligh (scenario 10), 3 UpliftVan (scenario03) and 12 Bishop (scenario 7: 3 results, scenario 8: 9 results) + // Results are per scenario so expect 4 + Assert.AreEqual(4, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult.Length); + // scenario03: 3 results + Assert.AreEqual(3, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[0].RegionalScenarioProfileResults.Length); + // scenario07: 3 results + Assert.AreEqual(3, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[1].RegionalScenarioProfileResults.Length); + // scenario08: 9 results + Assert.AreEqual(9, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.RegionalScenarioResult[2].RegionalScenarioProfileResults.Length); + // scenario10: 3 results + //Assert.AreEqual(0.410, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.SafetyFactor, tolerance); // Zone1SafetyFactor=1.282 - } - - public string ChangeValueInXml(string input, string key, string value) - { - string result = input; - string searchString = key + "=\""; - var startIndex = input.IndexOf(searchString); - var length = searchString.Length; - if (startIndex != -1) - { - // find next double quote - var endIndex = input.Substring(startIndex + length).IndexOf("\""); - string dirString = input.Substring(startIndex + length, endIndex); - string pattern = searchString + dirString; - string replacement = searchString + value; - result = input.Replace(pattern, replacement); - } - return result; - } + } } } Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/FillXmlOutputFromDam.cs =================================================================== diff -u -r1175 -r1181 --- DamEngine/trunk/src/Deltares.DamEngine.Interface/FillXmlOutputFromDam.cs (.../FillXmlOutputFromDam.cs) (revision 1175) +++ DamEngine/trunk/src/Deltares.DamEngine.Interface/FillXmlOutputFromDam.cs (.../FillXmlOutputFromDam.cs) (revision 1181) @@ -68,7 +68,7 @@ { // Design results var designResults = damProjectData.DesignCalculations; - if (designResults.Count > 0) + if (designResults != null && designResults.Count > 0) { output.Results.CalculationResults.DesignResults = new DesignResult[designResults.Count]; var designResultCount = 0; @@ -275,51 +275,54 @@ // RegionalScenarios results outputLocationResult.RegionalScenariosResult = new CalculationResultsLocationResultRegionalScenariosResult(); - outputLocationResult.RegionalScenariosResult.SafetyFactor = locationJob.LocationResult.RegionalScenariosResult.SafetyFactor; - outputLocationResult.RegionalScenariosResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(locationJob.LocationResult.RegionalScenariosResult.CalculationResult); - outputLocationResult.RegionalScenariosResult.RegionalScenarioResult = new RegionalScenarioResult[locationJob.LocationResult.RegionalScenariosResult.RegionalScenarioResults.Count]; - var scentel = 0; - foreach (var regionalScenarioResult in locationJob.LocationResult.RegionalScenariosResult.RegionalScenarioResults) + if (locationJob.LocationResult.RegionalScenariosResult != null) { - var outputRegionalScenarioResult = new RegionalScenarioResult(); - outputRegionalScenarioResult.LoadSituation = ConversionHelper.ConvertToOutputLoadSituation(regionalScenarioResult.LoadSituation); - outputRegionalScenarioResult.DikeDrySensitivity = ConversionHelper.ConvertToOutputDikeDrySensitivity(regionalScenarioResult.DikeDrySensitivity); - outputRegionalScenarioResult.HydraulicShortcutType = ConversionHelper.ConvertToOutputHydraulicShortcutType(regionalScenarioResult.HydraulicShortcutType); - outputRegionalScenarioResult.UpliftType = ConversionHelper.ConvertToOutputUpliftType(regionalScenarioResult.UpliftType); - outputRegionalScenarioResult.ModelOption = ConversionHelper.ConvertToOutputMStabModelType(regionalScenarioResult.ModelOption); - outputRegionalScenarioResult.ScenarioType = ConversionHelper.ConvertToOutputScenarioType(regionalScenarioResult.ScenarioType); - outputRegionalScenarioResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(regionalScenarioResult.CalculationResult); - outputRegionalScenarioResult.SafetyFactor = regionalScenarioResult.SafetyFactor; - outputRegionalScenarioResult.RegionalScenarioProfileResults = new RegionalScenarioResultRegionalScenarioProfileResult[regionalScenarioResult.RegionalScenarioProfileResults.Count]; - var proftel = 0; - foreach (var profileResult in regionalScenarioResult.RegionalScenarioProfileResults) + outputLocationResult.RegionalScenariosResult.SafetyFactor = locationJob.LocationResult.RegionalScenariosResult.SafetyFactor; + outputLocationResult.RegionalScenariosResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(locationJob.LocationResult.RegionalScenariosResult.CalculationResult); + outputLocationResult.RegionalScenariosResult.RegionalScenarioResult = new RegionalScenarioResult[locationJob.LocationResult.RegionalScenariosResult.RegionalScenarioResults.Count]; + var scentel = 0; + foreach (var regionalScenarioResult in locationJob.LocationResult.RegionalScenariosResult.RegionalScenarioResults) { - var outputProfileResult = new RegionalScenarioResultRegionalScenarioProfileResult(); - outputProfileResult.LocationName = profileResult.LocationName; - outputProfileResult.LoadSituation = ConversionHelper.ConvertToOutputLoadSituation(profileResult.LoadSituation); - outputProfileResult.DikeDrySensitivity = ConversionHelper.ConvertToOutputDikeDrySensitivity(profileResult.DikeDrySensitivity); - outputProfileResult.HydraulicShortcutType = ConversionHelper.ConvertToOutputHydraulicShortcutType(profileResult.HydraulicShortcutType); - outputProfileResult.UpliftType = ConversionHelper.ConvertToOutputUpliftType(profileResult.UpliftType); - outputProfileResult.MStabModelOption = ConversionHelper.ConvertToOutputMStabModelType(profileResult.MstabModelOption); - outputProfileResult.PipingModelOption = ConversionHelper.ConvertToOutputPipingModelType(profileResult.PipingModelOption); - outputProfileResult.ScenarioType = ConversionHelper.ConvertToOutputScenarioType(profileResult.ScenarioType); - outputProfileResult.SoilProfileName = profileResult.SoilProfileName; - outputProfileResult.SoilProfileProbability = profileResult.SoilProfileProbability; - outputProfileResult.FailureMechanismType = ConversionHelper.ConvertToInputFailureMechanismSystemType(profileResult.FailureMechanismType); - outputProfileResult.BaseFileName = profileResult.BaseFileName; - outputProfileResult.RegionalResult = new RegionalResult(); - outputProfileResult.RegionalResult.RegionalResultType = ConversionHelper.ConvertToOutputRegionalResultType(profileResult.RegionalResultType); - outputProfileResult.RegionalResult.SafetyFactor = profileResult.SafetyFactor; - outputProfileResult.RegionalResult.ProbabilityOfFailure = profileResult.ProbabilityOfFailure; - outputProfileResult.RegionalResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(profileResult.CalculationResult); - outputLocationResult.RegionalScenariosResult.RegionalScenarioResult[scentel].RegionalScenarioProfileResults[proftel] = outputProfileResult; - proftel++; + var outputRegionalScenarioResult = new RegionalScenarioResult(); + outputRegionalScenarioResult.LoadSituation = ConversionHelper.ConvertToOutputLoadSituation(regionalScenarioResult.LoadSituation); + outputRegionalScenarioResult.DikeDrySensitivity = ConversionHelper.ConvertToOutputDikeDrySensitivity(regionalScenarioResult.DikeDrySensitivity); + outputRegionalScenarioResult.HydraulicShortcutType = ConversionHelper.ConvertToOutputHydraulicShortcutType(regionalScenarioResult.HydraulicShortcutType); + outputRegionalScenarioResult.UpliftType = ConversionHelper.ConvertToOutputUpliftType(regionalScenarioResult.UpliftType); + outputRegionalScenarioResult.ModelOption = ConversionHelper.ConvertToOutputMStabModelType(regionalScenarioResult.ModelOption); + outputRegionalScenarioResult.ScenarioType = ConversionHelper.ConvertToOutputScenarioType(regionalScenarioResult.ScenarioType); + outputRegionalScenarioResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(regionalScenarioResult.CalculationResult); + outputRegionalScenarioResult.SafetyFactor = regionalScenarioResult.SafetyFactor; + outputRegionalScenarioResult.RegionalScenarioProfileResults = new RegionalScenarioResultRegionalScenarioProfileResult[regionalScenarioResult.RegionalScenarioProfileResults.Count]; + var proftel = 0; + foreach (var profileResult in regionalScenarioResult.RegionalScenarioProfileResults) + { + var outputProfileResult = new RegionalScenarioResultRegionalScenarioProfileResult(); + outputProfileResult.LocationName = profileResult.LocationName; + outputProfileResult.LoadSituation = ConversionHelper.ConvertToOutputLoadSituation(profileResult.LoadSituation); + outputProfileResult.DikeDrySensitivity = ConversionHelper.ConvertToOutputDikeDrySensitivity(profileResult.DikeDrySensitivity); + outputProfileResult.HydraulicShortcutType = ConversionHelper.ConvertToOutputHydraulicShortcutType(profileResult.HydraulicShortcutType); + outputProfileResult.UpliftType = ConversionHelper.ConvertToOutputUpliftType(profileResult.UpliftType); + outputProfileResult.MStabModelOption = ConversionHelper.ConvertToOutputMStabModelType(profileResult.MstabModelOption); + outputProfileResult.PipingModelOption = ConversionHelper.ConvertToOutputPipingModelType(profileResult.PipingModelOption); + outputProfileResult.ScenarioType = ConversionHelper.ConvertToOutputScenarioType(profileResult.ScenarioType); + outputProfileResult.SoilProfileName = profileResult.SoilProfileName; + outputProfileResult.SoilProfileProbability = profileResult.SoilProfileProbability; + outputProfileResult.FailureMechanismType = ConversionHelper.ConvertToInputFailureMechanismSystemType(profileResult.FailureMechanismType); + outputProfileResult.BaseFileName = profileResult.BaseFileName; + outputProfileResult.RegionalResult = new RegionalResult(); + outputProfileResult.RegionalResult.RegionalResultType = ConversionHelper.ConvertToOutputRegionalResultType(profileResult.RegionalResultType); + outputProfileResult.RegionalResult.SafetyFactor = profileResult.SafetyFactor; + outputProfileResult.RegionalResult.ProbabilityOfFailure = profileResult.ProbabilityOfFailure; + outputProfileResult.RegionalResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(profileResult.CalculationResult); + outputRegionalScenarioResult.RegionalScenarioProfileResults[proftel] = outputProfileResult; + proftel++; + } + outputLocationResult.RegionalScenariosResult.RegionalScenarioResult[scentel] = outputRegionalScenarioResult; + scentel++; } - outputLocationResult.RegionalScenariosResult.RegionalScenarioResult[scentel] = outputRegionalScenarioResult; - scentel++; + output.Results.CalculationResults.LocationResults[jobtel] = outputLocationResult; + jobtel++; } - output.Results.CalculationResults.LocationResults[jobtel] = outputLocationResult; - jobtel++; } } } Index: DamEngine/trunk/src/Deltares.DamEngine.Data/General/DamProjectData.cs =================================================================== diff -u -r1120 -r1181 --- DamEngine/trunk/src/Deltares.DamEngine.Data/General/DamProjectData.cs (.../DamProjectData.cs) (revision 1120) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/General/DamProjectData.cs (.../DamProjectData.cs) (revision 1181) @@ -32,29 +32,26 @@ { public class DamProjectData { - public readonly double MissValStabilitySafetyFactor = -1.0; - // ##Bka Waterboard eruit werken en vanaf nu max 1 dike! - private string description = ""; private IList segments; private Dike dike; private DamProjectCalculationSpecification damProjectCalculationSpecification; private DikeJob dikeJob; private DamProjectType damProjectType = DamProjectType.Operational; - private ProgramType programType = ProgramType.MStab; private List jobs = new List(); private List designCalculations; - + private SensorData sensorData; + private string calculationMap = ""; + private string projectPath = ""; + private int maxCalculationCores = 1; + /// /// Gets or sets the calculation messages. /// /// /// The calculation messages. /// public List CalculationMessages { get; set; } = null; - private SensorData sensorData; - private string calculationMap = ""; - private string projectPath = ""; - private int maxCalculationCores = 1; + /// /// Constructor @@ -67,17 +64,23 @@ segments = new List(); } + /// + /// Gets the name. + /// + /// + /// The name. + /// public virtual string Name { get { return String.Format(LocalizationManager.GetTranslatedText(this, "WaterBoard")); } } - public virtual string Description - { - get { return description; } - set { description = value; } - } - + /// + /// Gets or sets the segments. + /// + /// + /// The segments. + /// public virtual IList Segments { get { return segments; } @@ -137,6 +140,12 @@ set { dikeJob = value as DikeJob; } } + /// + /// Gets or sets the type of the dam project. + /// + /// + /// The type of the dam project. + /// public virtual DamProjectType DamProjectType { get { return damProjectType; } @@ -154,7 +163,13 @@ } } } - + + /// + /// Gets or sets the design calculations. + /// + /// + /// The design calculations. + /// public List DesignCalculations { get @@ -167,6 +182,12 @@ } } + /// + /// Gets or sets the location jobs. + /// + /// + /// The location jobs. + /// public List LocationJobs { get @@ -186,31 +207,6 @@ } } - [Validate] - public List SelectedLocationJobs - { - get - { - List selectedLocationJobs = new List(); - foreach (var locationJob in LocationJobs) - { - if (locationJob.Run.HasValue && locationJob.Run.Value) - { - selectedLocationJobs.Add(locationJob); - } - } - - return selectedLocationJobs; - } - } - - // TODO: FM this is failure mechanism specific code and should be moved to ..\KernelWrappers - public ProgramType ProgramType - { - // For now, only MStab (= default value) allowed so ReadOnly. Add setter when needed. - get { return programType; } - } - /// /// Gets or sets the project path. /// @@ -274,25 +270,26 @@ foreach (var locationJob in LocationJobs) { - if (locationJob.Run != null && locationJob.Run.Value) - { - if (dike.Locations.Contains(locationJob.Location)) - { - dike.UpdateLocation(locationJob.Location); - break; - } - evaluationJob.Locations.Add(locationJob.Location); - } + evaluationJob.Locations.Add(locationJob.Location); } return evaluationJob; } + /// + /// Returns a that represents this instance. + /// + /// + /// A that represents this instance. + /// public override string ToString() { return Name; } - + + /// + /// Fills the overall sensor data. + /// public void FillOverallSensorData() { if (sensorData != null) Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs =================================================================== diff -u -r1174 -r1181 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs (.../RegionalScenariosCalculation.cs) (revision 1174) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs (.../RegionalScenariosCalculation.cs) (revision 1181) @@ -35,8 +35,6 @@ using Deltares.DamEngine.Data.Standard.Calculation; using Deltares.DamEngine.Data.Standard.Language; using Deltares.DamEngine.Data.Standard.Logging; -using Deltares.DamPiping.BlighCalculator; -using Deltares.DamPiping.Sellmeijer4ForcesCalculator; namespace Deltares.DamEngine.Calculators.DikesAssessmentRegional { @@ -56,180 +54,51 @@ public class RegionalScenariosCalculation : ICalculation { private DamProjectData damProjectData; + private EvaluationJob evaluationJob; + private GetValuesDelegate getValuesDelegate; + private ProgressDelegate progressDelegate; + private SendMessageDelegate sendMessageDelegate; + private int maxCalculationCores = 255; + private readonly Dictionary runningJobs = new Dictionary(); + private bool isSkipStabilityCalculation; + private PipingModelType pipingModelType; + private MStabParameters mStabParameters; + + /// + /// Executes the specified a dam project data. + /// + /// a dam project data. + /// public List Execute(DamProjectData aDamProjectData) { damProjectData = aDamProjectData; maxCalculationCores = damProjectData.MaxCalculationCores; + mStabParameters = damProjectData.DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismParametersMStab.MStabParameters; + pipingModelType = damProjectData.DamProjectCalculationSpecification.CurrentSpecification.PipingModelType; var dj = damProjectData.DikeJob; + foreach (var locationJob in damProjectData.LocationJobs) + { + locationJob.Location.DamType = DamType.Regional; + } evaluationJob = damProjectData.GetEvaluationJob(); - //evaluationJob.Locations.AddRange(); Run(); + evaluationJob.AttachResults(aDamProjectData.LocationJobs); return new List(); } - private IKernelWrapper CreateKernelWrapperforJob(DamFailureMechanismeCalculationSpecification currentSpecification, - Location location, SoilGeometryProbability soilGeometryProbability, out IKernelDataInput kernelDataInput, - out IKernelDataOutput kernelDataOutput) - { - IKernelWrapper kernelWrapper = KernelWrapperHelper.CreateKernelWrapper(currentSpecification); - - if (kernelWrapper == null) - { - throw new NotImplementedException(Resources.DesignCalculatorKernelNotImplemented); - } - - //damProjectData.DesignCalculations = new List(); - var calculationMessages = new List(); - // Prepare input - var 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.DesignScenario = location.Scenarios[designScenarioIndex]; - damKernelInput.DamFailureMechanismeCalculationSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; - AnalysisType analysisType = DamProjectCalculationSpecification.SelectedAnalysisType; - // SynchronizeDesignScenarioDataWithLocationData(damKernelInput.DesignScenario, damKernelInput.Location); - // IKernelDataInput kernelDataInput; - //IKernelDataOutput kernelDataOutput; - 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) - { - // switch (analysisType) - // { - // case AnalysisType.AdaptGeometry: - // PerformDesignCalculation(kernelWrapper, kernelDataInput, kernelDataOutput, - // damKernelInput, calculationMessages, damProjectData.DesignCalculations); - // break; - // case AnalysisType.NoAdaption: - // PerformSingleCalculation(kernelWrapper, kernelDataInput, kernelDataOutput, - // damKernelInput, calculationMessages, damProjectData.DesignCalculations); - // break; - // - // } - } - 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 kernelWrapper;//calculationMessages; - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - private EvaluationJob evaluationJob = null; - private GetValuesDelegate getValuesDelegate; - private ProgressDelegate progressDelegate; - private SendMessageDelegate sendMessageDelegate; - private string mstabExePath = @".\DGeoStability.exe"; - private int maxCalculationCores = 255; - - private Dictionary runningJobs = new Dictionary(); - private bool isSkipStabilityCalculation = false; - - /// - /// Gets or sets the type of the piping model. - /// - /// - /// The type of the piping model. - /// - public PipingModelType PipingModelType { get; set; } - - /// - /// Gets or sets the m stab parameters. - /// - /// - /// The m stab parameters. - /// - public MStabParameters MStabParameters { get; set; } - #region ICalculation Members /// /// Gets the results. /// - /// The results. /// - public CalculationResult GetResults(ref string results) + public EvaluationJob GetResults() { - // try - // { - // XmlSerializer serializer = new XmlSerializer(); - // results = serializer.SerializeToString(this.evaluationJob); - // return CalculationResult.Succeeded; - // } - // catch - // { - // return CalculationResult.UnexpectedError; - // }##Bka - return CalculationResult.UnexpectedError; + return evaluationJob; } /// - /// Loads the specified input. - /// - /// The input. - /// - public CalculationResult Load(string input) - { - // try - // { - // XmlDeserializer deserializer = new XmlDeserializer(); - // this.evaluationJob = (EvaluationJob)deserializer.XmlDeserializeFromString(input, typeof(EvaluationJob), new DefaultClassFactory()); - // return CalculationResult.Succeeded; - // } - // catch - // { - // return CalculationResult.UnexpectedError; - // }##Bka - return CalculationResult.UnexpectedError; - } - - /// /// Registers the get values. /// /// The get values delegate. @@ -338,19 +207,8 @@ } /// - /// Gets or sets the mstab executable path. - /// - /// - /// The mstab executable path. - /// - public string MStabExePath - { - get { return mstabExePath; } - set { mstabExePath = value; } - } - - /// /// Gets or sets a value indicating whether this instance is skip stability calculation. + /// Only used for test puposes. /// /// /// true if this instance is skip stability calculation; otherwise, false. @@ -375,7 +233,10 @@ { evaluationJob.FailedEvaluatedLocations.Add(location); var locationHasNoSegment = LocalizationManager.GetTranslatedText(GetType(), "LocationHasNoSegment"); - sendMessageDelegate(new LogMessage(LogMessageType.Error, location, locationHasNoSegment)); + if (sendMessageDelegate != null) + { + sendMessageDelegate(new LogMessage(LogMessageType.Error, location, locationHasNoSegment)); + } } } else @@ -445,8 +306,8 @@ { RegionalScenarioSelector selector = new RegionalScenarioSelector { - PipingModelType = PipingModelType, - MStabParameters = MStabParameters + PipingModelType = pipingModelType, + MStabParameters = mStabParameters }; return selector.GetScenarios(location, soilGeometryProbability); } @@ -469,7 +330,10 @@ catch (Exception e) { job.CalculationResult = CalculationResult.UnexpectedError; - sendMessageDelegate(new LogMessage(LogMessageType.Warning, job, String.Format(job.LocationName + " Error: {0}", e.Message))); + if (sendMessageDelegate != null) + { + sendMessageDelegate(new LogMessage(LogMessageType.Warning, job, String.Format(job.LocationName + " Error: {0}", e.Message))); + } } } @@ -542,6 +406,59 @@ } + private IKernelWrapper CreateKernelWrapper(DamFailureMechanismeCalculationSpecification currentSpecification) + { + IKernelWrapper kernelWrapper = KernelWrapperHelper.CreateKernelWrapper(currentSpecification); + + if (kernelWrapper == null) + { + throw new NotImplementedException(Resources.DesignCalculatorKernelNotImplemented); + } + return kernelWrapper; + } + + private List CreateKernelWrapperforJob(IKernelWrapper kernelWrapper, 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;// #Bka juiste waarde nakijken in classic + damKernelInput.RiverLevelLow = damKernelInput.Location.BoezemLevelLbp;// #Bka juiste waarde nakijken in classic + damKernelInput.FilenamePrefix = string.Format("Loc({0})_Sce({1})", location.Name, scenarioType.ToString()); + 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; @@ -562,12 +479,12 @@ return calculationName; } - /// - /// Determines the proper calculator for pipng - /// - /// - /// - /// proper piping calculator +// /// +// /// Determines the proper calculator for pipng +// /// +// /// +// /// +// /// proper piping calculator // private PipingCalculator GetCalculatorForPipingModel(RegionalScenarioProfileResult job, ModelParametersForPLLines modelParametersForPlLines) // { // PipingCalculator calculator; @@ -594,33 +511,19 @@ /// private void ProcessJobStability(RegionalScenarioProfileResult job) { - -// StabilityCalculation calculator = new StabilityCalculation(); - var currentSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; + var currentSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; // must this be a copy? currentSpecification.FailureMechanismSystemType = job.FailureMechanismType; + currentSpecification.FailureMechanismParametersMStab.MStabParameters.Model = job.MstabModelOption; IKernelDataInput kernelDataInput; IKernelDataOutput kernelDataOutput; - var calculator = CreateKernelWrapperforJob(currentSpecification, job.Location, job.SoilGeometryProbability, - out kernelDataInput, out kernelDataOutput); + DamKernelInput damKernelInput; + var calculator = CreateKernelWrapper(currentSpecification); lock (runningJobs) { runningJobs[calculator] = job; } - - // calculator.MStabExePath = this.MStabExePath; -// calculator.RegisterSendMessage(this.SendStabilityMessage); -// -// string soilDatabaseName = job.Location.StabilityOptions.SoilDatabaseName; -// DamFailureMechanismeCalculationSpecification damCalculation = -// calculator.GetSpecification(this.evaluationJob.DikeName, soilDatabaseName, job.Location, new SoilGeometry(job.SoilGeometryProbability.SoilProfile1D, null), -// (MStabModelType)job.MstabModelOption, job.LoadSituation, job.DikeDrySensitivity, job.HydraulicShortcutType, MStabParameters); - // - // calculator.SaveToFile(damCalculation.FailureMechanismParametersMStab); - // string inputFile = damCalculation.FailureMechanismParametersMStab.MStabParameters.ProjectFileName; - // - // job.BaseFileName = inputFile.Replace(DamProject.ProjectWorkingPath, @"").Replace(".sti", ""); - -// calculator.Load(inputFile); + var calculationCreationMessages = CreateKernelWrapperforJob(calculator, job.ScenarioType, job.Location, job.SoilGeometryProbability, + out kernelDataInput, out kernelDataOutput, out damKernelInput); List messages; calculator.Execute(kernelDataInput, kernelDataOutput, out messages); job.CalculationResult = CalculationResult.Succeeded; //Run(); @@ -629,19 +532,15 @@ { string resultMessage = ""; List results; - var input = (DamKernelInput) kernelDataInput; - calculator.PostProcess(input, kernelDataOutput, null, resultMessage, out results); - //string results = ""; - job.SafetyFactor = results[0].SafetyFactor.Value; + calculator.PostProcess(damKernelInput, kernelDataOutput, null, resultMessage, out results); + + if (results[0].SafetyFactor != null) + { + job.SafetyFactor = results[0].SafetyFactor.Value; + } job.CalculationResult = results[0].CalculationResult; job.RegionalResultType = RegionalResultType.SafetyFactor; -//XmlDeserializer deserializer = new XmlDeserializer(); -// RegionalResult result = (RegionalResult)deserializer.XmlDeserializeFromString(results, typeof(RegionalResult)); - - // job.SafetyFactor = result.SafetyFactor; - // job.ProbabilityOfFailure = result.ProbabilityOfFailure; - // job.RegionalResultType = result.RegionalResultType; - // job.CalculationResult = result.CalculationResult; + job.ProbabilityOfFailure = double.NaN; } else { @@ -671,7 +570,7 @@ } } - this.sendMessageDelegate(logMessage); + sendMessageDelegate(logMessage); } /// @@ -680,14 +579,13 @@ private void FillResults(List tasks) { // Fill scenariosResult structure with jobs just run - - foreach (Location location in this.evaluationJob.Locations) + foreach (Location location in evaluationJob.Locations) { try { RegionalScenariosResult scenariosResult = new RegionalScenariosResult(); - if (this.evaluationJob.FailedEvaluatedLocations.IndexOf(location) < 0) + if (evaluationJob.FailedEvaluatedLocations.IndexOf(location) < 0) { // scenarios were succesfully created, so results are available foreach (RegionalScenarioProfileResult job in tasks) @@ -705,8 +603,10 @@ if (scenarioResult == null) { - scenarioResult = new RegionalScenarioResult(); - scenarioResult.ScenarioType = job.ScenarioType; + scenarioResult = new RegionalScenarioResult + { + ScenarioType = job.ScenarioType + }; scenariosResult.RegionalScenarioResults.Add(scenarioResult); } @@ -719,9 +619,9 @@ foreach (var scenarioResult in scenariosResult.RegionalScenarioResults) { - this.CombineProfiles(scenarioResult); + CombineProfiles(scenarioResult); } - this.CombineScenarios(scenariosResult); + CombineScenarios(scenariosResult); } else Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/EngineInterface.cs =================================================================== diff -u -r1119 -r1181 --- DamEngine/trunk/src/Deltares.DamEngine.Interface/EngineInterface.cs (.../EngineInterface.cs) (revision 1119) +++ DamEngine/trunk/src/Deltares.DamEngine.Interface/EngineInterface.cs (.../EngineInterface.cs) (revision 1181) @@ -165,11 +165,12 @@ List calculationMessages = null; switch (DamProjectData.DamProjectType) { - case DamProjectType.Assessment: case DamProjectType.AssessmentRegional: var regionalScenariosCalculator = new RegionalScenariosCalculation(); calculationMessages = regionalScenariosCalculator.Execute(DamProjectData); + regionalScenariosCalculator.GetResults(); break; + case DamProjectType.Assessment: case DamProjectType.Operational: throw new NotImplementedException(); case DamProjectType.Design: @@ -184,6 +185,5 @@ SendMessage(new LogMessage() { MessageType = LogMessageType.Info, Message = Resources.EndCalculation }); return outputXml; } - } }