// Copyright (C) Stichting Deltares 2017. 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; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.Standard; using Deltares.DamEngine.Io.XmlOutput; namespace Deltares.DamEngine.Interface { /// /// Class to fill the output xml based on the results in DamProjectData /// public class FillXmlOutputFromDam { /// /// Creates the output. /// /// The dam project data. /// public static Output CreateOutput(DamProjectData damProjectData) { // Echo of the input Output output = new Output(); // Validation will be done using a static logmanager and passing logmessages. But this has still to be implemented. // Validation using Attributes must be removed, using explicit validation methods (ValidatioResult) replaced. Still to be done. output.ValidationResults = new Message[0]; // var mestel = 0; // foreach (var res in valres) // { // var mes = new Message(); // mes.Message1 = res.Text; // mes.MessageType = res.MessageType; // output.ValidationResults[mestel] = mes; // mestel++; // } // Results output.Results = new OutputResults(); // Calculation messages output.Results.CalculationMessages = new Message[0]; // Were do these come from? // Actual results output.Results.CalculationResults = new CalculationResults(); CreateDesignResultsOutput(damProjectData, output); // Calculation results (per location) // output.Results.CalculationResults.LocationResults = new CalculationResultsLocationResult[damProjectData.LocationJobs.Count]; // var jobtel = 0; // foreach (var locationJob in damProjectData.LocationJobs) // { // var outputLocationResult = new CalculationResultsLocationResult(); // // // Stability TimeSerie (later) // // // Piping TimeSerie (later) // // // RWScenarios results // outputLocationResult.RWScenariosResult = new CalculationResultsLocationResultRWScenariosResult(); // outputLocationResult.RWScenariosResult.SafetyFactor = locationJob.LocationResult.RWScenariosResult.SafetyFactor; // outputLocationResult.RWScenariosResult.CalculationResult = locationJob.LocationResult.RWScenariosResult.CalculationResult; // outputLocationResult.RWScenariosResult.RWScenarioResult = new RWScenarioResult[locationJob.LocationResult.RWScenariosResult.RWScenarioResults.Count]; // var scentel = 0; // foreach (var rwScenarioResult in locationJob.LocationResult.RWScenariosResult.RWScenarioResults) // { // var outputRwScenarioResult = new RWScenarioResult(); // outputRwScenarioResult.LoadSituation = rwScenarioResult.LoadSituation; // outputRwScenarioResult.DikeDrySensitivity = rwScenarioResult.DikeDrySensitivity; // outputRwScenarioResult.HydraulicShortcutType = rwScenarioResult.HydraulicShortcutType; // outputRwScenarioResult.UpliftType = rwScenarioResult.UpliftType; // outputRwScenarioResult.ModelOption = rwScenarioResult.ModelOption; // outputRwScenarioResult.ScenarioType = rwScenarioResult.ScenarioType; // outputRwScenarioResult.CalculationResult = rwScenarioResult.CalculationResult; // outputRwScenarioResult.SafetyFactor = rwScenarioResult.SafetyFactor; // outputRwScenarioResult.RWScenarioProfileResults = new RWScenarioResultRWScenarioProfileResult[rwScenarioResult.RWScenarioProfileResults.Count]; // var proftel = 0; // foreach (var profileResult in rwScenarioResult.RWScenarioProfileResults) // { // var outputProfileResult = new RWScenarioResultRWScenarioProfileResult(); // outputProfileResult.LocationName = profileResult.LocationName; // outputProfileResult.LoadSituation = profileResult.LoadSituation; // outputProfileResult.DikeDrySensitivity = profileResult.DikeDrySensitivity; // outputProfileResult.HydraulicShortcutType = profileResult.HydraulicShortcutType; // outputProfileResult.UpliftType = profileResult.UpliftType; // outputProfileResult.MStabModelOption = profileResult.MstabModelOption; // outputProfileResult.PipingModelOption = profileResult.PipingModelOption; // outputProfileResult.ScenarioType = profileResult.ScenarioType; // outputProfileResult.SoilProfileName = profileResult.SoilProfileName; // outputProfileResult.SoilProfileProbability = profileResult.SoilProfileProbability; // //outputProfileResult.FailureMechanismType = profileResult.FailureMechanismType; // outputProfileResult.BaseFileName = profileResult.BaseFileName; // outputProfileResult.RWResult = new RWResult(); // //outputProfileResult.RWResult.RWResultType = profileResult.RwResultType; // outputProfileResult.RWResult.SafetyFactor = profileResult.SafetyFactor; // outputProfileResult.RWResult.ProbabilityOfFailure = profileResult.ProbabilityOfFailure; // //outputProfileResult.RWResult.CalculationResult = profileResult.CalculationResult; // outputLocationResult.RWScenariosResult.RWScenarioResult[scentel].RWScenarioProfileResults[proftel] = outputProfileResult; // proftel++; // } // outputLocationResult.RWScenariosResult.RWScenarioResult[scentel] = outputRwScenarioResult; // scentel++; // // // RWSchematizationFactors Result // outputLocationResult.RWSchematizationFactorsResult = new CalculationResultsLocationResultRWSchematizationFactorsResult(); // outputLocationResult.RWSchematizationFactorsResult.RWSchematizationFactorResult = new CalculationResultsLocationResultRWSchematizationFactorsResultRWSchematizationFactorResult[damProjectData.SchematizationFactors.Count]; // var factortel = 0; // foreach (var rwSchematizationFactorResult in damProjectData.SchematizationFactors) // { // var factorResult = new CalculationResultsLocationResultRWSchematizationFactorsResultRWSchematizationFactorResult(); // factorResult.LocationName = rwSchematizationFactorResult.LocationName; // //factorResult.SchematizationType = rwSchematizationFactorResult.SchematizationType; // factorResult.SoilProfileName = rwSchematizationFactorResult.SoilProfileName; // factorResult.OriginalDecisiveSoilProfileName = rwSchematizationFactorResult.OriginalDecisiveSoilProfileName; // factorResult.SchematizationFactor = rwSchematizationFactorResult.SchematizationFactor; // factorResult.SummedProfileProbability = rwSchematizationFactorResult.SummedProfileProbability; // //factorResult.DecisiveScenarioName = rwSchematizationFactorResult.DecisiveScenarioName; // factorResult.DetrimentFactor = rwSchematizationFactorResult.DetrimentFactor; // factorResult.SafetyFactor = rwSchematizationFactorResult.SafetyFactor; // //factorResult.CalculationResult = rwSchematizationFactorResult.CalculationResult; // outputLocationResult.RWSchematizationFactorsResult.RWSchematizationFactorResult[factortel] = factorResult; // factortel++; // } // // } // output.Results.CalculationResults.LocationResults[jobtel] = outputLocationResult; // jobtel++; // } return output; } private static void CreateDesignResultsOutput(DamProjectData damProjectData, Output output) { // Design results var designResults = damProjectData.DesignCalculations; if (designResults.Count > 0) { output.Results.CalculationResults.DesignResults = new DesignResult[designResults.Count]; var designResultCount = 0; foreach (var designResult in designResults) { var desResult = new DesignResult { Id = designResult.Id, Xrd = designResult.Xrd, Yrd = designResult.Yrd, BaseFileName = designResult.BaseFileName, LocationName = designResult.LocationName, ScenarioName = designResult.ScenarioName, ProfileName = designResult.ProfileName, SafetyFactorSpecified = designResult.SafetyFactor.HasValue }; if (designResult.SafetyFactor.HasValue) desResult.SafetyFactor = designResult.SafetyFactor.Value; desResult.FailureProbabilitySpecified = designResult.FailureProbability.HasValue; if (designResult.FailureProbability.HasValue) desResult.FailureProbability = designResult.FailureProbability.Value; desResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(designResult.CalculationResult); if (designResult.PipingDesignResults != null) { CreateDesignResultsPipingOutput(desResult, designResult); } output.Results.CalculationResults.DesignResults[designResultCount] = desResult; designResultCount++; } } } private static void CreateDesignResultsPipingOutput(DesignResult desResult, Data.General.Results.DesignResult designResult) { desResult.PipingDesignResults = new DesignResultPipingDesignResults { ResultMessage = designResult.PipingDesignResults.ResultMessage, //RedesignedSurfaceLine2 = designResult.PipingDesignResults.RedesignedSurfaceLine, FailureProbabilitySpecified = designResult.PipingDesignResults.FailureProbability.HasValue }; if (designResult.PipingDesignResults.FailureProbability.HasValue) desResult.PipingDesignResults.FailureProbability = designResult.PipingDesignResults.FailureProbability.Value; desResult.PipingDesignResults.UpliftFactorSpecified = designResult.PipingDesignResults.UpliftFactor.HasValue; if (designResult.PipingDesignResults.UpliftFactor.HasValue) desResult.PipingDesignResults.UpliftFactor = designResult.PipingDesignResults.UpliftFactor.Value; desResult.PipingDesignResults.HeaveFactorSpecified = designResult.PipingDesignResults.HeaveFactor.HasValue; if (designResult.PipingDesignResults.HeaveFactor.HasValue) desResult.PipingDesignResults.HeaveFactor = designResult.PipingDesignResults.HeaveFactor.Value; desResult.PipingDesignResults.BlighFactorSpecified = designResult.PipingDesignResults.BlighFactor.HasValue; if (designResult.PipingDesignResults.BlighFactor.HasValue) desResult.PipingDesignResults.BlighFactor = designResult.PipingDesignResults.BlighFactor.Value; desResult.PipingDesignResults.BlighHcriticalSpecified = designResult.PipingDesignResults.BlighHcritical.HasValue; if (designResult.PipingDesignResults.BlighHcritical.HasValue) desResult.PipingDesignResults.BlighHcritical = designResult.PipingDesignResults.BlighHcritical.Value; desResult.PipingDesignResults.Sellmeijer4ForcesFactorSpecified = designResult.PipingDesignResults.Sellmeijer4ForcesFactor.HasValue; if (designResult.PipingDesignResults.Sellmeijer4ForcesFactor.HasValue) desResult.PipingDesignResults.Sellmeijer4ForcesFactor = designResult.PipingDesignResults.Sellmeijer4ForcesFactor.Value; desResult.PipingDesignResults.Sellmeijer4ForcesHcriticalSpecified = designResult.PipingDesignResults.Sellmeijer4ForcesHcritical.HasValue; if (designResult.PipingDesignResults.Sellmeijer4ForcesHcritical.HasValue) desResult.PipingDesignResults.Sellmeijer4ForcesHcritical = designResult.PipingDesignResults.Sellmeijer4ForcesHcritical.Value; desResult.PipingDesignResults.SellmeijerVnkFactorSpecified = designResult.PipingDesignResults.SellmeijerVnkFactor.HasValue; if (designResult.PipingDesignResults.SellmeijerVnkFactor.HasValue) desResult.PipingDesignResults.SellmeijerVnkFactor = designResult.PipingDesignResults.SellmeijerVnkFactor.Value; desResult.PipingDesignResults.SellmeijerVnkHcriticalSpecified = designResult.PipingDesignResults.SellmeijerVnkHcritical.HasValue; if (designResult.PipingDesignResults.SellmeijerVnkHcritical.HasValue) desResult.PipingDesignResults.SellmeijerVnkHcritical = designResult.PipingDesignResults.SellmeijerVnkHcritical.Value; desResult.PipingDesignResults.Wti2017FactorSpecified = designResult.PipingDesignResults.Wti2017Factor.HasValue; if (designResult.PipingDesignResults.Wti2017Factor.HasValue) desResult.PipingDesignResults.Wti2017Factor = designResult.PipingDesignResults.Wti2017Factor.Value; desResult.PipingDesignResults.Wti2017HcriticalSpecified = designResult.PipingDesignResults.Wti2017Hcritical.HasValue; if (designResult.PipingDesignResults.Wti2017Hcritical.HasValue) desResult.PipingDesignResults.Wti2017Hcritical = designResult.PipingDesignResults.Wti2017Hcritical.Value; desResult.PipingDesignResults.LocalExitPointXSpecified = designResult.PipingDesignResults.LocalExitPointX.HasValue; if (designResult.PipingDesignResults.LocalExitPointX.HasValue) desResult.PipingDesignResults.LocalExitPointX = designResult.PipingDesignResults.LocalExitPointX.Value; if (designResult.PipingDesignResults.UpliftSituation.HasValue) { var uplift = designResult.PipingDesignResults.UpliftSituation.Value; desResult.PipingDesignResults.UpliftSituation = new UpliftSituation(); desResult.PipingDesignResults.UpliftSituation.IsUplift = uplift.IsUplift; desResult.PipingDesignResults.UpliftSituation.Pl3MinUplift = uplift.Pl3MinUplift; desResult.PipingDesignResults.UpliftSituation.Pl3HeadAdjusted = uplift.Pl3HeadAdjusted; desResult.PipingDesignResults.UpliftSituation.Pl3LocalLocationXMinUplift = uplift.Pl3LocationXMinUplift; desResult.PipingDesignResults.UpliftSituation.Pl4MinUplift = uplift.Pl4MinUplift; desResult.PipingDesignResults.UpliftSituation.Pl4HeadAdjusted = uplift.Pl4HeadAdjusted; desResult.PipingDesignResults.UpliftSituation.Pl4LocalLocationXMinUplift = uplift.Pl4LocationXMinUplift; } } } }