Exemplo n.º 1
0
        public double GetTensionFlangeRuptureStrength(ISectionI ShapeIGross, ISectionI ShapeINet)
        {
            double phiM_n = -1;
            double F_y    = Section.Material.YieldStress;
            double F_u    = Section.Material.UltimateStress;
            double S_g    = Math.Min(ShapeIGross.S_xBot, ShapeIGross.S_xTop);

            SectionIWithFlangeHoles netSec = ShapeINet as SectionIWithFlangeHoles;

            if (netSec == null)
            {
                throw new Exception("Net section shape not recognized");
            }
            double A_fgB = ShapeIGross.b_fBot * ShapeIGross.t_fBot;
            double A_fgT = ShapeIGross.b_fTop * ShapeIGross.t_fTop;

            double A_fnB = netSec.b_fBot * netSec.t_fBot - netSec.b_hole * netSec.N_holes;
            double A_fnT = netSec.b_fTop * netSec.t_fTop - netSec.b_hole * netSec.N_holes;

            double Y_t = GetY_t();

            double BotFlangeRuptureMoment = GetNetSectionRuptureStrength(A_fnB, A_fgB, Y_t);
            double TopFlangeRuptureMoment = GetNetSectionRuptureStrength(A_fnT, A_fgT, Y_t);

            phiM_n = Math.Min(BotFlangeRuptureMoment, TopFlangeRuptureMoment);
            return(phiM_n);
        }
Exemplo n.º 2
0
        public void SectionIWithFlangeHolesRolledReturnsIy()
        {
            SectionIWithFlangeHoles shape = new SectionIWithFlangeHoles("", 17.7, 6.0, 0.425, 0.3, 0.001, 2);
            double Iy              = shape.I_y;
            double refValue        = 15.3;
            double actualTolerance = EvaluateActualTolerance(Iy, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
Exemplo n.º 3
0
        public double GetFlexuralStrength(double L_b)
        {
            double phiM_n = 0.0;
            double F_y    = this.Section.Material.YieldStress;
            double F_u    = this.Section.Material.UltimateStress;

            ISection section = Section.Shape;

            bool IsValidGrossSection = ValidateGrossSection();
            bool IsValidNetSection   = true;

            if (this.NetSectionShape != null)
            {
                IsValidNetSection = ValidateNetSection();
            }


            double phiM_nLTB, phiM_nNet, phiM_nGross;

            //Gross Section Yielding
            if (IsCompactDoublySymmetricForFlexure == true)
            {
                double Z = GrossSectionShape.Z_x;
                phiM_nGross = 0.9 * F_y * Z;
            }
            else
            {
                double S = Math.Min(GrossSectionShape.S_xBot, GrossSectionShape.S_xTop);
                phiM_nGross = 0.9 * F_y * S;
            }

            //Net Section Fracture
            if (NetSectionShape == null)
            {
                phiM_nNet = double.PositiveInfinity;
            }
            else
            {
                if (GrossSectionShape is ISectionI)
                {
                    if (NetSectionShape is ISectionI)
                    {
                        SectionIWithFlangeHoles netSec = NetSectionShape as SectionIWithFlangeHoles;
                        phiM_nNet = GetTensionFlangeRuptureStrength(GrossSectionShape as ISectionI, NetSectionShape as ISectionI);
                    }
                    else
                    {
                        throw new Exception("If I-Shape is used for Gross section,specify I-Shape with holes object type for net sections.");
                    }
                }
                else
                {
                    phiM_nNet = 0.75 * NetSectionShape.Z_x * F_u;
                }
            }

            //Lateral Stability
            if (L_b != 0)
            {
                double S = NetSectionShape == null?Math.Min(GrossSectionShape.S_xBot, GrossSectionShape.S_xTop) :   Math.Min(NetSectionShape.S_xBot, NetSectionShape.S_xTop);

                double lambda = this.GetLambda(L_b);
                double Q      = this.GetBucklingReductionCoefficientQ(lambda);
                double F_cr   = F_y * Q;
                phiM_nLTB = 0.9 * S * F_cr;
            }
            else
            {
                phiM_nLTB = double.PositiveInfinity;
            }

            List <double> LimitStates = new List <double>()
            {
                phiM_nLTB, phiM_nNet, phiM_nGross
            };

            phiM_n = LimitStates.Min();

            return(phiM_n);
        }