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()
{