Index: dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs =================================================================== diff -u -r601 -r613 --- dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs (.../FillDamFromXmlInputTests.cs) (revision 601) +++ dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/FillDamFromXmlInputTests.cs (.../FillDamFromXmlInputTests.cs) (revision 613) @@ -39,13 +39,21 @@ [TestFixture] public class FillDamFromXmlInputTests { + const AnalysisType expectedAnalysisType = AnalysisType.AdaptGeometry; + const AnalysisType notExpectedAnalysisType = AnalysisType.NoAdaption; + [Test] public void CanWriteAndReadDamProjectDataToXml() { const string inputFilename = "InputFile.xml"; + + // Write input file DamProjectData expectedDamProjectData = CreateExampleDamProjectData(); Input input = FillXmlInputFromDam.CreateInput(expectedDamProjectData); DamXmlSerialization.SaveInputAsXmlFile(inputFilename, input); + + + // Load input file input = DamXmlSerialization.LoadInputFromXmlFile(inputFilename); DamProjectData actualDamProjectData = FillDamFromXmlInput.CreateDamProjectData(input); CompareDamProjectData(actualDamProjectData, expectedDamProjectData); @@ -55,9 +63,15 @@ public void CanWriteAndReadDamProjectDataToXmlString() { string xmlString; + // Write input string DamProjectData expectedDamProjectData = CreateExampleDamProjectData(); Input input = FillXmlInputFromDam.CreateInput(expectedDamProjectData); xmlString = DamXmlSerialization.SaveInputAsXmlString(input); + + // Init static that is to be loaded with not expected value + DamProjectCalculationSpecification.SelectedAnalysisType = notExpectedAnalysisType; + + // Load input string input = DamXmlSerialization.LoadInputFromXmlString(xmlString); DamProjectData actualDamProjectData = FillDamFromXmlInput.CreateDamProjectData(input); CompareDamProjectData(actualDamProjectData, expectedDamProjectData); @@ -76,7 +90,9 @@ private DamProjectData CreateExampleDamProjectData() { var damProjectData = new DamProjectData(); - damProjectData.DamProjectType = DamProjectType.Design; + + FillAnalysisSpecification(damProjectData); + damProjectData.Dike = new Dike(); Dike dike = damProjectData.Dike; FillSurfaceLines(dike); @@ -88,6 +104,17 @@ return damProjectData; } + private static void FillAnalysisSpecification(DamProjectData damProjectData) + { + damProjectData.DamProjectType = DamProjectType.Design; + damProjectData.DamProjectCalculationSpecification = new DamProjectCalculationSpecification(); + DamProjectCalculationSpecification.SelectedAnalysisType = expectedAnalysisType; + var calculationSpecification = new DamFailureMechanismeCalculationSpecification(); + calculationSpecification.FailureMechanismSystemType = FailureMechanismSystemType.Piping; + calculationSpecification.CalculationModel = PipingModelType.Bligh; + damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Add(calculationSpecification); + } + private void FillSoils(Dike dike) { const int soilCount = 3; @@ -336,6 +363,8 @@ private void CompareDamProjectData(DamProjectData actual, DamProjectData expected) { + Assert.AreEqual(expectedAnalysisType, DamProjectCalculationSpecification.SelectedAnalysisType); + var compare = new CompareLogic { Config = { MaxDifferences = 100 } }; var result = compare.Compare(expected, actual); Assert.AreEqual(0, result.Differences.Count, "Differences found read/write Input object"); Index: dam engine/trunk/src/Deltares.DamEngine.Interface/ConversionHelper.cs =================================================================== diff -u -r580 -r613 --- dam engine/trunk/src/Deltares.DamEngine.Interface/ConversionHelper.cs (.../ConversionHelper.cs) (revision 580) +++ dam engine/trunk/src/Deltares.DamEngine.Interface/ConversionHelper.cs (.../ConversionHelper.cs) (revision 613) @@ -319,6 +319,10 @@ return translationTable[soilGeometryType]; } + public const int inputFailureMechanismStabilityInside = 0; + public const int inputFailureMechanismStabilityOutside = 1; + public const int inputFailureMechanismPiping = 2; + public const int inputFailureMechanismHorizontalBalance = 3; /// /// Converts the Dam failure mechanism type to the input failure mechanism type . /// @@ -328,10 +332,10 @@ { var translationTable = new Dictionary() { - {FailureMechanismSystemType.StabilityInside, 0}, - {FailureMechanismSystemType.StabilityOutside, 1}, - {FailureMechanismSystemType.Piping, 2}, - {FailureMechanismSystemType.HorizontalBalance, 3} + {FailureMechanismSystemType.StabilityInside, inputFailureMechanismStabilityInside}, + {FailureMechanismSystemType.StabilityOutside, inputFailureMechanismStabilityOutside}, + {FailureMechanismSystemType.Piping, inputFailureMechanismPiping}, + {FailureMechanismSystemType.HorizontalBalance, inputFailureMechanismHorizontalBalance} }; return translationTable[segmentFailureMechanismType]; } @@ -345,12 +349,104 @@ { var translationTable = new Dictionary() { - {0, FailureMechanismSystemType.StabilityInside}, - {1, FailureMechanismSystemType.StabilityOutside}, - {2, FailureMechanismSystemType.Piping}, - {3, FailureMechanismSystemType.HorizontalBalance} + {inputFailureMechanismStabilityInside, FailureMechanismSystemType.StabilityInside}, + {inputFailureMechanismStabilityOutside, FailureMechanismSystemType.StabilityOutside}, + {inputFailureMechanismPiping, FailureMechanismSystemType.Piping}, + {inputFailureMechanismHorizontalBalance, FailureMechanismSystemType.HorizontalBalance} }; return translationTable[failureMechanismSystemType]; } + + /// + /// Converts the Dam piping model to the input piping model. + /// + /// Type of the piping model. + /// + public static InputPipingModelType ConvertToInputPipingModelType(PipingModelType pipingModelType) + { + var translationTable = new Dictionary() + { + {PipingModelType.Bligh, InputPipingModelType.Bligh}, + {PipingModelType.SellmeijerVnk, InputPipingModelType.SellmeijerVnk}, + {PipingModelType.Sellmeijer4Forces, InputPipingModelType.SellmeijerVnk} + }; + return translationTable[pipingModelType]; + } + + /// + /// Converts the input piping model to the Dam piping model. + /// + /// Type of the input piping model. + /// + public static PipingModelType ConvertToPipingModelType(InputPipingModelType inputPipingModelType) + { + var translationTable = new Dictionary() + { + {InputPipingModelType.Bligh, PipingModelType.Bligh}, + {InputPipingModelType.SellmeijerVnk, PipingModelType.SellmeijerVnk}, + {InputPipingModelType.Sellmeijer4Forces, PipingModelType.Sellmeijer4Forces} + }; + return translationTable[inputPipingModelType]; + } + + /// + /// Converts the Dam stability model to the input stability model. + /// + /// Type of the stability model. + /// + public static InputStabilityModelType ConvertToInputStabilityModelType(MStabModelType stabilityModelType) + { + var translationTable = new Dictionary() + { + {MStabModelType.Bishop, InputStabilityModelType.Bishop}, + {MStabModelType.UpliftVan, InputStabilityModelType.UpliftVan}, + {MStabModelType.BishopUpliftVan,InputStabilityModelType.BishopUpliftVan} + }; + return translationTable[stabilityModelType]; + } + /// + /// Converts the input stability model to the Dam stability model. + /// + /// Type of the input stability model. + /// + public static MStabModelType ConvertToStabilityModelType(InputStabilityModelType inputStabilityModelType) + { + var translationTable = new Dictionary() + { + {InputStabilityModelType.Bishop, MStabModelType.Bishop}, + {InputStabilityModelType.UpliftVan, MStabModelType.UpliftVan}, + {InputStabilityModelType.BishopUpliftVan, MStabModelType.BishopUpliftVan} + }; + return translationTable[inputStabilityModelType]; + } + + /// + /// Converts the Dam analysis type to the input analysis type. + /// + /// Type of the analysis. + /// + public static InputAnalysisType ConvertToInputAnalysisType(AnalysisType analysisType) + { + var translationTable = new Dictionary() + { + {AnalysisType.NoAdaption, InputAnalysisType.NoAdaption}, + {AnalysisType.AdaptGeometry, InputAnalysisType.AdaptGeometry} + }; + return translationTable[analysisType]; + } + /// + /// Converts the input analysis type to the Dam analysis type. + /// + /// Type of the input analysis. + /// + public static AnalysisType ConvertToAnalysisType(InputAnalysisType inputAnalysisType) + { + var translationTable = new Dictionary() + { + {InputAnalysisType.NoAdaption, AnalysisType.NoAdaption}, + {InputAnalysisType.AdaptGeometry, AnalysisType.AdaptGeometry} + }; + return translationTable[inputAnalysisType]; + } } } \ No newline at end of file Index: dam engine/trunk/Xsds Liquid/DamInput.xsd =================================================================== diff -u -r528 -r613 --- dam engine/trunk/Xsds Liquid/DamInput.xsd (.../DamInput.xsd) (revision 528) +++ dam engine/trunk/Xsds Liquid/DamInput.xsd (.../DamInput.xsd) (revision 613) @@ -63,6 +63,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Index: dam engine/trunk/src/Deltares.DamEngine.Interface/FillXmlInputFromDam.cs =================================================================== diff -u -r601 -r613 --- dam engine/trunk/src/Deltares.DamEngine.Interface/FillXmlInputFromDam.cs (.../FillXmlInputFromDam.cs) (revision 601) +++ dam engine/trunk/src/Deltares.DamEngine.Interface/FillXmlInputFromDam.cs (.../FillXmlInputFromDam.cs) (revision 613) @@ -36,6 +36,7 @@ { public class FillXmlInputFromDam { + /// /// Creates the input from Dam data. /// @@ -44,8 +45,10 @@ public static Input CreateInput(DamProjectData damProjectData) { ValidateDamProjectData(damProjectData); + Input input = new Input(); - input.DamProjectType = ConversionHelper.ConvertToInputDamProjectType(damProjectData.DamProjectType); + TransferAnalysisSpecification(damProjectData, input); + Dike dike = damProjectData.Dike; input.Locations = new Io.XmlInput.Location[dike.Locations.Count]; TransferLocations(dike.Locations, input.Locations); @@ -73,6 +76,30 @@ return input; } + 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); + } + + input.PipingModelTypeSpecified = (input.FailureMechanismSystemType == ConversionHelper.inputFailureMechanismPiping); + if (input.PipingModelTypeSpecified) + { + 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 ValidateDamProjectData(DamProjectData damProjectData) { if (damProjectData.Dike == null) Index: dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/TestFiles/InputFile.xml =================================================================== diff -u -r601 -r613 --- dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/TestFiles/InputFile.xml (.../InputFile.xml) (revision 601) +++ dam engine/trunk/src/Deltares.DamEngine.Interface.Tests/TestFiles/InputFile.xml (.../InputFile.xml) (revision 613) @@ -1,5 +1,5 @@ - + Index: dam engine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs =================================================================== diff -u -r612 -r613 --- dam engine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 612) +++ dam engine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 613) @@ -51,11 +51,13 @@ ValidateInput(input); var damProjectData = new DamProjectData { - DamProjectType = ConversionHelper.ConvertToDamProjectType(input.DamProjectType), Dike = new Dike() }; Dike dike = damProjectData.Dike; + + TransferAnalysisSpecification(input, damProjectData); + TransferSurfaceLines(input.SurfaceLines, dike.SurfaceLines2); dike.SoilList = new SoilList(); TransferSoils(input.Soils, dike.SoilList.Soils); @@ -68,6 +70,31 @@ return damProjectData; } + private static void TransferAnalysisSpecification(Input input, DamProjectData damProjectData) + { + damProjectData.DamProjectType = ConversionHelper.ConvertToDamProjectType(input.DamProjectType); + + var calculationSpecification = new DamFailureMechanismeCalculationSpecification(); + + calculationSpecification.FailureMechanismSystemType = ConversionHelper.ConvertToFailureMechanismSystemType(input.FailureMechanismSystemType); + + if (input.AnalysisTypeSpecified) + { + DamProjectCalculationSpecification.SelectedAnalysisType = ConversionHelper.ConvertToAnalysisType(input.AnalysisType); + } + + if (input.PipingModelTypeSpecified) + { + calculationSpecification.PipingModelType = ConversionHelper.ConvertToPipingModelType(input.PipingModelType); + } + + if (input.StabilityModelTypeSpecified) + { + calculationSpecification.StabilityModelType = ConversionHelper.ConvertToStabilityModelType(input.StabilityModelType); + } + damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Add(calculationSpecification); + } + private static void ValidateInput(Input input) { if (input == null) Index: dam engine/trunk/src/Deltares.DamEngine.Io/DamInput.cs =================================================================== diff -u -r601 -r613 --- dam engine/trunk/src/Deltares.DamEngine.Io/DamInput.cs (.../DamInput.cs) (revision 601) +++ dam engine/trunk/src/Deltares.DamEngine.Io/DamInput.cs (.../DamInput.cs) (revision 613) @@ -37,6 +37,20 @@ private InputDamProjectType damProjectTypeField; + private int failureMechanismSystemTypeField; + + private InputPipingModelType pipingModelTypeField; + + private bool pipingModelTypeFieldSpecified; + + private InputStabilityModelType stabilityModelTypeField; + + private bool stabilityModelTypeFieldSpecified; + + private InputAnalysisType analysisTypeField; + + private bool analysisTypeFieldSpecified; + /// [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] public Location[] Locations { @@ -113,6 +127,83 @@ this.damProjectTypeField = value; } } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public int FailureMechanismSystemType { + get { + return this.failureMechanismSystemTypeField; + } + set { + this.failureMechanismSystemTypeField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public InputPipingModelType PipingModelType { + get { + return this.pipingModelTypeField; + } + set { + this.pipingModelTypeField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool PipingModelTypeSpecified { + get { + return this.pipingModelTypeFieldSpecified; + } + set { + this.pipingModelTypeFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public InputStabilityModelType StabilityModelType { + get { + return this.stabilityModelTypeField; + } + set { + this.stabilityModelTypeField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool StabilityModelTypeSpecified { + get { + return this.stabilityModelTypeFieldSpecified; + } + set { + this.stabilityModelTypeFieldSpecified = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public InputAnalysisType AnalysisType { + get { + return this.analysisTypeField; + } + set { + this.analysisTypeField = value; + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool AnalysisTypeSpecified { + get { + return this.analysisTypeFieldSpecified; + } + set { + this.analysisTypeFieldSpecified = value; + } + } } /// @@ -2291,4 +2382,49 @@ /// NWO, } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] + public enum InputPipingModelType { + + /// + Bligh, + + /// + SellmeijerVnk, + + /// + Sellmeijer4Forces, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] + public enum InputStabilityModelType { + + /// + Bishop, + + /// + UpliftVan, + + /// + BishopUpliftVan, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] + public enum InputAnalysisType { + + /// + NoAdaption, + + /// + AdaptGeometry, + } }