// Copyright (C) Stichting Deltares 2019. All rights reserved. // // This file is part of the Dam Engine. // // The Dam Engine is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System; using Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.TestHelpers; using Deltares.MacroStability.Data; using Deltares.MacroStability.Geometry; using Deltares.MacroStability.Standard; using KellermanSoftware.CompareNetObjects; using NUnit.Framework; using CharacteristicPointType = Deltares.DamEngine.Data.Geotechnics.CharacteristicPointType; using ConversionHelper = Deltares.DamEngine.Calculators.KernelWrappers.MacroStabilityCommon.MacroStabilityIo.ConversionHelper; using LogMessageType = Deltares.DamEngine.Data.Standard.Logging.LogMessageType; using ShearStrengthModel = Deltares.DamEngine.Data.Geotechnics.ShearStrengthModel; using Soil = Deltares.DamEngine.Data.Geotechnics.Soil; namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.MacroStabilityCommon { [TestFixture] public class ConversionHelperTests { #region SearchMethod [Test] [TestCase(SearchAlgorithm.Grid, MStabSearchMethod.Grid)] [TestCase(SearchAlgorithm.Genetic, MStabSearchMethod.GeneticAlgorithm)] public void CanConvertToDamSearchMethod(SearchAlgorithm searchAlgorithm, MStabSearchMethod mStabSearchMethod) { Assert.AreEqual(mStabSearchMethod, ConversionHelper.ConvertToDamSearchMethod(searchAlgorithm)); } [ExpectedException(typeof(ArgumentException))] [TestCase(SearchAlgorithm.Beeswarm)] [TestCase(SearchAlgorithm.LevenbergMarquardt)] [TestCase(SearchAlgorithm.Single)] public void CanConvertToDamSearchMethodHandleException(SearchAlgorithm searchAlgorithm) { ConversionHelper.ConvertToDamSearchMethod(searchAlgorithm); } [Test] [TestCase(MStabSearchMethod.Grid, SearchAlgorithm.Grid)] [TestCase(MStabSearchMethod.GeneticAlgorithm, SearchAlgorithm.Genetic)] public void ConvertToMacroStabilitySearchMethod(MStabSearchMethod mStabSearchMethod, SearchAlgorithm searchAlgorithm) { Assert.AreEqual(searchAlgorithm, ConversionHelper.ConvertToMacroStabilitySearchMethod(mStabSearchMethod)); } #endregion #region ModelType [Test] [TestCase(ModelOptions.UpliftVan, MStabModelType.UpliftVanWti)] public void CanConvertToMStabModelType(ModelOptions modelOption, MStabModelType mStabModelType) { Assert.AreEqual(mStabModelType, ConversionHelper.ConvertToMStabModelType(modelOption)); } [Test] [TestCase(MStabModelType.UpliftVanWti, ModelOptions.UpliftVan)] public void CanConvertToModelOptions(MStabModelType mStabModelType, ModelOptions modelOption) { Assert.AreEqual(modelOption, ConversionHelper.ConvertToModelOptions(mStabModelType)); } [ExpectedException(typeof(ArgumentException))] [TestCase(MStabModelType.Bishop)] [TestCase(MStabModelType.UpliftVan)] [TestCase(MStabModelType.UpliftSpencer)] [TestCase(MStabModelType.SpencerLow)] [TestCase(MStabModelType.SpencerHigh)] [TestCase(MStabModelType.BishopUpliftVan)] [TestCase(MStabModelType.BishopRandomField)] [TestCase(MStabModelType.Fellenius)] [TestCase(MStabModelType.BishopWti)] [TestCase(MStabModelType.HorizontalBalance)] [TestCase(MStabModelType.Spencer)] [TestCase(MStabModelType.UpliftSpencerWti)] public void CanConvertToModelOptionsHandleException(MStabModelType mStabModelType) { ConversionHelper.ConvertToModelOptions(mStabModelType); } #endregion #region GridOrientation [TestCase(GridOrientation.Outwards, MStabGridPosition.Left)] [TestCase(GridOrientation.Inwards, MStabGridPosition.Right)] public static void CanConvertToMStabGridPosition(GridOrientation gridOrientation, MStabGridPosition mStabGridPosition) { Assert.AreEqual(mStabGridPosition, ConversionHelper.ConvertToMStabGridPosition(gridOrientation)); } [TestCase(MStabGridPosition.Left, GridOrientation.Outwards)] [TestCase(MStabGridPosition.Right, GridOrientation.Inwards)] public static void CanConvertToGridOrientation(MStabGridPosition mStabGridPosition, GridOrientation gridOrientation) { 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.04, // -Phi (FrictionAngle) RRatio = 1.05, RatioCuPc = 1.06, RheologicalCoefficient = 1.07, ShearStrengthModel = MacroStability.Geometry.ShearStrengthModel.CPhiOrCuCalculated, 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); // For now, 3 errors are expected (RRatio, RheologicalCoefficient and StrengthIncreaseExponent). Assert.AreEqual(3, result.Differences.Count, "Unexpected differences found converting/reconverting Soil"); // But in future, this must succeed. then remove lines above and adapt text below Assert.AreEqual(0, result.Differences.Count, "Differences found converting/reconverting Soil but this ok now if diff = 3"); } #endregion #region ShearStrengthModel [TestCase(MacroStability.Geometry.ShearStrengthModel.CPhi, ShearStrengthModel.CPhi)] [TestCase(MacroStability.Geometry.ShearStrengthModel.CPhiOrCuCalculated, ShearStrengthModel.CPhiOrSuCalculated)] [TestCase(MacroStability.Geometry.ShearStrengthModel.CuCalculated, ShearStrengthModel.SuCalculated)] [TestCase(MacroStability.Geometry.ShearStrengthModel.CuGradient, ShearStrengthModel.SuGradient)] [TestCase(MacroStability.Geometry.ShearStrengthModel.CuMeasured, ShearStrengthModel.SuMeasured)] [TestCase(MacroStability.Geometry.ShearStrengthModel.None, ShearStrengthModel.None)] [TestCase(MacroStability.Geometry.ShearStrengthModel.PseudoValues, ShearStrengthModel.PseudoValues)] [TestCase(MacroStability.Geometry.ShearStrengthModel.StressTable, ShearStrengthModel.StressTable)] public static void CanConvertToConvertToDamShearStrengthModel( MacroStability.Geometry.ShearStrengthModel kernelShearStrengthModel, ShearStrengthModel damShearStrengthModel) { Assert.AreEqual(damShearStrengthModel, ConversionHelper.ConvertToDamShearStrengthModel(kernelShearStrengthModel)); } [TestCase(ShearStrengthModel.CPhi, MacroStability.Geometry.ShearStrengthModel.CPhi)] [TestCase(ShearStrengthModel.CPhiOrSuCalculated, MacroStability.Geometry.ShearStrengthModel.CPhiOrCuCalculated)] [TestCase(ShearStrengthModel.None, MacroStability.Geometry.ShearStrengthModel.None)] [TestCase(ShearStrengthModel.PseudoValues, MacroStability.Geometry.ShearStrengthModel.PseudoValues)] [TestCase(ShearStrengthModel.StressTable, MacroStability.Geometry.ShearStrengthModel.StressTable)] [TestCase(ShearStrengthModel.SuCalculated, MacroStability.Geometry.ShearStrengthModel.CuCalculated)] [TestCase(ShearStrengthModel.SuGradient, MacroStability.Geometry.ShearStrengthModel.CuGradient)] [TestCase(ShearStrengthModel.SuMeasured, MacroStability.Geometry.ShearStrengthModel.CuMeasured)] public static void CanConvertToConvertToMacroStabilityShearStrengthModel( ShearStrengthModel damShearStrengthModel, MacroStability.Geometry.ShearStrengthModel kernelShearStrengthModel) { Assert.AreEqual(kernelShearStrengthModel, ConversionHelper.ConvertToMacroStabilityShearStrengthModel(damShearStrengthModel)); } #endregion #region WaterpressureInterpolationModel [TestCase(Data.Geotechnics.WaterpressureInterpolationModel.Automatic, WaterpressureInterpolationModel.Automatic)] [TestCase(Data.Geotechnics.WaterpressureInterpolationModel.Hydrostatic, WaterpressureInterpolationModel.Hydrostatic)] public static void CanConvertToMacroStabilityWaterpressureInterpolationModel( Data.Geotechnics.WaterpressureInterpolationModel damWaterpressureInterpolationModel, WaterpressureInterpolationModel waterpressureInterpolationModel) { Assert.AreEqual(waterpressureInterpolationModel, ConversionHelper.ConvertToMacroStabilityWaterpressureInterpolationModel(damWaterpressureInterpolationModel)); } [TestCase(WaterpressureInterpolationModel.Automatic, Data.Geotechnics.WaterpressureInterpolationModel.Automatic)] [TestCase(WaterpressureInterpolationModel.Hydrostatic, Data.Geotechnics.WaterpressureInterpolationModel.Hydrostatic)] public static void CanConvertToDamWaterpressureInterpolationModel( WaterpressureInterpolationModel waterpressureInterpolationModel, Data.Geotechnics.WaterpressureInterpolationModel damWaterpressureInterpolationModel) { Assert.AreEqual(damWaterpressureInterpolationModel, ConversionHelper.ConvertToDamWaterpressureInterpolationModel(waterpressureInterpolationModel)); } #endregion #region CharacteristicPointType [TestCase(CharacteristicPointType.BottomDitchPolderSide, MacroStability.Geometry.CharacteristicPointType.BottomDitchPolderSide)] [TestCase(CharacteristicPointType.BottomDitchDikeSide, MacroStability.Geometry.CharacteristicPointType.BottomDitchDikeSide)] [TestCase(CharacteristicPointType.DikeLine, MacroStability.Geometry.CharacteristicPointType.DikeLine)] [TestCase(CharacteristicPointType.DikeToeAtPolder, MacroStability.Geometry.CharacteristicPointType.DikeToeAtPolder)] [TestCase(CharacteristicPointType.DikeToeAtRiver, MacroStability.Geometry.CharacteristicPointType.DikeToeAtRiver)] [TestCase(CharacteristicPointType.DikeTopAtPolder, MacroStability.Geometry.CharacteristicPointType.DikeTopAtPolder)] [TestCase(CharacteristicPointType.DikeTopAtRiver, MacroStability.Geometry.CharacteristicPointType.DikeTopAtRiver)] [TestCase(CharacteristicPointType.DitchDikeSide, MacroStability.Geometry.CharacteristicPointType.DitchDikeSide)] [TestCase(CharacteristicPointType.DitchPolderSide, MacroStability.Geometry.CharacteristicPointType.DitchPolderSide)] [TestCase(CharacteristicPointType.None, MacroStability.Geometry.CharacteristicPointType.None)] [TestCase(CharacteristicPointType.ShoulderBaseInside, MacroStability.Geometry.CharacteristicPointType.ShoulderBaseInside)] [TestCase(CharacteristicPointType.ShoulderBaseOutside, MacroStability.Geometry.CharacteristicPointType.ShoulderBaseOutside)] [TestCase(CharacteristicPointType.ShoulderTopInside, MacroStability.Geometry.CharacteristicPointType.ShoulderTopInside)] [TestCase(CharacteristicPointType.ShoulderTopOutside, MacroStability.Geometry.CharacteristicPointType.ShoulderTopOutside)] [TestCase(CharacteristicPointType.SurfaceLevelInside, MacroStability.Geometry.CharacteristicPointType.SurfaceLevelInside)] [TestCase(CharacteristicPointType.SurfaceLevelOutside, MacroStability.Geometry.CharacteristicPointType.SurfaceLevelOutside)] [TestCase(CharacteristicPointType.TrafficLoadInside, MacroStability.Geometry.CharacteristicPointType.TrafficLoadInside)] [TestCase(CharacteristicPointType.TrafficLoadOutside, MacroStability.Geometry.CharacteristicPointType.TrafficLoadOutside)] public static void CanConvertToMacroStabilityWaterpressureInterpolationModel( CharacteristicPointType damCharacteristicPointType, MacroStability.Geometry.CharacteristicPointType kernelCharacteristicPointType) { Assert.AreEqual(kernelCharacteristicPointType, ConversionHelper.ConvertToMacroStabilityCharacteristicPointType(damCharacteristicPointType)); } [TestCase(MacroStability.Geometry.CharacteristicPointType.BottomDitchDikeSide, CharacteristicPointType.BottomDitchDikeSide)] [TestCase(MacroStability.Geometry.CharacteristicPointType.BottomDitchPolderSide, CharacteristicPointType.BottomDitchPolderSide)] [TestCase(MacroStability.Geometry.CharacteristicPointType.DikeLine, CharacteristicPointType.DikeLine)] [TestCase(MacroStability.Geometry.CharacteristicPointType.DikeToeAtPolder, CharacteristicPointType.DikeToeAtPolder)] [TestCase(MacroStability.Geometry.CharacteristicPointType.DikeToeAtRiver, CharacteristicPointType.DikeToeAtRiver)] [TestCase(MacroStability.Geometry.CharacteristicPointType.DikeTopAtPolder, CharacteristicPointType.DikeTopAtPolder)] [TestCase(MacroStability.Geometry.CharacteristicPointType.DikeTopAtRiver, CharacteristicPointType.DikeTopAtRiver)] [TestCase(MacroStability.Geometry.CharacteristicPointType.DitchDikeSide, CharacteristicPointType.DitchDikeSide)] [TestCase(MacroStability.Geometry.CharacteristicPointType.DitchPolderSide, CharacteristicPointType.DitchPolderSide)] [TestCase(MacroStability.Geometry.CharacteristicPointType.None, CharacteristicPointType.None)] [TestCase(MacroStability.Geometry.CharacteristicPointType.ShoulderBaseInside, CharacteristicPointType.ShoulderBaseInside)] [TestCase(MacroStability.Geometry.CharacteristicPointType.ShoulderBaseOutside, CharacteristicPointType.ShoulderBaseOutside)] [TestCase(MacroStability.Geometry.CharacteristicPointType.ShoulderTopInside, CharacteristicPointType.ShoulderTopInside)] [TestCase(MacroStability.Geometry.CharacteristicPointType.ShoulderTopOutside, CharacteristicPointType.ShoulderTopOutside)] [TestCase(MacroStability.Geometry.CharacteristicPointType.SurfaceLevelInside, CharacteristicPointType.SurfaceLevelInside)] [TestCase(MacroStability.Geometry.CharacteristicPointType.SurfaceLevelOutside, CharacteristicPointType.SurfaceLevelOutside)] [TestCase(MacroStability.Geometry.CharacteristicPointType.TrafficLoadInside, CharacteristicPointType.TrafficLoadInside)] [TestCase(MacroStability.Geometry.CharacteristicPointType.TrafficLoadOutside, CharacteristicPointType.TrafficLoadOutside)] public static void CanConvertToDamWaterpressureInterpolationModel( MacroStability.Geometry.CharacteristicPointType kernelCharacteristicPointType, CharacteristicPointType damCharacteristicPointType) { Assert.AreEqual(damCharacteristicPointType, ConversionHelper.ConvertToDamCharacteristicPointType(kernelCharacteristicPointType)); } #endregion #region LogMessages [TestCase(ValidationResultType.Info, Data.Standard.Logging.LogMessageType.Info)] [TestCase(ValidationResultType.Warning, Data.Standard.Logging.LogMessageType.Warning)] [TestCase(ValidationResultType.Error, Data.Standard.Logging.LogMessageType.Error)] public void TestConvertKernelValidationResultTypeToLogMessageType(ValidationResultType validationResultType, LogMessageType logMessageType) { Assert.AreEqual(logMessageType, ConversionHelper.ConvertKernelValidationResultTypeToLogMessageType(validationResultType)); } [TestCase(MacroStability.Standard.LogMessageType.Info, LogMessageType.Info)] [TestCase(MacroStability.Standard.LogMessageType.Warning, LogMessageType.Warning)] [TestCase(MacroStability.Standard.LogMessageType.Error, LogMessageType.Error)] public void TestConvertKernelLogMessageTypeToLogMessageType(MacroStability.Standard.LogMessageType kernelLogMessageType, LogMessageType logMessageType) { Assert.AreEqual(logMessageType, ConversionHelper.ConvertKernelLogMessageTypeToLogMessageType(kernelLogMessageType)); } #endregion } }