public void CreateExtremeWaternetForUpliftVan_ValidData_ReturnMacroStabilityInput()
        {
            // Setup
            UpliftVanCalculatorInput input = UpliftVanCalculatorInputTestFactory.Create();

            LayerWithSoil[] layersWithSoil = LayerWithSoilCreator.Create(input.SoilProfile, out IDictionary <SoilLayer, LayerWithSoil> _);
            List <Soil>     soils          = layersWithSoil.Select(lws => lws.Soil).ToList();

            SurfaceLine surfaceLine = SurfaceLineCreator.Create(input.SurfaceLine);
            SoilProfile soilProfile = SoilProfileCreator.Create(layersWithSoil);

            // Call
            MacroStabilityInput macroStabilityInput = MacroStabilityInputCreator.CreateExtremeWaternetForUpliftVan(
                input, soils, surfaceLine, soilProfile);

            // Assert
            CollectionAssert.AreEqual(soils, macroStabilityInput.StabilityModel.Soils, new SoilComparer());
            Assert.AreSame(soilProfile, macroStabilityInput.StabilityModel.ConstructionStages.Single().SoilProfile);

            PreConstructionStage preConstructionStage = macroStabilityInput.PreprocessingInput.PreConstructionStages.Single();

            Assert.AreSame(surfaceLine, preConstructionStage.SurfaceLine);
            Assert.IsTrue(preConstructionStage.CreateWaternet);
            KernelInputAssert.AssertWaternetCreatorInput(UpliftVanWaternetCreatorInputCreator.CreateExtreme(input), preConstructionStage.WaternetCreatorInput);
        }
Esempio n. 2
0
        private IUpliftVanKernel CreateUpliftVanKernel()
        {
            LayerWithSoil[] layersWithSoil = LayerWithSoilCreator.Create(input.SoilProfile, out IDictionary <SoilLayer, LayerWithSoil> layerLookup);
            List <Soil>     soils          = layersWithSoil.Select(lws => lws.Soil).ToList();

            SurfaceLine surfaceLine = SurfaceLineCreator.Create(input.SurfaceLine);
            SoilProfile soilProfile = SoilProfileCreator.Create(layersWithSoil);

            MacroStabilityInput waternetDailyKernelInput   = MacroStabilityInputCreator.CreateDailyWaternetForUpliftVan(input, soils, surfaceLine, soilProfile);
            MacroStabilityInput waternetExtremeKernelInput = MacroStabilityInputCreator.CreateExtremeWaternetForUpliftVan(input, soils, surfaceLine, soilProfile);

            IWaternetKernel waternetDailyKernel = factory.CreateWaternetDailyKernel(waternetDailyKernelInput);

            waternetDailyKernel.Calculate();

            IWaternetKernel waternetExtremeKernel = factory.CreateWaternetExtremeKernel(waternetExtremeKernelInput);

            waternetExtremeKernel.Calculate();

            MacroStabilityInput kernelInput = MacroStabilityInputCreator.CreateUpliftVan(input, soils, layerLookup,
                                                                                         surfaceLine, soilProfile,
                                                                                         waternetDailyKernel.Waternet,
                                                                                         waternetExtremeKernel.Waternet);

            return(factory.CreateUpliftVanKernel(kernelInput));
        }
        public void CreateUpliftVan_ValidDataWithManualTangentLines_ReturnMacroStabilityInput()
        {
            // Setup
            var    random            = new Random(21);
            double tangentZTop       = random.NextDouble();
            double tangentZBottom    = random.NextDouble();
            int    tangentLineNumber = random.Next();

            UpliftVanCalculatorInput input = UpliftVanCalculatorInputTestFactory.Create(tangentZTop, tangentZBottom, tangentLineNumber);

            LayerWithSoil[] layersWithSoil = LayerWithSoilCreator.Create(input.SoilProfile, out IDictionary <SoilLayer, LayerWithSoil> layerLookup);
            List <Soil>     soils          = layersWithSoil.Select(lws => lws.Soil).ToList();

            SurfaceLine surfaceLine = SurfaceLineCreator.Create(input.SurfaceLine);
            SoilProfile soilProfile = SoilProfileCreator.Create(layersWithSoil);

            var dailyWaternet   = new Waternet();
            var extremeWaternet = new Waternet();

            // Call
            MacroStabilityInput macroStabilityInput = MacroStabilityInputCreator.CreateUpliftVan(
                input, soils, layerLookup, surfaceLine, soilProfile, dailyWaternet, extremeWaternet);

            // Assert
            SearchAreaConditions searchAreaConditions = macroStabilityInput.PreprocessingInput.SearchAreaConditions;

            Assert.AreEqual(input.SlipPlane.TangentLinesAutomaticAtBoundaries, searchAreaConditions.AutoTangentLines);
            Assert.AreEqual(input.SlipPlane.TangentLineNumber, searchAreaConditions.TangentLineNumber);
            Assert.AreEqual(input.SlipPlane.TangentZTop, searchAreaConditions.TangentLineZTop);
            Assert.AreEqual(input.SlipPlane.TangentZBottom, searchAreaConditions.TangentLineZBottom);
        }
        /// <summary>
        /// Asserts whether <paramref name="actual"/> is equal to <paramref name="expected"/>.
        /// </summary>
        /// <param name="expected">The expected <see cref="MacroStabilityInput"/>.</param>
        /// <param name="actual">The actual <see cref="MacroStabilityInput"/>.</param>
        /// <exception cref="AssertionException">Thrown when <paramref name="actual"/>
        /// is not equal to <paramref name="expected"/>.</exception>
        public static void AssertMacroStabilityInput(MacroStabilityInput expected, MacroStabilityInput actual)
        {
            KernelInputAssert.AssertSoilProfile(expected.StabilityModel.ConstructionStages.Single().SoilProfile,
                                                actual.StabilityModel.ConstructionStages.Single().SoilProfile);

            CollectionAssert.AreEqual(expected.StabilityModel.Soils, actual.StabilityModel.Soils, new SoilComparer());

            PreConstructionStage expectedPreConstructionStage = expected.PreprocessingInput.PreConstructionStages.Single();
            PreConstructionStage actualPreConstructionStage   = actual.PreprocessingInput.PreConstructionStages.Single();

            KernelInputAssert.AssertSurfaceLine(expectedPreConstructionStage.SurfaceLine, actualPreConstructionStage.SurfaceLine);
            Assert.AreEqual(expectedPreConstructionStage.CreateWaternet, actualPreConstructionStage.CreateWaternet);

            KernelInputAssert.AssertWaternetCreatorInput(expectedPreConstructionStage.WaternetCreatorInput, actualPreConstructionStage.WaternetCreatorInput);
        }
        public void CreateWaternet_ValidData_ReturnMacroStabilityInput()
        {
            // Setup
            WaternetCalculatorInput input = WaternetCalculatorInputTestFactory.CreateValidCalculatorInput();

            // Call
            MacroStabilityInput macroStabilityInput = MacroStabilityInputCreator.CreateWaternet(input);

            // Assert
            LayerWithSoil[] layersWithSoil = LayerWithSoilCreator.Create(input.SoilProfile, out IDictionary <SoilLayer, LayerWithSoil> _);
            CollectionAssert.AreEqual(layersWithSoil.Select(lws => lws.Soil).ToList(), macroStabilityInput.StabilityModel.Soils, new SoilComparer());
            KernelInputAssert.AssertSoilProfile(SoilProfileCreator.Create(layersWithSoil),
                                                macroStabilityInput.StabilityModel.ConstructionStages.Single().SoilProfile);

            PreConstructionStage preConstructionStage = macroStabilityInput.PreprocessingInput.PreConstructionStages.Single();

            KernelInputAssert.AssertSurfaceLine(SurfaceLineCreator.Create(input.SurfaceLine), preConstructionStage.SurfaceLine);
            Assert.IsTrue(preConstructionStage.CreateWaternet);
            KernelInputAssert.AssertWaternetCreatorInput(WaternetCreatorInputCreator.Create(input), preConstructionStage.WaternetCreatorInput);
        }
Esempio n. 6
0
 protected override IWaternetKernel CreateWaternetKernel(MacroStabilityInput kernelInput)
 {
     return(Factory.CreateWaternetExtremeKernel(kernelInput));
 }
Esempio n. 7
0
 /// <summary>
 /// Sets the <see cref="MacroStabilityInput"/>.
 /// </summary>
 /// <param name="input">The input to set.</param>
 public void SetInput(MacroStabilityInput input)
 {
     KernelInput = input;
 }
Esempio n. 8
0
 /// <summary>
 /// Creates a Waternet kernel.
 /// </summary>
 /// <param name="kernelInput">The input of the kernel.</param>
 /// <returns>The created <see cref="IWaternetKernel"/>.</returns>
 protected abstract IWaternetKernel CreateWaternetKernel(MacroStabilityInput kernelInput);
Esempio n. 9
0
        private IWaternetKernel GetWaternetKernel()
        {
            MacroStabilityInput kernelInput = MacroStabilityInputCreator.CreateWaternet(Input);

            return(CreateWaternetKernel(kernelInput));
        }
        public void CreateUpliftVan_ValidData_ReturnMacroStabilityInput()
        {
            // Setup
            UpliftVanCalculatorInput input = UpliftVanCalculatorInputTestFactory.Create();

            LayerWithSoil[] layersWithSoil = LayerWithSoilCreator.Create(input.SoilProfile, out IDictionary <SoilLayer, LayerWithSoil> layerLookup);
            List <Soil>     soils          = layersWithSoil.Select(lws => lws.Soil).ToList();

            SurfaceLine surfaceLine = SurfaceLineCreator.Create(input.SurfaceLine);
            SoilProfile soilProfile = SoilProfileCreator.Create(layersWithSoil);

            var dailyWaternet   = new Waternet();
            var extremeWaternet = new Waternet();

            // Call
            MacroStabilityInput macroStabilityInput = MacroStabilityInputCreator.CreateUpliftVan(
                input, soils, layerLookup, surfaceLine, soilProfile, dailyWaternet, extremeWaternet);

            // Assert
            StabilityInput stabilityModel = macroStabilityInput.StabilityModel;

            Assert.AreEqual(Orientation.Inwards, stabilityModel.Orientation);
            Assert.AreEqual(SearchAlgorithm.Grid, stabilityModel.SearchAlgorithm);
            Assert.AreEqual(StabilityModelOptionType.UpliftVan, stabilityModel.ModelOption);

            CollectionAssert.AreEqual(soils, stabilityModel.Soils, new SoilComparer());
            Assert.AreEqual(input.MoveGrid, stabilityModel.MoveGrid);
            Assert.AreEqual(input.MaximumSliceWidth, stabilityModel.MaximumSliceWidth);

            UpliftVanKernelInputAssert.AssertUpliftVanCalculationGrid(
                UpliftVanCalculationGridCreator.Create(input.SlipPlane), stabilityModel.UpliftVanCalculationGrid);

            UpliftVanKernelInputAssert.AssertSlipPlaneConstraints(
                SlipPlaneConstraintsCreator.Create(input.SlipPlaneConstraints), stabilityModel.SlipPlaneConstraints);

            AssertConstructionStages(input, stabilityModel, soilProfile, dailyWaternet, extremeWaternet, layerLookup);

            Assert.AreEqual(input.SlipPlane.GridNumberOfRefinements, stabilityModel.NumberOfRefinementsGrid);
            Assert.AreEqual(input.SlipPlane.TangentLineNumberOfRefinements, stabilityModel.NumberOfRefinementsTangentLines);

            SearchAreaConditions searchAreaConditions = macroStabilityInput.PreprocessingInput.SearchAreaConditions;

            Assert.AreEqual(0.8, searchAreaConditions.MaxSpacingBetweenBoundaries);
            Assert.IsTrue(searchAreaConditions.OnlyAbovePleistoceen);
            Assert.AreEqual(input.SlipPlane.GridAutomaticDetermined, searchAreaConditions.AutoSearchArea);
            Assert.AreEqual(input.SlipPlane.TangentLinesAutomaticAtBoundaries, searchAreaConditions.AutoTangentLines);
            Assert.AreEqual(1, searchAreaConditions.TangentLineNumber);
            Assert.AreEqual(0, searchAreaConditions.TangentLineZTop);
            Assert.AreEqual(0, searchAreaConditions.TangentLineZBottom);
            Assert.AreEqual(input.SlipPlaneConstraints.AutomaticForbiddenZones, searchAreaConditions.AutomaticForbiddenZones);

            Assert.AreEqual(2, macroStabilityInput.PreprocessingInput.PreConstructionStages.Count);

            foreach (PreConstructionStage preConstructionStage in macroStabilityInput.PreprocessingInput.PreConstructionStages)
            {
                Assert.IsFalse(preConstructionStage.CreateWaternet);
                Assert.AreSame(surfaceLine, preConstructionStage.SurfaceLine);
                Assert.IsNull(preConstructionStage.WaternetCreatorInput); // Not needed as Waternet is already calculated
            }

            AssertIrrelevantValues(stabilityModel, searchAreaConditions);
        }
 private static IWaternetKernel CreateWaternetKernel(MacroStabilityInput kernelInput, WaternetKernelStub waternetKernel)
 {
     waternetKernel.SetInput(kernelInput);
     return(waternetKernel);
 }
 public IWaternetKernel CreateWaternetDailyKernel(MacroStabilityInput kernelInput)
 {
     return(CreateWaternetKernel(kernelInput, LastCreatedWaternetDailyKernel));
 }
 public IUpliftVanKernel CreateUpliftVanKernel(MacroStabilityInput kernelInput)
 {
     LastCreatedUpliftVanKernel.SetInput(kernelInput);
     return(LastCreatedUpliftVanKernel);
 }
Esempio n. 14
0
        /// <summary>
        /// Creates <see cref="MacroStabilityInput"/> objects based on the given input for the Uplift Van calculation.
        /// </summary>
        /// <param name="upliftVanInput">The <see cref="UpliftVanCalculatorInput"/> containing all the values required
        /// for performing the Uplift Van calculation.</param>
        /// <param name="soils">The collection of <see cref="Soil"/>.</param>
        /// <param name="layerLookup">The lookup between <see cref="Soil"/> and <see cref="SoilLayer"/>.</param>
        /// <param name="surfaceLine">The <see cref="SurfaceLine"/>.</param>
        /// <param name="soilProfile">The <see cref="SoilProfile"/>.</param>
        /// <param name="dailyWaternet">The calculated <see cref="Waternet"/> for daily circumstances.</param>
        /// <param name="extremeWaternet">The calculated <see cref="Waternet"/> for extreme circumstances.</param>
        /// <returns>The created <see cref="MacroStabilityInput"/>.</returns>
        /// <exception cref="ArgumentNullException">Thrown when any parameter is <c>null</c>.</exception>
        public static MacroStabilityInput CreateUpliftVan(UpliftVanCalculatorInput upliftVanInput, ICollection <Soil> soils,
                                                          IDictionary <SoilLayer, LayerWithSoil> layerLookup, SurfaceLine surfaceLine,
                                                          SoilProfile soilProfile, Waternet dailyWaternet, Waternet extremeWaternet)
        {
            if (upliftVanInput == null)
            {
                throw new ArgumentNullException(nameof(upliftVanInput));
            }

            if (soils == null)
            {
                throw new ArgumentNullException(nameof(soils));
            }

            if (layerLookup == null)
            {
                throw new ArgumentNullException(nameof(layerLookup));
            }

            if (surfaceLine == null)
            {
                throw new ArgumentNullException(nameof(surfaceLine));
            }

            if (soilProfile == null)
            {
                throw new ArgumentNullException(nameof(soilProfile));
            }

            if (dailyWaternet == null)
            {
                throw new ArgumentNullException(nameof(dailyWaternet));
            }

            if (extremeWaternet == null)
            {
                throw new ArgumentNullException(nameof(extremeWaternet));
            }

            var macroStabilityInput = new MacroStabilityInput
            {
                StabilityModel =
                {
                    Orientation        = Orientation.Inwards,
                    SearchAlgorithm    = SearchAlgorithm.Grid,
                    ModelOption        = StabilityModelOptionType.UpliftVan,
                    ConstructionStages =
                    {
                        AddConstructionStage(soilProfile,                                                                                         dailyWaternet, FixedSoilStressCreator.Create(layerLookup).ToList(),
                                             PreconsolidationStressCreator.Create(upliftVanInput.SoilProfile.PreconsolidationStresses).ToList()),
                        AddConstructionStage(soilProfile,                                                                                         extremeWaternet)
                    },
                    Soils                           = soils,
                    MoveGrid                        = upliftVanInput.MoveGrid,
                    MaximumSliceWidth               = upliftVanInput.MaximumSliceWidth,
                    UpliftVanCalculationGrid        = UpliftVanCalculationGridCreator.Create(upliftVanInput.SlipPlane),
                    SlipPlaneConstraints            = SlipPlaneConstraintsCreator.Create(upliftVanInput.SlipPlaneConstraints),
                    NumberOfRefinementsGrid         = upliftVanInput.SlipPlane.GridNumberOfRefinements,
                    NumberOfRefinementsTangentLines = upliftVanInput.SlipPlane.TangentLineNumberOfRefinements
                },
                PreprocessingInput =
                {
                    SearchAreaConditions            =
                    {
                        MaxSpacingBetweenBoundaries =                                                        0.8,
                        OnlyAbovePleistoceen        = true,
                        AutoSearchArea          = upliftVanInput.SlipPlane.GridAutomaticDetermined,
                        AutoTangentLines        = upliftVanInput.SlipPlane.TangentLinesAutomaticAtBoundaries,
                        AutomaticForbiddenZones = upliftVanInput.SlipPlaneConstraints.AutomaticForbiddenZones
                    },
                    PreConstructionStages           =
                    {
                        AddPreConstructionStage(surfaceLine),
                        AddPreConstructionStage(surfaceLine)
                    }
                }
            };

            SetTangentLineProperties(upliftVanInput, macroStabilityInput);

            return(macroStabilityInput);
        }
Esempio n. 15
0
 private static void SetTangentLineProperties(UpliftVanCalculatorInput upliftVanInput, MacroStabilityInput macroStabilityInput)
 {
     if (!upliftVanInput.SlipPlane.TangentLinesAutomaticAtBoundaries)
     {
         macroStabilityInput.PreprocessingInput.SearchAreaConditions.TangentLineNumber  = upliftVanInput.SlipPlane.TangentLineNumber;
         macroStabilityInput.PreprocessingInput.SearchAreaConditions.TangentLineZTop    = upliftVanInput.SlipPlane.TangentZTop;
         macroStabilityInput.PreprocessingInput.SearchAreaConditions.TangentLineZBottom = upliftVanInput.SlipPlane.TangentZBottom;
     }
 }
Esempio n. 16
0
 /// <summary>
 /// Asserts whether <paramref name="actual"/> is equal to <paramref name="expected"/>.
 /// </summary>
 /// <param name="expected">The expected <see cref="MacroStabilityInput"/>.</param>
 /// <param name="actual">The actual <see cref="MacroStabilityInput"/>.</param>
 /// <exception cref="AssertionException">Thrown when <paramref name="actual"/>
 /// is not equal to <paramref name="expected"/>.</exception>
 public static void AssertMacroStabilityInput(MacroStabilityInput expected, MacroStabilityInput actual)
 {
     AssertStabilityInput(expected.StabilityModel, actual.StabilityModel);
     AssertPreprocessingInput(expected.PreprocessingInput, actual.PreprocessingInput);
 }