/// <summary> /// Asserts whether the <see cref="PersistableSoil"/> contains the data /// that is representative for the <paramref name="originalLayers"/>. /// </summary> /// <param name="originalLayers">The layers that contain the original data.</param> /// <param name="actualSoils">The collection of <see cref="PersistableSoil"/> /// that needs to be asserted.</param> /// <exception cref="AssertionException">Thrown when the data in <paramref name="actualSoils"/> /// is not correct.</exception> public static void AssertPersistableSoils(IEnumerable <IMacroStabilityInwardsSoilLayer> originalLayers, IEnumerable <PersistableSoil> actualSoils) { Assert.AreEqual(originalLayers.Count(), actualSoils.Count()); for (var i = 0; i < originalLayers.Count(); i++) { PersistableSoil soil = actualSoils.ElementAt(i); MacroStabilityInwardsSoilLayerData layerData = originalLayers.ElementAt(i).Data; Assert.IsNotNull(soil.Id); Assert.AreEqual(layerData.MaterialName, soil.Name); Assert.AreEqual($"{layerData.MaterialName}-{soil.Id}", soil.Code); Assert.IsTrue(soil.IsProbabilistic); Assert.AreEqual(MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetCohesion(layerData).GetDesignValue(), soil.Cohesion); AssertStochasticParameter(layerData.Cohesion, soil.CohesionStochasticParameter); Assert.AreEqual(MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetFrictionAngle(layerData).GetDesignValue(), soil.FrictionAngle); AssertStochasticParameter(layerData.FrictionAngle, soil.FrictionAngleStochasticParameter); Assert.AreEqual(MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetShearStrengthRatio(layerData).GetDesignValue(), soil.ShearStrengthRatio); AssertStochasticParameter(layerData.ShearStrengthRatio, soil.ShearStrengthRatioStochasticParameter); Assert.AreEqual(MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetStrengthIncreaseExponent(layerData).GetDesignValue(), soil.StrengthIncreaseExponent); AssertStochasticParameter(layerData.StrengthIncreaseExponent, soil.StrengthIncreaseExponentStochasticParameter); Assert.AreEqual(MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetAbovePhreaticLevel(layerData).GetDesignValue(), soil.VolumetricWeightAbovePhreaticLevel); Assert.AreEqual(MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetBelowPhreaticLevel(layerData).GetDesignValue(), soil.VolumetricWeightBelowPhreaticLevel); Assert.IsFalse(soil.CohesionAndFrictionAngleCorrelated); Assert.IsFalse(soil.ShearStrengthRatioAndShearStrengthExponentCorrelated); Assert.AreEqual(GetExpectedShearStrengthModelTypeForAbovePhreaticLevel(layerData.ShearStrengthModel), soil.ShearStrengthModelTypeAbovePhreaticLevel); Assert.AreEqual(GetExpectedShearStrengthModelTypeForBelowPhreaticLevel(layerData.ShearStrengthModel), soil.ShearStrengthModelTypeBelowPhreaticLevel); var dilatancyDistribution = new VariationCoefficientNormalDistribution(2) { Mean = (RoundedDouble)1, CoefficientOfVariation = (RoundedDouble)0 }; Assert.AreEqual(0, soil.Dilatancy); AssertStochasticParameter(dilatancyDistribution, soil.DilatancyStochasticParameter, false); } }
/// <summary> /// Creates a new instance of <see cref="PersistableSoil"/>. /// </summary> /// <param name="layer">The layer to use.</param> /// <param name="idFactory">The factory for creating IDs.</param> /// <param name="registry">The persistence registry.</param> /// <returns>The created <see cref="PersistableSoil"/>.</returns> /// <exception cref="InvalidEnumArgumentException">Thrown when /// <see cref="MacroStabilityInwardsShearStrengthModel"/> has an invalid value.</exception> /// <exception cref="NotSupportedException">Thrown when <see cref="MacroStabilityInwardsShearStrengthModel"/> /// has a valid value but is not supported.</exception> private static PersistableSoil Create(MacroStabilityInwardsSoilLayer2D layer, IdFactory idFactory, MacroStabilityInwardsExportRegistry registry) { MacroStabilityInwardsSoilLayerData layerData = layer.Data; var soil = new PersistableSoil { Id = idFactory.Create(), Name = layerData.MaterialName, IsProbabilistic = true, Cohesion = MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetCohesion(layerData).GetDesignValue(), CohesionStochasticParameter = PersistableStochasticParameterFactory.Create(layerData.Cohesion), FrictionAngle = MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetFrictionAngle(layerData).GetDesignValue(), FrictionAngleStochasticParameter = PersistableStochasticParameterFactory.Create(layerData.FrictionAngle), ShearStrengthRatio = MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetShearStrengthRatio(layerData).GetDesignValue(), ShearStrengthRatioStochasticParameter = PersistableStochasticParameterFactory.Create(layerData.ShearStrengthRatio), StrengthIncreaseExponent = MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetStrengthIncreaseExponent(layerData).GetDesignValue(), StrengthIncreaseExponentStochasticParameter = PersistableStochasticParameterFactory.Create(layerData.StrengthIncreaseExponent), CohesionAndFrictionAngleCorrelated = false, ShearStrengthRatioAndShearStrengthExponentCorrelated = false, ShearStrengthModelTypeAbovePhreaticLevel = GetShearStrengthModelTypeForAbovePhreaticLevel(layerData.ShearStrengthModel), ShearStrengthModelTypeBelowPhreaticLevel = GetShearStrengthModelTypeForBelowPhreaticLevel(layerData.ShearStrengthModel), VolumetricWeightAbovePhreaticLevel = MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetAbovePhreaticLevel(layerData).GetDesignValue(), VolumetricWeightBelowPhreaticLevel = MacroStabilityInwardsSemiProbabilisticDesignVariableFactory.GetBelowPhreaticLevel(layerData).GetDesignValue(), Dilatancy = 0, DilatancyStochasticParameter = PersistableStochasticParameterFactory.Create(new VariationCoefficientNormalDistribution(2) { Mean = (RoundedDouble)1, CoefficientOfVariation = (RoundedDouble)0 }, false) }; soil.Code = $"{soil.Name}-{soil.Id}"; registry.AddSoil(layer, soil.Id); return(soil); }