Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs =================================================================== diff -u -r1545 -r1571 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 1545) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 1571) @@ -69,9 +69,63 @@ TransferSoilProfiles1D(input.SoilProfiles1D, dike.SoilProfiles, dike.SoilList); TransferSegments(input.Segments, dike.SoilProfiles, damProjectData.WaterBoard.Segments); TransferLocations(input.Locations, dike.Locations, localSurfaceLines, damProjectData.WaterBoard.Segments); + if (input.OperationalInputTimeSeries != null) + { + damProjectData.InputTimeSerieCollection = new TimeSerieCollection(); + TransferInputTimeSeries(input.OperationalInputTimeSeries, damProjectData.InputTimeSerieCollection); + } return damProjectData; } + private static void TransferInputTimeSeries(DamEngine.Io.XmlInput.TimeSerie[] inputOperationalInputTimeSeries, TimeSerieCollection timeSerieCollection) + { + foreach (var inputTimeSerie in inputOperationalInputTimeSeries) + { + var timeSerie = timeSerieCollection.AddNewSeries(inputTimeSerie.LocationId); + timeSerie.ParameterId = inputTimeSerie.ParameterId; + timeSerie.ForecastDateTime = inputTimeSerie.ForecastDateTime; + timeSerie.Type = inputTimeSerie.Type; + timeSerie.StartDateTime = inputTimeSerie.StartDateTime; + timeSerie.EndDateTime = inputTimeSerie.EndDateTime; + timeSerie.MissVal = inputTimeSerie.MissVal; + timeSerie.LongName = inputTimeSerie.LongName; + timeSerie.StationName = inputTimeSerie.StationName; + timeSerie.Units = inputTimeSerie.Units; + timeSerie.SourceOrganisation = inputTimeSerie.SourceOrganisation; + timeSerie.SourceSystem = inputTimeSerie.SourceSystem; + timeSerie.FileDescription = inputTimeSerie.FileDescription; + timeSerie.Region = inputTimeSerie.Region; + timeSerie.TimeStep.Multiplier = inputTimeSerie.TimeStep.Multiplier; + timeSerie.TimeStep.Divider = inputTimeSerie.TimeStep.Divider; + timeSerie.TimeStep.MultiplierSpecified = inputTimeSerie.TimeStep.MultiplierSpecified1; + timeSerie.TimeStep.DividerSpecified = inputTimeSerie.TimeStep.DividerSpecified1; + timeSerie.TimeStep.Unit = ConversionHelper.ConvertToTimeStepUnit(inputTimeSerie.TimeStep.TimeStepUnit); + for (int i = 0; i < inputTimeSerie.Entries.TimeSerieEntry.Length; i++) + { + var entry = inputTimeSerie.Entries.TimeSerieEntry[i]; + Stochast stochastValue = null; + if (entry.StochastValue != null) + { + stochastValue = new Stochast() + { + Distribution = entry.StochastValue.Distribution, + Mean = entry.StochastValue.Mean, + StandardDeviation = entry.StochastValue.StandardDeviation + }; + } + TimeSerieEntry timeSerieEntry = new TimeSerieEntry() + { + DateTime = entry.DateTime, + Value = entry.Value, + BasisFileName = entry.BasisFileNameWMF, + Flag = entry.Flagnietechtgebruikt, + RelativeCalculationPathName = entry.RelativeCalculationPathName, + StochastValue = stochastValue + }; + timeSerie.Entries.Add(timeSerieEntry); + } + } + } private static void TransferAquiferSoils(InputAquiferSoil[] inputAquiferSoils, SoilList soilList) { if (inputAquiferSoils != null) Index: DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/ConversionHelperTests.cs =================================================================== diff -u -r1231 -r1571 --- DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 1231) +++ DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 1571) @@ -593,5 +593,33 @@ { Assert.AreEqual(stabilityModelType, ConversionHelper.ConvertToStabilityModelType(outputStabilityModelType)); } + + [Test] + [TestCase(ConversionHelper.TimeStepUnitSecond, TimeStepUnit.Second)] + [TestCase(ConversionHelper.TimeStepUnitMinute, TimeStepUnit.Minute)] + [TestCase(ConversionHelper.TimeStepUnitHour, TimeStepUnit.Hour)] + [TestCase(ConversionHelper.TimeStepUnitDay, TimeStepUnit.Day)] + [TestCase(ConversionHelper.TimeStepUnitMonth, TimeStepUnit.Month)] + [TestCase(ConversionHelper.TimeStepUnitWeek, TimeStepUnit.Week)] + [TestCase(ConversionHelper.TimeStepUnitYear, TimeStepUnit.Year)] + [TestCase(ConversionHelper.TimeStepUnitNonequidistant, TimeStepUnit.Nonequidistant)] + public void CanConvertToTimeStepUnit(uint inputTimeStepUnit, TimeStepUnit timeStepUnit) + { + Assert.AreEqual(timeStepUnit, ConversionHelper.ConvertToTimeStepUnit(inputTimeStepUnit)); + } + + [Test] + [TestCase(TimeStepUnit.Second, ConversionHelper.TimeStepUnitSecond)] + [TestCase(TimeStepUnit.Minute, ConversionHelper.TimeStepUnitMinute)] + [TestCase(TimeStepUnit.Hour, ConversionHelper.TimeStepUnitHour)] + [TestCase(TimeStepUnit.Day, ConversionHelper.TimeStepUnitDay)] + [TestCase(TimeStepUnit.Month, ConversionHelper.TimeStepUnitMonth)] + [TestCase(TimeStepUnit.Week, ConversionHelper.TimeStepUnitWeek)] + [TestCase(TimeStepUnit.Year, ConversionHelper.TimeStepUnitYear)] + [TestCase(TimeStepUnit.Nonequidistant, ConversionHelper.TimeStepUnitNonequidistant)] + public void CanConvertToInputTimeStepUnit(TimeStepUnit timeStepUnit, uint inputTimeStepUnit) + { + Assert.AreEqual(inputTimeStepUnit, ConversionHelper.ConvertToInputTimeStepUnit(timeStepUnit)); + } } } Index: DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs =================================================================== diff -u -r1407 -r1571 --- DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 1407) +++ DamClients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 1571) @@ -105,9 +105,66 @@ { locationJob.Run = true; } + FillInputTimeSeries(damProjectData); return damProjectData; } + 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 (int i = 0; i < timeSeriesCount; i++) + { + string locationId = String.Format("location{0}", i); + var timeSerie = damProjectData.InputTimeSerieCollection.AddNewSeries(locationId); + timeSerie.ParameterId = (i % 2 == 0) ? idWaterLevel : idWaterPressure; + timeSerie.ForecastDateTime = DateTime.Now; + timeSerie.Type = "instantaneous"; + timeSerie.StartDateTime = new DateTime(2012, 12, 31); + timeSerie.EndDateTime = new DateTime(2012, 12, 31, 1, 0, 0); + timeSerie.MissVal = -9999.0; + timeSerie.LongName = timeSerie.LocationId + "long"; + timeSerie.StationName = String.Format("station{0}", i); + timeSerie.Units = "m"; + timeSerie.SourceOrganisation = String.Format("organisation{0}", i); + timeSerie.SourceSystem = String.Format("system{0}", i); + timeSerie.FileDescription = String.Format("filedescription{0}", i); + timeSerie.Region = String.Format("region{0}", i); + if ((i % 2 == 0)) + { + timeSerie.TimeStep.Multiplier = 3600; + timeSerie.TimeStep.Unit = TimeStepUnit.Second; + } + else + { + timeSerie.TimeStep.Divider = 24; + timeSerie.TimeStep.Unit = TimeStepUnit.Day; + } + for (int j = 0; j < timeEntriesCount; j++) + { + Stochast stochastValue = new Stochast() + { + Mean = 1.0 * j, + Distribution = j, + StandardDeviation = 0.1 * j + }; + timeSerie.Entries.Add(new TimeSerieEntry + { + + DateTime = new DateTime(2012, 12, 31, 1, j * 10, 0), + Value = j, + Flag = 1, + BasisFileName = String.Format("BasisFileName{0}", i), + RelativeCalculationPathName = String.Format("RelativeCalculationPathName{0}", i), + StochastValue = stochastValue + }); + } + } + } + private void FillAquiferSoils(SoilList soilList) { for (int i = 0; i < soilList.Soils.Count; i++) Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs =================================================================== diff -u -r1545 -r1571 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 1545) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 1571) @@ -98,9 +98,74 @@ input.Segments = new DamEngine.Io.XmlInput.Segment[localSegments.Count]; TransferSegments(localSegments, input.Segments); } + + if (damProjectData.InputTimeSerieCollection != null) + { + input.OperationalInputTimeSeries = new DamEngine.Io.XmlInput.TimeSerie[damProjectData.InputTimeSerieCollection.Series.Count]; + TransferInputTimeSeries(damProjectData.InputTimeSerieCollection, input.OperationalInputTimeSeries); + } + return input; } + private static void TransferInputTimeSeries(TimeSerieCollection inputTimeSerieCollection, DamEngine.Io.XmlInput.TimeSerie[] operationalInputTimeSeries) + { + int timeSerieIndex = 0; + foreach (var timeSerie in inputTimeSerieCollection.Series) + { + var inputTimeSerie = new DamEngine.Io.XmlInput.TimeSerie(); + inputTimeSerie.Entries = new TimeSerieEntries(); + inputTimeSerie.Entries.TimeSerieEntry = new TimeSerieEntriesTimeSerieEntry[timeSerie.Entries.Count]; + inputTimeSerie.TimeStep = new TimeSerieTimeStep(); + inputTimeSerie.LocationId = timeSerie.LocationId; + inputTimeSerie.ParameterId = timeSerie.ParameterId; + inputTimeSerie.ForecastDateTime = timeSerie.ForecastDateTime; + inputTimeSerie.Type = timeSerie.Type; + inputTimeSerie.StartDateTime = timeSerie.StartDateTime; + inputTimeSerie.EndDateTime = timeSerie.EndDateTime; + inputTimeSerie.MissVal = timeSerie.MissVal; + inputTimeSerie.LongName = timeSerie.LongName; + inputTimeSerie.StationName = timeSerie.StationName; + inputTimeSerie.Units = timeSerie.Units; + inputTimeSerie.SourceOrganisation = timeSerie.SourceOrganisation; + inputTimeSerie.SourceSystem = timeSerie.SourceSystem; + inputTimeSerie.FileDescription = timeSerie.FileDescription; + inputTimeSerie.Region = timeSerie.Region; + inputTimeSerie.TimeStep.Multiplier = timeSerie.TimeStep.Multiplier; + inputTimeSerie.TimeStep.Divider = timeSerie.TimeStep.Divider; + inputTimeSerie.TimeStep.MultiplierSpecified1 = timeSerie.TimeStep.MultiplierSpecified; + inputTimeSerie.TimeStep.DividerSpecified1 = timeSerie.TimeStep.DividerSpecified; + inputTimeSerie.TimeStep.TimeStepUnit = ConversionHelper.ConvertToInputTimeStepUnit(timeSerie.TimeStep.Unit); + int timeSerieEntryIndex = 0; + foreach (var timestepEntry in timeSerie.Entries) + { + TimeSerieEntriesTimeSerieEntryStochastValue stochastValue = null; + if (timestepEntry.StochastValue != null) + { + stochastValue = new TimeSerieEntriesTimeSerieEntryStochastValue() + { + Distribution = timestepEntry.StochastValue.Distribution, + Mean = timestepEntry.StochastValue.Mean, + StandardDeviation = timestepEntry.StochastValue.StandardDeviation + }; + TimeSerieEntriesTimeSerieEntry timeStep = new TimeSerieEntriesTimeSerieEntry() + { + DateTime = timestepEntry.DateTime, + Value = timestepEntry.Value, + BasisFileNameWMF = timestepEntry.BasisFileName, + Flagnietechtgebruikt = timestepEntry.Flag, + RelativeCalculationPathName = timestepEntry.RelativeCalculationPathName, + StochastValue = stochastValue + }; + inputTimeSerie.Entries.TimeSerieEntry[timeSerieEntryIndex] = timeStep; + timeSerieEntryIndex++; + } + } + operationalInputTimeSeries[timeSerieIndex] = inputTimeSerie; + timeSerieIndex++; + } + } + private static void TransferAquiferSoils(Dictionary aquiferDictionary, Input input) { InputAquiferSoil[] aquiferSoils; Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProjectData.cs =================================================================== diff -u -r1545 -r1571 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProjectData.cs (.../DamProjectData.cs) (revision 1545) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProjectData.cs (.../DamProjectData.cs) (revision 1571) @@ -56,6 +56,8 @@ private string dataSourceEsriProjection = null; private SensorData sensorData; private int maxCalculationCores = 1; + private TimeSerieCollection inputTimeSerieCollection = null; + private TimeSerieCollection outputTimeSerieCollection = null; /// /// Constructor @@ -562,6 +564,42 @@ set { sensorData = value; } } + /// + /// Gets or sets the input time serie collection. + /// + /// + /// The input time serie collection. + /// + public TimeSerieCollection InputTimeSerieCollection + { + get + { + return inputTimeSerieCollection; + } + set + { + inputTimeSerieCollection = value; + } + } + + /// + /// Gets or sets the output time serie collection. + /// + /// + /// The output time serie collection. + /// + public TimeSerieCollection OutputTimeSerieCollection + { + get + { + return outputTimeSerieCollection; + } + set + { + outputTimeSerieCollection = value; + } + } + public EvaluationJob GetEvaluationJob() { EvaluationJob evaluationJob = new EvaluationJob(); Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/ConversionHelper.cs =================================================================== diff -u -r1545 -r1571 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/ConversionHelper.cs (.../ConversionHelper.cs) (revision 1545) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/ConversionHelper.cs (.../ConversionHelper.cs) (revision 1571) @@ -1136,5 +1136,59 @@ }; return translationTable[regionalResultType]; } + + /// + /// Constants for translating to Enums TimeStepUnit + /// + public const uint TimeStepUnitSecond = 0; + public const uint TimeStepUnitMinute = 1; + public const uint TimeStepUnitHour = 2; + public const uint TimeStepUnitDay = 3; + public const uint TimeStepUnitMonth = 4; + public const uint TimeStepUnitWeek = 5; + public const uint TimeStepUnitYear = 6; + public const uint TimeStepUnitNonequidistant = 7; + + /// + /// Converts the input TimeStepUnit to the TimeStepUnit. + /// + /// The time step unit. + /// + public static TimeStepUnit ConvertToTimeStepUnit(uint timeStepUnit) + { + var translationTable = new Dictionary() + { + {TimeStepUnitSecond, TimeStepUnit.Second}, + {TimeStepUnitMinute, TimeStepUnit.Minute}, + {TimeStepUnitHour, TimeStepUnit.Hour}, + {TimeStepUnitDay, TimeStepUnit.Day}, + {TimeStepUnitMonth, TimeStepUnit.Month}, + {TimeStepUnitWeek, TimeStepUnit.Week}, + {TimeStepUnitYear, TimeStepUnit.Year}, + {TimeStepUnitNonequidistant, TimeStepUnit.Nonequidistant}, + }; + return translationTable[timeStepUnit]; + } + + /// + /// Converts the TimeStepUnit to the input TimeStepUnit. + /// + /// The time step unit. + /// + public static uint ConvertToInputTimeStepUnit(TimeStepUnit timeStepUnit) + { + var translationTable = new Dictionary() + { + {TimeStepUnit.Second, TimeStepUnitSecond}, + {TimeStepUnit.Minute, TimeStepUnitMinute}, + {TimeStepUnit.Hour, TimeStepUnitHour}, + {TimeStepUnit.Day, TimeStepUnitDay}, + {TimeStepUnit.Month, TimeStepUnitMonth}, + {TimeStepUnit.Week, TimeStepUnitWeek}, + {TimeStepUnit.Year, TimeStepUnitYear}, + {TimeStepUnit.Nonequidistant, TimeStepUnitNonequidistant}, + }; + return translationTable[timeStepUnit]; + } } }