예제 #1
0
        public ISteelCompressionMember GetIshape(ISteelSection Section, bool IsRolled, double L_x, double L_y, double L_z, ICalcLog CalcLog)
        {
            ISteelCompressionMember column         = null;
            IShapeCompactness       compactnessTop = new ShapeCompactness.IShapeMember(Section, IsRolled, Common.Section.Interfaces.FlexuralCompressionFiberPosition.Top);
            IShapeCompactness       compactnessBot = new ShapeCompactness.IShapeMember(Section, IsRolled, Common.Section.Interfaces.FlexuralCompressionFiberPosition.Bottom);
            ICalcLog Log = new CalcLog();


            CompactnessClassAxialCompression flangeCompactnessTop = compactnessTop.GetFlangeCompactnessCompression();
            CompactnessClassAxialCompression flangeCompactnessBot = compactnessTop.GetFlangeCompactnessCompression();
            CompactnessClassAxialCompression webCompactness       = compactnessTop.GetWebCompactnessCompression();

            if (flangeCompactnessTop == CompactnessClassAxialCompression.NonSlender && webCompactness == CompactnessClassAxialCompression.NonSlender &&
                flangeCompactnessBot == CompactnessClassAxialCompression.NonSlender)
            {
                column = new IShapeCompact(Section, IsRolled, L_x, L_y, L_z, Log);
                //if (IShape.b_fBot == IShape.b_fTop && IShape.t_fBot == IShape.t_fTop)
                //{
                //    return new IShapeCompact(SectionI, IsRolledShape, L_ex, L_ey, L_ez, log);
                //}
                //else
                //{
                //    throw new NotImplementedException();
                //}
            }
            else
            {
                column = new IShapeSlenderElements(Section, IsRolled, L_x, L_y, L_z, Log);
            }
            return(column);
        }
예제 #2
0
        internal double GetRpc(FlexuralCompressionFiberPosition compressionFiberPosition)
        {
            double Rpc = 0;
            double Mp  = GetMajorNominalPlasticMoment();
            double Myc = GetCompressionFiberYieldMomentMyc(compressionFiberPosition);

            double hc = Gethc(compressionFiberPosition);
            double tw = this.Gettw();

            ShapeCompactness.IShapeMember compactness = new ShapeCompactness.IShapeMember(Section, IsRolledMember, compressionFiberPosition);
            double lambdaWeb = compactness.GetWebLambda();
            double lambdapw  = compactness.GetWebLambda_p(StressType.Flexure);
            double lambdarw  = compactness.GetWebLambda_r(StressType.Flexure);
            double Iyc       = GetIyc(compressionFiberPosition);
            double Iy        = Section.Shape.I_y;

            if (Iyc / Iy > 0.23)
            {
                if (hc / tw > lambdapw)
                {
                    Rpc = Mp / Myc; //(F4-9a)
                }
                else
                {
                    Rpc = Mp / Myc - (Mp / Myc - 1.0) * ((lambdaWeb - lambdapw) / (lambdarw - lambdapw));  //(F4-9b)
                    Rpc = Rpc > Mp / Myc ? Mp / Myc : Rpc;
                }
            }
            else
            {
                Rpc = 1.0; //(F4-10)
            }

            return(Rpc);
        }
예제 #3
0
        public double GetWebPlastificationFactorForTensionRpt(FlexuralCompressionFiberPosition compressionFiberPosition)
        {
            double Rpt = 0.0;

            double Mp  = GetMajorNominalPlasticMoment();
            double Myt = GetTensionFiberYieldMomentMyt(compressionFiberPosition);

            double hc = Gethc(compressionFiberPosition);
            double tw = this.Gettw();

            ShapeCompactness.IShapeMember compactness = new ShapeCompactness.IShapeMember(Section, IsRolledMember, compressionFiberPosition);
            double lambdaWeb = compactness.GetWebLambda();
            double lambdapw  = compactness.GetWebLambda_p(StressType.Flexure);
            double lambdarw  = compactness.GetWebLambda_r(StressType.Flexure);

            //double lambda = hc / tw;
            double lambda = compactness.GetWebLambda();

            if (lambda <= lambdapw)
            {
                Rpt = Mp / Myt; //(F4-16a)
            }

            else
            {
                Rpt = Mp / Myt - (Mp / Myt - 1) * ((lambda - lambdapw) / (lambdarw - lambdapw)); //(F4-16b)
            }


            return(Rpt);
        }
예제 #4
0
        public double GetLambdaWeb()
        {
            double Lambda = 0.0;

            compactness = new ShapeCompactness.IShapeMember
                              (this.Section, this.isRolledMember, FlexuralCompressionFiberPosition.Top);
            // for web location of compression fiber does not matter
            Lambda = compactness.GetWebLambda();
            return(Lambda);
        }
예제 #5
0
        //Compression Flange Local Buckling F4.3
        public double GetCompressionFlangeLocalBucklingCapacity(FlexuralCompressionFiberPosition compressionFiberPosition)
        {
            double Mn = 0.0;

            double bf = GetCompressionFlangeWidthbfc(compressionFiberPosition);
            double tf = GetCompressionFlangeThicknesstfc(compressionFiberPosition);

            ShapeCompactness.IShapeMember compactness       = new ShapeCompactness.IShapeMember(Section, IsRolledMember, compressionFiberPosition);
            CompactnessClassFlexure       flangeCompactness = compactness.GetFlangeCompactnessFlexure();

            double lambda = compactness.GetCompressionFlangeLambda();
            double Sxc    = GetSectionModulusCompressionSxc(compressionFiberPosition);

            switch (flangeCompactness)
            {
            case CompactnessClassFlexure.Compact:

                throw new LimitStateNotApplicableException("Compression Flange Local buckling");

            case CompactnessClassFlexure.Noncompact:

                double Rpc      = GetRpc(compressionFiberPosition);
                double Myc      = GetCompressionFiberYieldMomentMyc(compressionFiberPosition);
                double lambdapf = compactness.GetFlangeLambda_p(StressType.Flexure);
                double lambdarf = compactness.GetFlangeLambda_r(StressType.Flexure);
                double FL       = GetStressFL(compressionFiberPosition);

                Mn = Rpc * Myc - (Rpc * Myc - FL * Sxc) * ((lambda - lambdapf) / (lambdarf - lambdapf));         //(F4-13)

                break;

            case CompactnessClassFlexure.Slender:

                double kc = Getkc();
                double E  = this.Section.Material.ModulusOfElasticity;

                Mn = 0.9 * E * kc * Sxc / Math.Pow(lambda, 2);

                break;
            }


            double phiM_n = 0.9 * Mn;

            return(phiM_n);
        }
예제 #6
0
        protected virtual CompactnessResult GetShapeCompactness()
        {
            ShapeCompactness.IShapeMember compactnessTop       = new ShapeCompactness.IShapeMember(Section, IsRolledMember, FlexuralCompressionFiberPosition.Top);
            CompactnessClassFlexure       flangeCompactnessTop = compactnessTop.GetFlangeCompactnessFlexure();

            ShapeCompactness.IShapeMember compactnessBot       = new ShapeCompactness.IShapeMember(Section, IsRolledMember, FlexuralCompressionFiberPosition.Top);
            CompactnessClassFlexure       flangeCompactnessBot = compactnessTop.GetFlangeCompactnessFlexure();

            double lambda    = 0.0;
            double lambdaTop = compactnessTop.GetCompressionFlangeLambda();
            double lambdaBot = compactnessBot.GetCompressionFlangeLambda();

            CompactnessClassFlexure flangeCompactness;

            ShapeCompactness.IShapeMember thisShapeCompactness;


            double b  = 0;
            double tf = 0.0;

            if (lambdaTop > lambdaBot)
            {
                thisShapeCompactness = compactnessTop;
                flangeCompactness    = flangeCompactnessTop;
                lambda = lambdaTop;
                b      = GetBfTop();
                tf     = Get_tfTop();
            }
            else
            {
                thisShapeCompactness = compactnessBot;
                flangeCompactness    = flangeCompactnessBot;
                lambda = lambdaBot;
                b      = GetBfBottom();
                tf     = Get_tfBottom();
            }

            return(new CompactnessResult()
            {
                ShapeCompactness = thisShapeCompactness,
                FlangeCompactness = flangeCompactness,
                b = b,
                tf = tf,
                lambda = lambda
            });
        }
예제 #7
0
        //Compression Flange Local Buckling F3.2

        public double GetCompressionFlangeLocalBucklingCapacity()
        {
            double    M_n      = 0.0;
            double    phiM_n   = 0.0;
            ISectionI sectionI = Section.Shape as ISectionI;

            if (sectionI != null)
            {
                ShapeCompactness.IShapeMember compactness = new ShapeCompactness.IShapeMember(Section, IsRolledMember, FlexuralCompressionFiberPosition.Top);
                CompactnessClassFlexure       cClass      = compactness.GetFlangeCompactnessFlexure();
                if (cClass == CompactnessClassFlexure.Noncompact || cClass == CompactnessClassFlexure.Slender)
                {
                    double lambda   = this.GetLambdaCompressionFlange(FlexuralCompressionFiberPosition.Top);
                    double lambdapf = this.GetLambdapf(FlexuralCompressionFiberPosition.Top);
                    double lambdarf = this.GetLambdarf(FlexuralCompressionFiberPosition.Top);
                    //note: section is doubly symmetric so top flange is taken

                    double Sx = this.Section.Shape.S_xTop;
                    double Fy = this.Section.Material.YieldStress;
                    double E  = this.Section.Material.ModulusOfElasticity;
                    //double Zx = Section.SectionBase.Z_x;

                    if (cClass == CompactnessClassFlexure.Noncompact)
                    {
                        double Mp = this.GetMajorNominalPlasticMoment();
                        M_n = Mp - (Mp - 0.7 * Fy * Sx) * ((lambda - lambdapf) / (lambdarf - lambdapf));          //(F3-1)
                    }
                    else
                    {
                        double kc = this.Getkc();
                        M_n = 0.9 * E * kc * Sx / Math.Pow(lambda, 2); //(F3-2)
                    }
                }
                else
                {
                }
                if (cClass == CompactnessClassFlexure.Compact)
                {
                    throw new LimitStateNotApplicableException("Flange local buckling");
                }
            }
            phiM_n = 0.9 * M_n;
            return(phiM_n);
        }
        public ISteelBeamFlexure GetBeamCase()
        {
            ISteelBeamFlexure beam        = null;
            IShapeCompactness compactness = new ShapeCompactness.IShapeMember(section, IsRolledMember, compressionFiberPosition);

            CompactnessClassFlexure flangeCompactness = compactness.GetFlangeCompactnessFlexure();
            CompactnessClassFlexure webCompactness    = compactness.GetWebCompactnessFlexure();

            if (flangeCompactness == CompactnessClassFlexure.Compact && webCompactness == CompactnessClassFlexure.Compact)
            {
                return(new BeamIDoublySymmetricCompact(section, IsRolledMember, CalcLog));
            }
            else
            {
                if (webCompactness == CompactnessClassFlexure.Compact)
                {
                    return(new BeamIDoublySymmetricCompactWebOnly(section, IsRolledMember, CalcLog));
                }
                else if (webCompactness == CompactnessClassFlexure.Noncompact)
                {
                    if (flangeCompactness == CompactnessClassFlexure.Compact)
                    {
                        return(new BeamINoncompactWebCompactFlange(section, IsRolledMember, CalcLog));
                    }
                    else
                    {
                        return(new BeamINoncompactWeb(section, IsRolledMember, CalcLog));
                    }
                }

                else //slender web
                {
                    if (flangeCompactness == CompactnessClassFlexure.Compact)
                    {
                        return(new BeamISlenderWebCompactFlange(section, IsRolledMember, CalcLog));
                    }
                    else
                    {
                        return(new BeamISlenderWeb(section, IsRolledMember, CalcLog));
                    }
                }
            }
            return(beam);
        }
예제 #9
0
 public double GetLambdaCompressionFlange(FlexuralCompressionFiberPosition compressionFiberPosition)
 {
     compactness = new ShapeCompactness.IShapeMember
                       (this.Section, this.isRolledMember, compressionFiberPosition);
     return(compactness.GetCompressionFlangeLambda());
 }
예제 #10
0
 protected virtual double GetLambdarf(FlexuralCompressionFiberPosition compressionFiberPosition)
 {
     compactness = new ShapeCompactness.IShapeMember
                       (this.Section, this.isRolledMember, compressionFiberPosition);
     return(compactness.GetFlangeLambda_r(StressType.Flexure));
 }
예제 #11
0
파일: FLB.cs 프로젝트: jerem48/Wosad.Design
        public double GetCompressionFlangeLocalBucklingCapacity()
        {
            // compactness criteria is selected by the most slender flange

            double Mn = 0;

            ShapeCompactness.IShapeMember compactnessTop       = new ShapeCompactness.IShapeMember(Section, IsRolledMember, FlexuralCompressionFiberPosition.Top);
            CompactnessClassFlexure       flangeCompactnessTop = compactnessTop.GetFlangeCompactnessFlexure();

            ShapeCompactness.IShapeMember compactnessBot       = new ShapeCompactness.IShapeMember(Section, IsRolledMember, FlexuralCompressionFiberPosition.Top);
            CompactnessClassFlexure       flangeCompactnessBot = compactnessTop.GetFlangeCompactnessFlexure();

            double lambda    = 0.0;
            double lambdaTop = compactnessTop.GetCompressionFlangeLambda();
            double lambdaBot = compactnessBot.GetCompressionFlangeLambda();

            CompactnessClassFlexure flangeCompactness;

            ShapeCompactness.IShapeMember compactness;
            double b  = 0;
            double tf = 0.0;

            if (lambdaTop > lambdaBot)
            {
                compactness       = compactnessTop;
                flangeCompactness = flangeCompactnessTop;
                lambda            = lambdaTop;
                b  = GetBfTop();
                tf = Get_tfTop();
            }
            else
            {
                compactness       = compactnessBot;
                flangeCompactness = flangeCompactnessBot;
                lambda            = lambdaBot;
                b  = GetBfBottom();
                tf = Get_tfBottom();
            }

            double Mp       = Zy * Fy;
            double lambdapf = compactness.GetFlangeLambda_p(StressType.Flexure);
            double lambdarf = compactness.GetFlangeLambda_r(StressType.Flexure);

            switch (flangeCompactness)
            {
            case CompactnessClassFlexure.Compact:
                Mn = double.PositiveInfinity;
                break;

            case CompactnessClassFlexure.Noncompact:
                Mn = Mp - (Mp - 0.7 * Fy * Sy) * ((lambda - lambdapf) / (lambdarf - lambdapf));     //(F6-2)
                break;

            case CompactnessClassFlexure.Slender:

                double Fcr = 0.69 * E / Math.Pow(b / tf, 2.0); //(F6-4)
                Mn = Fcr * Sy;                                 //(F6-3)
                break;
            }
            double phiM_n = 0.9 * Mn;

            return(phiM_n);
        }