private static void AssertConstructionStages(
            UpliftVanCalculatorInput input, StabilityInput stabilityModel, SoilProfile soilProfile,
            Waternet dailyWaternet, Waternet extremeWaternet, IDictionary <SoilLayer, LayerWithSoil> layerLookup)
        {
            Assert.AreEqual(2, stabilityModel.ConstructionStages.Count);

            ConstructionStage dailyConstructionStage = stabilityModel.ConstructionStages.ElementAt(0);

            Assert.AreSame(soilProfile, dailyConstructionStage.SoilProfile);
            Assert.AreSame(dailyWaternet, dailyConstructionStage.Waternet);
            CollectionAssert.AreEqual(FixedSoilStressCreator.Create(layerLookup),
                                      dailyConstructionStage.FixedSoilStresses, new FixedSoilStressComparer());
            CollectionAssert.AreEqual(PreconsolidationStressCreator.Create(input.SoilProfile.PreconsolidationStresses),
                                      dailyConstructionStage.PreconsolidationStresses, new PreconsolidationStressComparer());
            AssertMultiplicationFactors(dailyConstructionStage.MultiplicationFactorsCPhiForUplift.Single());
            AssertIrrelevantValues(dailyConstructionStage);

            ConstructionStage extremeConstructionStage = stabilityModel.ConstructionStages.ElementAt(1);

            Assert.AreSame(soilProfile, extremeConstructionStage.SoilProfile);
            Assert.AreSame(extremeWaternet, extremeConstructionStage.Waternet);
            CollectionAssert.IsEmpty(extremeConstructionStage.FixedSoilStresses);
            CollectionAssert.IsEmpty(extremeConstructionStage.PreconsolidationStresses);
            AssertMultiplicationFactors(extremeConstructionStage.MultiplicationFactorsCPhiForUplift.Single());
            AssertIrrelevantValues(extremeConstructionStage);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Asserts whether <paramref name="actual"/> is equal to <paramref name="expected"/>.
        /// </summary>
        /// <param name="expected">The expected <see cref="StabilityInput"/>.</param>
        /// <param name="actual">The actual <see cref="StabilityInput"/>.</param>
        /// <exception cref="AssertionException">Thrown when <paramref name="actual"/>
        /// is not equal to <paramref name="expected"/>.</exception>
        private static void AssertStabilityInput(StabilityInput expected, StabilityInput actual)
        {
            Assert.AreEqual(expected.Orientation, actual.Orientation);
            Assert.AreEqual(expected.SearchAlgorithm, actual.SearchAlgorithm);
            Assert.AreEqual(expected.ModelOption, actual.ModelOption);

            AssertConstructionStages(expected.ConstructionStages, actual.ConstructionStages);

            CollectionAssert.AreEqual(expected.Soils, actual.Soils, new SoilComparer());
            Assert.AreEqual(expected.MoveGrid, actual.MoveGrid);
            Assert.AreEqual(expected.MaximumSliceWidth, actual.MaximumSliceWidth);

            AssertUpliftVanCalculationGrid(expected.UpliftVanCalculationGrid, actual.UpliftVanCalculationGrid);
            AssertSlipPlaneConstraints(expected.SlipPlaneConstraints, actual.SlipPlaneConstraints);

            Assert.AreEqual(expected.NumberOfRefinementsGrid, actual.NumberOfRefinementsGrid);
            Assert.AreEqual(expected.NumberOfRefinementsTangentLines, actual.NumberOfRefinementsTangentLines);
        }
        private static void AssertIrrelevantValues(StabilityInput stabilityModel, SearchAreaConditions searchAreaConditions)
        {
            Assert.AreEqual(50, stabilityModel.MaxGridMoves);                                                    // Irrelevant

            Assert.IsNotNull(stabilityModel.BishopCalculationCircle);                                            // Irrelevant - Only for Bishop

            Assert.IsNotNull(stabilityModel.BeeswarmAlgorithmOptions);                                           // Irrelevant - Only for Beeswarm

            Assert.IsNotNull(stabilityModel.GeneticAlgorithmOptions);                                            // Irrelevant - Only for Genetic Algorithm
            Assert.IsFalse(searchAreaConditions.AutoGeneticAlgorithmOptions);                                    // Irrelevant - Only for Genetic Algorithm

            Assert.IsNull(stabilityModel.LevenbergMarquardtOptions);                                             // Irrelevant - Only for Levenberg Marquardt

            Assert.AreEqual(0, stabilityModel.MaxAllowedAngleBetweenSlices);                                     // Irrelevant - Only for Spencer
            Assert.AreEqual(0, stabilityModel.RequiredForcePointsInSlices);                                      // Irrelevant - Only for Spencer
            Assert.IsNotNull(stabilityModel.SpencerSlipPlanes);                                                  // Irrelevant - Only for Spencer
            Assert.AreEqual(2, stabilityModel.TraversalGridPoints);                                              // Irrelevant - Only for Spencer
            Assert.AreEqual(0, stabilityModel.TraversalRefinements);                                             // Irrelevant - Only for Spencer
            Assert.AreEqual(SearchAreaConditionsSlipPlanePosition.High, searchAreaConditions.SlipPlanePosition); // Irrelevant - Only for Spencer
        }
        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);
        }