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