Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/ConversionHelperTests.cs =================================================================== diff -u -r3000 -r3025 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 3000) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/ConversionHelperTests.cs (.../ConversionHelperTests.cs) (revision 3025) @@ -168,7 +168,7 @@ RRatio = 1.05, RatioCuPc = 1.06, //RheologicalCoefficient = 1.07, Not yet to be used - ShearStrengthModel = MacroStability.CSharpWrapper.Input.ShearStrengthModel.CPhiOrCuCalculated, + ShearStrengthModel = MacroStability.CSharpWrapper.ShearStrengthModelType.CPhiOrCuCalculated, StrengthIncreaseExponent = 1.08, UseSoilClassification = false, // must be false BondStressCurve = null // must be null @@ -206,20 +206,20 @@ #endregion #region ShearStrengthModel - [TestCase(MacroStability.CSharpWrapper.Input.ShearStrengthModel.CPhi, ShearStrengthModel.CPhi)] - [TestCase(MacroStability.CSharpWrapper.Input.ShearStrengthModel.CPhiOrCuCalculated, ShearStrengthModel.CPhiOrSuCalculated)] - [TestCase(MacroStability.CSharpWrapper.Input.ShearStrengthModel.CuCalculated, ShearStrengthModel.SuCalculated)] + [TestCase(MacroStability.CSharpWrapper.ShearStrengthModelType.CPhi, ShearStrengthModel.CPhi)] + [TestCase(MacroStability.CSharpWrapper.ShearStrengthModelType.CPhiOrCuCalculated, ShearStrengthModel.CPhiOrSuCalculated)] + [TestCase(MacroStability.CSharpWrapper.ShearStrengthModelType.CuCalculated, ShearStrengthModel.SuCalculated)] public static void CanConvertToDamShearStrengthModel( - MacroStability.CSharpWrapper.Input.ShearStrengthModel kernelShearStrengthModel, ShearStrengthModel damShearStrengthModel) + MacroStability.CSharpWrapper.ShearStrengthModelType kernelShearStrengthModel, ShearStrengthModel damShearStrengthModel) { Assert.AreEqual(damShearStrengthModel, ConversionHelper.ConvertToDamShearStrengthModel(kernelShearStrengthModel)); } - [TestCase(ShearStrengthModel.CPhi, MacroStability.CSharpWrapper.Input.ShearStrengthModel.CPhi)] - [TestCase(ShearStrengthModel.CPhiOrSuCalculated, MacroStability.CSharpWrapper.Input.ShearStrengthModel.CPhiOrCuCalculated)] - [TestCase(ShearStrengthModel.SuCalculated, MacroStability.CSharpWrapper.Input.ShearStrengthModel.CuCalculated)] + [TestCase(ShearStrengthModel.CPhi, MacroStability.CSharpWrapper.ShearStrengthModelType.CPhi)] + [TestCase(ShearStrengthModel.CPhiOrSuCalculated, MacroStability.CSharpWrapper.ShearStrengthModelType.CPhiOrCuCalculated)] + [TestCase(ShearStrengthModel.SuCalculated, MacroStability.CSharpWrapper.ShearStrengthModelType.CuCalculated)] public static void CanConvertToMacroStabilityShearStrengthModel( - ShearStrengthModel damShearStrengthModel, MacroStability.CSharpWrapper.Input.ShearStrengthModel kernelShearStrengthModel) + ShearStrengthModel damShearStrengthModel, MacroStability.CSharpWrapper.ShearStrengthModelType kernelShearStrengthModel) { Assert.AreEqual(kernelShearStrengthModel, ConversionHelper.ConvertToMacroStabilityShearStrengthModel(damShearStrengthModel)); } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/TestHelpers/DamEngineDataTestFactory.cs =================================================================== diff -u -r2910 -r3025 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/TestHelpers/DamEngineDataTestFactory.cs (.../DamEngineDataTestFactory.cs) (revision 2910) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/TestHelpers/DamEngineDataTestFactory.cs (.../DamEngineDataTestFactory.cs) (revision 3025) @@ -46,6 +46,7 @@ }; return scenario; } + /// /// Creates the location for testing. /// @@ -76,84 +77,99 @@ var s1 = new Soil("DKN5") { AbovePhreaticLevel = 17.5, - BelowPhreaticLevel = 17.50 + BelowPhreaticLevel = 17.50, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s1); var s2 = new Soil("DKN4") { AbovePhreaticLevel = 17.16, - BelowPhreaticLevel = 17.16 + BelowPhreaticLevel = 17.16, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s2); var s3 = new Soil("OA") { AbovePhreaticLevel = 18.00, - BelowPhreaticLevel = 20.00 + BelowPhreaticLevel = 20.00, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s3); var s4 = new Soil("DKN3"); + s4.ShearStrengthModel = ShearStrengthModel.CPhi; soilList.Soils.Add(s4); var s5 = new Soil("LM"); + s5.ShearStrengthModel = ShearStrengthModel.CPhi; soilList.Soils.Add(s5); var s6 = new Soil("OB1"); + s6.ShearStrengthModel = ShearStrengthModel.CPhi; soilList.Soils.Add(s6); var s7 = new Soil("OB2"); + s7.ShearStrengthModel = ShearStrengthModel.CPhi; soilList.Soils.Add(s7); var s8 = new Soil("veen") { AbovePhreaticLevel = 10.15, - BelowPhreaticLevel = 10.20 + BelowPhreaticLevel = 10.20, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s8); var s9 = new Soil("Del_Tfg") { AbovePhreaticLevel = 10.15, - BelowPhreaticLevel = 10.20 + BelowPhreaticLevel = 10.20, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s9); var s10 = new Soil("Del_Tss_1") { AbovePhreaticLevel = 14.46, - BelowPhreaticLevel = 14.50 + BelowPhreaticLevel = 14.50, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s10); var s11 = new Soil("Del_Ffg") { AbovePhreaticLevel = 12.65, - BelowPhreaticLevel = 12.70 + BelowPhreaticLevel = 12.70, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s11); var s12 = new Soil("Del_Kms") { AbovePhreaticLevel = 18, - BelowPhreaticLevel = 20 + BelowPhreaticLevel = 20, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s12); var s13 = new Soil("Del_Ssc") { AbovePhreaticLevel = 18, - BelowPhreaticLevel = 20 + BelowPhreaticLevel = 20, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s13); var s14 = new Soil("DeL_Tcs") { AbovePhreaticLevel = 16.05, - BelowPhreaticLevel = 17.74 + BelowPhreaticLevel = 17.74, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s14); var s15 = new Soil("Del_Ppp") { AbovePhreaticLevel = 18, - BelowPhreaticLevel = 20 + BelowPhreaticLevel = 20, + ShearStrengthModel = ShearStrengthModel.CPhi }; soilList.Soils.Add(s15); soilList.AquiferDictionary = new Dictionary(); @@ -179,7 +195,7 @@ /// Creates a 2D soil profile for the tests. /// /// - public static SoilProfile2D CreateSoilProfile2D() + public static SoilProfile2D CreateSoilProfile2D(SoilList soiList) { SoilProfile2D soilProfile2D = new SoilProfile2D(); @@ -191,37 +207,65 @@ var layer = new SoilLayer2D { - Name = "Layer 1", - Soil = new Soil("OA", 17.70, 17.70) + Name = "Layer 1" }; - layer.GeometrySurface = new GeometrySurface(); + layer.Soil = soiList != null ? soiList.GetSoilByName("OA") : new Soil("OA", 18, 17); + layer.Soil.ShearStrengthModel = ShearStrengthModel.CPhi; var outerLoop = new GeometryLoop(); var point1 = new Point2D(0, 1); + geometry.Points.Add(point1); var point2 = new Point2D(100, 1); + geometry.Points.Add(point2); var point3 = new Point2D(100, -5); + geometry.Points.Add(point3); var point4 = new Point2D(0, -5); - outerLoop.CurveList.Add(new GeometryCurve(point1, point2)); - outerLoop.CurveList.Add(new GeometryCurve(point2, point3)); - outerLoop.CurveList.Add(new GeometryCurve(point3, point4)); - outerLoop.CurveList.Add(new GeometryCurve(point4, point1)); + geometry.Points.Add(point4); + var curve1 = new GeometryCurve(point1, point2); + geometry.Curves.Add(curve1); + outerLoop.CurveList.Add(curve1); + var curve2 = new GeometryCurve(point2, point3); + geometry.Curves.Add(curve2); + outerLoop.CurveList.Add(curve2); + var curve3 = new GeometryCurve(point3, point4); + geometry.Curves.Add(curve3); + outerLoop.CurveList.Add(curve3); + var curve4 = new GeometryCurve(point4, point1); + geometry.Curves.Add(curve4); + outerLoop.CurveList.Add(curve4); + geometry.Loops.Add(outerLoop); + var surface1 = new GeometrySurface(outerLoop); + geometry.Surfaces.Add(surface1); + layer.GeometrySurface = surface1; layer.GeometrySurface.OuterLoop = outerLoop; layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Hydrostatic; layer.IsAquifer = true; soilProfile2D.Surfaces.Add(layer); layer = new SoilLayer2D { - Name = "Layer 2", - Soil = new Soil("LM", 18.00, 18.00) + Name = "Layer 2" }; - layer.GeometrySurface = new GeometrySurface(); + layer.Soil = soiList != null ? soiList.GetSoilByName("LM") : new Soil("LM", 18, 17); + layer.Soil.ShearStrengthModel = ShearStrengthModel.CPhi; outerLoop = new GeometryLoop(); var point5 = new Point2D(0, -10); + geometry.Points.Add(point5); var point6 = new Point2D(100, -10); - outerLoop.CurveList.Add(new GeometryCurve(point4, point3)); - outerLoop.CurveList.Add(new GeometryCurve(point3, point6)); - outerLoop.CurveList.Add(new GeometryCurve(point6, point5)); - outerLoop.CurveList.Add(new GeometryCurve(point5, point4)); + geometry.Points.Add(point6); + var curve5 = new GeometryCurve(point3, point6); + geometry.Curves.Add(curve5); + var curve6 = new GeometryCurve(point6, point5); + geometry.Curves.Add(curve6); + var curve7 = new GeometryCurve(point5, point4); + geometry.Curves.Add(curve7); + outerLoop.CurveList.Add(curve3); + outerLoop.CurveList.Add(curve5); + outerLoop.CurveList.Add(curve6); + outerLoop.CurveList.Add(curve7); + geometry.Loops.Add(outerLoop); + var surface2 = new GeometrySurface(outerLoop); + geometry.Surfaces.Add(surface2); + layer.GeometrySurface = surface2; layer.GeometrySurface.OuterLoop = outerLoop; layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Hydrostatic; layer.IsAquifer = true; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs =================================================================== diff -u -r3004 -r3025 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs (.../FillMacroStabilityWrapperInputFromEngine.cs) (revision 3004) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityWrapperInputFromEngine.cs (.../FillMacroStabilityWrapperInputFromEngine.cs) (revision 3025) @@ -32,11 +32,11 @@ using CharacteristicPointType = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointType; using HeadLine = Deltares.DamEngine.Data.Geometry.HeadLine; using KernelUpliftVanCalculationGrid = Deltares.MacroStability.CSharpWrapper.UpliftVanCalculationGrid; -using KernelWaternet = Deltares.MacroStability.CSharpWrapper.Input.Waternet; +using KernelWaternet = Deltares.MacroStability.CSharpWrapper.Waternet; using KernelMacroStabilityInput = Deltares.MacroStability.CSharpWrapper.Input.MacroStabilityInput; using KernelPoint2D = Deltares.MacroStability.CSharpWrapper.Point2D; -using KernelWaternetLine = Deltares.MacroStability.CSharpWrapper.Input.WaternetLine; -using KernelHeadLine = Deltares.MacroStability.CSharpWrapper.Input.HeadLine; +using KernelWaternetLine = Deltares.MacroStability.CSharpWrapper.WaternetLine; +using KernelHeadLine = Deltares.MacroStability.CSharpWrapper.HeadLine; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo @@ -171,7 +171,7 @@ // Add geometry surfaces var geometrySurfacesDictionary = new Dictionary(); - kernelSoilProfile.Geometry.GeometrySurfaces = new List(); + kernelSoilProfile.Geometry.Surfaces = new List(); foreach (var damSurface in damSoilProfile2D.Geometry.Surfaces) { var kernelGeometrySurface = new Surface(); @@ -182,22 +182,20 @@ { kernelGeometrySurface.InnerLoops.Add(loopsDictionary[damSurfaceInnerLoop]); } - kernelSoilProfile.Geometry.GeometrySurfaces.Add(kernelGeometrySurface); + kernelSoilProfile.Geometry.Surfaces.Add(kernelGeometrySurface); } // Add soil surfaces kernelSoilProfile.SoilSurfaces = new List(); foreach (var damSoilLayer2D in damSoilProfile2D.Surfaces) { - var kernelSoilLayer2D = new SoilProfileSurface - { - GeometrySurface = geometrySurfacesDictionary[damSoilLayer2D.GeometrySurface], - Soil = soilsDictionary[damSoilLayer2D.Soil], - IsAquifer = damSoilLayer2D.IsAquifer, - WaterPressureInterpolationModel = + var kernelSoilLayer2D = new SoilProfileSurface(); + kernelSoilLayer2D.Surface = geometrySurfacesDictionary[damSoilLayer2D.GeometrySurface]; + kernelSoilLayer2D.Soil = soilsDictionary[damSoilLayer2D.Soil]; + kernelSoilLayer2D.IsAquifer = damSoilLayer2D.IsAquifer; + kernelSoilLayer2D.WaterPressureInterpolationModel = ConversionHelper.ConvertToMacroStabilityWaterpressureInterpolationModel(damSoilLayer2D - .WaterpressureInterpolationModel) - }; + .WaterpressureInterpolationModel); kernelSoilProfile.SoilSurfaces.Add(kernelSoilLayer2D); } @@ -251,7 +249,7 @@ var kernelWaternetLine = CreateLine(damWaternetLine); kernelWaternetLine.AssociatedHeadLine = headLineMapping[damWaternetLine.HeadLine]; - kernelWaternet.WaternetLines.Add(kernelWaternetLine); + kernelWaternet.ReferenceLines.Add(kernelWaternetLine); // .WaternetLines } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs =================================================================== diff -u -r3004 -r3025 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 3004) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapperTests.cs (.../MacroStabilityInwardsKernelWrapperTests.cs) (revision 3025) @@ -34,6 +34,7 @@ using Deltares.DamEngine.Io; using Deltares.DamEngine.TestHelpers; using Deltares.DamEngine.TestHelpers.Factories; +using Deltares.MacroStability.CSharpWrapper.Input; using NUnit.Framework; using NUnit.Framework.Constraints; using LogMessage = Deltares.DamEngine.Data.Standard.Logging.LogMessage; @@ -48,7 +49,6 @@ private string inputXmlForDamEngine = Path.Combine(TestFolder, "StabilityDesign1Dbased.xml"); [Test] - [Category(Categories.WorkInProgress)] public void TestPrepare() { var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); @@ -57,7 +57,7 @@ IKernelDataInput kernelDataInput; IKernelDataOutput kernelDataOutput; var kernelInput = CreateDamKernelInputForTest(); - kernelInput.SubSoilScenario.SoilProfile2D.Surfaces[0].IsAquifer = false; // dit lijkt nog steeds niet te werken ivm cached. Nagaan en anders de tests uit elkaar trekken! + kernelInput.SubSoilScenario.SoilProfile2D.Surfaces[0].IsAquifer = false; // Situation 1: no uplift. Expected PrepareResult.NotRelevant kernelInput.Location.ModelFactors.UpliftCriterionStability = 0.8; @@ -68,29 +68,29 @@ Assert.AreEqual(false, damMacroStabilityOutput.UpliftSituation.IsUplift); // Situation 2: there is uplift and prepare succeeds. Expected PrepareResult.Successful - //kernelInput.SubSoilScenario.SoilProfile2D.Surfaces[0].IsAquifer = false; // This has in fact no use HERE as cached 1D's are used based on the original 2D input kernelInput.Location.ModelFactors.UpliftCriterionStability = 1.2; prepareResult = kernelWrapper.Prepare(kernelInput, 0, out kernelDataInput, out kernelDataOutput); Assert.AreEqual(PrepareResult.Successful, prepareResult); damMacroStabilityOutput = (MacroStabilityOutput)kernelDataOutput; Assert.AreEqual(CalculationResult.NoRun, damMacroStabilityOutput.CalculationResult); Assert.AreEqual(true, damMacroStabilityOutput.UpliftSituation.IsUplift); - // Situation 3: there is uplift and prepare fails. Expected PrepareResult.Failed + // Situation 3: prepare fails. Expected PrepareResult.Failed kernelInput.Location.ModelFactors.UpliftCriterionStability = 1.2; + kernelInput.Location.SurfaceLine.CharacteristicPoints.Clear(); prepareResult = kernelWrapper.Prepare(kernelInput, 0, out kernelDataInput, out kernelDataOutput); Assert.AreEqual(PrepareResult.Failed, prepareResult); damMacroStabilityOutput = (MacroStabilityOutput)kernelDataOutput; Assert.AreEqual(CalculationResult.NoRun, damMacroStabilityOutput.CalculationResult); - Assert.AreEqual(true, damMacroStabilityOutput.UpliftSituation.IsUplift); } [Test] - [Category(Categories.WorkInProgress)] //Has to wait for implementation of Validation method in the C#wrapper. And then it has to be rewritten! + [Category(Categories.WorkInProgress)] // check input and result public void TestValidate() { var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); - + kernelWrapper.FailureMechanismParametersMStab = new FailureMechanismParametersMStab(); + // Validate without setting values. Expected error messages. var macroStabilityInput1 = new MacroStabilityKernelDataInput(); var macroStabilityOutput1 = new MacroStabilityOutput(); @@ -101,11 +101,15 @@ Assert.AreEqual(CalculationResult.InvalidInputData, macroStabilityOutput1.CalculationResult); // Validate the input when valid input is provided. Expected no messages. - var macroStabilityInput2 = new MacroStabilityKernelDataInput(); + var kernelInput = CreateDamKernelInputForTest(); + kernelInput.SubSoilScenario.SoilProfile2D.Surfaces[0].IsAquifer = false; + kernelInput.Location.ModelFactors.UpliftCriterionStability = 1.2; + var prepareResult = kernelWrapper.Prepare(kernelInput, 0, out IKernelDataInput kernelDataInput, out IKernelDataOutput kernelDataOutput); + Assert.IsTrue(prepareResult == PrepareResult.Successful); var macroStabilityOutput2 = new MacroStabilityOutput(); macroStabilityOutput2.CalculationResult = CalculationResult.NoRun; messages.Clear(); - errorCount = kernelWrapper.Validate(macroStabilityInput2, macroStabilityOutput2, out messages); + errorCount = kernelWrapper.Validate(kernelDataInput, macroStabilityOutput2, out messages); Assert.IsTrue(errorCount == 0); Assert.AreEqual(CalculationResult.NoRun, macroStabilityOutput2.CalculationResult); } @@ -143,7 +147,6 @@ } [Test] - [Category(Categories.WorkInProgress)] //check why result is unexpected public void TestFullCalculationFails() { var kernelWrapper = new MacroStabilityInwardsKernelWrapper(); @@ -156,7 +159,8 @@ kernelWrapper.Execute(kernelDataInput, kernelDataOutput, out messages); MacroStabilityOutput macroStabilityOutput = (MacroStabilityOutput)kernelDataOutput; Assert.IsTrue(messages.Count > 0); - Assert.AreEqual(CalculationResult.RunFailed, macroStabilityOutput.CalculationResult); + // as there is no data at all, expect unexpected error + Assert.AreEqual(CalculationResult.UnexpectedError, macroStabilityOutput.CalculationResult); } [Test] @@ -172,13 +176,13 @@ IKernelDataInput kernelDataInput; IKernelDataOutput kernelDataOutput; var kernelInput = CreateDamKernelInputForTest(); + kernelInput.Location.ModelFactors.UpliftCriterionStability = 1.2; PrepareResult prepareResult = kernelWrapper.Prepare(kernelInput, 0, out kernelDataInput, out kernelDataOutput); Assert.AreEqual(PrepareResult.Successful, prepareResult); // Validate the input List messages; var errorCount = kernelWrapper.Validate(kernelDataInput, kernelDataOutput, out messages); - // ToDo MWDAM-1356: Not clear yet what input must be provided to make Validate succeed. Skip for now. Assert.IsTrue(errorCount == 0); // Run the dll @@ -311,7 +315,7 @@ subSoilScenario.SoilProfileType = SoilProfileType.ProfileType2D; subSoilScenario.StiFileName = ""; subSoilScenario.FullStiFileName = ""; - subSoilScenario.SoilProfile2D = DamEngineDataTestFactory.CreateSoilProfile2D(); + subSoilScenario.SoilProfile2D = DamEngineDataTestFactory.CreateSoilProfile2D(location.SoilList); subSoilScenario.SegmentFailureMechanismType = SegmentFailureMechanismType.Stability; subSoilScenario.SoilProfile1D = DamEngineDataTestFactory.CreateSoilProfile1D(); Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r3004 -r3025 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3004) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 3025) @@ -36,17 +36,21 @@ using Deltares.DamEngine.Data.Standard; using Deltares.DamEngine.Data.Standard.Calculation; using Deltares.MacroStability.CSharpWrapper; +using Deltares.MacroStability.CSharpWrapper.Input; +using Deltares.MacroStability.CSharpWrapper.Output; using Deltares.MacroStability.Standard; +using CharacteristicPointType = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointType; using GeometryPoint = Deltares.DamEngine.Data.Geometry.GeometryPoint; using LogMessage = Deltares.DamEngine.Data.Standard.Logging.LogMessage; using LogMessageType = Deltares.DamEngine.Data.Standard.Logging.LogMessageType; +using Soil = Deltares.DamEngine.Data.Geotechnics.Soil; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityInwards { public class MacroStabilityInwardsKernelWrapper : IKernelWrapper { private Calculator stabilityCalculator; - + private int lastIterationIndex; /// @@ -94,7 +98,8 @@ var waterNet = PlLinesToWaternetConverter.ConvertPlLineToWaternet(plLines, damKernelInput.SubSoilScenario.SoilProfile1D, penetrationLength, left, right); TrafficLoad trafficLoad = null; - if (damKernelInput.Location.StabilityOptions.TrafficLoad.HasValue && !damKernelInput.Location.StabilityOptions.TrafficLoad.Value.AlmostZero()) + if (damKernelInput.Location.StabilityOptions != null && damKernelInput.Location.StabilityOptions.TrafficLoad.HasValue && + !damKernelInput.Location.StabilityOptions.TrafficLoad.Value.AlmostZero()) { trafficLoad = new TrafficLoad(); trafficLoad.Pressure = damKernelInput.Location.StabilityOptions.TrafficLoad.Value; @@ -129,26 +134,26 @@ private void EnsureSoilProfile2DIsFilled(SoilGeometryProbability subSoilScenario, SurfaceLine2 surfaceLine2, Soil dikeEmbankmentSoil) { - // var soilProfile2D = subSoilScenario.SoilProfile2D; - // if (soilProfile2D == null) - // { - // var soilSurfaceProfile = new SoilSurfaceProfile - // { - // SoilProfile = subSoilScenario.SoilProfile1D, - // SurfaceLine2 = surfaceLine2, - // Name = surfaceLine2.Name + "_" + subSoilScenario.SoilProfile1D.Name, - // DikeEmbankmentMaterial = dikeEmbankmentSoil - // }; - // // Convert the soilsurfacesoilprofile to a SoilProfile2D to be able to edit it properly. - // var soilProfile2DNew = soilSurfaceProfile.ConvertToSoilProfile2D(); - // //soilSurfaceProfile.Dispose(); - // // For some obscure reason, the created soilProfile2D is handled wrong in the UI (see DSB=786). - // // Its curves do not seem to match the surfaces in the events send on selecting and dragging a curve. - // // This causes the strange behaviour. To solve this, a Clone is made of the soilProfile2D and that clone is added instead. - // //soilProfile2D = (SoilProfile2D)soilProfile2D.Clone(); - // //soilProfile2DNew.Dispose(); - // soilProfile2D = soilProfile2DNew; - // } + var soilProfile2D = subSoilScenario.SoilProfile2D; + if (soilProfile2D == null) + { + // var soilSurfaceProfile = new SoilSurfaceProfile + // { + // SoilProfile = subSoilScenario.SoilProfile1D, + // SurfaceLine2 = surfaceLine2, + // Name = surfaceLine2.Name + "_" + subSoilScenario.SoilProfile1D.Name, + // DikeEmbankmentMaterial = dikeEmbankmentSoil + // }; + // // Convert the soilsurfacesoilprofile to a SoilProfile2D to be able to edit it properly. + // var soilProfile2DNew = soilSurfaceProfile.ConvertToSoilProfile2D(); + // //soilSurfaceProfile.Dispose(); + // // For some obscure reason, the created soilProfile2D is handled wrong in the UI (see DSB=786). + // // Its curves do not seem to match the surfaces in the events send on selecting and dragging a curve. + // // This causes the strange behaviour. To solve this, a Clone is made of the soilProfile2D and that clone is added instead. + // //soilProfile2D = (SoilProfile2D)soilProfile2D.Clone(); + // //soilProfile2DNew.Dispose(); + // soilProfile2D = soilProfile2DNew; + } } private PrepareResult PrepareKernel(MacroStability.CSharpWrapper.Input.MacroStabilityInput input) @@ -185,9 +190,39 @@ /// public int Validate(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) { - // Todo implement validation as soon as it has been implemented in the C# wrapper. + MacroStabilityKernelDataInput macroStabilityKernelDataInput = (MacroStabilityKernelDataInput)kernelDataInput; + var result = Deltares.MacroStability.CSharpWrapper.Validator.Validate((MacroStabilityInput)macroStabilityKernelDataInput.Input); messages = new List(); - return 0; + if (result.IsValid) + { + return 0; + } + + (kernelDataOutput as MacroStabilityOutput).CalculationResult = CalculationResult.InvalidInputData; + foreach (var resultMessage in result.Messages) + { + var message = new LogMessage(); + message.Message = resultMessage.Content; + switch (resultMessage.MessageType) + { + case MessageType.Error: + { + message.MessageType = LogMessageType.Error; + break; + } + case MessageType.Info: + { + message.MessageType = LogMessageType.Info; + break; + } + case MessageType.Warning: + { + message.MessageType = LogMessageType.Warning; + break; + } + }; + } + return 1; } /// Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/UpliftHelperTests.cs =================================================================== diff -u -r2910 -r3025 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/UpliftHelperTests.cs (.../UpliftHelperTests.cs) (revision 2910) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/Common/UpliftHelperTests.cs (.../UpliftHelperTests.cs) (revision 3025) @@ -54,7 +54,7 @@ [Test] public void TestDetermineStabilityUpliftWithSoilProfile2D() { - SoilProfile2D soilProfile2D = DamEngineDataTestFactory.CreateSoilProfile2D(); + SoilProfile2D soilProfile2D = DamEngineDataTestFactory.CreateSoilProfile2D(null); var damKernelInput = CreateDamKernelInput(); damKernelInput.SubSoilScenario.SoilProfileType = SoilProfileType.ProfileType2D; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs =================================================================== diff -u -r3004 -r3025 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs (.../FillEngineFromMacroStabilityWrapperInput.cs) (revision 3004) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityWrapperInput.cs (.../FillEngineFromMacroStabilityWrapperInput.cs) (revision 3025) @@ -30,10 +30,9 @@ using HeadLine = Deltares.DamEngine.Data.Geometry.HeadLine; using Soil = Deltares.DamEngine.Data.Geotechnics.Soil; using SurfaceLine2 = Deltares.DamEngine.Data.Geotechnics.SurfaceLine2; -using KernelUpliftVanCalculationGrid = Deltares.MacroStability.CSharpWrapper.UpliftVanCalculationGrid; -using KernelWaternet = Deltares.MacroStability.CSharpWrapper.Input.Waternet; -using KernelHeadLine = Deltares.MacroStability.CSharpWrapper.Input.HeadLine; -using KernelWaternetLine = Deltares.MacroStability.CSharpWrapper.Input.WaternetLine; +using KernelWaternet = Deltares.MacroStability.CSharpWrapper.Waternet; +using KernelHeadLine = Deltares.MacroStability.CSharpWrapper.HeadLine; +using KernelWaternetLine = Deltares.MacroStability.CSharpWrapper.WaternetLine; using WaternetLine = Deltares.DamEngine.Data.Geometry.WaternetLine; @@ -166,7 +165,7 @@ } // Waternet Lines - foreach (ReferenceLine kernelWaternetLine in kernelWaternet.WaternetLines) + foreach (var kernelWaternetLine in kernelWaternet.ReferenceLines) { var waternetLine = CreateLine(kernelWaternetLine); waternetLine.HeadLine = headLineMapping[kernelWaternetLine.AssociatedHeadLine]; @@ -271,7 +270,7 @@ // Add surfaces var geometrySurfacesDictionary = new Dictionary(); - foreach (var kernelSurface in kernelSoilProfile2D.Geometry.GeometrySurfaces) + foreach (var kernelSurface in kernelSoilProfile2D.Geometry.Surfaces) { var damSurface = new GeometrySurface(); damSurface.OuterLoop = loopsDictionary[kernelSurface.OuterLoop]; @@ -288,7 +287,7 @@ foreach (var kernelSoilLayer2D in kernelSoilProfile2D.SoilSurfaces) { SoilLayer2D damSoilLayer2D = new SoilLayer2D(); - damSoilLayer2D.GeometrySurface = geometrySurfacesDictionary[kernelSoilLayer2D.GeometrySurface]; + damSoilLayer2D.GeometrySurface = geometrySurfacesDictionary[kernelSoilLayer2D.Surface]; damSoilLayer2D.Soil = soilDictionary[kernelSoilLayer2D.Soil.Name]; damSoilLayer2D.IsAquifer = kernelSoilLayer2D.IsAquifer; damSoilLayer2D.WaterpressureInterpolationModel = ConversionHelper.ConvertToDamWaterpressureInterpolationModel(kernelSoilLayer2D.WaterPressureInterpolationModel); Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/ConversionHelper.cs =================================================================== diff -u -r2997 -r3025 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/ConversionHelper.cs (.../ConversionHelper.cs) (revision 2997) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/ConversionHelper.cs (.../ConversionHelper.cs) (revision 3025) @@ -37,7 +37,7 @@ using Soil = Deltares.MacroStability.CSharpWrapper.Input.Soil; using StabilityModelOptionType = Deltares.MacroStability.CSharpWrapper.Output.StabilityModelOptionType; using WaterPressureInterpolationModelKernel = Deltares.MacroStability.CSharpWrapper.Input.WaterPressureInterpolationModel; -using ShearStrengthModelKernel = Deltares.MacroStability.CSharpWrapper.Input.ShearStrengthModel; +using ShearStrengthModelKernel = Deltares.MacroStability.CSharpWrapper.ShearStrengthModelType; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo { @@ -183,7 +183,7 @@ public static Soil ConvertToMacroStabilitySoil(Data.Geotechnics.Soil soil) { ShearStrengthModel shearStrengthModel = ShearStrengthModel.None; - if (soil.ShearStrengthModel.HasValue) + if (soil.ShearStrengthModel != null && soil.ShearStrengthModel.HasValue) { shearStrengthModel = soil.ShearStrengthModel.Value; }