Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs =================================================================== diff -u -r2022 -r2026 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs (.../MacroStabilityIoTests.cs) (revision 2022) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIoTests.cs (.../MacroStabilityIoTests.cs) (revision 2026) @@ -140,6 +140,7 @@ FillWtiKernelData fillWtiKernelData = new FillWtiKernelData() { SoilList = fillDamEngineFromWti.SoilList, + Waternet = fillDamEngineFromWti.Waternet, FailureMechanismParametersMStab = fillDamEngineFromWti.FailureMechanismParametersMStab, Location = fillDamEngineFromWti.Location, SoilProfile2D = fillDamEngineFromWti.SoilProfile2D, @@ -157,15 +158,38 @@ CompareSoilProfile2D(expectedKernelModel.StabilityModel.SoilProfile, actualKernelModel.StabilityModel.SoilProfile); CompareSoilSurfaceLine(expectedKernelModel.PreprocessingModel.LastStage.SurfaceLine.CharacteristicPoints, actualKernelModel.PreprocessingModel.LastStage.SurfaceLine.CharacteristicPoints); + CompareWaternet(expectedKernelModel.StabilityModel.ConstructionStages[0].GeotechnicsData.CurrentWaternet, + actualKernelModel.StabilityModel.ConstructionStages[0].GeotechnicsData.CurrentWaternet); } + private void CompareWaternet(Waternet expectedWaternet, Waternet actualWaternet) + { + var compare = new CompareLogic { Config = { MaxDifferences = 100 } }; + compare.Config.MembersToIgnore = new List() + { + "Waternet", + "Owner" + }; + ComparisonResult result; + Assert.AreEqual(expectedWaternet.IsGenerated, actualWaternet.IsGenerated); + Assert.AreEqual(expectedWaternet.UnitWeight, actualWaternet.UnitWeight); + result = compare.Compare(expectedWaternet.PhreaticLine, actualWaternet.PhreaticLine); + Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel Waternet.PhreaticLine"); + result = compare.Compare(expectedWaternet.WaternetLineList, actualWaternet.WaternetLineList); + Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel Waternet.WaternetLineList"); + result = compare.Compare(expectedWaternet.HeadLineList, actualWaternet.HeadLineList); + Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel Waternet.HeadLineList"); + Assert.AreEqual(expectedWaternet.ExternalWaterLevel, actualWaternet.ExternalWaterLevel); + } + private void CompareSoilSurfaceLine(CharacteristicPointSet expectedCharacteristicPoints, CharacteristicPointSet actualCharacteristicPoints) { var compare = new CompareLogic { Config = { MaxDifferences = 100 } }; compare.Config.MembersToIgnore = new List() { "Owner" - }; var result = compare.Compare(expectedCharacteristicPoints, actualCharacteristicPoints); + }; + var result = compare.Compare(expectedCharacteristicPoints, actualCharacteristicPoints); Assert.AreEqual(0, result.Differences.Count, "Differences found read/write kernel SurfaceLine"); } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillDamEngineFromWti.cs =================================================================== diff -u -r2018 -r2026 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillDamEngineFromWti.cs (.../FillDamEngineFromWti.cs) (revision 2018) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillDamEngineFromWti.cs (.../FillDamEngineFromWti.cs) (revision 2026) @@ -29,9 +29,11 @@ using CharacteristicPoint = Deltares.DamEngine.Data.Geotechnics.CharacteristicPoint; using GeometryCurve = Deltares.MacroStability.Geometry.GeometryCurve; using GeometryLoop = Deltares.MacroStability.Geometry.GeometryLoop; +using GeometryPointString = Deltares.MacroStability.Geometry.GeometryPointString; using GeometrySurface = Deltares.MacroStability.Geometry.GeometrySurface; using Point2D = Deltares.MacroStability.Geometry.Point2D; using SurfaceLine2 = Deltares.DamEngine.Data.Geotechnics.SurfaceLine2; +using Waternet = Deltares.MacroStability.Geometry.Waternet; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo { @@ -46,34 +48,90 @@ public Location Location { get; set; } /// Gets or sets the SoilProfile2D DamEngine object. /// The soil profile2 d. - public Data.Geotechnics.SoilProfile2D SoilProfile2D { get; set; } + public SoilProfile2D SoilProfile2D { get; set; } /// Gets or sets the SurfaceLine2 DamEngine object. /// The surface line2. - public Data.Geotechnics.SurfaceLine2 SurfaceLine2 { get; set; } + public SurfaceLine2 SurfaceLine2 { get; set; } + /// Gets or sets the waternet. + /// The waternet. + public Data.Geometry.Waternet Waternet { get; set; } /// Gets or sets the failure mechanism parameters m stab. /// The failure mechanism parameters for macrostability DamEngine object. public FailureMechanismParametersMStab FailureMechanismParametersMStab { get; set; } private Dictionary dictSoils = new Dictionary(); + private Dictionary dictHeadLines = new Dictionary(); /// Creates the dam project data from the kernel model. /// The kernel model. /// The DamProjectData object filled with Wti data public void FillDamProjectDataFromKernelModel(KernelModel kernelModel) { SoilList = new SoilList(); Location = new Location(); - SoilProfile2D = new Data.Geotechnics.SoilProfile2D(); - SurfaceLine2 = new Data.Geotechnics.SurfaceLine2(); + SoilProfile2D = new SoilProfile2D(); + SurfaceLine2 = new SurfaceLine2(); + Waternet = new Data.Geometry.Waternet(); FailureMechanismParametersMStab = new FailureMechanismParametersMStab(); TransferWtiStabilityModel(kernelModel.StabilityModel, FailureMechanismParametersMStab); TransferSoils(kernelModel.StabilityModel.Soils); TransferSoilProfile2D(kernelModel.StabilityModel.SoilProfile); TransferSurfaceLine(kernelModel.PreprocessingModel.LastStage.SurfaceLine, SurfaceLine2); + TransferWaternet(kernelModel.StabilityModel.ConstructionStages[0].GeotechnicsData.CurrentWaternet, Waternet); // TransferLocation(kernelModel, Location); // TransferSurfaceLine2(kernelModel, SurfaceLine2); // TransferParametersMStab(kernelModel, FailureMechanismParametersMStab); } + private void TransferWaternet(Waternet kernelWaternet, Data.Geometry.Waternet damWaternet) + { + // Properties + damWaternet.IsGenerated = kernelWaternet.IsGenerated; + damWaternet.UnitWeight = kernelWaternet.UnitWeight; + + // Phreatic Line + var damPhreaticLine = new PhreaticLine() + { + Name = kernelWaternet.PhreaticLine.Name + }; + foreach (var kernelPoint in kernelWaternet.PhreaticLine.CalcPoints) + { + damPhreaticLine.CalcPoints.Add(new Data.Geometry.Point2D(kernelPoint.X, kernelPoint.Z)); + } + dictHeadLines.Add(kernelWaternet.PhreaticLine, damPhreaticLine); + damWaternet.PhreaticLine = damPhreaticLine; + + // Head Lines + foreach (var kernelHeadLine in kernelWaternet.HeadLineList) + { + var damHeadLine = new HeadLine() + { + Name = kernelHeadLine.Name + }; + foreach (var kernelPoint in kernelHeadLine.CalcPoints) + { + damHeadLine.CalcPoints.Add(new Data.Geometry.Point2D(kernelPoint.X, kernelPoint.Z)); + } + damWaternet.HeadLineList.Add(damHeadLine); + dictHeadLines.Add(kernelHeadLine, damHeadLine); + } + + // Waternet Lines + foreach (var kernelWaternetLine in kernelWaternet.WaternetLineList) + { + var damWaternetLine = new WaternetLine() + { + Name = kernelWaternetLine.Name + }; + foreach (var kernelPoint in kernelWaternetLine.CalcPoints) + { + damWaternetLine.CalcPoints.Add(new Data.Geometry.Point2D(kernelPoint.X, kernelPoint.Z)); + } + + damWaternetLine.HeadLine = dictHeadLines[kernelWaternetLine.HeadLine]; + damWaternet.WaternetLineList.Add(damWaternetLine); + } + } + private void TransferSurfaceLine(MacroStability.Geometry.SurfaceLine2 kernelSurfaceLine2, SurfaceLine2 damSurfaceLine) { foreach (var kernelCharPoint in kernelSurfaceLine2.CharacteristicPoints) Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillWtiKernelData.cs =================================================================== diff -u -r2018 -r2026 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillWtiKernelData.cs (.../FillWtiKernelData.cs) (revision 2018) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillWtiKernelData.cs (.../FillWtiKernelData.cs) (revision 2026) @@ -32,6 +32,7 @@ using SoilLayer2D = Deltares.DamEngine.Data.Geotechnics.SoilLayer2D; using SoilProfile2D = Deltares.MacroStability.Geometry.SoilProfile2D; using SurfaceLine2 = Deltares.MacroStability.Geometry.SurfaceLine2; +using Waternet = Deltares.DamEngine.Data.Geometry.Waternet; namespace Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo { @@ -50,15 +51,19 @@ /// Gets or sets the SurfaceLine2 DamEngine object. /// The surface line2. public Data.Geotechnics.SurfaceLine2 SurfaceLine2 { get; set; } - /// Gets or sets the failure mechanism parameters m stab. - /// The failure mechanism parameters for macrostability DamEngine object. + /// Gets or sets the waternet. + /// The waternet. + public Waternet Waternet { get; set; } + /// Gets or sets the MStab failure mechanism parameters. + /// The MStab failure mechanism parameters. public FailureMechanismParametersMStab FailureMechanismParametersMStab { get; set; } private Dictionary dictSoils = new Dictionary(); private Dictionary dictPoints = new Dictionary(); private Dictionary dictCurves = new Dictionary(); private Dictionary dictLoops = new Dictionary(); private Dictionary dictSurfaces = new Dictionary(); + private Dictionary dictHeadLines = new Dictionary(); /// Creates the kernel model from dam project data. /// The KernelModel filled with the Dam Project Data @@ -75,19 +80,69 @@ TransferSurfaceLine(SurfaceLine2, kernelModel.PreprocessingModel.LastStage.SurfaceLine); kernelModel.PreprocessingModel.ConstructionStages.Add(new PreprocessingConstructionStage()); kernelModel.PreprocessingModel.LastStage.Locations.Add(new Location()); + TransferWaternet(Waternet, kernelModel.StabilityModel.ConstructionStages[0].GeotechnicsData.CurrentWaternet); TransferLocation(Location, kernelModel.PreprocessingModel.LastStage.Locations); // TODO TransferPreconsolidationStresses(); // TODO TransferUniformLoads(); // TODO TransferConsolidationValues(); // TODO TransferMultiplicationFactorsCPhiForUplift(); // TODO - TransferWaternets(); // TODO TransferSpencerSlipPlanes(); // TODO TransferUpliftVanCalculationGrid(); // TODO TransferSlipPlaneConstraints(); // TODO TransferLevenbergMarquardtOptions(); // TODO return kernelModel; } + private void TransferWaternet(Waternet damWaternet, MacroStability.Geometry.Waternet kernelWaternet) + { + // Properties + kernelWaternet.IsGenerated = damWaternet.IsGenerated; + kernelWaternet.UnitWeight = damWaternet.UnitWeight; + + // Phreatic Line + kernelWaternet.PhreaticLine = new PhreaticLine() + { + Name = damWaternet.PhreaticLine.Name + + }; + foreach (var damPoint in damWaternet.PhreaticLine.CalcPoints) + { + kernelWaternet.PhreaticLine.CalcPoints.Add(new Point2D(damPoint.X, damPoint.Z)); + } + dictHeadLines.Add(damWaternet.PhreaticLine, kernelWaternet.PhreaticLine); + + // Head Lines + foreach (var damHeadLine in damWaternet.HeadLineList) + { + var kernelHeadLine = new HeadLine() + { + Name = damHeadLine.Name + }; + foreach (var damPoint in damHeadLine.CalcPoints) + { + kernelHeadLine.CalcPoints.Add(new Point2D(damPoint.X, damPoint.Z)); + } + kernelWaternet.HeadLineList.Add(kernelHeadLine); + dictHeadLines.Add(damHeadLine, kernelHeadLine); + } + + // Waternet Lines + foreach (var damWaternetLine in damWaternet.WaternetLineList) + { + var kernelWaternetLine = new WaternetLine() + { + Name = damWaternetLine.Name + }; + foreach (var damPoint in damWaternetLine.CalcPoints) + { + kernelWaternetLine.CalcPoints.Add(new Point2D(damPoint.X, damPoint.Z)); + } + + kernelWaternetLine.HeadLine = dictHeadLines[damWaternetLine.HeadLine]; + kernelWaternet.WaternetLineList.Add(kernelWaternetLine); + } + } + private void TransferSurfaceLine(Data.Geotechnics.SurfaceLine2 damSurfaceLine, SurfaceLine2 kernelSurfaceLine) { foreach (var damCharPoint in damSurfaceLine.CharacteristicPoints) @@ -272,11 +327,6 @@ } - private void TransferWaternets() - { - - } - private void TransferSpencerSlipPlanes() {