// Copyright (C) Stichting Deltares 2017. All rights reserved. // // This file is part of Ringtoets. // // Ringtoets is free software: you can redistribute it and/or modify // it under the terms of the GNU 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 General Public License for more details. // // You should have received a copy of the GNU 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 System.Linq; using Deltares.WTIStability.Data.Geo; using Ringtoets.MacroStabilityInwards.Primitives; namespace Ringtoets.MacroStabilityInwards.KernelWrapper.Creators { /// /// Creates instances which are required by the . /// internal static class MacroStabilityInwardsSoilCreator { /// /// Creates a based on information contained in the profile , /// which can be used in the . /// /// The from /// which to take the information. /// A new with information taken from the . /// Thrown when is null. /// Thrown when /// has an type that can't be converted to . public static Soil[] Create(MacroStabilityInwardsSoilProfileUnderSurfaceLine profile) { if (profile == null) { throw new ArgumentNullException(nameof(profile)); } return profile.LayersUnderSurfaceLine.Select(l => { MacroStabilityInwardsSoilLayerPropertiesUnderSurfaceLine properties = l.Properties; return new Soil(properties.MaterialName) { UsePop = properties.UsePop, ShearStrengthModel = ConvertShearStrengthModel(properties.ShearStrengthModel), AbovePhreaticLevel = properties.AbovePhreaticLevelDesignVariable, BelowPhreaticLevel = properties.BelowPhreaticLevelDesignVariable, Cohesion = properties.CohesionDesignVariable, FrictionAngle = properties.FrictionAngleDesignVariable, RatioCuPc = properties.ShearStrengthRatioDesignVariable, StrengthIncreaseExponent = properties.StrengthIncreaseExponentDesignVariable, PoP = properties.PopDesignVariable }; }).ToArray(); } private static ShearStrengthModel ConvertShearStrengthModel(MacroStabilityInwardsShearStrengthModel shearStrengthModel) { switch (shearStrengthModel) { case MacroStabilityInwardsShearStrengthModel.None: return ShearStrengthModel.None; case MacroStabilityInwardsShearStrengthModel.SuCalculated: return ShearStrengthModel.CuCalculated; case MacroStabilityInwardsShearStrengthModel.CPhi: return ShearStrengthModel.CPhi; case MacroStabilityInwardsShearStrengthModel.CPhiOrSuCalculated: return ShearStrengthModel.CPhiOrCuCalculated; default: throw new NotSupportedException(); } } } }