Index: dam engine/trunk/src/Deltares.DamEngine.Interface/FillXmlInputFromDam.cs =================================================================== diff -u -r707 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Interface/FillXmlInputFromDam.cs (.../FillXmlInputFromDam.cs) (revision 707) +++ dam engine/trunk/src/Deltares.DamEngine.Interface/FillXmlInputFromDam.cs (.../FillXmlInputFromDam.cs) (revision 711) @@ -280,6 +280,35 @@ inputLocation.DesignScenarios[j] = inputDesignScenario; } + inputLocation.DikeEmbankmentMaterial = location.DikeEmbankmentMaterial; + if (location.StabilityOptions != null) + { + inputLocation.StabilityOptions = new LocationStabilityOptions + { + MapForSoilgeometries2D = location.StabilityOptions.MapForSoilGeometries2D, + ZoneType = ConversionHelper.ConvertToInputZoneType(location.StabilityOptions.StabilityZoneType), + ForbiddenZoneFactorSpecified = location.StabilityOptions.ForbiddenZoneFactor.HasValue + }; + if (inputLocation.StabilityOptions.ForbiddenZoneFactorSpecified) + { + inputLocation.StabilityOptions.ForbiddenZoneFactor = location.StabilityOptions.ForbiddenZoneFactor.Value; + } + inputLocation.StabilityOptions.ZoneAreaRestSlopeCrestWidthSpecified = location.StabilityOptions.ZoneAreaRestSlopeCrestWidth.HasValue; + if (inputLocation.StabilityOptions.ZoneAreaRestSlopeCrestWidthSpecified) + { + inputLocation.StabilityOptions.ZoneAreaRestSlopeCrestWidth = location.StabilityOptions.ZoneAreaRestSlopeCrestWidth.Value; + } + inputLocation.StabilityOptions.TrafficLoadSpecified = location.StabilityOptions.TrafficLoad.HasValue; + if (inputLocation.StabilityOptions.TrafficLoadSpecified) + { + inputLocation.StabilityOptions.TrafficLoad = location.StabilityOptions.TrafficLoad.Value; + } + inputLocation.StabilityOptions.MinimumCircleDepthSpecified = location.StabilityOptions.MinimalCircleDepth.HasValue; + if (inputLocation.StabilityOptions.MinimumCircleDepthSpecified) + { + inputLocation.StabilityOptions.MinimumCircleDepth = location.StabilityOptions.MinimalCircleDepth.Value; + } + } inputLocations[i] = inputLocation; } } Index: dam engine/trunk/src/Deltares.DamEngine.Data/General/Dike.cs =================================================================== diff -u -r669 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Data/General/Dike.cs (.../Dike.cs) (revision 669) +++ dam engine/trunk/src/Deltares.DamEngine.Data/General/Dike.cs (.../Dike.cs) (revision 711) @@ -422,7 +422,10 @@ { location.SoildatabaseName = this.SoilDatabaseName; location.SoilList = this.SoilList; - location.MapForSoilGeometries2D = this.MapForSoilGeometries2D; + if (location.StabilityOptions != null) + { + location.StabilityOptions.MapForSoilGeometries2D = this.MapForSoilGeometries2D; + } location.Gauges.Clear(); location.Gauges.AddRange(Gauges); Index: dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs =================================================================== diff -u -r631 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs (.../FillDamFromXmlInputTests.cs) (revision 631) +++ dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs (.../FillDamFromXmlInputTests.cs) (revision 711) @@ -152,6 +152,19 @@ 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 void FillSurfaceLines(Dike dike) @@ -215,6 +228,16 @@ designScenario.Location = location; location.Scenarios.Add(designScenario); } + location.DikeEmbankmentMaterial = "DikeMat"; + location.StabilityOptions = new StabilityOptions + { + MapForSoilGeometries2D = "TestMap", + StabilityZoneType = MStabZonesType.NoZones, + ForbiddenZoneFactor = 1.23, + ZoneAreaRestSlopeCrestWidth = 8.23, + TrafficLoad = 11.11, + MinimalCircleDepth = 1.21 + }; dike.Locations.Add(location); } } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/General/CalculationHelper.cs =================================================================== diff -u -r692 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/General/CalculationHelper.cs (.../CalculationHelper.cs) (revision 692) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/General/CalculationHelper.cs (.../CalculationHelper.cs) (revision 711) @@ -114,7 +114,6 @@ SurfaceLine = location.SurfaceLine, PLLines = plLines, SoilProfile = location.GetMostProbableProfile(FailureMechanismSystemType.StabilityInside), - TrafficLoad = location.TrafficLoad, MStabParameters = new MStabParameters { @@ -132,6 +131,10 @@ } } }; + if (location.StabilityOptions?.TrafficLoad != null) + { + damCalculation.FailureMechanismeParamatersMStab.TrafficLoad = location.StabilityOptions.TrafficLoad.Value; + } damCalculation.FailureMechanismeParamatersMStab.MStabParameters.GridPosition = failureMechanismType == FailureMechanismSystemType.StabilityOutside ? MStabGridPosition.Left : MStabGridPosition.Right; @@ -155,18 +158,24 @@ parameters.IsProbabilistic = mstabParameters.IsProbabilistic; parameters.SearchMethod = mstabParameters.SearchMethod; parameters.CalculationOptions = mstabParameters.CalculationOptions; - parameters.CalculationOptions.MinimalCircleDepth = location.MinimalCircleDepth; + if (location.StabilityOptions?.MinimalCircleDepth != null) + { + parameters.CalculationOptions.MinimalCircleDepth = location.StabilityOptions.MinimalCircleDepth.Value; + } parameters.ZoneAreas = new MStabZoneAreas { SafetyFactorZone1A = location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope.Value, SafetyFactorZone1B = location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope.Value, DikeTableHeight = location.SurfaceLine.GetDefaultDikeTableHeight().Value, - DikeTableWidth = location.ZoneAreaRestSlopeCrestWidth, XCoordinateDikeTopAtPolder = location.SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).X, XCoordinateDikeTopAtRiver = location.SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver).X, XCoordinateStartRestProfile = location.SurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver).X }; + if (location.StabilityOptions?.ZoneAreaRestSlopeCrestWidth != null) + { + parameters.ZoneAreas.DikeTableWidth = location.StabilityOptions.ZoneAreaRestSlopeCrestWidth.Value; + } // Slip circle definition for Uplift Van; TODO: Combine with code in StabilityCalculation parameters.SlipCircleDefinition.Assign(mstabParameters.SlipCircleDefinition); @@ -186,7 +195,7 @@ { var surfaceLine = damCalculation.FailureMechanismeParamatersMStab.SurfaceLine; double maxZoneX = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).X + - location.ForbiddenZoneFactor * (surfaceLine.GetDikeToeInward().X - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).X); + location.StabilityOptions.ForbiddenZoneFactor.Value * (surfaceLine.GetDikeToeInward().X - surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder).X); parameters.ForbiddenZone = new MStabForbiddenZone { IsXEntryMinUsed = false, @@ -436,7 +445,11 @@ { SoilProfile1D soilProfile = location.GetMostProbableProfile(FailureMechanismSystemType.StabilityInside); soilGeometry2DName = location.GetMostProbableGeometry2DName(FailureMechanismSystemType.StabilityInside); - string mapForSoilGeometries2D = location.MapForSoilGeometries2D; + string mapForSoilGeometries2D = ""; + if (location.StabilityOptions != null) + { + mapForSoilGeometries2D = location.StabilityOptions.MapForSoilGeometries2D; + } if ((soilGeometry2DName != null) && (mapForSoilGeometries2D != null)) { soilGeometry2DName = Path.Combine(mapForSoilGeometries2D, soilGeometry2DName); Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/MStabXmlDoc.cs =================================================================== diff -u -r698 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/MStabXmlDoc.cs (.../MStabXmlDoc.cs) (revision 698) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/DamMacroStability/MStabXmlDoc.cs (.../MStabXmlDoc.cs) (revision 711) @@ -125,13 +125,16 @@ failureMechanismeParamatersMStab.MStabParameters.ZoneAreas = new MStabZoneAreas { DikeTableHeight = dikeTableHeight.Value, - DikeTableWidth = scenario.Location.ZoneAreaRestSlopeCrestWidth, SafetyFactorZone1A = scenario.ModelFactors.RequiredSafetyFactorStabilityInnerSlope ?? requiredSafetyFactor, SafetyFactorZone1B = scenario.ModelFactors.RequiredSafetyFactorStabilityInnerSlope ?? requiredSafetyFactor, XCoordinateDikeTopAtPolder = dikeTopAtPolder.X, XCoordinateDikeTopAtRiver = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver).X, XCoordinateStartRestProfile = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver).X }; + if (scenario.Location.StabilityOptions?.ZoneAreaRestSlopeCrestWidth != null) + { + failureMechanismeParamatersMStab.MStabParameters.ZoneAreas.DikeTableWidth = scenario.Location.StabilityOptions.ZoneAreaRestSlopeCrestWidth.Value; + } } if (failureMechanismeParamatersMStab.MStabParameters.CalculationOptions.ZonesType.Equals(MStabZonesType.ForbiddenZone)) @@ -210,8 +213,13 @@ { var dikeTopAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder); // Zonestype is ForbiddenZone; TODO: Combine with code in StabilityCalculator? - double maxZoneX = dikeTopAtPolder.X + - scenario.Location.ForbiddenZoneFactor * (surfaceLine.GetDikeToeInward().X - dikeTopAtPolder.X); + var zoneFactor = 1.0; + if (scenario.Location.StabilityOptions?.ForbiddenZoneFactor != null) + { + zoneFactor = scenario.Location.StabilityOptions.ForbiddenZoneFactor.Value; + } + double maxZoneX = dikeTopAtPolder.X + zoneFactor * + (surfaceLine.GetDikeToeInward().X - dikeTopAtPolder.X); return new MStabForbiddenZone { IsXEntryMinUsed = false, Index: dam engine/trunk/src/Deltares.DamEngine.Interface/ConversionHelper.cs =================================================================== diff -u -r707 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Interface/ConversionHelper.cs (.../ConversionHelper.cs) (revision 707) +++ dam engine/trunk/src/Deltares.DamEngine.Interface/ConversionHelper.cs (.../ConversionHelper.cs) (revision 711) @@ -449,5 +449,50 @@ }; return translationTable[inputAnalysisType]; } + + /// + /// The input zone type no zones + /// + public const int InputZoneTypeNoZones = 0; + /// + /// The input zone type zone areas + /// + public const int InputZoneTypeZoneAreas = 1; + /// + /// The input zone types forbidden zones + /// + public const int InputZoneTypesForbiddenZones = 2; + + /// + /// Converts the type of to input zone. + /// + /// Type of the zone. + /// + public static int ConvertToInputZoneType(MStabZonesType zoneType) + { + var translationTable = new Dictionary() + { + {MStabZonesType.NoZones, InputZoneTypeNoZones}, + {MStabZonesType.ZoneAreas, InputZoneTypeZoneAreas}, + {MStabZonesType.ForbiddenZone, InputZoneTypesForbiddenZones} + }; + return translationTable[zoneType]; + } + + /// + /// Converts the type of to zone. + /// + /// Type of the input zone. + /// + public static MStabZonesType ConvertToZoneType(int inputZoneType) + { + var translationTable = new Dictionary () + { + {InputZoneTypeNoZones, MStabZonesType.NoZones}, + {InputZoneTypeZoneAreas, MStabZonesType.ZoneAreas}, + {InputZoneTypesForbiddenZones, MStabZonesType.ForbiddenZone} + }; + return translationTable[inputZoneType]; + } } } \ No newline at end of file Index: dam engine/trunk/src/Deltares.DamEngine.Io/DamInput.cs =================================================================== diff -u -r689 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Io/DamInput.cs (.../DamInput.cs) (revision 689) +++ dam engine/trunk/src/Deltares.DamEngine.Io/DamInput.cs (.../DamInput.cs) (revision 711) @@ -35,6 +35,8 @@ private SoilProfile2D[] soilProfiles2DField; + private StabilityParameters stabilityParametersField; + private InputDamProjectType damProjectTypeField; private int failureMechanismSystemTypeField; @@ -118,6 +120,16 @@ } /// + public StabilityParameters StabilityParameters { + get { + return this.stabilityParametersField; + } + set { + this.stabilityParametersField = value; + } + } + + /// [System.Xml.Serialization.XmlAttributeAttribute()] public InputDamProjectType DamProjectType { get { @@ -237,6 +249,8 @@ private string nameField; + private string dikeEmbankmentMaterialField; + /// public LocationAssesmentRegionalOptions AssesmentRegionalOptions { get { @@ -360,6 +374,17 @@ this.nameField = value; } } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string DikeEmbankmentMaterial { + get { + return this.dikeEmbankmentMaterialField; + } + set { + this.dikeEmbankmentMaterialField = value; + } + } } /// @@ -483,6 +508,404 @@ [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class StabilityParameters { + + private int searchMethodField; + + private int determinationGridField; + + private int definitionTangentLinesField; + + private bool definitionTangentLinesFieldSpecified; + + private double distanceTangentLinesField; + + private bool distanceTangentLinesFieldSpecified; + + private int bishopNumberOfVerticalPointsGridField; + + private bool bishopNumberOfVerticalPointsGridFieldSpecified; + + private double bishopDistanceOfVerticalPointsGridField; + + private bool bishopDistanceOfVerticalPointsGridFieldSpecified; + + private int bishopNumberOfHorizontalPointsGridField; + + private bool bishopNumberOfHorizontalPointsGridFieldSpecified; + + private double bishopDistanceOfHorizontalPointsGridField; + + private bool bishopDistanceOfHorizontalPointsGridFieldSpecified; + + private int upliftVanNumberOfVerticalPointsGridLeftField; + + private bool upliftVanNumberOfVerticalPointsGridLeftFieldSpecified; + + private double upliftVanDistanceOfVerticalPointsGridLeftField; + + private bool upliftVanDistanceOfVerticalPointsGridLeftFieldSpecified; + + private int upliftVanNumberOfHorizontalPointsGridLeftField; + + private bool upliftVanNumberOfHorizontalPointsGridLeftFieldSpecified; + + private double upliftVanDistanceOfHorizontalPointsGridLeftField; + + private bool upliftVanDistanceOfHorizontalPointsGridLeftFieldSpecified; + + private int upliftVanNumberOfVerticalPointsGridRightField; + + private bool upliftVanNumberOfVerticalPointsGridRightFieldSpecified; + + private double upliftVanDistanceOfVerticalPointsGridRightField; + + private bool upliftVanDistanceOfVerticalPointsGridRightFieldSpecified; + + private int upliftVanNumberOfHorizontalPointsGridRightField; + + private bool upliftVanNumberOfHorizontalPointsGridRightFieldSpecified; + + private double upliftVanDistanceOfHorizontalPointsGridRightField; + + private bool upliftVanDistanceOfHorizontalPointsGridRightFieldSpecified; + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int SearchMethod { + get { + return this.searchMethodField; + } + set { + this.searchMethodField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int DeterminationGrid { + get { + return this.determinationGridField; + } + set { + this.determinationGridField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int DefinitionTangentLines { + get { + return this.definitionTangentLinesField; + } + set { + this.definitionTangentLinesField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool DefinitionTangentLinesSpecified { + get { + return this.definitionTangentLinesFieldSpecified; + } + set { + this.definitionTangentLinesFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double DistanceTangentLines { + get { + return this.distanceTangentLinesField; + } + set { + this.distanceTangentLinesField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool DistanceTangentLinesSpecified { + get { + return this.distanceTangentLinesFieldSpecified; + } + set { + this.distanceTangentLinesFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int BishopNumberOfVerticalPointsGrid { + get { + return this.bishopNumberOfVerticalPointsGridField; + } + set { + this.bishopNumberOfVerticalPointsGridField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool BishopNumberOfVerticalPointsGridSpecified { + get { + return this.bishopNumberOfVerticalPointsGridFieldSpecified; + } + set { + this.bishopNumberOfVerticalPointsGridFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double BishopDistanceOfVerticalPointsGrid { + get { + return this.bishopDistanceOfVerticalPointsGridField; + } + set { + this.bishopDistanceOfVerticalPointsGridField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool BishopDistanceOfVerticalPointsGridSpecified { + get { + return this.bishopDistanceOfVerticalPointsGridFieldSpecified; + } + set { + this.bishopDistanceOfVerticalPointsGridFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int BishopNumberOfHorizontalPointsGrid { + get { + return this.bishopNumberOfHorizontalPointsGridField; + } + set { + this.bishopNumberOfHorizontalPointsGridField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool BishopNumberOfHorizontalPointsGridSpecified { + get { + return this.bishopNumberOfHorizontalPointsGridFieldSpecified; + } + set { + this.bishopNumberOfHorizontalPointsGridFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double BishopDistanceOfHorizontalPointsGrid { + get { + return this.bishopDistanceOfHorizontalPointsGridField; + } + set { + this.bishopDistanceOfHorizontalPointsGridField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool BishopDistanceOfHorizontalPointsGridSpecified { + get { + return this.bishopDistanceOfHorizontalPointsGridFieldSpecified; + } + set { + this.bishopDistanceOfHorizontalPointsGridFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int UpliftVanNumberOfVerticalPointsGridLeft { + get { + return this.upliftVanNumberOfVerticalPointsGridLeftField; + } + set { + this.upliftVanNumberOfVerticalPointsGridLeftField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool UpliftVanNumberOfVerticalPointsGridLeftSpecified { + get { + return this.upliftVanNumberOfVerticalPointsGridLeftFieldSpecified; + } + set { + this.upliftVanNumberOfVerticalPointsGridLeftFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double UpliftVanDistanceOfVerticalPointsGridLeft { + get { + return this.upliftVanDistanceOfVerticalPointsGridLeftField; + } + set { + this.upliftVanDistanceOfVerticalPointsGridLeftField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool UpliftVanDistanceOfVerticalPointsGridLeftSpecified { + get { + return this.upliftVanDistanceOfVerticalPointsGridLeftFieldSpecified; + } + set { + this.upliftVanDistanceOfVerticalPointsGridLeftFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int UpliftVanNumberOfHorizontalPointsGridLeft { + get { + return this.upliftVanNumberOfHorizontalPointsGridLeftField; + } + set { + this.upliftVanNumberOfHorizontalPointsGridLeftField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool UpliftVanNumberOfHorizontalPointsGridLeftSpecified { + get { + return this.upliftVanNumberOfHorizontalPointsGridLeftFieldSpecified; + } + set { + this.upliftVanNumberOfHorizontalPointsGridLeftFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double UpliftVanDistanceOfHorizontalPointsGridLeft { + get { + return this.upliftVanDistanceOfHorizontalPointsGridLeftField; + } + set { + this.upliftVanDistanceOfHorizontalPointsGridLeftField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool UpliftVanDistanceOfHorizontalPointsGridLeftSpecified { + get { + return this.upliftVanDistanceOfHorizontalPointsGridLeftFieldSpecified; + } + set { + this.upliftVanDistanceOfHorizontalPointsGridLeftFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int UpliftVanNumberOfVerticalPointsGridRight { + get { + return this.upliftVanNumberOfVerticalPointsGridRightField; + } + set { + this.upliftVanNumberOfVerticalPointsGridRightField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool UpliftVanNumberOfVerticalPointsGridRightSpecified { + get { + return this.upliftVanNumberOfVerticalPointsGridRightFieldSpecified; + } + set { + this.upliftVanNumberOfVerticalPointsGridRightFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double UpliftVanDistanceOfVerticalPointsGridRight { + get { + return this.upliftVanDistanceOfVerticalPointsGridRightField; + } + set { + this.upliftVanDistanceOfVerticalPointsGridRightField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool UpliftVanDistanceOfVerticalPointsGridRightSpecified { + get { + return this.upliftVanDistanceOfVerticalPointsGridRightFieldSpecified; + } + set { + this.upliftVanDistanceOfVerticalPointsGridRightFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int UpliftVanNumberOfHorizontalPointsGridRight { + get { + return this.upliftVanNumberOfHorizontalPointsGridRightField; + } + set { + this.upliftVanNumberOfHorizontalPointsGridRightField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool UpliftVanNumberOfHorizontalPointsGridRightSpecified { + get { + return this.upliftVanNumberOfHorizontalPointsGridRightFieldSpecified; + } + set { + this.upliftVanNumberOfHorizontalPointsGridRightFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public double UpliftVanDistanceOfHorizontalPointsGridRight { + get { + return this.upliftVanDistanceOfHorizontalPointsGridRightField; + } + set { + this.upliftVanDistanceOfHorizontalPointsGridRightField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool UpliftVanDistanceOfHorizontalPointsGridRightSpecified { + get { + return this.upliftVanDistanceOfHorizontalPointsGridRightFieldSpecified; + } + set { + this.upliftVanDistanceOfHorizontalPointsGridRightFieldSpecified = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class SoilProfile2D { private SoilProfile2DLayer2D[] layers2DField; @@ -2798,12 +3221,12 @@ private double forbiddenZoneFactorField; + private bool forbiddenZoneFactorFieldSpecified; + private double zoneAreaRestSlopeCrestWidthField; private bool zoneAreaRestSlopeCrestWidthFieldSpecified; - private string dikeEmbankmentMaterialField; - private double trafficLoadField; private bool trafficLoadFieldSpecified; @@ -2812,10 +3235,6 @@ private bool minimumCircleDepthFieldSpecified; - public LocationStabilityOptions() { - this.forbiddenZoneFactorField = 1D; - } - /// [System.Xml.Serialization.XmlAttributeAttribute()] public string MapForSoilgeometries2D { @@ -2840,7 +3259,6 @@ /// [System.Xml.Serialization.XmlAttributeAttribute()] - [System.ComponentModel.DefaultValueAttribute(1D)] public double ForbiddenZoneFactor { get { return this.forbiddenZoneFactorField; @@ -2851,6 +3269,17 @@ } /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool ForbiddenZoneFactorSpecified { + get { + return this.forbiddenZoneFactorFieldSpecified; + } + set { + this.forbiddenZoneFactorFieldSpecified = value; + } + } + + /// [System.Xml.Serialization.XmlAttributeAttribute()] public double ZoneAreaRestSlopeCrestWidth { get { @@ -2874,17 +3303,6 @@ /// [System.Xml.Serialization.XmlAttributeAttribute()] - public string DikeEmbankmentMaterial { - get { - return this.dikeEmbankmentMaterialField; - } - set { - this.dikeEmbankmentMaterialField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] public double TrafficLoad { get { return this.trafficLoadField; Index: dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/ConversionHelperTests.cs =================================================================== diff -u -r669 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 669) +++ dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 711) @@ -215,7 +215,41 @@ [TestCase(FailureMechanismSystemType.HorizontalBalance, 3)] public void CanConvertToFailureMechanismSystemType(int inputFailureMechanismSystemType, FailureMechanismSystemType failureMechanismSystemType) { - Assert.AreEqual(inputFailureMechanismSystemType, ConversionHelper.ConvertToInputFailureMechanismSystemType(failureMechanismSystemType)); + Assert.AreEqual(failureMechanismSystemType, ConversionHelper.ConvertToFailureMechanismSystemType(inputFailureMechanismSystemType)); } + + [Test] + [TestCase(InputAnalysisType.AdaptGeometry, AnalysisType.AdaptGeometry)] + [TestCase(InputAnalysisType.NoAdaption, AnalysisType.NoAdaption)] + public void CanConvertToInputAnalysisType(AnalysisType analysisType, InputAnalysisType inputAnalysisType) + { + Assert.AreEqual(inputAnalysisType, ConversionHelper.ConvertToInputAnalysisType(analysisType)); + } + + [Test] + [TestCase(AnalysisType.AdaptGeometry, InputAnalysisType.AdaptGeometry)] + [TestCase(AnalysisType.NoAdaption, InputAnalysisType.NoAdaption)] + public void CanConvertToAnalysisType(InputAnalysisType inputAnalysisType, AnalysisType analysisType) + { + Assert.AreEqual(analysisType, ConversionHelper.ConvertToAnalysisType(inputAnalysisType)); + } + + [Test] + [TestCase(MStabZonesType.NoZones, ConversionHelper.InputZoneTypeNoZones)] + [TestCase(MStabZonesType.ZoneAreas, ConversionHelper.InputZoneTypeZoneAreas)] + [TestCase(MStabZonesType.ForbiddenZone, ConversionHelper.InputZoneTypesForbiddenZones)] + public void CanConvertToInputZoneType(MStabZonesType zoneType, int inputZoneType) + { + Assert.AreEqual(inputZoneType, ConversionHelper.ConvertToInputZoneType(zoneType)); + } + + [Test] + [TestCase(ConversionHelper.InputZoneTypeNoZones, MStabZonesType.NoZones)] + [TestCase(ConversionHelper.InputZoneTypeZoneAreas, MStabZonesType.ZoneAreas)] + [TestCase(ConversionHelper.InputZoneTypesForbiddenZones, MStabZonesType.ForbiddenZone)] + public void CanConvertToZoneType(int inputZoneType, MStabZonesType zoneType) + { + Assert.AreEqual(zoneType, ConversionHelper.ConvertToZoneType(inputZoneType)); + } } } Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/General/DamProjectCalculator.cs =================================================================== diff -u -r670 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/General/DamProjectCalculator.cs (.../DamProjectCalculator.cs) (revision 670) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/General/DamProjectCalculator.cs (.../DamProjectCalculator.cs) (revision 711) @@ -780,7 +780,11 @@ var plLinesCreator = new PLLinesCreator(); // Determine geometry type SoilProfileType soilProfileType = soilProfileProbability.SoilProfileType; - string mapForSoilGeometries2D = location.MapForSoilGeometries2D; + string mapForSoilGeometries2D = ""; + if (location.StabilityOptions != null) + { + mapForSoilGeometries2D = location.StabilityOptions.MapForSoilGeometries2D; + } SoilProfile1D soilProfile = soilProfileProbability.SoilProfile1D; string soilGeometry2DName = soilProfileProbability.StiFileName; if ((soilProfileProbability.StiFileName != null) && (mapForSoilGeometries2D != null)) Index: dam engine/trunk/src/Deltares.DamEngine.Data/General/Location.cs =================================================================== diff -u -r599 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Data/General/Location.cs (.../Location.cs) (revision 599) +++ dam engine/trunk/src/Deltares.DamEngine.Data/General/Location.cs (.../Location.cs) (revision 711) @@ -59,7 +59,7 @@ private SoilType dikeMaterialType = SoilType.Clay; private double dikeTableHeight = 0.0; private double dredgingDepth = 0; - private double forbiddenZoneFactor = 1.0; + private IList gaugePLLines = new List(); private IList gauges = new List(); private double? headPL2 = null; @@ -73,8 +73,8 @@ private double levelReductionOutside = 0; private PL1Line localXZPL1Line; private GeometryPoint localXZSheetPilePoint; - private string mapForSoilGeometries2D = ""; - private double minimalCircleDepth = 0; + + private StabilityOptions stabilityOptions; private ModelFactors modelFactors = new ModelFactors(); private string name = ""; private double newDepthDitch = 1.0; @@ -117,10 +117,8 @@ private double stabilityShoulderGrowDeltaX = 2.0; private double stabilityShoulderGrowSlope = 1.0/3; private double stabilitySlopeAdaptionDeltaX = 2.0; - private MStabZonesType stabilityZoneType = MStabZonesType.NoZones; - + private string surfaceLineId = ""; - private double trafficLoad = 0; private bool useNewDikeSlopeInside; private bool useNewDikeSlopeOutside; private bool useNewDikeTopWidth; @@ -133,8 +131,7 @@ private double xSoilGeometry2DOrigin = 0; private double xrd = 0; private double yrd = 0; - private double zoneAreaRestSlopeCrestWidth = 3.0; - + private double? plLineOffsetFactorBelowShoulderCrest; private double? plLineOffsetBelowDikeCrestMiddle; private double? plLineOffsetDryFactorBelowShoulderCrest; @@ -262,18 +259,6 @@ } } - public virtual double TrafficLoad - { - get - { - return trafficLoad; - } - set - { - trafficLoad = value; - } - } - public virtual double DredgingDepth { get @@ -440,21 +425,6 @@ } } - /// - /// - /// - public virtual double MinimalCircleDepth - { - get - { - return minimalCircleDepth; - } - set - { - minimalCircleDepth = value; - } - } - public virtual double LevelReductionInside { get @@ -614,17 +584,7 @@ public SoilList SoilList { get; set; } - public string MapForSoilGeometries2D - { - get - { - return mapForSoilGeometries2D; - } - set - { - mapForSoilGeometries2D = value; - } - } + public virtual IList Gauges { @@ -972,42 +932,17 @@ #region IGeographic Members - public MStabZonesType StabilityZoneType + public StabilityOptions StabilityOptions { get { - return stabilityZoneType; + return stabilityOptions; } set { - stabilityZoneType = value; + stabilityOptions = value; } } - - public double ForbiddenZoneFactor - { - get - { - return forbiddenZoneFactor; - } - set - { - forbiddenZoneFactor = value; - } - } - - public double ZoneAreaRestSlopeCrestWidth - { - get - { - return zoneAreaRestSlopeCrestWidth; - } - set - { - zoneAreaRestSlopeCrestWidth = value; - } - } - public double X { get @@ -1054,7 +989,7 @@ [Validate] public ValidationResult[] IsRequiredSafetySetForZoneTypeArea() { - if (stabilityZoneType == MStabZonesType.ZoneAreas) + if (stabilityOptions != null && stabilityOptions.StabilityZoneType == MStabZonesType.ZoneAreas) { // For design projects, the safetey must be defined per scenario, not per location if (DamProjectType == DamProjectType.Design && scenarios != null && scenarios.Count > 0) @@ -1802,25 +1737,6 @@ #endregion - /// - /// Sets the default values; taking into account which DamProjectType and DamType is set - /// - /// Type of the dam. - /// Type of the dam project. - // TODO fix hiding parameter (e.g. use field instead of parameter) - // TODO possibly set this when setting a damType and damProjectType for this location - public void SetDefaultValues(DamType damType, DamProjectType damProjectType) - { - if ((damType == DamType.Regional) && (damProjectType == DamProjectType.Assessment)) - { - zoneAreaRestSlopeCrestWidth = 1.5; - } - else - { - zoneAreaRestSlopeCrestWidth = 3.0; - } - } - [Validate] public ValidationResult[] AscendingLocalXZSurfaceLine() { Index: dam engine/trunk/src/Deltares.DamEngine.Data/Deltares.DamEngine.Data.csproj =================================================================== diff -u -r686 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Data/Deltares.DamEngine.Data.csproj (.../Deltares.DamEngine.Data.csproj) (revision 686) +++ dam engine/trunk/src/Deltares.DamEngine.Data/Deltares.DamEngine.Data.csproj (.../Deltares.DamEngine.Data.csproj) (revision 711) @@ -99,6 +99,7 @@ + Index: dam engine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs =================================================================== diff -u -r710 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 710) +++ dam engine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 711) @@ -166,8 +166,7 @@ foreach (var designScenario in location.Scenarios) { designScenario.Location = location; - } - + } } } @@ -281,9 +280,33 @@ designScenario.RequiredSafetyFactorPiping = (inputLocationDesignScenario.RequiredSafetyFactorPipingSpecified ? (double?)inputLocationDesignScenario.RequiredSafetyFactorPiping : null); location.Scenarios.Add(designScenario); + } + } + location.DikeEmbankmentMaterial = inputLocation.DikeEmbankmentMaterial; + if (inputLocation.StabilityOptions != null) + { + location.StabilityOptions = new StabilityOptions + { + MapForSoilGeometries2D = inputLocation.StabilityOptions.MapForSoilgeometries2D, + StabilityZoneType = ConversionHelper.ConvertToZoneType(inputLocation.StabilityOptions.ZoneType) + }; + if (inputLocation.StabilityOptions.ForbiddenZoneFactorSpecified) + { + location.StabilityOptions.ForbiddenZoneFactor = inputLocation.StabilityOptions.ForbiddenZoneFactor; } + if (inputLocation.StabilityOptions.ZoneAreaRestSlopeCrestWidthSpecified) + { + location.StabilityOptions.ZoneAreaRestSlopeCrestWidth = inputLocation.StabilityOptions.ZoneAreaRestSlopeCrestWidth; + } + if (inputLocation.StabilityOptions.TrafficLoadSpecified) + { + location.StabilityOptions.TrafficLoad = inputLocation.StabilityOptions.TrafficLoad; + } + if (inputLocation.StabilityOptions.MinimumCircleDepthSpecified) + { + location.StabilityOptions.MinimalCircleDepth = inputLocation.StabilityOptions.MinimumCircleDepth; + } } - dikeLocations.Add(location); } } Index: dam engine/trunk/src/Deltares.DamEngine.Data/General/StabilityOptions.cs =================================================================== diff -u --- dam engine/trunk/src/Deltares.DamEngine.Data/General/StabilityOptions.cs (revision 0) +++ dam engine/trunk/src/Deltares.DamEngine.Data/General/StabilityOptions.cs (revision 711) @@ -0,0 +1,147 @@ +// Copyright (C) Stichting Deltares 2017. 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.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Deltares.DamEngine.Data.General +{ + public class StabilityOptions + { + private double? forbiddenZoneFactor = 1.0; + private double? zoneAreaRestSlopeCrestWidth = 3.0; + private double? minimalCircleDepth = 0; + private double? trafficLoad = 0; + + /// + /// Gets or sets the map for soilgeometries2d (sti-files). + /// + /// + /// The map for soilgeometries2d. + /// + public string MapForSoilGeometries2D { get; set; } = ""; + + /// + /// Gets or sets the type of the stability zone. + /// + /// + /// The type of the stability zone. + /// + public MStabZonesType StabilityZoneType { get; set; } = MStabZonesType.NoZones; + + /// + /// Gets or sets the forbidden zone factor. + /// + /// + /// The forbidden zone factor. + /// + public double? ForbiddenZoneFactor + { + get + { + return forbiddenZoneFactor; + } + set + { + forbiddenZoneFactor = value; + } + } + + /// + /// Gets or sets the width of the zone area rest slope crest. + /// + /// + /// The width of the zone area rest slope crest. + /// + public double? ZoneAreaRestSlopeCrestWidth + { + get + { + return zoneAreaRestSlopeCrestWidth; + } + set + { + zoneAreaRestSlopeCrestWidth = value; + } + } + + /// + /// Gets or sets the traffic load. + /// + /// + /// The traffic load. + /// + public double? TrafficLoad + + { + get + { + return trafficLoad; + } + set + { + trafficLoad = value; + } + } + + /// + /// Gets or sets the minimal circle depth. + /// + /// + /// The minimal circle depth. + /// + public double? MinimalCircleDepth + { + get + { + return minimalCircleDepth; + } + set + { + minimalCircleDepth = value; + } + } + + /// + /// Sets the default values; taking into account which DamProjectType and DamType is set + /// + /// Type of the dam. + /// Type of the dam project. + // TODO fix hiding parameter (e.g. use field instead of parameter) + // TODO possibly set this when setting a damType and damProjectType for this location + public void SetDefaultValues(DamType damType, DamProjectType damProjectType) + { + if ((damType == DamType.Regional) && (damProjectType == DamProjectType.Assessment)) + { + zoneAreaRestSlopeCrestWidth = 1.5; + } + else + { + zoneAreaRestSlopeCrestWidth = 3.0; + } + } + } + + +} Index: dam engine/trunk/src/Deltares.DamEngine.Calculators/Stability/StabilityCalculator.cs =================================================================== diff -u -r683 -r711 --- dam engine/trunk/src/Deltares.DamEngine.Calculators/Stability/StabilityCalculator.cs (.../StabilityCalculator.cs) (revision 683) +++ dam engine/trunk/src/Deltares.DamEngine.Calculators/Stability/StabilityCalculator.cs (.../StabilityCalculator.cs) (revision 711) @@ -159,7 +159,11 @@ else { plLineCreator.SoilProfileType = SoilProfileType.ProfileType2D; - string mapForSoilGeometries2D = location.MapForSoilGeometries2D; + string mapForSoilGeometries2D = ""; + if (location.StabilityOptions != null) + { + mapForSoilGeometries2D = location.StabilityOptions.MapForSoilGeometries2D; + } soilGeometry2DName = Path.Combine(Path.Combine(DamProjectData.ProjectMap, mapForSoilGeometries2D), soilGeometry2DName); plLineCreator.SoilGeometry2DName = soilGeometry2DName; plLineCreator.SoilList = this.SoilList;