Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityKernelInput.cs =================================================================== diff -u -r6404 -r6420 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityKernelInput.cs (.../FillEngineFromMacroStabilityKernelInput.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillEngineFromMacroStabilityKernelInput.cs (.../FillEngineFromMacroStabilityKernelInput.cs) (revision 6420) @@ -26,7 +26,7 @@ public class FillEngineFromMacroStabilityKernelInput { - public void FillDamProjectDataFromKernelModel(FullInputModelType macroStabilityInput) + public static void FillDamProjectDataFromKernelModel(FullInputModelType macroStabilityInput) { throw new NotImplementedException("This method is not implemented yet."); } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/EngineToMacroStabilityKernelInputTests.cs =================================================================== diff -u -r6404 -r6420 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/EngineToMacroStabilityKernelInputTests.cs (.../EngineToMacroStabilityKernelInputTests.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/EngineToMacroStabilityKernelInputTests.cs (.../EngineToMacroStabilityKernelInputTests.cs) (revision 6420) @@ -60,36 +60,29 @@ expectedDamProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications[0] .StabilityModelType = StabilityModelType.UpliftVan; Waternet expectedWaternet = CreateExampleWaternet(); - UpliftVanCalculationGrid expectedUpliftVanCalculationGrid = CreateExampleUpliftVanCalculationGrid(); - + Location expectedLocation = expectedDamProjectData.Dike.Locations[0]; SoilList expectedSoilList = expectedDamProjectData.Dike.SoilList; SoilProfile2D expectedSoilProfile2D = expectedLocation.Segment.SoilProfileProbabilities[0].SoilProfile2D; SurfaceLine2 expectedSurfaceLine2D = expectedLocation.SurfaceLine; IList expectedConsolidationValues = expectedLocation.TrafficLoadDegreeOfConsolidations; FailureMechanismParametersMStab expectedParametersMStab = expectedDamProjectData.DamProjectCalculationSpecification.CurrentSpecification.FailureMechanismParametersMStab; - var expectedTrafficLoad = new TrafficLoad - { - Pressure = 6.0, - XStart = expectedSurfaceLine2D.CharacteristicPoints.GetPoint2D(CharacteristicPointType.TrafficLoadInside).X, - XEnd = expectedSurfaceLine2D.CharacteristicPoints.GetPoint2D(CharacteristicPointType.TrafficLoadOutside).X - }; var damKernelInput = new DamKernelInput { SubSoilScenario = expectedLocation.Segment.SoilProfileProbabilities[0], Location = expectedLocation, DamFailureMechanismeCalculationSpecification = expectedDamProjectData.DamProjectCalculationSpecification.CurrentSpecification }; - var fillMacroStabilityKernelInputFromEngine = new FillMacroStabilityKernelInputFromEngine - { - UpliftVanCalculationGrid = expectedUpliftVanCalculationGrid, // TODO The: this is not correct, it should be filled in CreateMacroStabilityInterface() - TrafficLoad = expectedTrafficLoad // TODO The: this is not correct, it should be filled in CreateMacroStabilityInterface() - }; - + // Determine the proper values for grid and traffic load using the helper methods + double xCoordinateLowestUpliftFactorPoint = (expectedSurfaceLine2D.CharacteristicPoints.GetPoint2D(CharacteristicPointType.DikeTopAtPolder).X + + expectedSurfaceLine2D.CharacteristicPoints.GetPoint2D(CharacteristicPointType.DikeToeAtPolder).X) * 0.5; + UpliftVanCalculationGrid expectedUpliftVanCalculationGrid = MacroStabilityCommonHelper.FillUpliftVanCalculationGrid(damKernelInput, xCoordinateLowestUpliftFactorPoint); + TrafficLoad expectedTrafficLoad = MacroStabilityCommonHelper.FillTrafficLoad(damKernelInput); + // Create the Macrostability kernel model - FullInputModelType fullInputModel = fillMacroStabilityKernelInputFromEngine.CreateFullInputModel( - damKernelInput, expectedParametersMStab.MStabParameters, expectedWaternet); + FullInputModelType fullInputModel = FillMacroStabilityKernelInputFromEngine.CreateFullInputModel( + damKernelInput, expectedParametersMStab.MStabParameters, expectedWaternet, xCoordinateLowestUpliftFactorPoint); Assert.That(fullInputModel, Is.Not.Null); // // reverse that input to the engine data // var fillEngineFromMacroStabilityWrapperInput = new FillEngineFromMacroStabilityWrapperInput(); @@ -117,18 +110,19 @@ public void GivenCSharpWrapperOutputWhenGoingToAndFromEngineTheDataIsEqual(int testNumber) { //ToDo fill this - // MacroStabilityOutput expectedKernelOutput = CreateKernelOutputForTest(testNumber); - // var engineOutput = new Calculators.KernelWrappers.MacroStabilityInwards.MacroStabilityOutput(); + //MacroStabilityOutput expectedKernelOutput = CreateKernelOutputForTest(testNumber); + var engineOutput = new Calculators.KernelWrappers.MacroStabilityInwards.MacroStabilityOutput(); + Assert.That(engineOutput, Is.Not.Null); // FillEngineFromMacroStabilityWrapperOutput.FillEngineDataWithResults(expectedKernelOutput, engineOutput, out List logMessages); // MacroStabilityOutput kernelOutput = FillMacroStabilityWrapperOutputFromEngine.FillMacroStabilityWrapperOutput(engineOutput, logMessages); - var compare = new CompareLogic - { - Config = - { - MaxDifferences = 100 - } - }; + // var compare = new CompareLogic + // { + // Config = + // { + // MaxDifferences = 100 + // } + // }; // ComparisonResult result = compare.Compare(expectedKernelOutput, kernelOutput); // Assert.That(result.Differences, Is.Empty, "Differences found read/write kernel Output"); } @@ -213,9 +207,12 @@ private static void CompareTrafficLoad(TrafficLoad expectedTrafficLoad, UniformLoadType actualTrafficLoad) { - Assert.That(actualTrafficLoad.XStart, Is.EqualTo(expectedTrafficLoad.XStart).Within(GeometryConstants.Tolerance)); - Assert.That(actualTrafficLoad.XEnd, Is.EqualTo(expectedTrafficLoad.XEnd).Within(GeometryConstants.Tolerance)); - Assert.That(actualTrafficLoad.Pressure, Is.EqualTo(expectedTrafficLoad.Pressure).Within(GeometryConstants.Tolerance)); + Assert.Multiple(() => + { + Assert.That(actualTrafficLoad.XStart, Is.EqualTo(expectedTrafficLoad.XStart).Within(GeometryConstants.Tolerance)); + Assert.That(actualTrafficLoad.XEnd, Is.EqualTo(expectedTrafficLoad.XEnd).Within(GeometryConstants.Tolerance)); + Assert.That(actualTrafficLoad.Pressure, Is.EqualTo(expectedTrafficLoad.Pressure).Within(GeometryConstants.Tolerance)); + }); } private static void CompareTrafficLoadDegreeOfConsolidations(IList expectedDegreeOfConsolidations, @@ -373,14 +370,17 @@ { CharacteristicPointSet expectedCharacteristicPoints = expectedSurfaceLine2.CharacteristicPoints; SurfaceLineTypeCharacteristicPoint[] actualCharacteristicPoints = actualSurfaceLine2.CharacteristicPoints; - Assert.That(actualCharacteristicPoints.Length, Is.EqualTo(expectedCharacteristicPoints.Count)); + Assert.That(actualCharacteristicPoints, Has.Length.EqualTo(expectedCharacteristicPoints.Count)); for (var i = 0; i < actualCharacteristicPoints.Length; i++) { - Assert.That(actualCharacteristicPoints[i].CharacteristicPointType, - Is.EqualTo(InputConversionHelper.ConvertToMacroStabilityCharacteristicPointType( - expectedSurfaceLine2.CharacteristicPoints[i].CharacteristicPointType))); - Assert.That(actualCharacteristicPoints[i].GeometryPoint.X, Is.EqualTo(expectedSurfaceLine2.CharacteristicPoints[i].Point.X).Within(GeometryConstants.Tolerance)); - Assert.That(actualCharacteristicPoints[i].GeometryPoint.Z, Is.EqualTo(expectedSurfaceLine2.CharacteristicPoints[i].Point.Z).Within(GeometryConstants.Tolerance)); + Assert.Multiple(() => + { + Assert.That(actualCharacteristicPoints[i].CharacteristicPointType, + Is.EqualTo(InputConversionHelper.ConvertToMacroStabilityCharacteristicPointType( + expectedSurfaceLine2.CharacteristicPoints[i].CharacteristicPointType))); + Assert.That(actualCharacteristicPoints[i].GeometryPoint.X, Is.EqualTo(expectedSurfaceLine2.CharacteristicPoints[i].Point.X).Within(GeometryConstants.Tolerance)); + Assert.That(actualCharacteristicPoints[i].GeometryPoint.Z, Is.EqualTo(expectedSurfaceLine2.CharacteristicPoints[i].Point.Z).Within(GeometryConstants.Tolerance)); + }); } } @@ -389,9 +389,9 @@ Assert.Multiple(() => { Assert.That(actualSoilProfile.SoilSurfaces, Has.Length.EqualTo(expectedSoilProfile.Surfaces.Count)); - Assert.That(actualSoilProfile.Geometry.Points.Length, Is.EqualTo(expectedSoilProfile.Geometry.Points.Count)); - Assert.That(actualSoilProfile.Geometry.Curves.Length, Is.EqualTo(expectedSoilProfile.Geometry.Curves.Count)); - Assert.That(actualSoilProfile.Geometry.GeometrySurfaces.Length, Is.EqualTo(expectedSoilProfile.Geometry.Surfaces.Count)); + Assert.That(actualSoilProfile.Geometry.Points, Has.Length.EqualTo(expectedSoilProfile.Geometry.Points.Count)); + Assert.That(actualSoilProfile.Geometry.Curves, Has.Length.EqualTo(expectedSoilProfile.Geometry.Curves.Count)); + Assert.That(actualSoilProfile.Geometry.GeometrySurfaces, Has.Length.EqualTo(expectedSoilProfile.Geometry.Surfaces.Count)); }); for (var i = 0; i < expectedSoilProfile.Surfaces.Count; i++) { Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/InputConversionHelper.cs =================================================================== diff -u -r6404 -r6420 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/InputConversionHelper.cs (.../InputConversionHelper.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/InputConversionHelper.cs (.../InputConversionHelper.cs) (revision 6420) @@ -346,7 +346,7 @@ FrictionAngle = soil.FrictionAngle, RatioCuPc = soil.RatioCuPc, StrengthIncreaseExponent = soil.StrengthIncreaseExponent, - //Todo #Bka We keep this as "truth" for now. But maybe Dam should become above/below too + //#Bka We keep this as "truth" for now. But maybe Dam should become above/below too ShearStrengthModel = ConvertToDamShearStrengthModel(soil.ShearStrengthAbovePhreaticLevelModel) }; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityKernelInputFromEngine.cs =================================================================== diff -u -r6404 -r6420 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityKernelInputFromEngine.cs (.../FillMacroStabilityKernelInputFromEngine.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityIo/FillMacroStabilityKernelInputFromEngine.cs (.../FillMacroStabilityKernelInputFromEngine.cs) (revision 6420) @@ -48,41 +48,43 @@ /// /// Class to create macro stability kernel input from dam engine data. /// -public class FillMacroStabilityKernelInputFromEngine +public static class FillMacroStabilityKernelInputFromEngine { - /// Gets or sets the UpliftVan calculation grid. - /// The uplift van calculation grid. - public UpliftVanCalculationGrid UpliftVanCalculationGrid { get; set; } - - /// Gets or sets the Bishop calculation grid. - /// The bishop calculation grid. - public BishopCalculationGrid BishopCalculationGrid { get; set; } - - /// Gets or sets the traffic load. - /// The traffic load. - public TrafficLoad TrafficLoad { get; set; } - /// /// Creates a full input model data object for Macro stability kernel based on DamEngineData. /// /// /// /// + /// /// FullInputModelType - public FullInputModelType CreateFullInputModel(DamKernelInput damKernelInput, MStabParameters mStabParameters, Waternet damWaterNet) + public static FullInputModelType CreateFullInputModel(DamKernelInput damKernelInput, MStabParameters mStabParameters, + Waternet damWaterNet, double xCoordinateLowestUpliftFactorPoint) { // The objectRegistry is to be used to keep track of all keys of some of the referenced objects var objectRegistry = new ObjectRegistry(); + BishopCalculationGrid bishopCalculationGrid = null; + UpliftVanCalculationGrid upliftVanCalculationGrid = null; + if (mStabParameters.Model == StabilityModelType.Bishop) + { + bishopCalculationGrid = MacroStabilityCommonHelper.FillBishopCalculationGrid(damKernelInput); + } + if (mStabParameters.Model == StabilityModelType.UpliftVan) + { + upliftVanCalculationGrid = MacroStabilityCommonHelper.FillUpliftVanCalculationGrid(damKernelInput, xCoordinateLowestUpliftFactorPoint); + } var fullInputModelType = new FullInputModelType { - PreprocessingInput = TransferPreprocessingInput(damKernelInput, mStabParameters), - StabilityModel = TransferStabilityModel(damKernelInput, mStabParameters, damWaterNet, objectRegistry), + PreprocessingInput = TransferPreprocessingInput(damKernelInput, mStabParameters, bishopCalculationGrid, upliftVanCalculationGrid), + StabilityModel = TransferStabilityModel(damKernelInput, mStabParameters, damWaterNet, objectRegistry, bishopCalculationGrid, upliftVanCalculationGrid), VersionInfo = TransferVersionInfo() }; return fullInputModelType; } - private PreprocessingInputType TransferPreprocessingInput(DamKernelInput damKernelInput, MStabParameters mStabParameters) + private static PreprocessingInputType TransferPreprocessingInput(DamKernelInput damKernelInput, MStabParameters mStabParameters, + BishopCalculationGrid bishopCalculationGrid, + UpliftVanCalculationGrid upliftVanCalculationGrid) { if (damKernelInput == null) { @@ -94,17 +96,19 @@ PreConstructionStages = new PreConstructionStageType[1] }; preprocessingInputType.PreConstructionStages[0] = new PreConstructionStageType(); - PreConstructionStageType preConstructionLastStage = preprocessingInputType.PreConstructionStages.Last(); + PreConstructionStageType preConstructionLastStage = preprocessingInputType.PreConstructionStages[0]; preConstructionLastStage.Surfaceline = new SurfaceLineType(); preConstructionLastStage.CreateWaternet = false; TransferSurfaceLine(damKernelInput.Location.SurfaceLine, preConstructionLastStage.Surfaceline); - preprocessingInputType.SearchAreaConditions = TransferSearchAreaCondition(mStabParameters); + preprocessingInputType.SearchAreaConditions = TransferSearchAreaCondition(mStabParameters, bishopCalculationGrid, upliftVanCalculationGrid); return preprocessingInputType; } - private SearchAreaConditionsType TransferSearchAreaCondition(MStabParameters mStabParameters) + private static SearchAreaConditionsType TransferSearchAreaCondition(MStabParameters mStabParameters, + BishopCalculationGrid bishopCalculationGrid, + UpliftVanCalculationGrid upliftVanCalculationGrid) { var preprocessingSearchAreaConditions = new SearchAreaConditionsType { @@ -128,10 +132,10 @@ switch (mStabParameters.Model) { case StabilityModelType.Bishop: - TransferBishopSearchAreaSettings(preprocessingSearchAreaConditions); + TransferBishopSearchAreaSettings(preprocessingSearchAreaConditions, bishopCalculationGrid); break; case StabilityModelType.UpliftVan: - TransferUpliftVanSearchAreaSettings(preprocessingSearchAreaConditions); + TransferUpliftVanSearchAreaSettings(preprocessingSearchAreaConditions, upliftVanCalculationGrid); break; default: throw new NotImplementedException(nameof(mStabParameters.Model)); @@ -140,96 +144,96 @@ return preprocessingSearchAreaConditions; } - private void TransferBishopSearchAreaSettings(SearchAreaConditionsType kernelSearchAreaConditions) + private static void TransferBishopSearchAreaSettings(SearchAreaConditionsType kernelSearchAreaConditions, BishopCalculationGrid bishopCalculationGrid) { // In the Macrostability kernel, for Bishop, the automatic tangent lines are set by AutoSearchArea = True. // Setting AutoTangentLines to true will create the automatic tangent lines of Uplift-Van which is not desired. kernelSearchAreaConditions.AutoTangentLines = false; - kernelSearchAreaConditions.AutoSearchArea = BishopCalculationGrid.IsSearchAreaAutomatic; - kernelSearchAreaConditions.TangentLineNumber = BishopCalculationGrid.TangentLineCount; - kernelSearchAreaConditions.TangentLineZTop = BishopCalculationGrid.TangentLineZTop; - kernelSearchAreaConditions.TangentLineZBottom = BishopCalculationGrid.TangentLineZBottom; + kernelSearchAreaConditions.AutoSearchArea = bishopCalculationGrid.IsSearchAreaAutomatic; + kernelSearchAreaConditions.TangentLineNumber = bishopCalculationGrid.TangentLineCount; + kernelSearchAreaConditions.TangentLineZTop = bishopCalculationGrid.TangentLineZTop; + kernelSearchAreaConditions.TangentLineZBottom = bishopCalculationGrid.TangentLineZBottom; kernelSearchAreaConditions.MaxSpacingBetweenBoundaries = 10.0; } - private void TransferUpliftVanSearchAreaSettings(SearchAreaConditionsType kernelSearchAreaConditions) + private static void TransferUpliftVanSearchAreaSettings(SearchAreaConditionsType kernelSearchAreaConditions, UpliftVanCalculationGrid upliftVanCalculationGrid) { - kernelSearchAreaConditions.AutoTangentLines = UpliftVanCalculationGrid.TangentLinesCreationMethod is TangentLinesDefinition.Automatic or TangentLinesDefinition.OnBoundaryLines; - kernelSearchAreaConditions.AutoSearchArea = UpliftVanCalculationGrid.IsGridsAutomatic; - kernelSearchAreaConditions.OnlyAbovePleistoceen = UpliftVanCalculationGrid.TangentLinesCreationMethod == TangentLinesDefinition.Automatic; - kernelSearchAreaConditions.TangentLineNumber = UpliftVanCalculationGrid.TangentLineCount; - kernelSearchAreaConditions.TangentLineZTop = UpliftVanCalculationGrid.TangentLineZTop; - kernelSearchAreaConditions.TangentLineZBottom = UpliftVanCalculationGrid.TangentLineZBottom; + kernelSearchAreaConditions.AutoTangentLines = upliftVanCalculationGrid.TangentLinesCreationMethod is TangentLinesDefinition.Automatic or TangentLinesDefinition.OnBoundaryLines; + kernelSearchAreaConditions.AutoSearchArea = upliftVanCalculationGrid.IsGridsAutomatic; + kernelSearchAreaConditions.OnlyAbovePleistoceen = upliftVanCalculationGrid.TangentLinesCreationMethod == TangentLinesDefinition.Automatic; + kernelSearchAreaConditions.TangentLineNumber = upliftVanCalculationGrid.TangentLineCount; + kernelSearchAreaConditions.TangentLineZTop = upliftVanCalculationGrid.TangentLineZTop; + kernelSearchAreaConditions.TangentLineZBottom = upliftVanCalculationGrid.TangentLineZBottom; kernelSearchAreaConditions.MaxSpacingBetweenBoundaries = 0.8; } - private BishopCalculationCircle TransferBishopCalculationGrid() + private static BishopCalculationCircle TransferBishopCalculationGrid(BishopCalculationGrid bishopCalculationGrid) { - if (BishopCalculationGrid == null) + if (bishopCalculationGrid == null) { - throw new ArgumentNullException(nameof(BishopCalculationGrid)); + throw new ArgumentNullException(nameof(bishopCalculationGrid)); } var kernelBishopCalculationCircle = new BishopCalculationCircle { Grid = new CalculationGridType { - GridXNumber = BishopCalculationGrid.GridXCount, - GridXLeft = BishopCalculationGrid.GridXLeft, - GridXRight = BishopCalculationGrid.GridXRight, - GridZNumber = BishopCalculationGrid.GridZCount, - GridZTop = BishopCalculationGrid.GridZTop, - GridZBottom = BishopCalculationGrid.GridZBottom + GridXNumber = bishopCalculationGrid.GridXCount, + GridXLeft = bishopCalculationGrid.GridXLeft, + GridXRight = bishopCalculationGrid.GridXRight, + GridZNumber = bishopCalculationGrid.GridZCount, + GridZTop = bishopCalculationGrid.GridZTop, + GridZBottom = bishopCalculationGrid.GridZBottom } }; - if (!BishopCalculationGrid.IsSearchAreaAutomatic) + if (!bishopCalculationGrid.IsSearchAreaAutomatic) { - kernelBishopCalculationCircle.TangentLines = new double[BishopCalculationGrid.TangentLineLevels.Count]; - kernelBishopCalculationCircle.TangentLines = BishopCalculationGrid.TangentLineLevels.ToArray(); + kernelBishopCalculationCircle.TangentLines = new double[bishopCalculationGrid.TangentLineLevels.Count]; + kernelBishopCalculationCircle.TangentLines = bishopCalculationGrid.TangentLineLevels.ToArray(); } return kernelBishopCalculationCircle; } - private UpliftVanCalculationGridType TransferUpliftVanCalculationGrid() + private static UpliftVanCalculationGridType TransferUpliftVanCalculationGrid(UpliftVanCalculationGrid upliftVanCalculationGrid) { - if (UpliftVanCalculationGrid == null) + if (upliftVanCalculationGrid == null) { - throw new ArgumentNullException(nameof(UpliftVanCalculationGrid)); + throw new ArgumentNullException(nameof(upliftVanCalculationGrid)); } var kernelUpliftVanCalculationGrid = new UpliftVanCalculationGridType { LeftGrid = new CalculationGridType { - GridXNumber = UpliftVanCalculationGrid.LeftGridXCount, - GridXLeft = UpliftVanCalculationGrid.LeftGridXLeft, - GridXRight = UpliftVanCalculationGrid.LeftGridXRight, - GridZNumber = UpliftVanCalculationGrid.LeftGridZCount, - GridZTop = UpliftVanCalculationGrid.LeftGridZTop, - GridZBottom = UpliftVanCalculationGrid.LeftGridZBottom + GridXNumber = upliftVanCalculationGrid.LeftGridXCount, + GridXLeft = upliftVanCalculationGrid.LeftGridXLeft, + GridXRight = upliftVanCalculationGrid.LeftGridXRight, + GridZNumber = upliftVanCalculationGrid.LeftGridZCount, + GridZTop = upliftVanCalculationGrid.LeftGridZTop, + GridZBottom = upliftVanCalculationGrid.LeftGridZBottom }, RightGrid = new CalculationGridType { - GridXNumber = UpliftVanCalculationGrid.RightGridXCount, - GridXLeft = UpliftVanCalculationGrid.RightGridXLeft, - GridXRight = UpliftVanCalculationGrid.RightGridXRight, - GridZNumber = UpliftVanCalculationGrid.RightGridZCount, - GridZTop = UpliftVanCalculationGrid.RightGridZTop, - GridZBottom = UpliftVanCalculationGrid.RightGridZBottom + GridXNumber = upliftVanCalculationGrid.RightGridXCount, + GridXLeft = upliftVanCalculationGrid.RightGridXLeft, + GridXRight = upliftVanCalculationGrid.RightGridXRight, + GridZNumber = upliftVanCalculationGrid.RightGridZCount, + GridZTop = upliftVanCalculationGrid.RightGridZTop, + GridZBottom = upliftVanCalculationGrid.RightGridZBottom } }; - if (UpliftVanCalculationGrid.TangentLinesCreationMethod == TangentLinesDefinition.Specified) + if (upliftVanCalculationGrid.TangentLinesCreationMethod == TangentLinesDefinition.Specified) { - kernelUpliftVanCalculationGrid.TangentLines = UpliftVanCalculationGrid.TangentLineLevels.ToArray(); + kernelUpliftVanCalculationGrid.TangentLines = upliftVanCalculationGrid.TangentLineLevels.ToArray(); } return kernelUpliftVanCalculationGrid; } - private void TransferSurfaceLine(SurfaceLine2 damSurfaceLine, SurfaceLineType kernelSurfaceLine) + private static void TransferSurfaceLine(SurfaceLine2 damSurfaceLine, SurfaceLineType kernelSurfaceLine) { kernelSurfaceLine.CharacteristicPoints = new SurfaceLineTypeCharacteristicPoint[damSurfaceLine.CharacteristicPoints.Count]; var i = 0; @@ -249,14 +253,16 @@ } } - private StabilityInputType TransferStabilityModel(DamKernelInput damKernelInput, MStabParameters mStabParameters, - Waternet damWaterNet, ObjectRegistry registry) + private static StabilityInputType TransferStabilityModel(DamKernelInput damKernelInput, MStabParameters mStabParameters, + Waternet damWaterNet, ObjectRegistry registry, + BishopCalculationGrid bishopCalculationGrid, + UpliftVanCalculationGrid upliftVanCalculationGrid) { if (damKernelInput == null || mStabParameters == null) { return null; } - + TrafficLoad trafficLoad = MacroStabilityCommonHelper.FillTrafficLoad(damKernelInput); var kernelStabilityInput = new StabilityInputType { ConstructionStages = new ConstructionStageInputType[1], @@ -265,10 +271,10 @@ switch (mStabParameters.Model) { case StabilityModelType.Bishop: - kernelStabilityInput.BishopCalculationCircle = TransferBishopCalculationGrid(); + kernelStabilityInput.BishopCalculationCircle = TransferBishopCalculationGrid(bishopCalculationGrid); break; case StabilityModelType.UpliftVan: - kernelStabilityInput.UpliftVanCalculationGrid = TransferUpliftVanCalculationGrid(); + kernelStabilityInput.UpliftVanCalculationGrid = TransferUpliftVanCalculationGrid(upliftVanCalculationGrid); break; default: throw new NotImplementedException(nameof(mStabParameters.Model)); @@ -278,7 +284,7 @@ TransferStabilityModelProperties(mStabParameters, kernelStabilityInput); kernelStabilityInput.ConstructionStages[0] = new ConstructionStageInputType(); - ConstructionStageInputType lastStage = kernelStabilityInput.ConstructionStages.Last(); + ConstructionStageInputType lastStage = kernelStabilityInput.ConstructionStages[0]; kernelStabilityInput.Soils = new SoilType[damKernelInput.Location.SoilList.Soils.Count]; lastStage.FixedSoilStresses = new FixedSoilStressType[damKernelInput.Location.SoilList.Soils.Count]; @@ -289,8 +295,8 @@ lastStage.WaterDefinition = WaterDefinitionType.WaterNet; TransferSoilProfile(damKernelInput.SubSoilScenario.SoilProfile2D, lastStage.SoilProfile, lastStage.PreconsolidationStresses, registry); - lastStage.UniformLoads = TransferUniformLoads(TrafficLoad, registry); - TransferTrafficLoadDegreeOfConsolidation(TrafficLoad, damKernelInput.SubSoilScenario.SoilProfile2D, + lastStage.UniformLoads = TransferUniformLoads(trafficLoad, registry); + TransferTrafficLoadDegreeOfConsolidation(trafficLoad, damKernelInput.SubSoilScenario.SoilProfile2D, damKernelInput.Location.TrafficLoadDegreeOfConsolidations, lastStage, registry); lastStage.Waternet = new WaternetType(); @@ -309,7 +315,7 @@ return kernelStabilityInput; } - private VersionInfoType TransferVersionInfo() + private static VersionInfoType TransferVersionInfo() { var versionInfoType = new VersionInfoType { @@ -320,7 +326,7 @@ return versionInfoType; } - private void TransferStabilityModelProperties(MStabParameters mStabParameters, StabilityInputType kernelStabilityInput) + private static void TransferStabilityModelProperties(MStabParameters mStabParameters, StabilityInputType kernelStabilityInput) { kernelStabilityInput.Orientation = InputConversionHelper.ConvertToMacroStabilityGridOrientation(mStabParameters.GridPosition); kernelStabilityInput.ModelOption = InputConversionHelper.ConvertToMacroStabilityModelOption(mStabParameters.Model); @@ -374,7 +380,7 @@ } } - private void CreateDefaultBeeSwarmOptions(StabilityInputType kernelStabilityInput) + private static void CreateDefaultBeeSwarmOptions(StabilityInputType kernelStabilityInput) { kernelStabilityInput.BeeswarmAlgorithmOptions = new BeeSwarmAlgorithmOptionsType { @@ -390,7 +396,7 @@ }; } - private void TransferSoils(SoilList damSoilList, SoilType[] kernelSoils, FixedSoilStressType[] kernelFixedSoilStresses, + private static void TransferSoils(SoilList damSoilList, SoilType[] kernelSoils, FixedSoilStressType[] kernelFixedSoilStresses, ObjectRegistry registry) { if (damSoilList != null) @@ -418,7 +424,7 @@ return kernelSoil; } - private void TransferSoilProfile(SoilProfile2D damSoilProfile2D, SoilProfileType kernelSoilProfile, + private static void TransferSoilProfile(SoilProfile2D damSoilProfile2D, SoilProfileType kernelSoilProfile, PreconsolidationStressType[] kernelPreConsolidationStresses, ObjectRegistry registry) { // Add points @@ -573,7 +579,7 @@ } } - private UniformLoadType[] TransferUniformLoads(TrafficLoad damTrafficLoad, ObjectRegistry registry) + private static UniformLoadType[] TransferUniformLoads(TrafficLoad damTrafficLoad, ObjectRegistry registry) { if (damTrafficLoad != null) { @@ -590,14 +596,14 @@ return kernelUniformLoads; } - return null; + return []; } private static void TransferTrafficLoadDegreeOfConsolidation(TrafficLoad damTrafficLoad, SoilProfile2D damSoilProfile, IList damDegreeOfConsolidations, ConstructionStageInputType kernelStage, ObjectRegistry registry) { - if (damDegreeOfConsolidations != null && kernelStage.UniformLoads.Length == 1) + if (damTrafficLoad != null && damDegreeOfConsolidations != null && kernelStage.UniformLoads.Length == 1) { var i = 0; kernelStage.ConsolidationValues = new ConsolidationValuesTypeConsolidationValue[damDegreeOfConsolidations.Count]; Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs =================================================================== diff -u -r6405 -r6420 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 6405) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityCommon/MacroStabilityCommonHelper.cs (.../MacroStabilityCommonHelper.cs) (revision 6420) @@ -141,7 +141,32 @@ return bishopCalculationGrid; } + + /// + /// Creates the actual calculation grids and tangent lines for the uplift model specific for the calculation + /// + /// + /// + /// + public static UpliftVanCalculationGrid FillUpliftVanCalculationGrid(DamKernelInput damKernelInput, double xCoordinateLastUpliftPoint) + { + SlipCircleDefinition slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification + .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; + slipCircleDefinition.XCoordinateLowestUpliftFactorPoint = xCoordinateLastUpliftPoint; + UpliftVanCalculationGrid upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings( + slipCircleDefinition, damKernelInput.Location.SurfaceLine); + double centerOfLeftGridXCoordinate = + (upliftVanCalculationGrid.LeftGridXLeft + upliftVanCalculationGrid.LeftGridXRight) * 0.5; + SoilProfile1D soilProfile1DAtCenterOfLeftGridXCoordinate = + damKernelInput.SubSoilScenario.DetermineSoilProfile1DAtX(centerOfLeftGridXCoordinate, + damKernelInput.Location.SurfaceLine, + damKernelInput.Location.GetDikeEmbankmentSoil()); + UpliftVanGridCreator.DetermineTangentLines(upliftVanCalculationGrid, slipCircleDefinition, + soilProfile1DAtCenterOfLeftGridXCoordinate); + return upliftVanCalculationGrid; + } + /// /// Gets the name of the stability input file. /// Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r6404 -r6420 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 6404) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 6420) @@ -147,7 +147,7 @@ return PrepareResult.NotRelevant; } - fillMacroStabilityWrapperFromEngine.UpliftVanCalculationGrid = FillUpliftVanCalculationGrid(damKernelInput, upliftSituation.XCoordinateLowestUpliftFactorPoint); + fillMacroStabilityWrapperFromEngine.UpliftVanCalculationGrid = MacroStabilityCommonHelper.FillUpliftVanCalculationGrid(damKernelInput, upliftSituation.XCoordinateLowestUpliftFactorPoint); } FailureMechanismParametersMStab.MStabParameters.Model = model; @@ -522,25 +522,6 @@ return null; } - private static UpliftVanCalculationGrid FillUpliftVanCalculationGrid(DamKernelInput damKernelInput, double xCoordinateLastUpliftPoint) - { - SlipCircleDefinition slipCircleDefinition = damKernelInput.DamFailureMechanismeCalculationSpecification - .FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition; - slipCircleDefinition.XCoordinateLowestUpliftFactorPoint = xCoordinateLastUpliftPoint; - UpliftVanCalculationGrid upliftVanCalculationGrid = UpliftVanGridCreator.DetermineGridsFromSettings( - slipCircleDefinition, damKernelInput.Location.SurfaceLine); - double centerOfLeftGridXCoordinate = - (upliftVanCalculationGrid.LeftGridXLeft + upliftVanCalculationGrid.LeftGridXRight) * 0.5; - SoilProfile1D soilProfile1DAtCenterOfLeftGridXCoordinate = - damKernelInput.SubSoilScenario.DetermineSoilProfile1DAtX(centerOfLeftGridXCoordinate, - damKernelInput.Location.SurfaceLine, - damKernelInput.Location.GetDikeEmbankmentSoil()); - UpliftVanGridCreator.DetermineTangentLines(upliftVanCalculationGrid, slipCircleDefinition, - soilProfile1DAtCenterOfLeftGridXCoordinate); - - return upliftVanCalculationGrid; - } - private MacroStabilityOutputItem ProperMacroStabilityResultsItem(MacroStabilityOutput macroStabilityOutput, int requestedIndex) { MacroStabilityOutputItem macroStabilityOutputItem = null;