예제 #1
0
        public double GetLocalBucklingCapacity()
        {
            double M_n = 0.0;

            if (this.SectionPipe != null)
            {
                CompactnessClassFlexure cClass = GetCompactnessClass();
                if (cClass == CompactnessClassFlexure.Noncompact || cClass == CompactnessClassFlexure.Slender)
                {
                    double Sx = Section.Shape.S_xTop;
                    if (cClass == CompactnessClassFlexure.Noncompact)
                    {
                        //noncompact
                        M_n = (0.021 * E / (D / t) + F_y) * Sx; //(F8-2)
                    }
                    else
                    {
                        //slender
                        double Fcr = 0.33 * E / (D / t); //(F8-4)
                        M_n = Fcr * Sx;                  // (F8-3)
                    }
                }
                else
                {
                    M_n = double.PositiveInfinity;
                }
            }
            double phiM_n = 0.9 * M_n;

            return(phiM_n);
        }
예제 #2
0
        //Compression Flange Local Buckling F7.2


        public double GetCompressionFlangeLocalBucklingCapacity(FlexuralCompressionFiberPosition CompressionLocation, MomentAxis MomentAxis)
        {
            double Mn     = 0.0;
            double phiM_n = 0.0;

            if (Section != null)
            {
                double lambda   = this.GetLambdaCompressionFlange(CompressionLocation, MomentAxis);
                double lambdapf = this.GetLambdapf(CompressionLocation, MomentAxis);
                double lambdarf = this.GetLambdarf(CompressionLocation, MomentAxis);
                //note: section is doubly symmetric so top flange is taken

                double S  = GetSectionModulus(MomentAxis);
                double Fy = this.Section.Material.YieldStress;
                double E  = this.Section.Material.ModulusOfElasticity;

                CompactnessClassFlexure cClass = GetFlangeCompactness(CompressionLocation, MomentAxis);

                if (cClass == CompactnessClassFlexure.Noncompact)
                {
                    double Mp = this.GetMajorNominalPlasticMoment();
                    Mn = GetMnNoncompact(Mp, Fy, S, lambda);
                }
                else
                {
                    double Sxe = GetEffectiveSectionModulusX(MomentAxis);
                    Mn = GetMnSlender(Sxe, Fy);
                }
            }
            phiM_n = 0.9 * Mn;
            return(phiM_n);
        }
예제 #3
0
        public override SteelLimitStateValue GetFlexuralLegOrStemBucklingStrength(FlexuralCompressionFiberPosition CompressionLocation,
                                                                                  FlexuralAndTorsionalBracingType BracingType)
        {
            CompactnessClassFlexure StemCompactness = this.Compactness.GetWebCompactnessFlexure();
            // for compact angles this limit state is not applicable

            SteelLimitStateValue ls = null;

            if (StemCompactness == General.Compactness.CompactnessClassFlexure.Compact)
            {
                ls = new SteelLimitStateValue(-1, false);
                return(ls);
            }
            else if (StemCompactness == CompactnessClassFlexure.Noncompact)
            {
                double S_c = GetSectionModulus(CompressionLocation, true, BracingType);
                //F10-7
                double M_n    = F_y * S_c * (2.43 - 1.72 * (((b) / (t))) * Math.Sqrt(((F_y) / (E))));
                double phiM_n = 0.9 * M_n;
                ls = new SteelLimitStateValue(phiM_n, true);
            }
            else
            {
                double F_cr = ((0.71 * E) / (Math.Pow((((b) / (t))), 2)));
                double S_c  = GetSectionModulus(CompressionLocation, true, BracingType);
                //(F10-8)
                double M_n    = F_cr * S_c;
                double phiM_n = 0.9 * M_n;
                ls = new SteelLimitStateValue(phiM_n, true);
            }

            return(ls);
        }
예제 #4
0
        private ISteelBeamFlexure CreateRhsBeam(CompactnessClassFlexure FlangeCompactness, FlexuralCompressionFiberPosition compressionFiberPosition,
                                                CompactnessClassFlexure WebCompactness,
                                                ISectionTube RhsSec, ISteelMaterial Material, MomentAxis MomentAxis, ICalcLog Log)
        {
            SteelRhsSection   steelSection = new SteelRhsSection(RhsSec, Material);
            ISteelBeamFlexure beam         = null;

            beam = new BeamRectangularHss(steelSection, compressionFiberPosition, MomentAxis, Log);
            return(beam);
        }
예제 #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
        public SteelLimitStateValue GetFlexuralWebOrWallBucklingStrength(FlexuralCompressionFiberPosition CompressionLocation)
        {
            SteelLimitStateValue ls = new SteelLimitStateValue();

            ShapeCompactness.HollowMember Compactness = new ShapeCompactness.HollowMember(Section, CompressionLocation, MomentAxis.XAxis);
            CompactnessClassFlexure       cClass      = Compactness.GetWebCompactnessFlexure();

            if (cClass == CompactnessClassFlexure.Compact)
            {
                ls = new SteelLimitStateValue(-1, false);
            }
            else
            {
                double phiM_n = GetLocalBucklingCapacity();
                ls = new SteelLimitStateValue(phiM_n, true);
            }
            return(ls);
        }
        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
        //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);
        }
예제 #10
0
        public double GetCompressionFlangeLocalBucklingCapacity()
        {
            // compactness criteria is selected by the most slender flange

            bool LimitStateApplicable = DetermineIfFLBLimitStateIsApplicable();

            double Mn = 0;

            CompactnessResult       compactnessResult    = GetShapeCompactness();
            IShapeCompactness       thisShapeCompactness = compactnessResult.ShapeCompactness;
            CompactnessClassFlexure flangeCompactness    = compactnessResult.FlangeCompactness;

            double b      = compactnessResult.b;
            double tf     = compactnessResult.tf;
            double lambda = compactnessResult.lambda;



            double Mp       = Z_y * F_y;
            double lambdapf = thisShapeCompactness.GetFlangeLambda_p(StressType.Flexure);
            double lambdarf = thisShapeCompactness.GetFlangeLambda_r(StressType.Flexure);

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

            case CompactnessClassFlexure.Noncompact:
                Mn = Mp - (Mp - 0.7 * F_y * S_y) * ((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 * S_y;                                //(F6-3)
                break;
            }
            double phiM_n = 0.9 * Mn;

            return(phiM_n);
        }
예제 #11
0
        private ISteelBeamFlexure CreateIBeam(CompactnessClassFlexure FlangeCompactness,
                                              CompactnessClassFlexure WebCompactness, ISectionI Section, ISteelMaterial Material,
                                              ICalcLog Log, bool IsRolled)
        {
            SteelSectionI     steelSection = new SteelSectionI(Section, Material);
            ISteelBeamFlexure beam         = null;

            if (FlangeCompactness == CompactnessClassFlexure.Compact && WebCompactness == CompactnessClassFlexure.Compact)
            {
                //F2
                beam = new BeamIDoublySymmetricCompact(steelSection, IsRolled, Log);
            }
            else if (WebCompactness == CompactnessClassFlexure.Compact && FlangeCompactness != CompactnessClassFlexure.Compact)
            {
                //F3
                throw new NotImplementedException();
            }

            return(beam);
        }
예제 #12
0
        public double GetCompressionFlangeLocalBucklingCapacity(FlexuralCompressionFiberPosition compressionFiberLocation)
        {
            double Mn = 0.0;

            if (SectionTee != null)
            {
                CompactnessClassFlexure cClass = GetFlangeCompactnessClass();
                if (cClass == CompactnessClassFlexure.Noncompact || cClass == CompactnessClassFlexure.Slender)
                {
                    double lambda   = GetLambdaFlange();
                    double lambdapf = this.GetLambdapf(compressionFiberLocation);
                    double lambdarf = this.GetLambdarf(compressionFiberLocation);

                    double Sxc = GetSectionModulusCompressionSxc(compressionFiberLocation);
                    double Fy  = this.Section.Material.YieldStress;
                    double E   = this.Section.Material.ModulusOfElasticity;

                    double My = GetYieldingMoment_My(compressionFiberLocation);

                    if (cClass == CompactnessClassFlexure.Noncompact)
                    {
                        double Mp = this.GetMajorNominalPlasticMoment();
                        Mn = GetMnFlbNoncompact(Mp, Sxc, lambda, lambdarf, lambdapf, My);
                    }
                    else
                    {
                        Mn = GetMnFlbSlender(Sxc, lambda);
                    }
                }
                else
                {
                }
                if (cClass == CompactnessClassFlexure.Compact)
                {
                    throw new LimitStateNotApplicableException("Flange local buckling");
                }
            }

            return(Mn);
        }
예제 #13
0
        protected override CompactnessResult GetShapeCompactness()
        {
            //use only top fiber position properties
            // it is assumed that Channel shape is symmetrical
            ShapeCompactness.ChannelMember compactnessTop       = new ShapeCompactness.ChannelMember(Section, IsRolledMember, FlexuralCompressionFiberPosition.Top);
            CompactnessClassFlexure        flangeCompactnessTop = compactnessTop.GetFlangeCompactnessFlexure();


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


            CompactnessClassFlexure flangeCompactness;

            ShapeCompactness.ChannelMember thisShapeCompactness;


            double b  = 0;
            double tf = 0.0;


            thisShapeCompactness = compactnessTop;
            flangeCompactness    = flangeCompactnessTop;
            lambda = lambdaTop;
            b      = SectionChannel.b_f;
            tf     = SectionChannel.t_f;


            return(new CompactnessResult()
            {
                ShapeCompactness = thisShapeCompactness,
                FlangeCompactness = flangeCompactness,
                b = b,
                tf = tf,
                lambda = lambda
            });
        }
예제 #14
0
        private ISteelBeamFlexure CreateIBeam(CompactnessClassFlexure FlangeCompactness,
            CompactnessClassFlexure WebCompactness, ISectionI Section, ISteelMaterial Material, 
            ICalcLog Log, bool IsRolled)
        {
            SteelSectionI steelSection = new SteelSectionI(Section, Material);
            ISteelBeamFlexure beam = null;
            if (FlangeCompactness== CompactnessClassFlexure.Compact && WebCompactness == CompactnessClassFlexure.Compact)
            {
                //F2
                beam = new BeamIDoublySymmetricCompact(steelSection, IsRolled, Log);
            }
            else if (WebCompactness == CompactnessClassFlexure.Compact && FlangeCompactness!= CompactnessClassFlexure.Compact)
            {
                //F3
                throw new NotImplementedException();
            }

            return beam;
        }
예제 #15
0
 private ISteelBeamFlexure CreateRhsBeam(CompactnessClassFlexure FlangeCompactness, FlexuralCompressionFiberPosition compressionFiberPosition,
     CompactnessClassFlexure WebCompactness,
     ISectionTube RhsSec, ISteelMaterial Material, MomentAxis MomentAxis, ICalcLog Log)
 {
     SteelRhsSection steelSection = new SteelRhsSection(RhsSec, Material);
     ISteelBeamFlexure beam = null;
     beam = new BeamRectangularHss(steelSection,compressionFiberPosition, MomentAxis, Log);
     return beam;
 }
예제 #16
0
        public ISteelBeamFlexure GetBeam(ISection Shape, ISteelMaterial Material, ICalcLog Log, MomentAxis MomentAxis,
                                         FlexuralCompressionFiberPosition compressionFiberPosition, bool IsRolledMember = true)
        {
            ISteelBeamFlexure beam = null;

            if (MomentAxis == Common.Entities.MomentAxis.XAxis)
            {
                if (Shape is ISectionI)
                {
                    ISectionI     IShape   = Shape as ISectionI;
                    SteelSectionI SectionI = new SteelSectionI(IShape, Material);
                    if (IShape.b_fBot == IShape.b_fTop && IShape.t_fBot == IShape.t_fTop)     // doubly symmetric
                    {
                        DoublySymmetricIBeam dsBeam = new DoublySymmetricIBeam(SectionI, Log, compressionFiberPosition, IsRolledMember);
                        beam = dsBeam.GetBeamCase();
                    }
                    else
                    {
                        SinglySymmetricIBeam ssBeam = new SinglySymmetricIBeam(SectionI, IsRolledMember, compressionFiberPosition, Log);
                        beam = ssBeam.GetBeamCase();
                    }
                }
                else if (Shape is ISolidShape)
                {
                    ISolidShape       solidShape   = Shape as ISolidShape;
                    SteelSolidSection SectionSolid = new SteelSolidSection(solidShape, Material);
                    beam = new BeamSolid(SectionSolid, Log, MomentAxis);
                }

                else if (Shape is ISectionChannel)
                {
                    ISectionChannel     ChannelShape   = Shape as ISectionChannel;
                    SteelChannelSection ChannelSection = new SteelChannelSection(ChannelShape, Material);
                    beam = new BeamChannel(ChannelSection, IsRolledMember, Log);


                    IShapeCompactness compactness = new ShapeCompactness.ChannelMember(ChannelSection, IsRolledMember, compressionFiberPosition);

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

                    if (flangeCompactness != CompactnessClassFlexure.Compact || webCompactness != CompactnessClassFlexure.Compact)
                    {
                        throw new Exception("Channels with non-compact and slender flanges or webs are not supported. Revise input.");
                    }
                }


                else if (Shape is ISectionPipe)
                {
                    ISectionPipe     SectionPipe = Shape as ISectionPipe;
                    SteelPipeSection PipeSection = new SteelPipeSection(SectionPipe, Material);
                    beam = new BeamCircularHss(PipeSection, Log);
                }

                else if (Shape is ISectionTube)
                {
                    ISectionTube    TubeShape       = Shape as ISectionTube;
                    SteelRhsSection RectHSS_Section = new SteelRhsSection(TubeShape, Material);
                    beam = new BeamRectangularHss(RectHSS_Section, compressionFiberPosition, MomentAxis, Log);
                }


                else if (Shape is ISectionBox)
                {
                    ISectionBox     BoxShape   = Shape as ISectionBox;
                    SteelBoxSection BoxSection = new SteelBoxSection(BoxShape, Material);
                    beam = new BeamRectangularHss(BoxSection, compressionFiberPosition, MomentAxis, Log);
                }

                else if (Shape is ISectionTee)
                {
                    ISectionTee     TeeShape   = Shape as ISectionTee;
                    SteelTeeSection TeeSection = new SteelTeeSection(TeeShape, Material);
                    beam = new BeamTee(TeeSection, Log);
                }
                else if (Shape is ISectionAngle)
                {
                    ISectionAngle     Angle        = Shape as ISectionAngle;
                    SteelAngleSection AngleSection = new SteelAngleSection(Angle, Material);
                    beam = new BeamAngle(AngleSection, Log, Angle.AngleRotation, MomentAxis, Angle.AngleOrientation);
                }
                else if (Shape is ISolidShape)
                {
                    ISolidShape       SolidShape   = Shape as ISolidShape;
                    SteelSolidSection SolidSection = new SteelSolidSection(SolidShape, Material);
                    beam = new BeamSolid(SolidSection, Log, MomentAxis);
                }
                else
                {
                    throw new Exception("Specified section type is not supported for this node.");
                }
            }
            else  // weak axis
            {
                if (Shape is ISectionI)
                {
                    ISectionI     IShape   = Shape as ISectionI;
                    SteelSectionI SectionI = new SteelSectionI(IShape, Material);

                    beam = new BeamIWeakAxis(SectionI, IsRolledMember, Log);
                }
                else
                {
                    throw new NotImplementedException();
                }
            }

            return(beam);
        }
예제 #17
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);
        }