Esempio n. 1
0
        public IShearMember GetShearMemberNonCircular(ShearNonCircularCase ShearCase, double h, double t_w, double a, double F_y, double E)
        {
            ISteelMaterial material = new SteelMaterial(F_y, E);
            IShearMember   member   = null;
            bool           IsTeeShape;


            switch (ShearCase)
            {
            case ShearNonCircularCase.MemberWithStiffeners:
                IsTeeShape = false;
                member     = new ShearMemberWithStiffeners(h, t_w, a, material, IsTeeShape);
                break;

            case ShearNonCircularCase.Tee:
                IsTeeShape = true;
                member     = new ShearMemberWithoutStiffeners(h, t_w, material, IsTeeShape);
                break;

            case ShearNonCircularCase.Box:
                member = new ShearMemberBox(h, t_w, material);
                break;

            default:
                IsTeeShape = false;
                member     = new ShearMemberWithoutStiffeners(h, t_w, material, IsTeeShape);
                break;
            }
            return(member);
        }
        protected override double GetV_m(double V_mt, double V_mb, double mu, double nu)
        {
            double V_m;
            double V_m1   = V_mt + V_mb;
            double V_pt   = GetV_pt();
            double V_mtSH = GetV_mtSH(V_pt);

            double V_cBar1 = V_pt * (mu / nu - 1.0);

            V_cBar1 = V_cBar1 < 0 ? 0 :V_cBar1;
            double V_cBar2 = V_mtSH - V_pt;

            V_cBar2 = V_cBar2 < 0 ? 0 : V_cBar2;

            double V_cBar = Math.Min(V_cBar1, V_cBar2);

            ShearMemberFactory f = new ShearMemberFactory();

            //Refine this in future to reflect more possible cases
            double h   = Section.d;
            double t_w = Section.t_w;
            double E   = 29000;
            double a   = 3 * h; // no stiffeners are accounted here, arbitrarily set the stiffener spacing


            IShearMember UnperforatedShape = f.GetShearMemberNonCircular(ShearNonCircularCase.MemberWithoutStiffeners,
                                                                         h, t_w, a, F_y, E);
            double V_pBar = UnperforatedShape.GetShearStrength();
            double V_m2   = 2.0 / 3.0 * V_pBar + V_cBar;

            V_m = Math.Min(V_m1, V_m2);

            //double V_cBar = V_pt
            return(V_m);
        }
        public static Dictionary <string, object> ShearStrengthNonCircular(string ShearCase, double F_y, double t_w, double h, double a_s = 0.0, double E = 29000, string Code = "AISC360-10")
        {
            //Default values
            double phiV_n = 0;


            //Calculation logic:
            ShearMemberFactory factory = new ShearMemberFactory();

            aisc.ShearNonCircularCase shearCase;
            bool IsValidString = Enum.TryParse(ShearCase, true, out shearCase);

            if (IsValidString == true)
            {
                IShearMember member = factory.GetShearMemberNonCircular(shearCase, h, t_w, a_s, F_y, E);
                phiV_n = member.GetShearStrength();
            }
            else
            {
                throw new Exception("Invalid case selection for non-circular section.");
            }

            return(new Dictionary <string, object>
            {
                { "phiV_n", phiV_n }
            });
        }
Esempio n. 4
0
        public void ShearBeamIShapeReturnsValue()
        {
            double             h       = 26.3;
            double             t_w     = 1.04;
            double             a       = 0;
            double             F_y     = 50.0;
            double             E       = 29000;
            ShearMemberFactory factory = new ShearMemberFactory();
            IShearMember       member  = factory.GetShearMemberNonCircular(ShearNonCircularCase.MemberWithoutStiffeners, h, t_w, a, F_y, E);
            double             phiV_n  = member.GetShearStrength();

            double refValue        = 821.0;
            double actualTolerance = EvaluateActualTolerance(phiV_n, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }