Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/TestDataCreator.cs =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/TestDataCreator.cs (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/TestDataCreator.cs (revision 1990) @@ -0,0 +1,605 @@ +// Copyright (C) Stichting Deltares 2019. 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 System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +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.Interface; + +namespace Deltares.DamEngine.TestHelpers +{ + public class TestDataCreator + { + public const AnalysisType expectedAnalysisType = AnalysisType.AdaptGeometry; + public const AnalysisType notExpectedAnalysisType = AnalysisType.NoAdaption; + + public static DamProjectData CreateExampleDamProjectData() + { + var damProjectData = new DamProjectData(); + damProjectData.ProjectPath = @"D:\TestDir"; + damProjectData.CalculationMap = @"Sub\Calc"; + damProjectData.MaxCalculationCores = 3; + + FillAnalysisSpecification(damProjectData); + FillStabilityParameters(damProjectData); + + damProjectData.Dike = new Dike(); + Dike dike = damProjectData.Dike; + FillSurfaceLines(dike); + FillSoils(dike); + FillAquiferSoils(dike.SoilList); + FillSoilProfiles1D(dike); + FillSoilProfiles2D(dike); + FillSegments(damProjectData); + FillLocations(dike, damProjectData.Segments, damProjectData.ProjectPath); + FillInputTimeSeries(dike); + FillSensorData(damProjectData); + + return damProjectData; + } + private static 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 static 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 static void FillAquiferSoils(SoilList soilList) + { + for (int i = 0; i < soilList.Soils.Count; i++) + { + // All even indeces are set to true, all odd indices are set to false + soilList.AquiferDictionary.Add(soilList.Soils[i], (i % 2) == 0); + } + } + + private static void FillAnalysisSpecification(DamProjectData damProjectData) + { + damProjectData.DamProjectType = DamProjectType.Design; + damProjectData.DamProjectCalculationSpecification = new DamProjectCalculationSpecification(); + DamProjectCalculationSpecification.SelectedAnalysisType = expectedAnalysisType; + var calculationSpecification = new DamFailureMechanismeCalculationSpecification(); + calculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.Piping; + calculationSpecification.CalculationModel = PipingModelType.Bligh; + damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Add(calculationSpecification); + } + + private static void FillStabilityParameters(DamProjectData damProjectData) + { + // Note: DamProjectCalculationSpecification created and filled by FillAnalysisSpecification + var curspec = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; + curspec.FailureMechanismParametersMStab = new FailureMechanismParametersMStab + { + MStabParameters = new MStabParameters + { + SearchMethod = MStabSearchMethod.Grid, + SlipCircleDefinition = new SlipCircleDefinition + { + GridSizeDetermination = GridSizeDetermination.Specified, + BishopGridHorizontalPointCount = 4, + BishopGridHorizontalPointDistance = 1.2, + BishopGridVerticalPointCount = 5, + BishopGridVerticalPointDistance = 1.1, + BishopTangentLinesDefinition = TangentLinesDefinition.Specified, + BishopTangentLinesDistance = 0.25, + UpliftVanLeftGridHorizontalPointCount = 6, + UpliftVanLeftGridHorizontalPointDistance = 0.7, + UpliftVanLeftGridVerticalPointCount = 3, + UpliftVanLeftGridVerticalPointDistance = 1.3, + UpliftVanRightGridHorizontalPointCount = 8, + UpliftVanRightGridHorizontalPointDistance = 1.76, + UpliftVanRightGridVerticalPointCount = 11, + UpliftVanRightGridVerticalPointDistance = 0.14, + UpliftVanTangentLinesDefinition = TangentLinesDefinition.OnBoundaryLines, + UpliftVanTangentLinesDistance = 0.01 + } + } + }; + } + + private static void FillSoils(Dike dike) + { + const int soilCount = 3; + dike.SoilList = new SoilList(); + for (int i = 0; i < soilCount; i++) + { + Soil soil = new Soil() { Name = String.Format("Soil {0}", i) }; + //soil.SoilType = SoilType.Loam; + + soil.AbovePhreaticLevel = 7 + 0.1 * i; + soil.BelowPhreaticLevel = 8 + 0.1 * i; + soil.DryUnitWeight = 9 + 0.1 * i; + + soil.ShearStrengthModel = ShearStrengthModel.SuMeasured; + soil.UseDefaultShearStrengthModel = false; + soil.Cohesion = 10 + 0.1 * i; + soil.FrictionAngle = 13 + 0.1 * i; + 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; + //soil.RatioCuPc = 16 + 0.1 * i; + //soil.StrengthIncreaseExponent = 17 + 0.1 * i; + //soil.UsePop = true; + + soil.BeddingAngle = 18 + 0.1 * i; + soil.DiameterD70 = 19 + 0.1 * i; + soil.DiameterD90 = 20 + 0.1 * i; + soil.PermeabKx = 21 + 0.1 * i; + soil.WhitesConstant = 22 + 0.1 * i; + soil.SoilType = ConversionHelper.ConvertToSoilType(i); + + dike.SoilList.Add(soil); + } + var dikemat = new Soil + { + Name = "DikeMat", + AbovePhreaticLevel = 7, + BelowPhreaticLevel = 8, + DryUnitWeight = 9, + BeddingAngle = 18, + DiameterD70 = 19, + DiameterD90 = 20, + PermeabKx = 21, + WhitesConstant = 22 + }; + dike.SoilList.Add(dikemat); + } + + private static void FillSurfaceLines(Dike dike) + { + const int surfaceLineCount = 3; + for (int i = 0; i < surfaceLineCount; i++) + { + var surfaceLine = new SurfaceLine2(); + surfaceLine.Name = String.Format("SurfaceLine {0}", i); + surfaceLine.CharacteristicPoints.Geometry = surfaceLine.Geometry; + AddPointsToSurfaceLines(surfaceLine); + surfaceLine.Geometry.SyncCalcPoints(); + dike.SurfaceLines2.Add(surfaceLine); + } + } + + private static void AddPointToSurfaceLine(SurfaceLine2 surfaceLine, double xCoordinate, double zCoordinate, CharacteristicPointType characteristicPointType) + { + var geometryPoint = new GeometryPoint() + { + X = xCoordinate, + Y = 0.0, + Z = zCoordinate, + }; + surfaceLine.AddCharacteristicPoint(geometryPoint, characteristicPointType); + } + + private static void AddPointsToSurfaceLines(SurfaceLine2 surfaceLine) + { + AddPointToSurfaceLine(surfaceLine, 0.0, 0.0, CharacteristicPointType.SurfaceLevelOutside); + AddPointToSurfaceLine(surfaceLine, 2.0, 0.5, CharacteristicPointType.None); + AddPointToSurfaceLine(surfaceLine, 4.0, 0.0, CharacteristicPointType.DikeToeAtRiver); + AddPointToSurfaceLine(surfaceLine, 9.0, 5.0, CharacteristicPointType.DikeTopAtRiver); + AddPointToSurfaceLine(surfaceLine, 10.0, 5.2, CharacteristicPointType.None); + AddPointToSurfaceLine(surfaceLine, 13.0, 5.4, CharacteristicPointType.DikeTopAtPolder); + AddPointToSurfaceLine(surfaceLine, 13.0, 5.4, CharacteristicPointType.TrafficLoadOutside); + AddPointToSurfaceLine(surfaceLine, 14.0, 4.52, CharacteristicPointType.TrafficLoadInside); + AddPointToSurfaceLine(surfaceLine, 18.0, 1.0, CharacteristicPointType.DikeToeAtPolder); + AddPointToSurfaceLine(surfaceLine, 24.0, 1.0, CharacteristicPointType.SurfaceLevelInside); + } + + private static void FillLocations(Dike dike, IList segments, string projectPath) + { + const int locationCount = 3; + for (int i = 0; i < locationCount; i++) + { + var location = new Location(); + location.Name = "Location " + (i + 1).ToString(); + location.XSoilGeometry2DOrigin = 1.23; + 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; + location.ModelParametersForPlLines.DampingFactorPl3 = 1.0 * i + 0.13; + location.ModelParametersForPlLines.PenetrationLength = 1.0 * i + 0.14; + location.PlLineOffsetBelowDikeCrestMiddle = 1.0 * i + 0.15; + location.UsePlLineOffsetFactorBelowShoulderCrest = true; + location.PlLineOffsetFactorBelowShoulderCrest = 1.0 * i + 0.16; + location.PlLineOffsetDryBelowDikeCrestMiddle = 1.0 * i + 0.17; + location.UsePlLineOffsetDryFactorBelowShoulderCrest = true; + location.PlLineOffsetDryFactorBelowShoulderCrest = 1.0 * i + 0.18; + location.SlopeDampingPiezometricHeightPolderSide = 1.0 * i + 0.19; + location.PlLineOffsetBelowDikeTopAtRiver = 1.0 * i + 0.20; + location.PlLineOffsetBelowDikeTopAtPolder = 1.0 * i + 0.21; + location.PlLineOffsetBelowShoulderBaseInside = 1.0 * i + 0.22; + location.PlLineOffsetBelowDikeToeAtPolder = 1.0 * i + 0.23; + location.PlLineOffsetDryBelowDikeTopAtRiver = 1.0 * i + 0.24; + location.PlLineOffsetDryBelowDikeTopAtPolder = 1.0 * i + 0.25; + location.PlLineOffsetDryBelowShoulderBaseInside = 1.0 * i + 0.26; + location.PlLineOffsetDryBelowDikeToeAtPolder = 1.0 * i + 0.27; + location.HeadPl2 = 1.0 * i + 0.28; + location.HeadPl3 = 1.0 * i + 0.29; + location.HeadPl4 = 1.0 * i + 0.30; + location.DikeSoilScenario = (DikeSoilScenario)i; + // Used for regional assessment + location.DikeTableHeight = 1.0 * i + 0.31; + location.BoezemLevelHbp = 1.0 * i + 0.32; + location.BoezemLevelLbp = 1.0 * i + 0.33; + location.BoezemLevelTp = 1.0 * i + 0.34; + location.RwBankProtectionBottomLevel = 1.0 * i + 0.35; + location.DredgingDepth = 1.0 * i + 0.36; + location.DetrimentFactor = 1.0 * i + 0.37; + location.DikeMaterialType = SoilType.Loam; + + location.SurfaceLine = dike.SurfaceLines2[i]; + location.Segment = segments[i % 2]; // alternate between the 2 available segments + for (int j = 0; j < 3; j++) + { + var designScenario = FillDesignScenario(i, j); + designScenario.Location = location; + location.Scenarios.Add(designScenario); + } + location.DikeEmbankmentMaterial = "DikeMat"; + location.StabilityOptions = new StabilityOptions + { + SoilGeometries2DPath = Path.Combine(projectPath, @"Sub\TestMap"), + StabilityZoneType = MStabZonesType.ZoneAreas, + ForbiddenZoneFactor = 1.23, + ZoneAreaRestSlopeCrestWidth = 8.23, + TrafficLoad = 11.11, + MinimalCircleDepth = 1.21, + SoilDatabaseName = "test.mdb", + }; + location.RedesignDikeHeight = false; + location.RedesignDikeShoulder = false; + location.ShoulderEmbankmentMaterial = "ShoulderMat" + (i + 1).ToString(); ; + 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; + location.SlopeAdaptionEndCotangent = 10.0 * i + 0.54; + location.SlopeAdaptionStepCotangent = 10.0 * i + 0.55; + location.UseNewDikeTopWidth = true; + location.UseNewDikeSlopeInside = true; + location.UseNewDikeSlopeOutside = true; + location.UseNewShoulderTopSlope = true; + location.UseNewShoulderBaseSlope = true; + location.UseNewMaxHeightShoulderAsFraction = true; + location.UseNewMinDistanceDikeToeStartDitch = true; + location.UseNewDitchDefinition = true; + location.NewDikeTopWidth = 10.0 * i + 0.56; + location.NewDikeSlopeInside = 10.0 * i + 0.57; + location.NewDikeSlopeOutside = 10.0 * i + 0.58; + location.NewShoulderTopSlope = 10.0 * i + 0.59; + location.NewShoulderBaseSlope = 10.0 * i + 0.60; + location.NewMaxHeightShoulderAsFraction = 10.0 * i + 0.61; + location.NewMinDistanceDikeToeStartDitch = 10.0 * i + 0.62; + location.UseNewDitchDefinition = true; + location.NewWidthDitchBottom = 10.0 * i + 0.63; + location.NewSlopeAngleDitch = 10.0 * i + 0.64; + location.NewDepthDitch = 10.0 * i + 0.65; + location.StabilityDesignMethod = StabilityDesignMethod.SlopeAdaptionBeforeShoulderAdaption; + location.SoilList = dike.SoilList; + // ModelFactors + location.ModelFactors = new ModelFactors() + { + RequiredSafetyFactorPiping = 10.0 * i + 0.65, + RequiredSafetyFactorStabilityInnerSlope = 10.0 * i + 0.66, + RequiredSafetyFactorStabilityOuterSlope = 10.0 * i + 0.67, + UpliftCriterionStability = 10.0 * i + 0.68, + UpliftCriterionPiping = 10.0 * i + 0.69 + }; + dike.Locations.Add(location); + } + } + + private static void FillSoilProfiles1D(Dike dike) + { + dike.SoilProfiles = new List(); + const int profilesCount = 2; + for (int i = 0; i < profilesCount; i++) + { + var profile = new SoilProfile1D(); + profile.Name = "Profile1D " + (i + 1).ToString(); + profile.BottomLevel = -21.12 * (i + 1); + const int layerCount = 3; + for (int j = 0; j < layerCount; j++) + { + var layer = new SoilLayer1D + { + Name = "Layer" + (j + 1).ToString(), + Soil = dike.SoilList.Soils[j], + TopLevel = 1 * -j + }; + if (j < 2) + { + layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Automatic; + layer.IsAquifer = false; + } + else + { + layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Hydrostatic; + layer.IsAquifer = true; + } + profile.Layers.Add(layer); + } + dike.SoilProfiles.Add(profile); + } + } + private static DesignScenario FillDesignScenario(int locationIndex, int scenarioIndex) + { + // The parameter factor is used to create unique data for the design scenario + int factor = (locationIndex + 1) * (scenarioIndex + 1); + var designScenario = new DesignScenario(); + designScenario.LocationScenarioID = scenarioIndex.ToString(); + designScenario.RiverLevel = 1.0 * factor + 0.51; + designScenario.RiverLevelLow = 1.0 * factor + 0.52; + designScenario.DikeTableHeight = 1.0 * factor + 0.53; + designScenario.PlLineOffsetBelowDikeTopAtRiver = 1.0 * factor + 0.54; + designScenario.PlLineOffsetBelowDikeTopAtPolder = 1.0 * factor + 0.55; + designScenario.PlLineOffsetBelowShoulderBaseInside = 1.0 * factor + 0.56; + designScenario.PlLineOffsetBelowDikeToeAtPolder = 1.0 * factor + 0.57; + designScenario.PlLineOffsetBelowDikeCrestMiddle = 1.0 * factor + 0.58; + designScenario.UsePlLineOffsetBelowDikeCrestMiddle = true; + designScenario.PlLineOffsetFactorBelowShoulderCrest = 1.0 * factor + 0.59; + designScenario.UsePlLineOffsetFactorBelowShoulderCrest = true; + designScenario.HeadPl3 = 1.0 * factor + 0.60; + designScenario.HeadPl4 = 1.0 * factor + 0.61; + designScenario.UpliftCriterionStability = 1.0 * factor + 0.62; + designScenario.UpliftCriterionPiping = 1.0 * factor + 0.63; + designScenario.RequiredSafetyFactorStabilityInnerSlope = 1.0 * factor + 0.64; + designScenario.RequiredSafetyFactorStabilityOuterSlope = 1.0 * factor + 0.65; + designScenario.RequiredSafetyFactorPiping = 1.0 * factor + 0.66; + return designScenario; + } + + private static void FillSoilProfiles2D(Dike dike) + { + dike.SoilProfiles2D = new List(); + const int profilesCount = 2; + for (int i = 0; i < profilesCount; i++) + { + var profile = new SoilProfile2D + { + Name = "Profile2D " + (i + 1).ToString() + }; + + const int preConCount = 2; + for (int j = 0; j < preConCount; j++) + { + var preCon = new PreConsolidationStress + { + Name = "Precon " + (j + 1).ToString(), + StressValue = 3.33 * (i + 1) * (j + 1), + X = 12.3 * (i + 1) * (j + 1), + Z = 0.3 * (-i - 1) * (j + 1) + }; + profile.PreconsolidationStresses.Add(preCon); + } + const int layerCount = 3; + for (int j = 0; j < layerCount; j++) + { + var layer = new SoilLayer2D + { + Name = "Layer" + (j + 1).ToString(), + Soil = dike.SoilList.Soils[j] + + }; + if (j < 2) + { + layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Automatic; + layer.IsAquifer = false; + } + else + { + layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Hydrostatic; + layer.IsAquifer = true; + } + layer.GeometrySurface = new GeometrySurface(); + var outerLoop = new GeometryLoop(); + outerLoop.Points.Add((new GeometryPoint(0, 0))); + outerLoop.Points.Add((new GeometryPoint(0, 10))); + outerLoop.Points.Add((new GeometryPoint(10, 10))); + layer.GeometrySurface.OuterLoop = outerLoop; + var innerloop = new GeometryLoop(); + innerloop.Points.Add((new GeometryPoint(1, 1))); + innerloop.Points.Add((new GeometryPoint(1, 9))); + innerloop.Points.Add((new GeometryPoint(9, 9))); + layer.GeometrySurface.InnerLoops.Add(innerloop); + profile.Surfaces.Add(layer); + } + dike.SoilProfiles2D.Add(profile); + } + } + + private static void FillSegments(DamProjectData damProjectData) + { + var segmentCount = 2; + for (int i = 0; i < segmentCount; i++) + { + var segment = new Segment(); + segment.Name = "Segment " + i.ToString(); + var soilProfileProbability = new SoilGeometryProbability(); + if (i == 0) + { + soilProfileProbability.SegmentFailureMechanismType = FailureMechanismSystemType.StabilityInside; + soilProfileProbability.SoilProfile2DName = "Profile2D " + (i + 1).ToString(); + soilProfileProbability.SoilProfile2D = FillDamFromXmlInput.FindSoilProfile2DByName(damProjectData.Dike.SoilProfiles2D, + soilProfileProbability.SoilProfile2DName); + if (soilProfileProbability.SoilProfile2D != null) + { + soilProfileProbability.SoilProfileType = SoilProfileType.ProfileType2D; + } + else + { + soilProfileProbability.SoilProfileType = SoilProfileType.ProfileTypeStiFile; + } + } + else + { + soilProfileProbability.SegmentFailureMechanismType = FailureMechanismSystemType.Piping; + soilProfileProbability.SoilProfile1DName = "Profile1D " + (i + 1).ToString(); + soilProfileProbability.SoilProfile1D = FillDamFromXmlInput.FindSoilProfile1DByName(damProjectData.Dike.SoilProfiles, + soilProfileProbability.SoilProfile1DName); + soilProfileProbability.SoilProfileType = SoilProfileType.ProfileType1D; + } + soilProfileProbability.Probability = 0.003 * (i + 1); + segment.SoilProfileProbabilities.Add(soilProfileProbability); + damProjectData.Segments.Add(segment); + } + } + } +} Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Deltares.DamEngine.TestHelpers.csproj =================================================================== diff -u -r1497 -r1990 --- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Deltares.DamEngine.TestHelpers.csproj (.../Deltares.DamEngine.TestHelpers.csproj) (revision 1497) +++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Deltares.DamEngine.TestHelpers.csproj (.../Deltares.DamEngine.TestHelpers.csproj) (revision 1990) @@ -43,6 +43,7 @@ + @@ -55,6 +56,10 @@ {B7A49C1A-1C91-4D72-ABA9-9FBAC2509D8E} Deltares.DamEngine.Data + + {750464A3-CBFA-429F-920E-B430867F1120} + Deltares.DamEngine.Interface +