Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/ConversionHelperTests.cs =================================================================== diff -u -r1993 -r1997 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 1993) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 1997) @@ -20,16 +20,14 @@ // All rights reserved. using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo; using Deltares.DamEngine.Data.General; -using Deltares.DamEngine.Io.XmlInput; +using Deltares.DamEngine.TestHelpers; using Deltares.MacroStability.Data; using Deltares.MacroStability.Geometry; +using KellermanSoftware.CompareNetObjects; using NUnit.Framework; +using Soil = Deltares.DamEngine.Data.Geotechnics.Soil; namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.MacroStabilityCommon { @@ -115,5 +113,38 @@ Assert.AreEqual(gridOrientation, ConversionHelper.ConvertToGridOrientation(mStabGridPosition)); } #endregion + + #region Soil + [Test] + [Category(Categories.WorkInProgress)] + public void GivenMacroStabilitySoilWhenConvertingToDamSoilAndBackThenResultEqualsOriginal() + { + // Given MacroStability Soil + var macroStabilitySoil = new MacroStability.Geometry.Soil() + { + Name = "MacroStabilitySoil", + AbovePhreaticLevel = 1.01, + BelowPhreaticLevel = 1.02, + Cohesion = 1.03, + FrictionAngle = 1.04, + Dilatancy = -1.045, // -Phi (FrictionAngle) + RRatio = 1.05, + RatioCuPc = 1.06, + RheologicalCoefficient = 1.07, + StrengthIncreaseExponent = 1.08, + UseSoilType = true, + BondStressCurve = null + }; + + // When Converting to DamSoil and back + Soil damSoil = ConversionHelper.ConvertToDamSoil(macroStabilitySoil); + var actualMacroStabilitySoil = ConversionHelper.ConvertToMacroStabilitySoil(damSoil); + + // Then result equals original + var compare = new CompareLogic { Config = { MaxDifferences = 100 } }; + var result = compare.Compare(macroStabilitySoil, actualMacroStabilitySoil); + Assert.AreEqual(0, result.Differences.Count, "Differences found converting/reconverting Soil"); + } + #endregion } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/ConversionHelper.cs =================================================================== diff -u -r1993 -r1997 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/ConversionHelper.cs (.../ConversionHelper.cs) (revision 1993) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/ConversionHelper.cs (.../ConversionHelper.cs) (revision 1997) @@ -22,8 +22,11 @@ using System; using System.Collections.Generic; using Deltares.DamEngine.Data.General; +using Deltares.DamEngine.Data.Geotechnics; +using Deltares.DamEngine.Data.Standard; using Deltares.MacroStability.Data; using Deltares.MacroStability.Geometry; +using Soil = Deltares.MacroStability.Geometry.Soil; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo { @@ -110,7 +113,7 @@ /// Converts to MStabGridPosition. /// The grid orientation. /// - public static MStabGridPosition ConvertToMStabGridPosition(GridOrientation gridOrientation) + public static MStabGridPosition ConvertToMStabGridPosition(GridOrientation gridOrientation) { var translationTable = new Dictionary() { @@ -133,5 +136,95 @@ return translationTable[mStabGridPosition]; } #endregion + + #region Soil + /// Converts to MacroStability soil. + /// The Dam soil. + /// The MacroStability Soil. + public static Soil ConvertToMacroStabilitySoil(Data.Geotechnics.Soil soil) + { + var macroStabilitySoil = new Soil() + { + Name = soil.Name, + AbovePhreaticLevel = soil.AbovePhreaticLevel, + BelowPhreaticLevel = soil.BelowPhreaticLevel, + Cohesion = soil.Cohesion, + FrictionAngle = soil.FrictionAngle, + RRatio = 0.0, // TODO find the correct parameter + RatioCuPc = soil.RatioCuPc, + RheologicalCoefficient = 0.0, // TODO find the correct parameter + StrengthIncreaseExponent = 0.0, // TODO find the correct parameter + UseSoilType = true, // TODO find the correct parameter + BondStressCurve = null // TODO find the correct parameter + }; + switch (soil.DilatancyType) + { + case DilatancyType.MinusPhi: + macroStabilitySoil.Dilatancy = -macroStabilitySoil.FrictionAngle; // -Phi (FrictionAngle) + break; + case DilatancyType.Phi: + macroStabilitySoil.Dilatancy = macroStabilitySoil.FrictionAngle; // Phi (FrictionAngle) + break; + case DilatancyType.Zero: + macroStabilitySoil.Dilatancy = 0.0; // Zero + break; + } + return macroStabilitySoil; + } + /// Converts to Dam soil. + /// The MacroStability soil. + /// The Dam soil. + /// + public static Data.Geotechnics.Soil ConvertToDamSoil(Soil soil) + { + double tolerance = 0.00001; + var damSoil = new Data.Geotechnics.Soil() + { + Name = soil.Name, + AbovePhreaticLevel = soil.AbovePhreaticLevel, + BelowPhreaticLevel = soil.BelowPhreaticLevel, + Cohesion = soil.Cohesion, + FrictionAngle = soil.FrictionAngle, + // RRatio = 1.01 + RatioCuPc = soil.RatioCuPc, + // RheologicalCoefficient = 1.07, + // StrengthIncreaseExponent = 1.08, + // UseSoilType = true, + + // Following parameters are not available in MacroStability soil and will not be translated + //CuBottom = 0.00, + //DiameterD70 = 0.00, + //CuTop = 0.00, + //DiameterD90 = 0.00, + //DryUnitWeight = 0.00, + //Ocr = 0.00, + //PermeabKx = 0.00, + //PoP = 0.00, + //ShearStrengthModel = ShearStrengthModel.CPhi, + //SlopeRestProfile = 0.00, + //SoilType = SoilType.Clay, + //UseDefaultShearStrengthModel = false, + //UsePop = true, + //WhitesConstant = 0.00, + }; + if (soil.Dilatancy.AlmostEquals(soil.FrictionAngle, tolerance)) + { + damSoil.DilatancyType = DilatancyType.Phi; + } + else if (soil.Dilatancy.AlmostEquals(-soil.FrictionAngle, tolerance)) + { + damSoil.DilatancyType = DilatancyType.MinusPhi; + } + else if (soil.Dilatancy.AlmostEquals(0.0, tolerance)) + { + damSoil.DilatancyType = DilatancyType.Zero; + } + else + { + throw new FormatException(string.Format("Cannot determine DilatancyType; Dilatancy = {0}, FrictionAngle = {1}", soil.Dilatancy, soil.FrictionAngle)); + } + return damSoil; + } + #endregion } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillWtiFromDamEngine.cs =================================================================== diff -u -r1993 -r1997 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillWtiFromDamEngine.cs (.../FillWtiFromDamEngine.cs) (revision 1993) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillWtiFromDamEngine.cs (.../FillWtiFromDamEngine.cs) (revision 1997) @@ -87,10 +87,15 @@ private static void TransferSoilModel(DamProjectData damProjectData, IList soils) { - soils.Add(new Soil()); + foreach (Data.Geotechnics.Soil soil in damProjectData.Dike.SoilList.Soils) + { + Soil macroStabilitySoil = ConversionHelper.ConvertToMacroStabilitySoil(soil); + soils.Add(macroStabilitySoil); + } } + private static void TransferSurfaceLine() {