Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs =================================================================== diff -u -r6854 -r6855 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 6854) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 6855) @@ -113,6 +113,12 @@ TransferTrafficLoadDegreeOfConsolidation(dike.DamSoils, usedSoils, input); + if (damProjectData.InputTimeSerieCollection != null) + { + input.OperationalInputTimeSeries = new DamEngine.Io.XmlInput.TimeSerie[damProjectData.InputTimeSerieCollection.Series.Count]; + TransferInputTimeSeries(damProjectData.InputTimeSerieCollection, input.OperationalInputTimeSeries); + } + if (damProjectData.SensorData != null) { input.SensorData = new InputSensorData(); @@ -326,6 +332,38 @@ } } + private static void TransferInputTimeSeries(TimeSerieCollection inputTimeSerieCollection, DamEngine.Io.XmlInput.TimeSerie[] operationalInputTimeSeries) + { + var timeSerieIndex = 0; + foreach (TimeSerie timeSerie in inputTimeSerieCollection.Series) + { + var inputTimeSerie = new DamEngine.Io.XmlInput.TimeSerie(); + inputTimeSerie.Entries = new TimeSerieEntries(); + inputTimeSerie.Entries.TimeSerieEntry = new TimeSerieEntriesTimeSerieEntry[timeSerie.Entries.Count]; + inputTimeSerie.LocationId = timeSerie.LocationId; + inputTimeSerie.ParameterId = timeSerie.ParameterId; + inputTimeSerie.ForecastDateTime = timeSerie.ForecastDateTime; + inputTimeSerie.StartDateTime = timeSerie.StartDateTime; + inputTimeSerie.EndDateTime = timeSerie.EndDateTime; + inputTimeSerie.MissVal = timeSerie.MissVal; + inputTimeSerie.Units = timeSerie.Units; + var timeSerieEntryIndex = 0; + foreach (TimeSerieEntry timestepEntry in timeSerie.Entries) + { + var timeStep = new TimeSerieEntriesTimeSerieEntry + { + DateTime = timestepEntry.DateTime, + Value = timestepEntry.Value + }; + inputTimeSerie.Entries.TimeSerieEntry[timeSerieEntryIndex] = timeStep; + timeSerieEntryIndex++; + } + + operationalInputTimeSeries[timeSerieIndex] = inputTimeSerie; + timeSerieIndex++; + } + } + private static void TransferAnalysisSpecification(DamProjectData damProjectData, Input input) { input.DamProjectType = ConversionHelper.ConvertToInputDamProjectType(damProjectData.DamProjectType); Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlOutputFromDamUi.cs =================================================================== diff -u -r6854 -r6855 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlOutputFromDamUi.cs (.../FillXmlOutputFromDamUi.cs) (revision 6854) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlOutputFromDamUi.cs (.../FillXmlOutputFromDamUi.cs) (revision 6855) @@ -39,6 +39,11 @@ output.Results = new OutputResults(); output.Results.CalculationMessages = new Message[damProjectData.CalculationMessages.Count]; TransferOutputCalculationMessages(damProjectData.CalculationMessages, output.Results); + if (damProjectData.OutputTimeSerieCollection != null) + { + output.Results.OperationalOutputTimeSeries = new TimeSerieOutput[damProjectData.OutputTimeSerieCollection.Series.Count]; + TransferOutputTimeSeries(damProjectData.OutputTimeSerieCollection, output.Results.OperationalOutputTimeSeries); + } if (damProjectData.DesignCalculations != null && damProjectData.DesignCalculations.Count > 0) { @@ -58,6 +63,38 @@ return output; } + private static void TransferOutputTimeSeries(TimeSerieCollection outputTimeSerieCollection, TimeSerieOutput[] outputTimeSeries) + { + var timeSerieIndex = 0; + foreach (TimeSerie damTimeSerie in outputTimeSerieCollection.Series) + { + var outputTimeSerie = new TimeSerieOutput(); + outputTimeSerie.Entries = new TimeSerieOutputEntries(); + outputTimeSerie.Entries.TimeSerieEntryOutput = new TimeSerieOutputEntriesTimeSerieEntryOutput[damTimeSerie.Entries.Count]; + outputTimeSerie.LocationId = damTimeSerie.LocationId; + outputTimeSerie.ParameterId = damTimeSerie.ParameterId; + outputTimeSerie.ForecastDateTime = damTimeSerie.ForecastDateTime; + outputTimeSerie.StartDateTime = damTimeSerie.StartDateTime; + outputTimeSerie.EndDateTime = damTimeSerie.EndDateTime; + outputTimeSerie.MissVal = damTimeSerie.MissVal; + outputTimeSerie.Units = damTimeSerie.Units; + var timeSerieEntryIndex = 0; + foreach (TimeSerieEntry timestepEntry in damTimeSerie.Entries) + { + var timeStep = new TimeSerieOutputEntriesTimeSerieEntryOutput + { + DateTime = timestepEntry.DateTime, + Value = timestepEntry.Value + }; + outputTimeSerie.Entries.TimeSerieEntryOutput[timeSerieEntryIndex] = timeStep; + timeSerieEntryIndex++; + } + + outputTimeSeries[timeSerieIndex] = outputTimeSerie; + timeSerieIndex++; + } + } + private static void TransferOutputCalculationMessages(List calculationMessages, OutputResults outputResults) { //var calculationMessages = damProjectData.CalculationMessages; Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs =================================================================== diff -u -r6854 -r6855 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 6854) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 6855) @@ -70,6 +70,11 @@ TransferSegments(input.Segments, dike.SoilProfiles, damProjectData.WaterBoard.Segments); TransferLocations(input.Locations, dike.Locations, localSurfaceLines, damProjectData.WaterBoard.Segments); TransferTrafficLoadDegreeOfConsolidation(input.TrafficLoadDegreeOfConsolidations, dike); + if (input.OperationalInputTimeSeries != null) + { + damProjectData.InputTimeSerieCollection = new TimeSerieCollection(); + TransferInputTimeSeries(input.OperationalInputTimeSeries, damProjectData.InputTimeSerieCollection); + } if (input.SensorData != null) { @@ -155,6 +160,30 @@ } } + private static void TransferInputTimeSeries(DamEngine.Io.XmlInput.TimeSerie[] inputOperationalInputTimeSeries, TimeSerieCollection timeSerieCollection) + { + foreach (DamEngine.Io.XmlInput.TimeSerie inputTimeSerie in inputOperationalInputTimeSeries) + { + TimeSerie timeSerie = timeSerieCollection.AddNewSeries(inputTimeSerie.LocationId); + timeSerie.ParameterId = inputTimeSerie.ParameterId; + timeSerie.ForecastDateTime = inputTimeSerie.ForecastDateTime; + timeSerie.StartDateTime = inputTimeSerie.StartDateTime; + timeSerie.EndDateTime = inputTimeSerie.EndDateTime; + timeSerie.MissVal = inputTimeSerie.MissVal; + timeSerie.Units = inputTimeSerie.Units; + for (var i = 0; i < inputTimeSerie.Entries.TimeSerieEntry.Length; i++) + { + TimeSerieEntriesTimeSerieEntry entry = inputTimeSerie.Entries.TimeSerieEntry[i]; + var timeSerieEntry = new TimeSerieEntry + { + DateTime = entry.DateTime, + Value = entry.Value + }; + timeSerie.Entries.Add(timeSerieEntry); + } + } + } + private static void TransferAnalysisSpecification(Input input, DamProjectData damProjectData) { damProjectData.DamProjectType = ConversionHelper.ConvertToDamProjectType(input.DamProjectType); Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlOutput.cs =================================================================== diff -u -r6854 -r6855 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlOutput.cs (.../FillDamUiFromXmlOutput.cs) (revision 6854) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlOutput.cs (.../FillDamUiFromXmlOutput.cs) (revision 6855) @@ -82,9 +82,67 @@ } } + // Transfer output time series + if (output != null && output.Results != null && output.Results.OperationalOutputTimeSeries != null) + { + damProjectData.OutputTimeSerieCollection = new TimeSerieCollection(); + TransferOutputTimeSeries(output.Results.OperationalOutputTimeSeries, damProjectData.OutputTimeSerieCollection); + if (output.Results.OperationalStaticData is { StabilityModel: OperationalStaticDataStabilityModel.Bishop }) + { + TransferOutputTimeSeries(output.Results.OperationalOutputTimeSeries, damProjectData.OutputTimeSerieCollection, TimeSerieParameters.BishopCircleCentreX.ToString()); + TransferOutputTimeSeries(output.Results.OperationalOutputTimeSeries, damProjectData.OutputTimeSerieCollection, TimeSerieParameters.BishopCircleCentreZ.ToString()); + TransferOutputTimeSeries(output.Results.OperationalOutputTimeSeries, damProjectData.OutputTimeSerieCollection, TimeSerieParameters.BishopCircleRadius.ToString()); + } + } + + damProjectData.TransferOutputTimeSerieToLocationJobs(); + return damProjectData; } + private static void TransferOutputTimeSeries(TimeSerieOutput[] outputTimeSeries, TimeSerieCollection outputTimeSerieCollection, string parameterId = "") + { + foreach (TimeSerieOutput outputTimeSerie in outputTimeSeries) + { + TimeSerie timeSerie = outputTimeSerieCollection.AddNewSeries(outputTimeSerie.LocationId); + timeSerie.ParameterId = parameterId == "" ? outputTimeSerie.ParameterId : parameterId; + timeSerie.ForecastDateTime = outputTimeSerie.ForecastDateTime; + timeSerie.StartDateTime = outputTimeSerie.StartDateTime; + timeSerie.EndDateTime = outputTimeSerie.EndDateTime; + timeSerie.MissVal = outputTimeSerie.MissVal; + timeSerie.Units = outputTimeSerie.Units; + for (var i = 0; i < outputTimeSerie.Entries.TimeSerieEntryOutput.Length; i++) + { + TimeSerieOutputEntriesTimeSerieEntryOutput entry = outputTimeSerie.Entries.TimeSerieEntryOutput[i]; + var timeSerieEntry = new TimeSerieEntry + { + DateTime = entry.DateTime + }; + if (parameterId == "") + { + timeSerieEntry.Value = entry.Value; + } + + if (parameterId == TimeSerieParameters.BishopCircleCentreX.ToString()) + { + timeSerieEntry.Value = entry.BishopCalculatedSlipPlane is { Center: not null } ? entry.BishopCalculatedSlipPlane.Center.X : double.NaN; + } + + if (parameterId == TimeSerieParameters.BishopCircleCentreZ.ToString()) + { + timeSerieEntry.Value = entry.BishopCalculatedSlipPlane is { Center: not null } ? entry.BishopCalculatedSlipPlane.Center.Z : double.NaN; + } + + if (parameterId == TimeSerieParameters.BishopCircleRadius.ToString()) + { + timeSerieEntry.Value = entry.BishopCalculatedSlipPlane?.Radius ?? double.NaN; + } + + timeSerie.Entries.Add(timeSerieEntry); + } + } + } + private static void CreateDesignResultsFromOutput(Output output, DamProjectData damProjectData) { if (damProjectData.WaterBoard.Dike != null) Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs =================================================================== diff -u -r6854 -r6855 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 6854) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 6855) @@ -799,6 +799,7 @@ locationJob.Run = true; } + FillInputTimeSeries(damProjectData); FillSensorData(damProjectData); return damProjectData; } @@ -897,6 +898,33 @@ sensorData.SensorLocations.Add(sensorLocation2); } + private void FillInputTimeSeries(DamProjectData damProjectData) + { + const int timeSeriesCount = 2; + const int timeEntriesCount = 3; + const string idWaterLevel = "WaterLevel"; + const string idWaterPressure = "WaterPressure"; + damProjectData.InputTimeSerieCollection = new TimeSerieCollection(); + for (var i = 0; i < timeSeriesCount; i++) + { + var locationId = $"location{i}"; + TimeSerie timeSerie = damProjectData.InputTimeSerieCollection.AddNewSeries(locationId); + timeSerie.ParameterId = (i % 2 == 0) ? idWaterLevel : idWaterPressure; + timeSerie.ForecastDateTime = DateTime.Now; + timeSerie.StartDateTime = new DateTime(2012, 12, 31); + timeSerie.EndDateTime = new DateTime(2012, 12, 31, 1, 0, 0); + timeSerie.MissVal = -9999.0; + for (var j = 0; j < timeEntriesCount; j++) + { + timeSerie.Entries.Add(new TimeSerieEntry + { + DateTime = new DateTime(2012, 12, 31, 1, j * 10, 0), + Value = j + }); + } + } + } + private static void FillAnalysisSpecification(DamProjectData damProjectData) { damProjectData.DamProjectType = DamProjectType.Design; Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs =================================================================== diff -u -r6854 -r6855 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs (.../FillDamUiFromXmlOutputTests.cs) (revision 6854) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/DamEngineIo/FillDamUiFromXmlOutputTests.cs (.../FillDamUiFromXmlOutputTests.cs) (revision 6855) @@ -228,6 +228,7 @@ damProjectData.CalculationMessages.Add(new LogMessage(LogMessageType.Error, null, "Error 1")); damProjectData.CalculationMessages.Add(new LogMessage(LogMessageType.Error, null, "Error 2")); damProjectData.CalculationMessages.Add(new LogMessage(LogMessageType.Warning, null, "Warning 1")); + FillOutputTimeSeries(damProjectData); return damProjectData; } @@ -241,6 +242,34 @@ return damProjectData; } + private static void FillOutputTimeSeries(DamProjectData damProjectData) + { + const int timeSeriesCount = 2; + const int timeEntriesCount = 3; + const string idPipingBligh = "PipingFactorBligh"; + const string idStabilityInsideFactor = "StabilityInsideFactor"; + damProjectData.OutputTimeSerieCollection = new TimeSerieCollection(); + for (var i = 0; i < timeSeriesCount; i++) + { + string locationId = String.Format("location{0}", i); + TimeSerie timeSerie = damProjectData.OutputTimeSerieCollection.AddNewSeries(locationId); + timeSerie.ParameterId = (i % 2 == 0) ? idPipingBligh : idStabilityInsideFactor; + timeSerie.ForecastDateTime = DateTime.Now; + timeSerie.StartDateTime = new DateTime(2012, 12, 31); + timeSerie.EndDateTime = new DateTime(2012, 12, 31, 1, 0, 0); + timeSerie.MissVal = -9999.0; + timeSerie.Units = "m"; + for (var j = 0; j < timeEntriesCount; j++) + { + timeSerie.Entries.Add(new TimeSerieEntry + { + DateTime = new DateTime(2012, 12, 31, 1, j * 10, 0), + Value = 1 + j * 0.1 + }); + } + } + } + private DamProjectData CreateInputProjectDataForPiping() { var spec = new DamFailureMechanismeCalculationSpecification