// Copyright (C) Stichting Deltares 2018. All rights reserved. // // This file is part of the Dam Engine. // // The Dam Engine is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System.Collections.Generic; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.Data.RegionalAssessmentResults; using Deltares.DamEngine.Data.Standard.Logging; using Deltares.DamEngine.Io.XmlOutput; using RegionalResult = Deltares.DamEngine.Io.XmlOutput.RegionalResult; using RegionalScenarioResult = Deltares.DamEngine.Io.XmlOutput.RegionalScenarioResult; namespace Deltares.DamEngine.Interface { /// /// Class to fill the results in DamProjectData based on the output xml (for test purposes only) /// public class FillDamFromXmlOutput { /// /// Creates the dam project data. /// /// The output. /// public static DamProjectData CreateDamProjectData(Output output) { var damProjectData = new DamProjectData(); if (output != null && output.Results != null && output.Results.CalculationResults != null) { if (output.Results.CalculationResults.DesignResults != null) { CreateDesignResultsOutput(output, damProjectData); } if (output.Results.CalculationResults.LocationResults != null) { CreateLocationResultsOutput(output, damProjectData); } } return damProjectData; } private static void CreateDesignResultsOutput(Output output, DamProjectData damProjectData) { // Design results damProjectData.DesignCalculations = new List(); for (int i = 0; i < output.Results.CalculationResults.DesignResults.Length; i++) { var designResult = output.Results.CalculationResults.DesignResults[i]; var desResult = new Data.General.Results.DesignResult(designResult.LocationName, designResult.ScenarioName) { BaseFileName = designResult.BaseFileName, CalculationSubDir = designResult.CalculationSubDir, ProfileName = designResult.ProfileName }; desResult.CalculationResult = ConversionHelper.ConvertToCalculationResult(designResult.CalculationResult); if (designResult.PipingDesignResults != null) { CreateDesignResultsPipingOutput(designResult, desResult); } if (designResult.StabilityDesignResults != null) { CreateDesignResultsStabilityOutput(designResult, desResult); } damProjectData.DesignCalculations.Add(desResult); } if (output.Results.CalculationMessages != null) { damProjectData.CalculationMessages = new List(); for (int i = 0; i < output.Results.CalculationMessages.Length; i++) { var validationResult = output.Results.CalculationMessages[i]; var logMessage = new LogMessage(); logMessage.MessageType = ConversionHelper.ConvertToLogMessageType(validationResult.MessageType); logMessage.Subject = null; logMessage.Message = validationResult.Message1; damProjectData.CalculationMessages.Add(logMessage); } } } private static void CreateDesignResultsPipingOutput(DesignResult designResult, Data.General.Results.DesignResult desResult) { var model = PipingModelType.Bligh; if (designResult.PipingDesignResults.Sellmeijer4ForcesFactorSpecified) model = PipingModelType.Sellmeijer4Forces; if (designResult.PipingDesignResults.SellmeijerVnkFactorSpecified) model = PipingModelType.SellmeijerVnk; if (designResult.PipingDesignResults.Wbi2017FactorSpecified) model = PipingModelType.Wti2017; desResult.PipingDesignResults = new Data.General.Results.PipingDesignResults(model) { ResultMessage = designResult.PipingDesignResults.ResultMessage }; if (designResult.PipingDesignResults.RedesignedSurfaceLine != null) { desResult.PipingDesignResults.RedesignedSurfaceLine = new SurfaceLine2 { Name = designResult.PipingDesignResults.RedesignedSurfaceLine.Name }; desResult.PipingDesignResults.RedesignedSurfaceLine.CharacteristicPoints.Geometry = desResult.PipingDesignResults.RedesignedSurfaceLine.Geometry; AddPointsToSurfaceLine(designResult.PipingDesignResults.RedesignedSurfaceLine, desResult.PipingDesignResults.RedesignedSurfaceLine); } if (designResult.PipingDesignResults.UpliftFactorSpecified) desResult.PipingDesignResults.UpliftFactor = designResult.PipingDesignResults.UpliftFactor; if (designResult.PipingDesignResults.HeaveFactorSpecified) desResult.PipingDesignResults.HeaveFactor = designResult.PipingDesignResults.HeaveFactor; if (designResult.PipingDesignResults.BlighFactorSpecified) desResult.PipingDesignResults.BlighFactor = designResult.PipingDesignResults.BlighFactor; if (designResult.PipingDesignResults.BlighHcriticalSpecified) desResult.PipingDesignResults.BlighHcritical = designResult.PipingDesignResults.BlighHcritical; if (designResult.PipingDesignResults.Sellmeijer4ForcesFactorSpecified) desResult.PipingDesignResults.Sellmeijer4ForcesFactor = designResult.PipingDesignResults.Sellmeijer4ForcesFactor; if (designResult.PipingDesignResults.Sellmeijer4ForcesHcriticalSpecified) desResult.PipingDesignResults.Sellmeijer4ForcesHcritical = designResult.PipingDesignResults.Sellmeijer4ForcesHcritical; if (designResult.PipingDesignResults.SellmeijerVnkFactorSpecified) desResult.PipingDesignResults.SellmeijerVnkFactor = designResult.PipingDesignResults.SellmeijerVnkFactor; if (designResult.PipingDesignResults.SellmeijerVnkHcriticalSpecified) desResult.PipingDesignResults.SellmeijerVnkHcritical = designResult.PipingDesignResults.SellmeijerVnkHcritical; if (designResult.PipingDesignResults.Wbi2017FactorSpecified) desResult.PipingDesignResults.Wti2017Factor = designResult.PipingDesignResults.Wbi2017Factor; if (designResult.PipingDesignResults.Wbi2017HcriticalSpecified) desResult.PipingDesignResults.Wti2017Hcritical = designResult.PipingDesignResults.Wbi2017Hcritical; if (designResult.PipingDesignResults.ExitPointXSpecified) desResult.PipingDesignResults.LocalExitPointX = designResult.PipingDesignResults.ExitPointX; if (designResult.PipingDesignResults.UpliftSituation != null) { var uplift = designResult.PipingDesignResults.UpliftSituation; var situation = new Data.General.UpliftSituation(); situation.IsUplift = uplift.IsUplift; situation.Pl3MinUplift = uplift.Pl3MinUplift; situation.Pl3HeadAdjusted = uplift.Pl3HeadAdjusted; situation.Pl3LocationXMinUplift = uplift.Pl3LocationXMinUplift; situation.Pl4MinUplift = uplift.Pl4MinUplift; situation.Pl4HeadAdjusted = uplift.Pl4HeadAdjusted; situation.Pl4LocationXMinUplift = uplift.Pl4LocationXMinUplift; desResult.PipingDesignResults.UpliftSituation = situation; } } private static void AddPointsToSurfaceLine(Io.XmlOutput.SurfaceLine inputSurfaceLine, SurfaceLine2 surfaceLine) { surfaceLine.Geometry = new GeometryPointString(); for (int j = 0; j < inputSurfaceLine.Points.Length; j++) { var inputPoint = inputSurfaceLine.Points[j]; var geometryPoint = new GeometryPoint() { X = inputPoint.X, Y = 0.0, Z = inputPoint.Z }; surfaceLine.AddCharacteristicPoint(geometryPoint, ConversionHelper.ConvertToDamPointType(inputPoint.PointType)); } } private static void CreateDesignResultsStabilityOutput(DesignResult designResult, Data.General.Results.DesignResult desResult) { desResult.StabilityDesignResults = new Data.General.Results.StabilityDesignResults() { ResultMessage = designResult.StabilityDesignResults.ResultMessage }; if (designResult.StabilityDesignResults.RedesignedSurfaceLine != null) { desResult.StabilityDesignResults.RedesignedSurfaceLine = new SurfaceLine2 { Name = designResult.StabilityDesignResults.RedesignedSurfaceLine.Name }; desResult.StabilityDesignResults.RedesignedSurfaceLine.CharacteristicPoints.Geometry = desResult.StabilityDesignResults.RedesignedSurfaceLine.Geometry; AddPointsToSurfaceLine(designResult.StabilityDesignResults.RedesignedSurfaceLine, desResult.StabilityDesignResults.RedesignedSurfaceLine); } if (designResult.StabilityDesignResults.SafetyFactorSpecified) desResult.StabilityDesignResults.SafetyFactor = designResult.StabilityDesignResults.SafetyFactor; if (designResult.StabilityDesignResults.Zone1SafetyFactorSpecified) desResult.StabilityDesignResults.Zone1SafetyFactor = designResult.StabilityDesignResults.Zone1SafetyFactor; if (designResult.StabilityDesignResults.Zone1EntryPointXSpecified) desResult.StabilityDesignResults.LocalZone1EntryPointX = designResult.StabilityDesignResults.Zone1EntryPointX; if (designResult.StabilityDesignResults.Zone1ExitPointXSpecified) desResult.StabilityDesignResults.LocalZone1ExitPointX = designResult.StabilityDesignResults.Zone1ExitPointX; if (designResult.StabilityDesignResults.Zone2SafetyFactorSpecified) desResult.StabilityDesignResults.Zone2SafetyFactor = designResult.StabilityDesignResults.Zone2SafetyFactor; if (designResult.StabilityDesignResults.Zone2EntryPointXSpecified) desResult.StabilityDesignResults.LocalZone2EntryPointX = designResult.StabilityDesignResults.Zone2EntryPointX; if (designResult.StabilityDesignResults.Zone2ExitPointXSpecified) desResult.StabilityDesignResults.LocalZone2ExitPointX = designResult.StabilityDesignResults.Zone2ExitPointX; if (designResult.StabilityDesignResults.NumberOfIterationsSpecified) desResult.StabilityDesignResults.NumberOfIterations = designResult.StabilityDesignResults.NumberOfIterations; if (designResult.StabilityDesignResults.UpliftSituation != null) { var uplift = designResult.StabilityDesignResults.UpliftSituation; var situation = new Data.General.UpliftSituation { IsUplift = uplift.IsUplift, Pl3MinUplift = uplift.Pl3MinUplift, Pl3HeadAdjusted = uplift.Pl3HeadAdjusted, Pl3LocationXMinUplift = uplift.Pl3LocationXMinUplift, Pl4MinUplift = uplift.Pl4MinUplift, Pl4HeadAdjusted = uplift.Pl4HeadAdjusted, Pl4LocationXMinUplift = uplift.Pl4LocationXMinUplift }; desResult.StabilityDesignResults.UpliftSituation = situation; } } private static void CreateLocationResultsOutput(Output output, DamProjectData damProjectData) { // Calculation results (per location) damProjectData.LocationJobs = new List(); // var jobtel = 0; // foreach (var outputLocationResult in output.Results.CalculationResults.LocationResults) // { // var locationJob = new LocationJob("hh"); // // Stability TimeSerie (later) // // // Piping TimeSerie (later) // // // 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 rwScenarioResult in locationJob.LocationResult.RegionalScenariosResult.RegionalScenarioResults) // { // var outputRwScenarioResult = new RegionalScenarioResult(); // outputRwScenarioResult.LoadSituation = ConversionHelper.ConvertToOutputLoadSituation(rwScenarioResult.LoadSituation); // outputRwScenarioResult.DikeDrySensitivity = ConversionHelper.ConvertToOutputDikeDrySensitivity(rwScenarioResult.DikeDrySensitivity); // outputRwScenarioResult.HydraulicShortcutType = ConversionHelper.ConvertToOutputHydraulicShortcutType(rwScenarioResult.HydraulicShortcutType); // outputRwScenarioResult.UpliftType = ConversionHelper.ConvertToOutputUpliftType(rwScenarioResult.UpliftType); // outputRwScenarioResult.ModelOption = ConversionHelper.ConvertToOutputMStabModelType(rwScenarioResult.ModelOption); // outputRwScenarioResult.ScenarioType = ConversionHelper.ConvertToOutputScenarioType(rwScenarioResult.ScenarioType); // outputRwScenarioResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(rwScenarioResult.CalculationResult); // outputRwScenarioResult.SafetyFactor = rwScenarioResult.SafetyFactor; // outputRwScenarioResult.RegionalScenarioProfileResults = new RegionalScenarioResultRegionalScenarioProfileResult[rwScenarioResult.RegionalScenarioProfileResults.Count]; // var proftel = 0; // foreach (var profileResult in rwScenarioResult.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); // outputLocationResult.RegionalScenariosResult.RegionalScenarioResult[scentel].RegionalScenarioProfileResults[proftel] = outputProfileResult; // proftel++; // } // outputLocationResult.RegionalScenariosResult.RegionalScenarioResult[scentel] = outputRwScenarioResult; // scentel++; // } // output.Results.CalculationResults.LocationResults[jobtel] = outputLocationResult; // jobtel++; // } } } }