Index: DamEngine/branches/DamEngine 18.1/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs =================================================================== diff -u -r1748 -r1750 --- DamEngine/branches/DamEngine 18.1/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs (.../DamEngine 18.1 Obsolete/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs) (revision 1748) +++ DamEngine/branches/DamEngine 18.1/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs (.../DamEngine 18.1/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs) (revision 1750) @@ -24,13 +24,18 @@ using System.IO; using Deltares.DamEngine.Data.Design; using Deltares.DamEngine.Data.General; +using Deltares.DamEngine.Data.General.Sensors; +using Deltares.DamEngine.Data.General.TimeSeries; using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.Io; using Deltares.DamEngine.Io.XmlInput; using KellermanSoftware.CompareNetObjects; using NUnit.Framework; using Segment = Deltares.DamEngine.Data.General.Segment; +using Sensor = Deltares.DamEngine.Data.General.Sensors.Sensor; +using SensorGroup = Deltares.DamEngine.Data.General.Sensors.SensorGroup; +using SensorLocation = Deltares.DamEngine.Data.General.Sensors.SensorLocation; using Soil = Deltares.DamEngine.Data.Geotechnics.Soil; using SoilProfile1D = Deltares.DamEngine.Data.Geotechnics.SoilProfile1D; using SoilProfile2D = Deltares.DamEngine.Data.Geotechnics.SoilProfile2D; @@ -81,6 +86,17 @@ CompareDamProjectData(actualDamProjectData, expectedDamProjectData); } + [Test] + public void CanAquiferListBeHandledOk() + { + const string inputFileName = @"TestFiles\AquiferListInputFile.xml"; + var input = DamXmlSerialization.LoadInputFromXmlFile(inputFileName); + Assert.AreEqual(28, input.AquiferSoils.Length); + DamProjectData actualDamProjectData = FillDamFromXmlInput.CreateDamProjectData(input); + Assert.AreEqual(11, actualDamProjectData.Dike.SoilList.AquiferDictionary.Count); + Assert.AreEqual(7, actualDamProjectData.CalculationMessages.Count); + } + private void AddPointToSurfaceLine(SurfaceLine2 surfaceLine, double xCoordinate, double zCoordinate, CharacteristicPointType characteristicPointType) { var geometryPoint = new GeometryPoint() @@ -110,9 +126,144 @@ FillSoilProfiles2D(dike); FillSegments(damProjectData); FillLocations(dike, damProjectData.Segments, damProjectData.ProjectPath); + FillInputTimeSeries(dike); + FillSensorData(damProjectData); + return damProjectData; } + private void FillSensorData(DamProjectData damProjectData) + { + damProjectData.SensorData = new SensorData(); // SensorLocations, Sensors and SensorGroups are automatically created + var sensorData = damProjectData.SensorData; + var sensor1 = new Sensor() + { + ID = 1, + Name = "Sensor 1", + RelativeLocation = 12.2, + SensorType = SensorType.WaterLevel, + PlLineMappings = new[] { PlLineType.Pl1 } + }; + sensorData.Sensors.Add(sensor1); + var sensor2 = new Sensor() + { + ID = 2, + Name = "Sensor 2", + RelativeLocation = 24.2, + SensorType = SensorType.PolderLevel, + PlLineMappings = new [] { PlLineType .Pl1} + }; + sensorData.Sensors.Add(sensor2); + var sensorGroup1 = new SensorGroup() + { + ID = 1, + SensorArray = new Sensor[] { sensor1, sensor2 } + }; + sensorData.SensorGroups.Add(sensorGroup1); + var sensorLocation1 = new SensorLocation() + { + Location = damProjectData.Dike.Locations[0], + SensorGroup = sensorGroup1, + SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.LocationData, + SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.LocationData, + SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Sensor, + SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Sensor, + SourceTypePl3 = DataSourceTypeSensors.Sensor, + SourceTypePl4 = DataSourceTypeSensors.Sensor, + SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.LocationData, + SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.LocationData + }; + damProjectData.Dike.Locations[0].SensorLocation = sensorLocation1; + sensorData.SensorLocations.Add(sensorLocation1); + + var sensor3 = new Sensor() + { + ID = 3, + Name = "Sensor 3", + RelativeLocation = 8.8, + SensorType = SensorType.PiezometricHead, + PlLineMappings = new [] { PlLineType.Pl3, PlLineType.Pl4} + }; + sensorData.Sensors.Add(sensor3); + var sensorGroup2 = new SensorGroup() + { + ID = 2, + SensorArray = new Sensor[] { sensor3 } + }; + sensorData.SensorGroups.Add(sensorGroup2); + var sensorLocation2 = new SensorLocation() + { + Location = damProjectData.Dike.Locations[0], + SensorGroup = sensorGroup1, + SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.LocationData, + SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.LocationData, + SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Sensor, + SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Sensor, + SourceTypePl3 = DataSourceTypeSensors.Sensor, + SourceTypePl4 = DataSourceTypeSensors.Sensor, + SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.LocationData, + SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.LocationData + }; + damProjectData.Dike.Locations[2].SensorLocation = sensorLocation2; + sensorData.SensorLocations.Add(sensorLocation2); + } + + private void FillInputTimeSeries(Dike dike) + { + const int timeSeriesCount = 2; + const int timeEntriesCount = 3; + const string idWaterLevel = "WaterLevel"; + const string idWaterPressure = "WaterPressure"; + dike.InputTimeSerieCollection = new TimeSerieCollection(); + for (int i = 0; i < timeSeriesCount; i++) + { + string locationId = String.Format("location{0}", i); + var timeSerie = dike.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++) @@ -172,7 +323,7 @@ dike.SoilList = new SoilList(); for (int i = 0; i < soilCount; i++) { - Soil soil = new Soil() {Name = String.Format("Soil {0}", i)}; + Soil soil = new Soil() { Name = String.Format("Soil {0}", i) }; //soil.SoilType = SoilType.Loam; soil.AbovePhreaticLevel = 7 + 0.1 * i; @@ -186,7 +337,7 @@ soil.Ocr = 14 + 0.1 * i; soil.SlopeRestProfile = 15 + 0.1 * i; soil.DilatancyType = DilatancyType.Zero; - + //soil.CuBottom = 11 + 0.1 * i; //soil.CuTop = 12 + 0.1 * i; //soil.PoP = 15 + 0.1 * i; @@ -254,8 +405,8 @@ var location = new Data.General.Location(); location.Name = "Location " + (i + 1).ToString(); location.XSoilGeometry2DOrigin = 1.23; - location.ModelParametersForPlLines.PlLineCreationMethod = (PlLineCreationMethod) i; - location.IntrusionVerticalWaterPressure = (IntrusionVerticalWaterPressureType) i; + location.ModelParametersForPlLines.PlLineCreationMethod = (PlLineCreationMethod)i; + location.IntrusionVerticalWaterPressure = (IntrusionVerticalWaterPressureType)i; location.PolderLevel = 1.0 * i + 0.11; location.PolderLevelLow = 1.0 * i + 0.09; location.ModelParametersForPlLines.DampingFactorPl4 = 1.0 * i + 0.12; @@ -311,7 +462,7 @@ location.RedesignDikeHeight = false; location.RedesignDikeShoulder = false; location.ShoulderEmbankmentMaterial = "ShoulderMat" + (i + 1).ToString(); ; - location.StabilityShoulderGrowSlope = 10.0 * i + 0.50; + location.StabilityShoulderGrowSlope = 10.0 * i + 0.50; location.StabilityShoulderGrowDeltaX = 10.0 * i + 0.51; location.StabilitySlopeAdaptionDeltaX = 10.0 * i + 0.52; location.SlopeAdaptionStartCotangent = 10.0 * i + 0.53; @@ -344,9 +495,9 @@ RequiredSafetyFactorPiping = 10.0 * i + 0.65, RequiredSafetyFactorStabilityInnerSlope = 10.0 * i + 0.66, RequiredSafetyFactorStabilityOuterSlope = 10.0 * i + 0.67, - UpliftCriterionStability = 10.0 * i + 0.68, + UpliftCriterionStability = 10.0 * i + 0.68, UpliftCriterionPiping = 10.0 * i + 0.69 - }; + }; dike.Locations.Add(location); } } @@ -441,7 +592,7 @@ { Name = "Layer" + (j + 1).ToString(), Soil = dike.SoilList.Soils[j] - + }; if (j < 2) {