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