Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/FillXmlInputFromDam.cs =================================================================== diff -u -r4000 -r4052 --- DamEngine/trunk/src/Deltares.DamEngine.Interface/FillXmlInputFromDam.cs (.../FillXmlInputFromDam.cs) (revision 4000) +++ DamEngine/trunk/src/Deltares.DamEngine.Interface/FillXmlInputFromDam.cs (.../FillXmlInputFromDam.cs) (revision 4052) @@ -42,809 +42,808 @@ using SoilProfile2D = Deltares.DamEngine.Data.Geotechnics.SoilProfile2D; using TimeSerie = Deltares.DamEngine.Io.XmlInput.TimeSerie; -namespace Deltares.DamEngine.Interface +namespace Deltares.DamEngine.Interface; + +public class FillXmlInputFromDam { - public class FillXmlInputFromDam + /// + /// Creates the input from Dam data. + /// + /// The dam project data. + /// + public static Input CreateInput(DamProjectData damProjectData) { - /// - /// Creates the input from Dam data. - /// - /// The dam project data. - /// - public static Input CreateInput(DamProjectData damProjectData) + ValidateDamProjectData(damProjectData); + + var input = new Input(); + input.ProjectPath = damProjectData.ProjectPath; + input.CalculationMap = damProjectData.CalculationMap; + input.MaxCalculationCoresSpecified = true; + input.MaxCalculationCores = damProjectData.MaxCalculationCores; + TransferAnalysisSpecification(damProjectData, input); + TransferStabilityParameters(damProjectData, input); + + Dike dike = damProjectData.Dike; + input.Locations = new Io.XmlInput.Location[dike.Locations.Count]; + TransferLocations(damProjectData.ProjectPath, dike.Locations, input.Locations); + input.SurfaceLines = new SurfaceLine[dike.SurfaceLines2.Count]; + TransferSurfaceLines(dike.SurfaceLines2, input.SurfaceLines); + input.Soils = new Io.XmlInput.Soil[dike.SoilList.Soils.Count]; + TransferSoils(dike.SoilList.Soils, input.Soils); + TransferAquiferSoils(dike.SoilList.AquiferDictionary, input); + if (dike.SoilProfiles != null) { - ValidateDamProjectData(damProjectData); + int profilesCount = dike.SoilProfiles.Count; + input.SoilProfiles1D = new Io.XmlInput.SoilProfile1D[profilesCount]; + TransferSoilProfiles1D(dike.SoilProfiles, input.SoilProfiles1D); + } - var input = new Input(); - input.ProjectPath = damProjectData.ProjectPath; - input.CalculationMap = damProjectData.CalculationMap; - input.MaxCalculationCoresSpecified = true; - input.MaxCalculationCores = damProjectData.MaxCalculationCores; - TransferAnalysisSpecification(damProjectData, input); - TransferStabilityParameters(damProjectData, input); + if (dike.SoilProfiles2D != null) + { + int profilesCount = dike.SoilProfiles2D.Count; + input.SoilProfiles2D = new Io.XmlInput.SoilProfile2D[profilesCount]; + TransferSoilProfiles2D(dike.SoilProfiles2D, input.SoilProfiles2D); + } - Dike dike = damProjectData.Dike; - input.Locations = new Io.XmlInput.Location[dike.Locations.Count]; - TransferLocations(damProjectData.ProjectPath, dike.Locations, input.Locations); - input.SurfaceLines = new SurfaceLine[dike.SurfaceLines2.Count]; - TransferSurfaceLines(dike.SurfaceLines2, input.SurfaceLines); - input.Soils = new Io.XmlInput.Soil[dike.SoilList.Soils.Count]; - TransferSoils(dike.SoilList.Soils, input.Soils); - TransferAquiferSoils(dike.SoilList.AquiferDictionary, input); - if (dike.SoilProfiles != null) - { - int profilesCount = dike.SoilProfiles.Count; - input.SoilProfiles1D = new Io.XmlInput.SoilProfile1D[profilesCount]; - TransferSoilProfiles1D(dike.SoilProfiles, input.SoilProfiles1D); - } + if (damProjectData.Segments != null) + { + input.Segments = new Io.XmlInput.Segment[damProjectData.Segments.Count]; + TransferSegments(damProjectData.Segments, input.Segments); + } - if (dike.SoilProfiles2D != null) - { - int profilesCount = dike.SoilProfiles2D.Count; - input.SoilProfiles2D = new Io.XmlInput.SoilProfile2D[profilesCount]; - TransferSoilProfiles2D(dike.SoilProfiles2D, input.SoilProfiles2D); - } + if (dike.InputTimeSerieCollection != null) + { + input.OperationalInputTimeSeries = new TimeSerie[dike.InputTimeSerieCollection.Series.Count]; + TransferInputTimeSeries(dike.InputTimeSerieCollection, input.OperationalInputTimeSeries); + } - if (damProjectData.Segments != null) - { - input.Segments = new Io.XmlInput.Segment[damProjectData.Segments.Count]; - TransferSegments(damProjectData.Segments, input.Segments); - } + if (damProjectData.SensorData != null) + { + input.SensorData = new InputSensorData(); + TransferSensorData(damProjectData.SensorData, input.SensorData); + } - if (dike.InputTimeSerieCollection != null) - { - input.OperationalInputTimeSeries = new TimeSerie[dike.InputTimeSerieCollection.Series.Count]; - TransferInputTimeSeries(dike.InputTimeSerieCollection, input.OperationalInputTimeSeries); - } + return input; + } - if (damProjectData.SensorData != null) + private static void TransferSensorData(SensorData sensorData, InputSensorData inputSensorData) + { + // Transfer sensorgroups + var sensorGroupIndex = 0; + inputSensorData.SensorGroups = new SensorGroup[sensorData.SensorGroups.Count]; + foreach (Data.General.Sensors.SensorGroup sensorGroup in sensorData.SensorGroups) + { + var inputSensorGroup = new SensorGroup(); + inputSensorGroup.SensorIds = new SensorGroupSensorIds[sensorGroup.SensorCount]; + inputSensorGroup.Id = sensorGroup.ID; + var sensorIdIndex = 0; + foreach (Sensor sensor in sensorGroup.SensorArray) { - input.SensorData = new InputSensorData(); - TransferSensorData(damProjectData.SensorData, input.SensorData); + inputSensorGroup.SensorIds[sensorIdIndex] = new SensorGroupSensorIds + { + SensorId = sensor.ID + }; + sensorIdIndex++; } - return input; + inputSensorData.SensorGroups[sensorGroupIndex] = inputSensorGroup; + sensorGroupIndex++; } - private static void TransferSensorData(SensorData sensorData, InputSensorData inputSensorData) + // Transfer sensorlocations + var senserLocationIndex = 0; + inputSensorData.SensorLocations = new SensorLocation[sensorData.SensorLocations.Count]; + foreach (Data.General.Sensors.SensorLocation sensorLocation in sensorData.SensorLocations) { - // Transfer sensorgroups - var sensorGroupIndex = 0; - inputSensorData.SensorGroups = new SensorGroup[sensorData.SensorGroups.Count]; - foreach (Data.General.Sensors.SensorGroup sensorGroup in sensorData.SensorGroups) + var inputSensorLocation = new SensorLocation(); + inputSensorLocation.GroupId = sensorLocation.GroupId; + inputSensorLocation.LocationId = sensorLocation.LocationName; + inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder); + inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder); + inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver); + inputSensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside); + inputSensorLocation.SourceTypePl1WaterLevelAtRiver = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1WaterLevelAtRiver); + inputSensorLocation.SourceTypePl1WaterLevelAtPolder = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1WaterLevelAtPolder); + inputSensorLocation.SourceTypePl3 = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl3); + inputSensorLocation.SourceTypePl4 = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl4); + inputSensorData.SensorLocations[senserLocationIndex] = inputSensorLocation; + senserLocationIndex++; + } + + // Transfer sensors + inputSensorData.Sensors = new Io.XmlInput.Sensor[sensorData.Sensors.Count]; + var sensorIndex = 0; + foreach (Sensor sensor in sensorData.Sensors) + { + var inputSensor = new Io.XmlInput.Sensor(); + inputSensor.Id = sensor.ID; + inputSensor.Name = sensor.Name; + inputSensor.RelativeLocation = sensor.RelativeLocation; + inputSensor.SensorType = ConversionHelper.ConvertToInputSensorType(sensor.SensorType); + inputSensor.PlLineMapping = new SensorPlLineMapping[sensor.PlLineMappings.Length]; + var mappingIndex = 0; + foreach (PlLineType plLineMapping in sensor.PlLineMappings) { - var inputSensorGroup = new SensorGroup(); - inputSensorGroup.SensorIds = new SensorGroupSensorIds[sensorGroup.SensorCount]; - inputSensorGroup.Id = sensorGroup.ID; - var sensorIdIndex = 0; - foreach (Sensor sensor in sensorGroup.SensorArray) + inputSensor.PlLineMapping[mappingIndex] = new SensorPlLineMapping { - inputSensorGroup.SensorIds[sensorIdIndex] = new SensorGroupSensorIds - { - SensorId = sensor.ID - }; - sensorIdIndex++; - } - - inputSensorData.SensorGroups[sensorGroupIndex] = inputSensorGroup; - sensorGroupIndex++; + PLineType = ConversionHelper.ConvertToInputPlLineType(plLineMapping) + }; + mappingIndex++; } - // Transfer sensorlocations - var senserLocationIndex = 0; - inputSensorData.SensorLocations = new SensorLocation[sensorData.SensorLocations.Count]; - foreach (Data.General.Sensors.SensorLocation sensorLocation in sensorData.SensorLocations) - { - var inputSensorLocation = new SensorLocation(); - inputSensorLocation.GroupId = sensorLocation.GroupId; - inputSensorLocation.LocationId = sensorLocation.LocationName; - inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder); - inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder); - inputSensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver); - inputSensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside); - inputSensorLocation.SourceTypePl1WaterLevelAtRiver = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1WaterLevelAtRiver); - inputSensorLocation.SourceTypePl1WaterLevelAtPolder = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl1WaterLevelAtPolder); - inputSensorLocation.SourceTypePl3 = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl3); - inputSensorLocation.SourceTypePl4 = ConversionHelper.ConvertToInputDataSourceTypeSensors(sensorLocation.SourceTypePl4); - inputSensorData.SensorLocations[senserLocationIndex] = inputSensorLocation; - senserLocationIndex++; - } + inputSensorData.Sensors[sensorIndex] = inputSensor; + sensorIndex++; + } + } - // Transfer sensors - inputSensorData.Sensors = new Io.XmlInput.Sensor[sensorData.Sensors.Count]; - var sensorIndex = 0; - foreach (Sensor sensor in sensorData.Sensors) + private static void TransferInputTimeSeries(TimeSerieCollection inputTimeSerieCollection, TimeSerie[] operationalInputTimeSeries) + { + var timeSerieIndex = 0; + foreach (Data.General.TimeSeries.TimeSerie timeSerie in inputTimeSerieCollection.Series) + { + var inputTimeSerie = new 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); + var timeSerieEntryIndex = 0; + foreach (TimeSerieEntry timestepEntry in timeSerie.Entries) { - var inputSensor = new Io.XmlInput.Sensor(); - inputSensor.Id = sensor.ID; - inputSensor.Name = sensor.Name; - inputSensor.RelativeLocation = sensor.RelativeLocation; - inputSensor.SensorType = ConversionHelper.ConvertToInputSensorType(sensor.SensorType); - inputSensor.PlLineMapping = new SensorPlLineMapping[sensor.PlLineMappings.Length]; - var mappingIndex = 0; - foreach (PlLineType plLineMapping in sensor.PlLineMappings) + TimeSerieEntriesTimeSerieEntryStochastValue stochastValue = null; + if (timestepEntry.StochastValue != null) { - inputSensor.PlLineMapping[mappingIndex] = new SensorPlLineMapping + stochastValue = new TimeSerieEntriesTimeSerieEntryStochastValue { - PLineType = ConversionHelper.ConvertToInputPlLineType(plLineMapping) + Distribution = timestepEntry.StochastValue.Distribution, + Mean = timestepEntry.StochastValue.Mean, + StandardDeviation = timestepEntry.StochastValue.StandardDeviation }; - mappingIndex++; } - inputSensorData.Sensors[sensorIndex] = inputSensor; - sensorIndex++; + var 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 TransferInputTimeSeries(TimeSerieCollection inputTimeSerieCollection, TimeSerie[] operationalInputTimeSeries) + private static void TransferAquiferSoils(Dictionary aquiferDictionary, Input input) + { + InputAquiferSoil[] aquiferSoils; + if (aquiferDictionary != null && aquiferDictionary.Count > 0) { - var timeSerieIndex = 0; - foreach (Data.General.TimeSeries.TimeSerie timeSerie in inputTimeSerieCollection.Series) + aquiferSoils = new InputAquiferSoil[aquiferDictionary.Count]; + var soilIndex = 0; + foreach (KeyValuePair keyValuePair in aquiferDictionary) { - var inputTimeSerie = new 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); - var timeSerieEntryIndex = 0; - foreach (TimeSerieEntry timestepEntry in timeSerie.Entries) + aquiferSoils[soilIndex] = new InputAquiferSoil { - TimeSerieEntriesTimeSerieEntryStochastValue stochastValue = null; - if (timestepEntry.StochastValue != null) - { - stochastValue = new TimeSerieEntriesTimeSerieEntryStochastValue - { - Distribution = timestepEntry.StochastValue.Distribution, - Mean = timestepEntry.StochastValue.Mean, - StandardDeviation = timestepEntry.StochastValue.StandardDeviation - }; - } + Soilname = keyValuePair.Key, + IsAquifer = keyValuePair.Value + }; + soilIndex++; + } + } + else + { + aquiferSoils = null; + } - var 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++; - } + input.AquiferSoils = aquiferSoils; + } - operationalInputTimeSeries[timeSerieIndex] = inputTimeSerie; - timeSerieIndex++; - } + private static void TransferAnalysisSpecification(DamProjectData damProjectData, Input input) + { + input.DamProjectType = ConversionHelper.ConvertToInputDamProjectType(damProjectData.DamProjectType); + input.FailureMechanismSystemType = ConversionHelper.ConvertToInputFailureMechanismSystemType(damProjectData.DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismSystemType); + + input.AnalysisTypeSpecified = (input.DamProjectType == InputDamProjectType.Design); + if (input.AnalysisTypeSpecified) + { + input.AnalysisType = ConversionHelper.ConvertToInputAnalysisType(DamProjectCalculationSpecification.SelectedAnalysisType); } - private static void TransferAquiferSoils(Dictionary aquiferDictionary, Input input) + input.PipingModelTypeSpecified = (input.FailureMechanismSystemType == ConversionHelper.InputFailureMechanismPiping); + if (input.PipingModelTypeSpecified) { - InputAquiferSoil[] aquiferSoils; - if (aquiferDictionary != null && aquiferDictionary.Count > 0) + input.PipingModelType = ConversionHelper.ConvertToInputPipingModelType(damProjectData.DamProjectCalculationSpecification.CurrentSpecification.PipingModelType); + } + + input.StabilityModelTypeSpecified = (input.FailureMechanismSystemType == ConversionHelper.InputFailureMechanismStabilityInside) || (input.FailureMechanismSystemType == ConversionHelper.InputFailureMechanismStabilityOutside); + if (input.StabilityModelTypeSpecified) + { + input.StabilityModelType = ConversionHelper.ConvertToInputStabilityModelType(damProjectData.DamProjectCalculationSpecification.CurrentSpecification.StabilityModelType); + } + } + + private static void TransferStabilityParameters(DamProjectData damProjectData, Input input) + { + if (damProjectData.DamProjectCalculationSpecification != null && damProjectData.DamProjectCalculationSpecification.CurrentSpecification != null) + { + DamFailureMechanismeCalculationSpecification curSpec = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; + if (curSpec.FailureMechanismParametersMStab != null && curSpec.FailureMechanismParametersMStab.MStabParameters != null) { - aquiferSoils = new InputAquiferSoil[aquiferDictionary.Count]; - var soilIndex = 0; - foreach (KeyValuePair keyValuePair in aquiferDictionary) + input.StabilityParameters = new StabilityParameters(); + input.StabilityParameters.SearchMethod = ConversionHelper.ConvertToInputSearchMethod(curSpec.FailureMechanismParametersMStab.MStabParameters.SearchMethod); + SlipCircleDefinition slipCircleDefinition = curSpec.FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; + if (slipCircleDefinition != null) { - aquiferSoils[soilIndex] = new InputAquiferSoil - { - Soilname = keyValuePair.Key, - IsAquifer = keyValuePair.Value - }; - soilIndex++; + input.StabilityParameters.GridDetermination = ConversionHelper.ConvertToInputGridDetermination(slipCircleDefinition.GridSizeDetermination); + input.StabilityParameters.BishopTangentLinesDefinitionSpecified = true; + input.StabilityParameters.BishopTangentLinesDefinition = ConversionHelper.ConvertToInputTangentLinesDefinition(slipCircleDefinition.BishopTangentLinesDefinition); + input.StabilityParameters.BishopTangentLinesDistanceSpecified = true; + input.StabilityParameters.BishopTangentLinesDistance = slipCircleDefinition.BishopTangentLinesDistance; + input.StabilityParameters.BishopGridVerticalPointsCountSpecified = true; + input.StabilityParameters.BishopGridVerticalPointsCount = slipCircleDefinition.BishopGridVerticalPointCount; + input.StabilityParameters.BishopGridVerticalPointsDistanceSpecified = true; + input.StabilityParameters.BishopGridVerticalPointsDistance = slipCircleDefinition.BishopGridVerticalPointDistance; + input.StabilityParameters.BishopGridHorizontalPointsCountSpecified = true; + input.StabilityParameters.BishopGridHorizontalPointsCount = slipCircleDefinition.BishopGridHorizontalPointCount; + input.StabilityParameters.BishopGridHorizontalPointsDistanceSpecified = true; + input.StabilityParameters.BishopGridHorizontalPointsDistance = slipCircleDefinition.BishopGridHorizontalPointDistance; + input.StabilityParameters.UpliftVanTangentLinesDefinitionSpecified = true; + input.StabilityParameters.UpliftVanTangentLinesDefinition = ConversionHelper.ConvertToInputTangentLinesDefinition(slipCircleDefinition.UpliftVanTangentLinesDefinition); + input.StabilityParameters.UpliftVanTangentLinesDistanceSpecified = true; + input.StabilityParameters.UpliftVanTangentLinesDistance = slipCircleDefinition.UpliftVanTangentLinesDistance; + input.StabilityParameters.UpliftVanGridLeftVerticalPointsCountSpecified = true; + input.StabilityParameters.UpliftVanGridLeftVerticalPointsCount = slipCircleDefinition.UpliftVanLeftGridVerticalPointCount; + input.StabilityParameters.UpliftVanGridLeftVerticalPointsDistanceSpecified = true; + input.StabilityParameters.UpliftVanGridLeftVerticalPointsDistance = slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance; + input.StabilityParameters.UpliftVanGridLeftHorizontalPointsCountSpecified = true; + input.StabilityParameters.UpliftVanGridLeftHorizontalPointsCount = slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount; + input.StabilityParameters.UpliftVanGridLeftHorizontalPointsDistanceSpecified = true; + input.StabilityParameters.UpliftVanGridLeftHorizontalPointsDistance = slipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance; + input.StabilityParameters.UpliftVanGridRightVerticalPointsCountSpecified = true; + input.StabilityParameters.UpliftVanGridRightVerticalPointsCount = slipCircleDefinition.UpliftVanRightGridVerticalPointCount; + input.StabilityParameters.UpliftVanGridRightVerticalPointsDistanceSpecified = true; + input.StabilityParameters.UpliftVanGridRightVerticalPointsDistance = slipCircleDefinition.UpliftVanRightGridVerticalPointDistance; + input.StabilityParameters.UpliftVanGridRightHorizontalPointsCountSpecified = true; + input.StabilityParameters.UpliftVanGridRightHorizontalPointsCount = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount; + input.StabilityParameters.UpliftVanGridRightHorizontalPointsDistanceSpecified = true; + input.StabilityParameters.UpliftVanGridRightHorizontalPointsDistance = slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance; } } - else - { - aquiferSoils = null; - } + } + } - input.AquiferSoils = aquiferSoils; + private static void ValidateDamProjectData(DamProjectData damProjectData) + { + if (damProjectData.Dike == null) + { + throw new ArgumentNullException(Resources.NoDikeInProject); } - private static void TransferAnalysisSpecification(DamProjectData damProjectData, Input input) + if (damProjectData.Dike.Locations == null) { - input.DamProjectType = ConversionHelper.ConvertToInputDamProjectType(damProjectData.DamProjectType); - input.FailureMechanismSystemType = ConversionHelper.ConvertToInputFailureMechanismSystemType(damProjectData.DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismSystemType); + throw new ArgumentNullException(Resources.NoLocationsInProject); + } - input.AnalysisTypeSpecified = (input.DamProjectType == InputDamProjectType.Design); - if (input.AnalysisTypeSpecified) + foreach (Location location in damProjectData.Dike.Locations) + { + if (location.Scenarios == null) { - input.AnalysisType = ConversionHelper.ConvertToInputAnalysisType(DamProjectCalculationSpecification.SelectedAnalysisType); + throw new ArgumentNullException(Resources.NoDesignScenariosInLocationProject); } + } - input.PipingModelTypeSpecified = (input.FailureMechanismSystemType == ConversionHelper.InputFailureMechanismPiping); - if (input.PipingModelTypeSpecified) + if (damProjectData.Dike.SurfaceLines2 == null) + { + throw new ArgumentNullException(Resources.NoSurfaceLinesInProject); + } + + foreach (SurfaceLine2 surfaceLine in damProjectData.Dike.SurfaceLines2) + { + if ((surfaceLine.CharacteristicPoints == null) || (surfaceLine.CharacteristicPoints.Count < 1)) { - input.PipingModelType = ConversionHelper.ConvertToInputPipingModelType(damProjectData.DamProjectCalculationSpecification.CurrentSpecification.PipingModelType); + throw new ArgumentNullException(string.Format(Resources.NoCharacteristicPointsInSurfaceLineProject, surfaceLine.Name)); } - input.StabilityModelTypeSpecified = (input.FailureMechanismSystemType == ConversionHelper.InputFailureMechanismStabilityInside) || (input.FailureMechanismSystemType == ConversionHelper.InputFailureMechanismStabilityOutside); - if (input.StabilityModelTypeSpecified) + if ((surfaceLine.Geometry == null) || (surfaceLine.Geometry.Count < 2)) { - input.StabilityModelType = ConversionHelper.ConvertToInputStabilityModelType(damProjectData.DamProjectCalculationSpecification.CurrentSpecification.StabilityModelType); + throw new ArgumentNullException(string.Format(Resources.NoPointsInSurfaceLineProject, surfaceLine.Name)); } } - private static void TransferStabilityParameters(DamProjectData damProjectData, Input input) + if (damProjectData.Dike.SoilList == null) { - if (damProjectData.DamProjectCalculationSpecification != null && damProjectData.DamProjectCalculationSpecification.CurrentSpecification != null) - { - DamFailureMechanismeCalculationSpecification curSpec = damProjectData.DamProjectCalculationSpecification.CurrentSpecification; - if (curSpec.FailureMechanismParametersMStab != null && curSpec.FailureMechanismParametersMStab.MStabParameters != null) - { - input.StabilityParameters = new StabilityParameters(); - input.StabilityParameters.SearchMethod = ConversionHelper.ConvertToInputSearchMethod(curSpec.FailureMechanismParametersMStab.MStabParameters.SearchMethod); - SlipCircleDefinition slipCircleDefinition = curSpec.FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; - if (slipCircleDefinition != null) - { - input.StabilityParameters.GridDetermination = ConversionHelper.ConvertToInputGridDetermination(slipCircleDefinition.GridSizeDetermination); - input.StabilityParameters.BishopTangentLinesDefinitionSpecified = true; - input.StabilityParameters.BishopTangentLinesDefinition = ConversionHelper.ConvertToInputTangentLinesDefinition(slipCircleDefinition.BishopTangentLinesDefinition); - input.StabilityParameters.BishopTangentLinesDistanceSpecified = true; - input.StabilityParameters.BishopTangentLinesDistance = slipCircleDefinition.BishopTangentLinesDistance; - input.StabilityParameters.BishopGridVerticalPointsCountSpecified = true; - input.StabilityParameters.BishopGridVerticalPointsCount = slipCircleDefinition.BishopGridVerticalPointCount; - input.StabilityParameters.BishopGridVerticalPointsDistanceSpecified = true; - input.StabilityParameters.BishopGridVerticalPointsDistance = slipCircleDefinition.BishopGridVerticalPointDistance; - input.StabilityParameters.BishopGridHorizontalPointsCountSpecified = true; - input.StabilityParameters.BishopGridHorizontalPointsCount = slipCircleDefinition.BishopGridHorizontalPointCount; - input.StabilityParameters.BishopGridHorizontalPointsDistanceSpecified = true; - input.StabilityParameters.BishopGridHorizontalPointsDistance = slipCircleDefinition.BishopGridHorizontalPointDistance; - input.StabilityParameters.UpliftVanTangentLinesDefinitionSpecified = true; - input.StabilityParameters.UpliftVanTangentLinesDefinition = ConversionHelper.ConvertToInputTangentLinesDefinition(slipCircleDefinition.UpliftVanTangentLinesDefinition); - input.StabilityParameters.UpliftVanTangentLinesDistanceSpecified = true; - input.StabilityParameters.UpliftVanTangentLinesDistance = slipCircleDefinition.UpliftVanTangentLinesDistance; - input.StabilityParameters.UpliftVanGridLeftVerticalPointsCountSpecified = true; - input.StabilityParameters.UpliftVanGridLeftVerticalPointsCount = slipCircleDefinition.UpliftVanLeftGridVerticalPointCount; - input.StabilityParameters.UpliftVanGridLeftVerticalPointsDistanceSpecified = true; - input.StabilityParameters.UpliftVanGridLeftVerticalPointsDistance = slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance; - input.StabilityParameters.UpliftVanGridLeftHorizontalPointsCountSpecified = true; - input.StabilityParameters.UpliftVanGridLeftHorizontalPointsCount = slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount; - input.StabilityParameters.UpliftVanGridLeftHorizontalPointsDistanceSpecified = true; - input.StabilityParameters.UpliftVanGridLeftHorizontalPointsDistance = slipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance; - input.StabilityParameters.UpliftVanGridRightVerticalPointsCountSpecified = true; - input.StabilityParameters.UpliftVanGridRightVerticalPointsCount = slipCircleDefinition.UpliftVanRightGridVerticalPointCount; - input.StabilityParameters.UpliftVanGridRightVerticalPointsDistanceSpecified = true; - input.StabilityParameters.UpliftVanGridRightVerticalPointsDistance = slipCircleDefinition.UpliftVanRightGridVerticalPointDistance; - input.StabilityParameters.UpliftVanGridRightHorizontalPointsCountSpecified = true; - input.StabilityParameters.UpliftVanGridRightHorizontalPointsCount = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount; - input.StabilityParameters.UpliftVanGridRightHorizontalPointsDistanceSpecified = true; - input.StabilityParameters.UpliftVanGridRightHorizontalPointsDistance = slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance; - } - } - } + throw new ArgumentNullException(Resources.NoSoilsInProject); } - private static void ValidateDamProjectData(DamProjectData damProjectData) + if (damProjectData.Dike.SoilList.Soils == null) { - if (damProjectData.Dike == null) + throw new ArgumentNullException(Resources.NoSoilsInProject); + } + + if (damProjectData.Dike.SoilProfiles == null) + { + throw new ArgumentNullException(Resources.NoSoilProfiles1DInProject); + } + + // Check for invalid Id names + foreach (Location location in damProjectData.Dike.Locations) + { + if (!IdValidator.IsCorrectName(location.Name)) { - throw new ArgumentNullException(Resources.NoDikeInProject); + throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.Location, location.Name)); } + } - if (damProjectData.Dike.Locations == null) + foreach (Segment segment in damProjectData.Segments) + { + if (!IdValidator.IsCorrectName(segment.Name)) { - throw new ArgumentNullException(Resources.NoLocationsInProject); + throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.Segment, segment.Name)); } + } - foreach (Location location in damProjectData.Dike.Locations) + foreach (SurfaceLine2 surfaceLine2 in damProjectData.Dike.SurfaceLines2) + { + if (!IdValidator.IsCorrectName(surfaceLine2.Name)) { - if (location.Scenarios == null) - { - throw new ArgumentNullException(Resources.NoDesignScenariosInLocationProject); - } + throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.SurfaceLine, surfaceLine2.Name)); } + } - if (damProjectData.Dike.SurfaceLines2 == null) + foreach (SoilProfile1D soilProfile in damProjectData.Dike.SoilProfiles) + { + if (!IdValidator.IsCorrectName(soilProfile.Name)) { - throw new ArgumentNullException(Resources.NoSurfaceLinesInProject); + throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.SoilProfile1D, soilProfile.Name)); } + } - foreach (SurfaceLine2 surfaceLine in damProjectData.Dike.SurfaceLines2) + foreach (SoilProfile2D soilProfile2D in damProjectData.Dike.SoilProfiles2D) + { + if (!IdValidator.IsCorrectName(soilProfile2D.Name)) { - if ((surfaceLine.CharacteristicPoints == null) || (surfaceLine.CharacteristicPoints.Count < 1)) - { - throw new ArgumentNullException(string.Format(Resources.NoCharacteristicPointsInSurfaceLineProject, surfaceLine.Name)); - } - - if ((surfaceLine.Geometry == null) || (surfaceLine.Geometry.Count < 2)) - { - throw new ArgumentNullException(string.Format(Resources.NoPointsInSurfaceLineProject, surfaceLine.Name)); - } + throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.SoilProfile2D, soilProfile2D.Name)); } + } - if (damProjectData.Dike.SoilList == null) + foreach (Soil soil in damProjectData.Dike.SoilList.Soils) + { + if (!IdValidator.IsCorrectName(soil.Name)) { - throw new ArgumentNullException(Resources.NoSoilsInProject); + throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.Soil, soil.Name)); } + } + } - if (damProjectData.Dike.SoilList.Soils == null) + private static void TransferSoils(List soils, Io.XmlInput.Soil[] inputSoils) + { + for (var i = 0; i < soils.Count; i++) + { + Soil soil = soils[i]; + var inputSoil = new Io.XmlInput.Soil(); + inputSoil.Name = soil.Name; + inputSoil.AbovePhreaticLevelSpecified = !double.IsNaN(soil.AbovePhreaticLevel); + inputSoil.AbovePhreaticLevel = soil.AbovePhreaticLevel; + inputSoil.BelowPhreaticLevelSpecified = !double.IsNaN(soil.BelowPhreaticLevel); + inputSoil.BelowPhreaticLevel = soil.BelowPhreaticLevel; + inputSoil.DryUnitWeightSpecified = !double.IsNaN(soil.DryUnitWeight); + inputSoil.DryUnitWeight = soil.DryUnitWeight; + inputSoil.BeddingAngleSpecified = !double.IsNaN(soil.BeddingAngle); + inputSoil.BeddingAngle = soil.BeddingAngle; + inputSoil.DiameterD70Specified = !double.IsNaN(soil.DiameterD70); + inputSoil.DiameterD70 = soil.DiameterD70; + inputSoil.DiameterD90Specified = !double.IsNaN(soil.DiameterD90); + inputSoil.DiameterD90 = soil.DiameterD90; + inputSoil.PermeabKxSpecified = !double.IsNaN(soil.PermeabKx); + inputSoil.PermeabKx = soil.PermeabKx; + inputSoil.WhitesConstantSpecified = !double.IsNaN(soil.WhitesConstant); + inputSoil.WhitesConstant = soil.WhitesConstant; + inputSoil.ShearStrengthModelSpecified = (soil.ShearStrengthModel != null); + if (inputSoil.ShearStrengthModelSpecified) { - throw new ArgumentNullException(Resources.NoSoilsInProject); + inputSoil.ShearStrengthModel = ConversionHelper.ConvertToSoilShearStrengthModel(soil.ShearStrengthModel.Value); } - if (damProjectData.Dike.SoilProfiles == null) + inputSoil.UseDefaultShearStrengthModelSpecified = (soil.UseDefaultShearStrengthModel != null); + if (inputSoil.UseDefaultShearStrengthModelSpecified) { - throw new ArgumentNullException(Resources.NoSoilProfiles1DInProject); + inputSoil.UseDefaultShearStrengthModel = soil.UseDefaultShearStrengthModel.Value; } - // Check for invalid Id names - foreach (Location location in damProjectData.Dike.Locations) + inputSoil.CohesionSpecified = !double.IsNaN(soil.Cohesion); + inputSoil.Cohesion = soil.Cohesion; + inputSoil.FrictionAngleSpecified = !double.IsNaN(soil.FrictionAngle); + inputSoil.FrictionAngle = soil.FrictionAngle; + inputSoil.OcrSpecified = !double.IsNaN(soil.Ocr); + inputSoil.Ocr = soil.Ocr; + inputSoil.SlopeRestProfileSpecified = !double.IsNaN(soil.SlopeRestProfile); + inputSoil.SlopeRestProfile = soil.SlopeRestProfile; + inputSoil.DilatancyTypeSpecified = (soil.DilatancyType != null); + if (inputSoil.DilatancyTypeSpecified) { - if (!IdValidator.IsCorrectName(location.Name)) - { - throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.Location, location.Name)); - } + inputSoil.DilatancyType = ConversionHelper.ConvertToSoilDilatancyType(soil.DilatancyType.Value); } - foreach (Segment segment in damProjectData.Segments) + inputSoil.RRatioSpecified = !double.IsNaN(soil.RRatio); + inputSoil.RRatio = soil.RRatio; + inputSoil.StrengthIncreaseExponentSpecified = !double.IsNaN(soil.StrengthIncreaseExponent); + inputSoil.StrengthIncreaseExponent = soil.StrengthIncreaseExponent; + inputSoil.RatioCuPcSpecified = !double.IsNaN(soil.RatioCuPc); + inputSoil.RatioCuPc = soil.RatioCuPc; + inputSoils[i] = inputSoil; + } + } + + private static void TransferSurfaceLines(IList dikeSurfaceLines, SurfaceLine[] inputSurfaceLines) + { + for (var i = 0; i < dikeSurfaceLines.Count; i++) + { + SurfaceLine2 surfaceLine = dikeSurfaceLines[i]; + var inputSurfaceLine = new SurfaceLine(); + inputSurfaceLine.Name = surfaceLine.Name; + inputSurfaceLine.Points = new SurfaceLinePoint[surfaceLine.CharacteristicPoints.Count]; + for (var j = 0; j < surfaceLine.CharacteristicPoints.Count; j++) { - if (!IdValidator.IsCorrectName(segment.Name)) + CharacteristicPoint characteristicPoint = surfaceLine.CharacteristicPoints[j]; + var inputPoint = new SurfaceLinePoint { - throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.Segment, segment.Name)); - } + PointType = ConversionHelper.ConvertToInputPointType(characteristicPoint.CharacteristicPointType), + X = characteristicPoint.X, + Z = characteristicPoint.Z + }; + inputSurfaceLine.Points[j] = inputPoint; } - foreach (SurfaceLine2 surfaceLine2 in damProjectData.Dike.SurfaceLines2) + inputSurfaceLines[i] = inputSurfaceLine; + } + } + + private static void TransferLocations(string projectPath, IList dikeLocations, Io.XmlInput.Location[] inputLocations) + { + int locationCount = dikeLocations.Count; + for (var i = 0; i < locationCount; i++) + { + Location location = dikeLocations[i]; + + var inputLocation = new Io.XmlInput.Location(); + inputLocation.Name = location.Name; + inputLocation.DistanceToEntryPoint = location.DistanceToEntryPoint; + inputLocation.DistanceToEntryPointSpecified = true; + inputLocation.XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin; + inputLocation.XSoilGeometry2DOriginSpecified = true; + inputLocation.SurfaceLineName = location.SurfaceLine.Name; + inputLocation.SegmentName = location.Segment.Name; + var waternetOptions = new LocationWaternetOptions(); + waternetOptions.PhreaticLineCreationMethod = ConversionHelper.ConvertToInputPhreaticLineCreationMethod(location.ModelParametersForPlLines.PlLineCreationMethod); + waternetOptions.IntrusionVerticalWaterPressure = ConversionHelper.ConvertToInputIntrusionVerticalWaterPressure(location.IntrusionVerticalWaterPressure ?? IntrusionVerticalWaterPressureType.Standard); + waternetOptions.DampingFactorPl3 = location.ModelParametersForPlLines.DampingFactorPl3; + waternetOptions.DampingFactorPl4 = location.ModelParametersForPlLines.DampingFactorPl4; + waternetOptions.PenetrationLength = location.ModelParametersForPlLines.PenetrationLength; + waternetOptions.DikeSoilScenario = ConversionHelper.ConvertToInputDikeSoilScenario(location.DikeSoilScenario); + waternetOptions.SlopeDampingFactor = location.SlopeDampingPiezometricHeightPolderSide; + inputLocation.WaternetOptions = waternetOptions; + + // Design options + var designOptions = new LocationDesignOptions(); + designOptions.RedesignDikeHeight = location.RedesignDikeHeight; + designOptions.RedesignDikeShoulder = location.RedesignDikeShoulder; + designOptions.ShoulderEmbankmentMaterial = location.ShoulderEmbankmentMaterial; + designOptions.StabilityShoulderGrowSlope = location.StabilityShoulderGrowSlope; + designOptions.StabilityShoulderGrowDeltaX = location.StabilityShoulderGrowDeltaX; + designOptions.StabilitySlopeAdaptionDeltaX = location.StabilitySlopeAdaptionDeltaX; + designOptions.SlopeAdaptionStartCotangent = location.SlopeAdaptionStartCotangent; + designOptions.SlopeAdaptionEndCotangent = location.SlopeAdaptionEndCotangent; + designOptions.SlopeAdaptionStepCotangent = location.SlopeAdaptionStepCotangent; + designOptions.NewDikeTopWidthSpecified = location.UseNewDikeTopWidth; + designOptions.NewDikeTopWidth = location.NewDikeTopWidth; + designOptions.NewDikeSlopeInsideSpecified = location.UseNewDikeSlopeInside; + designOptions.NewDikeSlopeInside = location.NewDikeSlopeInside; + designOptions.NewDikeSlopeOutsideSpecified = location.UseNewDikeSlopeOutside; + designOptions.NewDikeSlopeOutside = location.NewDikeSlopeOutside; + designOptions.NewShoulderTopSlopeSpecified = location.UseNewShoulderTopSlope; + designOptions.NewShoulderTopSlope = location.NewShoulderTopSlope; + designOptions.NewShoulderBaseSlopeSpecified = location.UseNewShoulderBaseSlope; + designOptions.NewShoulderBaseSlope = location.NewShoulderBaseSlope; + designOptions.NewMaxHeightShoulderAsFractionSpecified = location.UseNewMaxHeightShoulderAsFraction; + designOptions.NewMaxHeightShoulderAsFraction = location.NewMaxHeightShoulderAsFraction; + designOptions.NewMinDistanceDikeToeStartDitchSpecified = location.UseNewMinDistanceDikeToeStartDitch; + designOptions.NewMinDistanceDikeToeStartDitch = location.NewMinDistanceDikeToeStartDitch; + designOptions.UseNewDitchDefinition = location.UseNewDitchDefinition; + designOptions.NewWidthDitchBottomSpecified = location.UseNewDitchDefinition; + designOptions.NewWidthDitchBottom = location.NewWidthDitchBottom; + designOptions.NewSlopeAngleDitchSpecified = location.UseNewDitchDefinition; + designOptions.NewSlopeAngleDitch = location.NewSlopeAngleDitch; + designOptions.NewDepthDitchSpecified = location.UseNewDitchDefinition; + designOptions.NewDepthDitch = location.NewDepthDitch; + designOptions.StabilityDesignMethod = ConversionHelper.ConvertToInputStabilityDesignMethod(location.StabilityDesignMethod); + inputLocation.DesignOptions = designOptions; + + inputLocation.DesignScenarios = new LocationDesignScenario[location.Scenarios.Count]; + for (var j = 0; j < location.Scenarios.Count; j++) { - if (!IdValidator.IsCorrectName(surfaceLine2.Name)) - { - throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.SurfaceLine, surfaceLine2.Name)); - } + DesignScenario designScenario = location.Scenarios[j]; + var inputDesignScenario = new LocationDesignScenario(); + inputDesignScenario.RiverLevel = designScenario.RiverLevel; + inputDesignScenario.Id = designScenario.LocationScenarioID; + inputDesignScenario.PolderLevel = designScenario.PolderLevel; + inputDesignScenario.RiverLevelLowSpecified = designScenario.RiverLevelLow.HasValue; + inputDesignScenario.RiverLevelLow = designScenario.RiverLevelLow ?? 0.0; + inputDesignScenario.DikeTableHeightSpecified = designScenario.DikeTableHeight.HasValue; + inputDesignScenario.DikeTableHeight = designScenario.DikeTableHeight ?? 0.0; + inputDesignScenario.PlLineOffsetBelowDikeTopAtRiver = designScenario.PlLineOffsetBelowDikeTopAtRiver; + inputDesignScenario.PlLineOffsetBelowDikeTopAtPolder = designScenario.PlLineOffsetBelowDikeTopAtPolder; + inputDesignScenario.PlLineOffsetBelowShoulderBaseInside = designScenario.PlLineOffsetBelowShoulderBaseInside; + inputDesignScenario.PlLineOffsetBelowDikeToeAtPolder = designScenario.PlLineOffsetBelowDikeToeAtPolder; + inputDesignScenario.PlLineOffsetBelowDikeCrestMiddleSpecified = designScenario.UsePlLineOffsetBelowDikeCrestMiddle.Value; + inputDesignScenario.PlLineOffsetBelowDikeCrestMiddle = designScenario.PlLineOffsetBelowDikeCrestMiddle.Value; + inputDesignScenario.PlLineOffsetFactorBelowShoulderCrestSpecified = designScenario.UsePlLineOffsetFactorBelowShoulderCrest.Value; + inputDesignScenario.PlLineOffsetFactorBelowShoulderCrest = designScenario.PlLineOffsetFactorBelowShoulderCrest.Value; + inputDesignScenario.HeadPl2Specified = designScenario.HeadPl2.HasValue; + inputDesignScenario.HeadPl2 = designScenario.HeadPl2 ?? 0.0; + inputDesignScenario.HeadPl3Specified = designScenario.HeadPl3.HasValue; + inputDesignScenario.HeadPl3 = designScenario.HeadPl3 ?? 0.0; + inputDesignScenario.HeadPl4Specified = designScenario.HeadPl4.HasValue; + inputDesignScenario.HeadPl4 = designScenario.HeadPl4 ?? 0.0; + inputDesignScenario.UpliftCriterionStability = designScenario.UpliftCriterionStability; + inputDesignScenario.UpliftCriterionPiping = designScenario.UpliftCriterionPiping; + inputDesignScenario.RequiredSafetyFactorStabilityInnerSlope = designScenario.RequiredSafetyFactorStabilityInnerSlope; + inputDesignScenario.RequiredSafetyFactorStabilityOuterSlope = designScenario.RequiredSafetyFactorStabilityOuterSlope; + inputDesignScenario.RequiredSafetyFactorPiping = designScenario.RequiredSafetyFactorPiping; + + inputLocation.DesignScenarios[j] = inputDesignScenario; } - foreach (SoilProfile1D soilProfile in damProjectData.Dike.SoilProfiles) + inputLocation.DikeEmbankmentMaterial = location.DikeEmbankmentMaterial; + if (location.StabilityOptions != null) { - if (!IdValidator.IsCorrectName(soilProfile.Name)) + string tmpPath = projectPath ?? Directory.GetCurrentDirectory(); + string tmpMap = location.StabilityOptions.SoilGeometries2DPath; + if (tmpMap.StartsWith(tmpPath)) { - throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.SoilProfile1D, soilProfile.Name)); + tmpMap = tmpMap.Remove(0, tmpPath.Length); } - } - foreach (SoilProfile2D soilProfile2D in damProjectData.Dike.SoilProfiles2D) - { - if (!IdValidator.IsCorrectName(soilProfile2D.Name)) + if (tmpMap.StartsWith(Path.DirectorySeparatorChar.ToString())) { - throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.SoilProfile2D, soilProfile2D.Name)); + tmpMap = tmpMap.Remove(0, 1); } - } - foreach (Soil soil in damProjectData.Dike.SoilList.Soils) - { - if (!IdValidator.IsCorrectName(soil.Name)) + inputLocation.StabilityOptions = new LocationStabilityOptions { - throw new IdValidatorException(string.Format(Resources.NoValidId, Resources.Soil, soil.Name)); + MapForSoilgeometries2D = tmpMap, + SoilDatabaseName = location.StabilityOptions.SoilDatabaseName, + ZoneType = ConversionHelper.ConvertToInputZoneType(location.StabilityOptions.StabilityZoneType), + ForbiddenZoneFactorSpecified = location.StabilityOptions.ForbiddenZoneFactor.HasValue + }; + if (inputLocation.StabilityOptions.ForbiddenZoneFactorSpecified) + { + inputLocation.StabilityOptions.ForbiddenZoneFactor = location.StabilityOptions.ForbiddenZoneFactor.Value; } - } - } - private static void TransferSoils(List soils, Io.XmlInput.Soil[] inputSoils) - { - for (var i = 0; i < soils.Count; i++) - { - Soil soil = soils[i]; - var inputSoil = new Io.XmlInput.Soil(); - inputSoil.Name = soil.Name; - inputSoil.AbovePhreaticLevelSpecified = !double.IsNaN(soil.AbovePhreaticLevel); - inputSoil.AbovePhreaticLevel = soil.AbovePhreaticLevel; - inputSoil.BelowPhreaticLevelSpecified = !double.IsNaN(soil.BelowPhreaticLevel); - inputSoil.BelowPhreaticLevel = soil.BelowPhreaticLevel; - inputSoil.DryUnitWeightSpecified = !double.IsNaN(soil.DryUnitWeight); - inputSoil.DryUnitWeight = soil.DryUnitWeight; - inputSoil.BeddingAngleSpecified = !double.IsNaN(soil.BeddingAngle); - inputSoil.BeddingAngle = soil.BeddingAngle; - inputSoil.DiameterD70Specified = !double.IsNaN(soil.DiameterD70); - inputSoil.DiameterD70 = soil.DiameterD70; - inputSoil.DiameterD90Specified = !double.IsNaN(soil.DiameterD90); - inputSoil.DiameterD90 = soil.DiameterD90; - inputSoil.PermeabKxSpecified = !double.IsNaN(soil.PermeabKx); - inputSoil.PermeabKx = soil.PermeabKx; - inputSoil.WhitesConstantSpecified = !double.IsNaN(soil.WhitesConstant); - inputSoil.WhitesConstant = soil.WhitesConstant; - inputSoil.ShearStrengthModelSpecified = (soil.ShearStrengthModel != null); - if (inputSoil.ShearStrengthModelSpecified) + inputLocation.StabilityOptions.TrafficLoadSpecified = location.StabilityOptions.TrafficLoad.HasValue; + if (inputLocation.StabilityOptions.TrafficLoadSpecified) { - inputSoil.ShearStrengthModel = ConversionHelper.ConvertToSoilShearStrengthModel(soil.ShearStrengthModel.Value); + inputLocation.StabilityOptions.TrafficLoad = location.StabilityOptions.TrafficLoad.Value; } - inputSoil.UseDefaultShearStrengthModelSpecified = (soil.UseDefaultShearStrengthModel != null); - if (inputSoil.UseDefaultShearStrengthModelSpecified) + inputLocation.StabilityOptions.TrafficLoadDegreeOfConsolidationSpecified = location.StabilityOptions.TrafficLoadDegreeOfConsolidation.HasValue; + if (inputLocation.StabilityOptions.TrafficLoadDegreeOfConsolidationSpecified) { - inputSoil.UseDefaultShearStrengthModel = soil.UseDefaultShearStrengthModel.Value; + inputLocation.StabilityOptions.TrafficLoadDegreeOfConsolidation = location.StabilityOptions.TrafficLoadDegreeOfConsolidation.Value; } - inputSoil.CohesionSpecified = !double.IsNaN(soil.Cohesion); - inputSoil.Cohesion = soil.Cohesion; - inputSoil.FrictionAngleSpecified = !double.IsNaN(soil.FrictionAngle); - inputSoil.FrictionAngle = soil.FrictionAngle; - inputSoil.OcrSpecified = !double.IsNaN(soil.Ocr); - inputSoil.Ocr = soil.Ocr; - inputSoil.SlopeRestProfileSpecified = !double.IsNaN(soil.SlopeRestProfile); - inputSoil.SlopeRestProfile = soil.SlopeRestProfile; - inputSoil.DilatancyTypeSpecified = (soil.DilatancyType != null); - if (inputSoil.DilatancyTypeSpecified) + inputLocation.StabilityOptions.MinimumCircleDepthSpecified = location.StabilityOptions.MinimalCircleDepth.HasValue; + if (inputLocation.StabilityOptions.MinimumCircleDepthSpecified) { - inputSoil.DilatancyType = ConversionHelper.ConvertToSoilDilatancyType(soil.DilatancyType.Value); + inputLocation.StabilityOptions.MinimumCircleDepth = location.StabilityOptions.MinimalCircleDepth.Value; } - - inputSoil.RRatioSpecified = !double.IsNaN(soil.RRatio); - inputSoil.RRatio = soil.RRatio; - inputSoil.StrengthIncreaseExponentSpecified = !double.IsNaN(soil.StrengthIncreaseExponent); - inputSoil.StrengthIncreaseExponent = soil.StrengthIncreaseExponent; - inputSoil.RatioCuPcSpecified = !double.IsNaN(soil.RatioCuPc); - inputSoil.RatioCuPc = soil.RatioCuPc; - inputSoils[i] = inputSoil; } + + inputLocations[i] = inputLocation; } + } - private static void TransferSurfaceLines(IList dikeSurfaceLines, SurfaceLine[] inputSurfaceLines) + private static void TransferSoilProfiles1D(IList dikeSoilProfiles, Io.XmlInput.SoilProfile1D[] inputSoilProfiles1D) + { + int profilesCount = dikeSoilProfiles.Count; + for (var i = 0; i < profilesCount; i++) { - for (var i = 0; i < dikeSurfaceLines.Count; i++) + SoilProfile1D soilProfile1D = dikeSoilProfiles[i]; + var inputSoilProfile1D = new Io.XmlInput.SoilProfile1D { - SurfaceLine2 surfaceLine = dikeSurfaceLines[i]; - var inputSurfaceLine = new SurfaceLine(); - inputSurfaceLine.Name = surfaceLine.Name; - inputSurfaceLine.Points = new SurfaceLinePoint[surfaceLine.CharacteristicPoints.Count]; - for (var j = 0; j < surfaceLine.CharacteristicPoints.Count; j++) - { - CharacteristicPoint characteristicPoint = surfaceLine.CharacteristicPoints[j]; - var inputPoint = new SurfaceLinePoint - { - PointType = ConversionHelper.ConvertToInputPointType(characteristicPoint.CharacteristicPointType), - X = characteristicPoint.X, - Z = characteristicPoint.Z - }; - inputSurfaceLine.Points[j] = inputPoint; - } - - inputSurfaceLines[i] = inputSurfaceLine; - } + Name = soilProfile1D.Name, + BottomLevel = soilProfile1D.BottomLevel, + Layers1D = new SoilProfile1DLayer1D[soilProfile1D.LayerCount] + }; + AddLayers1D(soilProfile1D, inputSoilProfile1D); + inputSoilProfiles1D[i] = inputSoilProfile1D; } + } - private static void TransferLocations(string projectPath, IList dikeLocations, Io.XmlInput.Location[] inputLocations) + private static void AddLayers1D(SoilProfile1D soilProfile1D, Io.XmlInput.SoilProfile1D inputSoilProfile1D) + { + for (var i = 0; i < soilProfile1D.LayerCount; i++) { - int locationCount = dikeLocations.Count; - for (var i = 0; i < locationCount; i++) + SoilLayer1D layer = soilProfile1D.Layers[i]; + var inputLayer = new SoilProfile1DLayer1D { - Location location = dikeLocations[i]; + Name = layer.Name, + SoilName = layer.Soil.Name, + TopLevel = layer.TopLevel, + IsAquifer = layer.IsAquifer, + WaterpressureInterpolationModel = ConversionHelper.ConvertToInputWaterpressureInterpolationModel( + layer.WaterpressureInterpolationModel) + }; + inputSoilProfile1D.Layers1D[i] = inputLayer; + } + } - var inputLocation = new Io.XmlInput.Location(); - inputLocation.Name = location.Name; - inputLocation.DistanceToEntryPoint = location.DistanceToEntryPoint; - inputLocation.DistanceToEntryPointSpecified = true; - inputLocation.XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin; - inputLocation.XSoilGeometry2DOriginSpecified = true; - inputLocation.SurfaceLineName = location.SurfaceLine.Name; - inputLocation.SegmentName = location.Segment.Name; - var waternetOptions = new LocationWaternetOptions(); - waternetOptions.PhreaticLineCreationMethod = ConversionHelper.ConvertToInputPhreaticLineCreationMethod(location.ModelParametersForPlLines.PlLineCreationMethod); - waternetOptions.IntrusionVerticalWaterPressure = ConversionHelper.ConvertToInputIntrusionVerticalWaterPressure(location.IntrusionVerticalWaterPressure ?? IntrusionVerticalWaterPressureType.Standard); - waternetOptions.DampingFactorPl3 = location.ModelParametersForPlLines.DampingFactorPl3; - waternetOptions.DampingFactorPl4 = location.ModelParametersForPlLines.DampingFactorPl4; - waternetOptions.PenetrationLength = location.ModelParametersForPlLines.PenetrationLength; - waternetOptions.DikeSoilScenario = ConversionHelper.ConvertToInputDikeSoilScenario(location.DikeSoilScenario); - waternetOptions.SlopeDampingFactor = location.SlopeDampingPiezometricHeightPolderSide; - inputLocation.WaternetOptions = waternetOptions; - - // Design options - var designOptions = new LocationDesignOptions(); - designOptions.RedesignDikeHeight = location.RedesignDikeHeight; - designOptions.RedesignDikeShoulder = location.RedesignDikeShoulder; - designOptions.ShoulderEmbankmentMaterial = location.ShoulderEmbankmentMaterial; - designOptions.StabilityShoulderGrowSlope = location.StabilityShoulderGrowSlope; - designOptions.StabilityShoulderGrowDeltaX = location.StabilityShoulderGrowDeltaX; - designOptions.StabilitySlopeAdaptionDeltaX = location.StabilitySlopeAdaptionDeltaX; - designOptions.SlopeAdaptionStartCotangent = location.SlopeAdaptionStartCotangent; - designOptions.SlopeAdaptionEndCotangent = location.SlopeAdaptionEndCotangent; - designOptions.SlopeAdaptionStepCotangent = location.SlopeAdaptionStepCotangent; - designOptions.NewDikeTopWidthSpecified = location.UseNewDikeTopWidth; - designOptions.NewDikeTopWidth = location.NewDikeTopWidth; - designOptions.NewDikeSlopeInsideSpecified = location.UseNewDikeSlopeInside; - designOptions.NewDikeSlopeInside = location.NewDikeSlopeInside; - designOptions.NewDikeSlopeOutsideSpecified = location.UseNewDikeSlopeOutside; - designOptions.NewDikeSlopeOutside = location.NewDikeSlopeOutside; - designOptions.NewShoulderTopSlopeSpecified = location.UseNewShoulderTopSlope; - designOptions.NewShoulderTopSlope = location.NewShoulderTopSlope; - designOptions.NewShoulderBaseSlopeSpecified = location.UseNewShoulderBaseSlope; - designOptions.NewShoulderBaseSlope = location.NewShoulderBaseSlope; - designOptions.NewMaxHeightShoulderAsFractionSpecified = location.UseNewMaxHeightShoulderAsFraction; - designOptions.NewMaxHeightShoulderAsFraction = location.NewMaxHeightShoulderAsFraction; - designOptions.NewMinDistanceDikeToeStartDitchSpecified = location.UseNewMinDistanceDikeToeStartDitch; - designOptions.NewMinDistanceDikeToeStartDitch = location.NewMinDistanceDikeToeStartDitch; - designOptions.UseNewDitchDefinition = location.UseNewDitchDefinition; - designOptions.NewWidthDitchBottomSpecified = location.UseNewDitchDefinition; - designOptions.NewWidthDitchBottom = location.NewWidthDitchBottom; - designOptions.NewSlopeAngleDitchSpecified = location.UseNewDitchDefinition; - designOptions.NewSlopeAngleDitch = location.NewSlopeAngleDitch; - designOptions.NewDepthDitchSpecified = location.UseNewDitchDefinition; - designOptions.NewDepthDitch = location.NewDepthDitch; - designOptions.StabilityDesignMethod = ConversionHelper.ConvertToInputStabilityDesignMethod(location.StabilityDesignMethod); - inputLocation.DesignOptions = designOptions; - - inputLocation.DesignScenarios = new LocationDesignScenario[location.Scenarios.Count]; - for (var j = 0; j < location.Scenarios.Count; j++) - { - DesignScenario designScenario = location.Scenarios[j]; - var inputDesignScenario = new LocationDesignScenario(); - inputDesignScenario.RiverLevel = designScenario.RiverLevel; - inputDesignScenario.Id = designScenario.LocationScenarioID; - inputDesignScenario.PolderLevel = designScenario.PolderLevel; - inputDesignScenario.RiverLevelLowSpecified = designScenario.RiverLevelLow.HasValue; - inputDesignScenario.RiverLevelLow = designScenario.RiverLevelLow ?? 0.0; - inputDesignScenario.DikeTableHeightSpecified = designScenario.DikeTableHeight.HasValue; - inputDesignScenario.DikeTableHeight = designScenario.DikeTableHeight ?? 0.0; - inputDesignScenario.PlLineOffsetBelowDikeTopAtRiver = designScenario.PlLineOffsetBelowDikeTopAtRiver; - inputDesignScenario.PlLineOffsetBelowDikeTopAtPolder = designScenario.PlLineOffsetBelowDikeTopAtPolder; - inputDesignScenario.PlLineOffsetBelowShoulderBaseInside = designScenario.PlLineOffsetBelowShoulderBaseInside; - inputDesignScenario.PlLineOffsetBelowDikeToeAtPolder = designScenario.PlLineOffsetBelowDikeToeAtPolder; - inputDesignScenario.PlLineOffsetBelowDikeCrestMiddleSpecified = designScenario.UsePlLineOffsetBelowDikeCrestMiddle.Value; - inputDesignScenario.PlLineOffsetBelowDikeCrestMiddle = designScenario.PlLineOffsetBelowDikeCrestMiddle.Value; - inputDesignScenario.PlLineOffsetFactorBelowShoulderCrestSpecified = designScenario.UsePlLineOffsetFactorBelowShoulderCrest.Value; - inputDesignScenario.PlLineOffsetFactorBelowShoulderCrest = designScenario.PlLineOffsetFactorBelowShoulderCrest.Value; - inputDesignScenario.HeadPl2Specified = designScenario.HeadPl2.HasValue; - inputDesignScenario.HeadPl2 = designScenario.HeadPl2 ?? 0.0; - inputDesignScenario.HeadPl3Specified = designScenario.HeadPl3.HasValue; - inputDesignScenario.HeadPl3 = designScenario.HeadPl3 ?? 0.0; - inputDesignScenario.HeadPl4Specified = designScenario.HeadPl4.HasValue; - inputDesignScenario.HeadPl4 = designScenario.HeadPl4 ?? 0.0; - inputDesignScenario.UpliftCriterionStability = designScenario.UpliftCriterionStability; - inputDesignScenario.UpliftCriterionPiping = designScenario.UpliftCriterionPiping; - inputDesignScenario.RequiredSafetyFactorStabilityInnerSlope = designScenario.RequiredSafetyFactorStabilityInnerSlope; - inputDesignScenario.RequiredSafetyFactorStabilityOuterSlope = designScenario.RequiredSafetyFactorStabilityOuterSlope; - inputDesignScenario.RequiredSafetyFactorPiping = designScenario.RequiredSafetyFactorPiping; - - inputLocation.DesignScenarios[j] = inputDesignScenario; - } - - inputLocation.DikeEmbankmentMaterial = location.DikeEmbankmentMaterial; - if (location.StabilityOptions != null) - { - string tmpPath = projectPath ?? Directory.GetCurrentDirectory(); - string tmpMap = location.StabilityOptions.SoilGeometries2DPath; - if (tmpMap.StartsWith(tmpPath)) - { - tmpMap = tmpMap.Remove(0, tmpPath.Length); - } - - if (tmpMap.StartsWith(Path.DirectorySeparatorChar.ToString())) - { - tmpMap = tmpMap.Remove(0, 1); - } - - inputLocation.StabilityOptions = new LocationStabilityOptions - { - MapForSoilgeometries2D = tmpMap, - SoilDatabaseName = location.StabilityOptions.SoilDatabaseName, - ZoneType = ConversionHelper.ConvertToInputZoneType(location.StabilityOptions.StabilityZoneType), - ForbiddenZoneFactorSpecified = location.StabilityOptions.ForbiddenZoneFactor.HasValue - }; - if (inputLocation.StabilityOptions.ForbiddenZoneFactorSpecified) - { - inputLocation.StabilityOptions.ForbiddenZoneFactor = location.StabilityOptions.ForbiddenZoneFactor.Value; - } - - inputLocation.StabilityOptions.TrafficLoadSpecified = location.StabilityOptions.TrafficLoad.HasValue; - if (inputLocation.StabilityOptions.TrafficLoadSpecified) - { - inputLocation.StabilityOptions.TrafficLoad = location.StabilityOptions.TrafficLoad.Value; - } - - inputLocation.StabilityOptions.TrafficLoadDegreeOfConsolidationSpecified = location.StabilityOptions.TrafficLoadDegreeOfConsolidation.HasValue; - if (inputLocation.StabilityOptions.TrafficLoadDegreeOfConsolidationSpecified) - { - inputLocation.StabilityOptions.TrafficLoadDegreeOfConsolidation = location.StabilityOptions.TrafficLoadDegreeOfConsolidation.Value; - } - - inputLocation.StabilityOptions.MinimumCircleDepthSpecified = location.StabilityOptions.MinimalCircleDepth.HasValue; - if (inputLocation.StabilityOptions.MinimumCircleDepthSpecified) - { - inputLocation.StabilityOptions.MinimumCircleDepth = location.StabilityOptions.MinimalCircleDepth.Value; - } - } - - inputLocations[i] = inputLocation; - } + private static void TransferSoilProfiles2D(IList dikeSoilProfiles2D, + Io.XmlInput.SoilProfile2D[] inputSoilProfiles2D) + { + int profilesCount = dikeSoilProfiles2D.Count; + for (var i = 0; i < profilesCount; i++) + { + SoilProfile2D soilProfile2D = dikeSoilProfiles2D[i]; + var inputSoilProfile2D = new Io.XmlInput.SoilProfile2D + { + Name = soilProfile2D.Name, + Layers2D = new SoilProfile2DLayer2D[soilProfile2D.Surfaces.Count] + }; + AddPreconsolidationStresses(soilProfile2D, inputSoilProfile2D); + AddLayers2D(soilProfile2D, inputSoilProfile2D); + inputSoilProfiles2D[i] = inputSoilProfile2D; } + } - private static void TransferSoilProfiles1D(IList dikeSoilProfiles, Io.XmlInput.SoilProfile1D[] inputSoilProfiles1D) + private static void AddPreconsolidationStresses(SoilProfile2D soilProfile2D, Io.XmlInput.SoilProfile2D inputSoilProfile2D) + { + if (soilProfile2D.PreconsolidationStresses != null) { - int profilesCount = dikeSoilProfiles.Count; - for (var i = 0; i < profilesCount; i++) + int preconCount = soilProfile2D.PreconsolidationStresses.Count; + inputSoilProfile2D.PreconsolidationStresses = new SoilProfile2DPreconsolidationStress[preconCount]; + for (var i = 0; i < preconCount; i++) { - SoilProfile1D soilProfile1D = dikeSoilProfiles[i]; - var inputSoilProfile1D = new Io.XmlInput.SoilProfile1D + PreConsolidationStress precon = soilProfile2D.PreconsolidationStresses[i]; + var inputPrecon = new SoilProfile2DPreconsolidationStress { - Name = soilProfile1D.Name, - BottomLevel = soilProfile1D.BottomLevel, - Layers1D = new SoilProfile1DLayer1D[soilProfile1D.LayerCount] + Name = precon.Name, + StressValue = precon.StressValue, + X = precon.X, + Z = precon.Z }; - AddLayers1D(soilProfile1D, inputSoilProfile1D); - inputSoilProfiles1D[i] = inputSoilProfile1D; + inputSoilProfile2D.PreconsolidationStresses[i] = inputPrecon; } } + } - private static void AddLayers1D(SoilProfile1D soilProfile1D, Io.XmlInput.SoilProfile1D inputSoilProfile1D) + private static void AddLayers2D(SoilProfile2D soilProfile2D, Io.XmlInput.SoilProfile2D inputSoilProfile2D) + { + if (soilProfile2D != null) { - for (var i = 0; i < soilProfile1D.LayerCount; i++) + for (var i = 0; i < soilProfile2D.Surfaces.Count; i++) { - SoilLayer1D layer = soilProfile1D.Layers[i]; - var inputLayer = new SoilProfile1DLayer1D + SoilLayer2D layer = soilProfile2D.Surfaces[i]; + var inputLayer = new SoilProfile2DLayer2D { - Name = layer.Name, SoilName = layer.Soil.Name, - TopLevel = layer.TopLevel, IsAquifer = layer.IsAquifer, WaterpressureInterpolationModel = ConversionHelper.ConvertToInputWaterpressureInterpolationModel( - layer.WaterpressureInterpolationModel) + layer.WaterpressureInterpolationModel), + Surface = new SoilProfile2DLayer2DSurface() }; - inputSoilProfile1D.Layers1D[i] = inputLayer; - } - } - private static void TransferSoilProfiles2D(IList dikeSoilProfiles2D, - Io.XmlInput.SoilProfile2D[] inputSoilProfiles2D) - { - int profilesCount = dikeSoilProfiles2D.Count; - for (var i = 0; i < profilesCount; i++) - { - SoilProfile2D soilProfile2D = dikeSoilProfiles2D[i]; - var inputSoilProfile2D = new Io.XmlInput.SoilProfile2D + GeometryLoop loop = layer.GeometrySurface.OuterLoop; + inputLayer.Surface.OuterLoop = new SoilProfile2DLayer2DSurfaceOuterPoint[loop.CalcPoints.Count]; + for (var j = 0; j < loop.CalcPoints.Count; j++) { - Name = soilProfile2D.Name, - Layers2D = new SoilProfile2DLayer2D[soilProfile2D.Surfaces.Count] - }; - AddPreconsolidationStresses(soilProfile2D, inputSoilProfile2D); - AddLayers2D(soilProfile2D, inputSoilProfile2D); - inputSoilProfiles2D[i] = inputSoilProfile2D; - } - } - - private static void AddPreconsolidationStresses(SoilProfile2D soilProfile2D, Io.XmlInput.SoilProfile2D inputSoilProfile2D) - { - if (soilProfile2D.PreconsolidationStresses != null) - { - int preconCount = soilProfile2D.PreconsolidationStresses.Count; - inputSoilProfile2D.PreconsolidationStresses = new SoilProfile2DPreconsolidationStress[preconCount]; - for (var i = 0; i < preconCount; i++) - { - PreConsolidationStress precon = soilProfile2D.PreconsolidationStresses[i]; - var inputPrecon = new SoilProfile2DPreconsolidationStress + var point = new SoilProfile2DLayer2DSurfaceOuterPoint { - Name = precon.Name, - StressValue = precon.StressValue, - X = precon.X, - Z = precon.Z + X = loop.CalcPoints[j].X, + Z = loop.CalcPoints[j].Z }; - inputSoilProfile2D.PreconsolidationStresses[i] = inputPrecon; + inputLayer.Surface.OuterLoop[j] = point; } - } - } - private static void AddLayers2D(SoilProfile2D soilProfile2D, Io.XmlInput.SoilProfile2D inputSoilProfile2D) - { - if (soilProfile2D != null) - { - for (var i = 0; i < soilProfile2D.Surfaces.Count; i++) + GeometryLoop innerloop = layer.GeometrySurface.InnerLoops.FirstOrDefault(); + if (innerloop != null) { - SoilLayer2D layer = soilProfile2D.Surfaces[i]; - var inputLayer = new SoilProfile2DLayer2D + inputLayer.Surface.Innerloop = new SoilProfile2DLayer2DSurfaceInnerPoint[innerloop.CalcPoints.Count]; + for (var j = 0; j < innerloop.CalcPoints.Count; j++) { - SoilName = layer.Soil.Name, - IsAquifer = layer.IsAquifer, - WaterpressureInterpolationModel = ConversionHelper.ConvertToInputWaterpressureInterpolationModel( - layer.WaterpressureInterpolationModel), - Surface = new SoilProfile2DLayer2DSurface() - }; - - GeometryLoop loop = layer.GeometrySurface.OuterLoop; - inputLayer.Surface.OuterLoop = new SoilProfile2DLayer2DSurfaceOuterPoint[loop.CalcPoints.Count]; - for (var j = 0; j < loop.CalcPoints.Count; j++) - { - var point = new SoilProfile2DLayer2DSurfaceOuterPoint + var point = new SoilProfile2DLayer2DSurfaceInnerPoint { - X = loop.CalcPoints[j].X, - Z = loop.CalcPoints[j].Z + X = innerloop.CalcPoints[j].X, + Z = innerloop.CalcPoints[j].Z }; - inputLayer.Surface.OuterLoop[j] = point; + inputLayer.Surface.Innerloop[j] = point; } - - GeometryLoop innerloop = layer.GeometrySurface.InnerLoops.FirstOrDefault(); - if (innerloop != null) - { - inputLayer.Surface.Innerloop = new SoilProfile2DLayer2DSurfaceInnerPoint[innerloop.CalcPoints.Count]; - for (var j = 0; j < innerloop.CalcPoints.Count; j++) - { - var point = new SoilProfile2DLayer2DSurfaceInnerPoint - { - X = innerloop.CalcPoints[j].X, - Z = innerloop.CalcPoints[j].Z - }; - inputLayer.Surface.Innerloop[j] = point; - } - } - - inputSoilProfile2D.Layers2D[i] = inputLayer; } + + inputSoilProfile2D.Layers2D[i] = inputLayer; } } + } - private static void TransferSegments(IList segments, Io.XmlInput.Segment[] inputSegments) + private static void TransferSegments(IList segments, Io.XmlInput.Segment[] inputSegments) + { + for (var i = 0; i < segments.Count; i++) { - for (var i = 0; i < segments.Count; i++) + Segment segment = segments[i]; + var inputSegment = new Io.XmlInput.Segment { - Segment segment = segments[i]; - var inputSegment = new Io.XmlInput.Segment - { - Name = segment.Name - }; - AddSoilProfileProbabilities(segment, inputSegment); - inputSegments[i] = inputSegment; - } + Name = segment.Name + }; + AddSoilProfileProbabilities(segment, inputSegment); + inputSegments[i] = inputSegment; } + } - private static void AddSoilProfileProbabilities(Segment segment, Io.XmlInput.Segment inputSegment) + private static void AddSoilProfileProbabilities(Segment segment, Io.XmlInput.Segment inputSegment) + { + if (segment.SoilProfileProbabilities != null) { - if (segment.SoilProfileProbabilities != null) + int probabilityCount = segment.SoilProfileProbabilities.Count; + inputSegment.SoilGeometryProbability = new SegmentSoilGeometryProbability[probabilityCount]; + for (var i = 0; i < probabilityCount; i++) { - int probabilityCount = segment.SoilProfileProbabilities.Count; - inputSegment.SoilGeometryProbability = new SegmentSoilGeometryProbability[probabilityCount]; - for (var i = 0; i < probabilityCount; i++) + SoilGeometryProbability soilGeometryProbability = segment.SoilProfileProbabilities[i]; + var inputSoilGeometryProbability = new SegmentSoilGeometryProbability(); + inputSoilGeometryProbability.Probability = soilGeometryProbability.Probability; + if (soilGeometryProbability.SegmentFailureMechanismType.HasValue) { - SoilGeometryProbability soilGeometryProbability = segment.SoilProfileProbabilities[i]; - var inputSoilGeometryProbability = new SegmentSoilGeometryProbability(); - inputSoilGeometryProbability.Probability = soilGeometryProbability.Probability; - if (soilGeometryProbability.SegmentFailureMechanismType.HasValue) + inputSoilGeometryProbability.SegmentFailureMechanismType = ConversionHelper.ConvertToInputSegmentFailureMechanismSystemType(soilGeometryProbability.SegmentFailureMechanismType.Value); + inputSoilGeometryProbability.SegmentFailureMechanismTypeSpecified = true; + } + else + { + inputSoilGeometryProbability.SegmentFailureMechanismTypeSpecified = false; + } + + inputSoilGeometryProbability.SoilProfileType = ConversionHelper.ConvertToInputSoilGeometryType(soilGeometryProbability.SoilProfileType); + switch (soilGeometryProbability.SoilProfileType) + { + case SoilProfileType.ProfileType1D: { - inputSoilGeometryProbability.SegmentFailureMechanismType = ConversionHelper.ConvertToInputSegmentFailureMechanismSystemType(soilGeometryProbability.SegmentFailureMechanismType.Value); - inputSoilGeometryProbability.SegmentFailureMechanismTypeSpecified = true; + inputSoilGeometryProbability.SoilProfileName = soilGeometryProbability.SoilProfile1DName; + break; } - else + case SoilProfileType.ProfileType2D: { - inputSoilGeometryProbability.SegmentFailureMechanismTypeSpecified = false; + inputSoilGeometryProbability.SoilProfileName = soilGeometryProbability.SoilProfile2DName; + break; } - - inputSoilGeometryProbability.SoilProfileType = ConversionHelper.ConvertToInputSoilGeometryType(soilGeometryProbability.SoilProfileType); - switch (soilGeometryProbability.SoilProfileType) + case SoilProfileType.ProfileTypeStiFile: { - case SoilProfileType.ProfileType1D: - { - inputSoilGeometryProbability.SoilProfileName = soilGeometryProbability.SoilProfile1DName; - break; - } - case SoilProfileType.ProfileType2D: - { - inputSoilGeometryProbability.SoilProfileName = soilGeometryProbability.SoilProfile2DName; - break; - } - case SoilProfileType.ProfileTypeStiFile: - { - inputSoilGeometryProbability.SoilProfileName = soilGeometryProbability.StiFileName; - break; - } + inputSoilGeometryProbability.SoilProfileName = soilGeometryProbability.StiFileName; + break; } - - inputSegment.SoilGeometryProbability[i] = inputSoilGeometryProbability; } + + inputSegment.SoilGeometryProbability[i] = inputSoilGeometryProbability; } } }