コード例 #1
0
ファイル: ShearMemberBox.cs プロジェクト: Wosad/Wosad.Design
 public ShearMemberBox(ISectionTube section, ISteelMaterial material)
   
 {
     base.material = material;
     base.t_w = 2.0 * section.t_des;
     base.h = section.H - 3.0 * section.t_des;
 }
コード例 #2
0
        public ShearMemberBox(ISectionTube section, ISteelMaterial material)

        {
            base.material = material;
            base.t_w      = 2.0 * section.t_des;
            base.h        = section.H - 3.0 * section.t_des;
        }
コード例 #3
0
        internal double GetLocalYieldingOnSidewalls()
        {
            double R = 0;

            ISectionTube tube = Hss.Section as ISectionTube;

            if (tube == null)
            {
                throw new Exception("Member must be of type SectionTube");
            }

            double B  = tube.B;
            double Fy = Hss.Material.YieldStress;
            double tp = Plate.Section.B;
            double lb = tp;
            double A  = tube.A;

            double Rn = 0.0;

            if ((5.0 * t_plCap + lb) < B)
            {
                //(K1-14a)
                Rn = 2.0 * Fy * t_plCap * (5.0 * t_plCap + lb);
            }
            else
            {
                //(K1-14b)
                Rn = Fy * A;
            }
            R = 1.0 * Rn;

            return(R);
        }
コード例 #4
0
        internal double GetLocalCripplingOfSideWalls()
        {
            double       R    = 0.0;
            double       Rn   = 0.0;
            double       tp   = Plate.Section.B;
            double       lb   = tp;
            ISectionTube tube = Hss.Section as ISectionTube;

            if (tube == null)
            {
                throw new Exception("Member must be of type SectionTube");
            }

            double B  = tube.B;
            double t  = tube.t_des;
            double E  = SteelConstants.ModulusOfElasticity;
            double Fy = Hss.Material.YieldStress;

            if (5.0 * t_plCap + lb < B)
            {
                //(K1-15)
                Rn = 1.6 * Math.Pow(t, 2) * (1.0 + 6.0 * lb / B * Math.Pow(t / t_plCap, 1.5)) * Math.Sqrt(E * Fy * t_plCap / t);
            }
            else
            {
                double A = tube.A;
                Rn = Fy * A;
            }

            R = 0.75 * Rn;


            return(R);
        }
コード例 #5
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);
        }
コード例 #6
0
        public void SectionRHSReturnsWeakAxisClone()
        {
            AiscShapeFactory factory      = new AiscShapeFactory();
            ISectionTube     section      = factory.GetShape("HSS12X6X.375") as ISectionTube;
            ISection         sectionClone = section.GetWeakAxisClone();
            double           I_x          = sectionClone.I_x;
            double           refI_x       = 72.9;
            //Manual gives 10.3 but actual area checked in Autocad is 10.42
            double actualTolerance = EvaluateActualTolerance(I_x, refI_x);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
コード例 #7
0
            //ICompactnessElement FlangeCompactness;
            //ICompactnessElement WebCompactness;

            public HollowMember(ISteelSection section,
                                FlexuralCompressionFiberPosition compressionFiberPosition, MomentAxis MomentAxis)
            {
                ISection Section = section.Shape;

                if (Section is ISectionTube || Section is ISectionPipe || Section is ISectionBox)
                {
                    if (Section is ISectionTube)
                    {
                        ISectionTube tube = Section as ISectionTube;
                        if (MomentAxis == MomentAxis.XAxis)
                        {
                            FlangeCompactness = new FlangeOfRhs(section.Material, tube, MomentAxis);
                            WebCompactness    = new WebOfRhs(section.Material, tube, MomentAxis);
                        }
                        else
                        {
                            WebCompactness    = new FlangeOfRhs(section.Material, tube, MomentAxis);
                            FlangeCompactness = new WebOfRhs(section.Material, tube, MomentAxis);
                        }
                    }

                    if (Section is ISectionPipe)
                    {
                        ISectionPipe pipe = Section as ISectionPipe;
                        FlangeCompactness = new WallOfChs(section.Material, pipe);
                        WebCompactness    = new WallOfChs(section.Material, pipe);
                    }

                    if (Section is ISectionBox)
                    {
                        ISectionBox box = Section as ISectionBox;
                        if (MomentAxis == MomentAxis.XAxis)
                        {
                            FlangeCompactness = new FlangeOfBox(section.Material, box);
                            WebCompactness    = new WebOfBox(section.Material, box);
                        }
                        else
                        {
                            WebCompactness    = new FlangeOfBox(section.Material, box);
                            FlangeCompactness = new WebOfBox(section.Material, box);
                        }
                    }
                }
                else
                {
                    throw new SectionWrongTypeException("ISectionTube, ISectionPipe or ISectionBox");
                }
            }
コード例 #8
0
        protected double GetBeta()
        {
            double       beta;
            double       Bp   = Plate.Section.H;
            ISectionTube tube = Hss.Section as ISectionTube;

            if (tube == null)
            {
                throw new Exception("Member must be of type SectionTube");
            }

            double B = tube.B;

            beta = Bp / B;
            return(beta);
        }
コード例 #9
0
        internal double GetHSSWallPlastification()
        {
            //(K1-13)
            double R = 0.0;
            double Rn;
            double theta    = Angle;
            double sinTheta = Math.Sin(theta.ToRadians());

            double Fy = Hss.Material.YieldStress;
            double t  = 0.0;

            ISectionHollow hollowMember = Hss.Section as ISectionHollow;

            if (hollowMember != null)
            {
                t = hollowMember.t_des;
            }
            else
            {
                throw new Exception("Member must be of type IHollowMember");
            }


            ISectionTube tube = Hss.Section as ISectionTube;

            if (tube == null)
            {
                throw new Exception("Member must be of type SectionTube");
            }

            double B  = tube.B;
            double tp = Plate.Section.B;
            double lb = Plate.Section.H / sinTheta;
            double Qf = RhsStressInteractionQf(HssPlateOrientation.Longitudinal);

            //(K1-13)
            Rn = 2.0 * Fy * Math.Pow(t, 2) / (1.0 - (tp / B)) * (2.0 * lb / B + 4.0 * Math.Sqrt(1.0 - tp / B) * Qf) / sinTheta;

            R = Rn * 1.0;


            return(R);
        }
コード例 #10
0
        public double GetEffectivePlateWidth()
        {
            double       Bep;
            double       Bp   = Plate.Section.H;
            double       t    = Plate.Section.B;
            ISectionTube tube = Hss.Section as ISectionTube;

            if (tube == null)
            {
                throw new Exception("Member must be of type SectionTube");
            }

            double B = tube.B;

            //(K1-18)
            Bep = 10.0 * Bp / (B / t);
            Bep = Bep > Bp ? Bp : Bep;
            return(Bep);
        }
コード例 #11
0
ファイル: 04-FlangeOfRhs.cs プロジェクト: Wosad/Wosad.Design
        public FlangeOfRhs(ISteelMaterial Material, ISectionTube SectionTube, MomentAxis MomentAxis) //double OutsideCornerRadius=-1.0)
            :base(Material)
        {
            this.SectionTube = SectionTube;
            ISectionTube s = SectionTube;
            double td = s.t_des;
            //if (OutsideCornerRadius==-1.0)
            //{
            //    this.Width = s.B - 3.0 * td;
            //}
            //else
            //{
            //    if (OutsideCornerRadius<0)
            //    {
            //        throw new Exception("Invalid RHS corner radius. Must be over 0");
            //    }
            //    this.Width = s.B - 2.0 * OutsideCornerRadius;
            //}
            this.Width = GetFlangeWidth_bf(MomentAxis);

            this.Thickness = td;
        }
コード例 #12
0
        public FlangeOfRhs(ISteelMaterial Material, ISectionTube SectionTube, MomentAxis MomentAxis) //double OutsideCornerRadius=-1.0)
            : base(Material)
        {
            this.SectionTube = SectionTube;
            ISectionTube s  = SectionTube;
            double       td = s.t_des;

            //if (OutsideCornerRadius==-1.0)
            //{
            //    this.Width = s.B - 3.0 * td;
            //}
            //else
            //{
            //    if (OutsideCornerRadius<0)
            //    {
            //        throw new Exception("Invalid RHS corner radius. Must be over 0");
            //    }
            //    this.Width = s.B - 2.0 * OutsideCornerRadius;
            //}
            this.Width = GetFlangeWidth_bf(MomentAxis);

            this.Thickness = td;
        }
コード例 #13
0
 public SteelRhsSection(ISectionTube Section, ISteelMaterial Material)
     : base(Section, Material)
 {
     this.section = Section;
 }
コード例 #14
0
        protected override double GetArea()
        {
            ISectionTube tb = hss.Section;

            return(hss.Section.A);
        }
コード例 #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 double GetPureTorsionStressForClosedSection(ISection section, double T_u)
        {
            double tau;
            double b, h, t, J, R;

            if (section is ISolidShape)
            {
                if (section is ISectionRectangular)
                {
                    ISectionRectangular sr = section as ISectionRectangular;
                    J = sr.J;
                    R = Math.Min(sr.B, sr.H);
                }
                else if (section is ISectionRound)
                {
                    ISectionRound srou = section as ISectionRound;
                    J = srou.J;
                    R = srou.D / 2.0;
                }
                else
                {
                    throw new Exception("Section type is not applicable for closed section analysis");
                }
                tau = T_u * R / J;
            }
            else if (section is ISectionHollow)
            {
                if (section is ISectionTube || section is ISectionBox)
                {
                    if (section is ISectionBox)
                    {
                        ISectionBox sb = section as ISectionBox;
                        b = sb.B;
                        h = sb.H;
                        t = Math.Min(sb.t_f, sb.t_w);
                    }
                    else if (section is ISectionTube)
                    {
                        ISectionTube sT = section as ISectionTube;
                        b = sT.B;
                        h = sT.H;
                        t = sT.t_des;
                    }

                    else
                    {
                        throw new Exception("Section type is not applicable for closed section analysis");
                    }
                    tau = GetBoxShearStress(T_u, b, h, t);
                }
                else if (section is ISectionPipe)
                {
                    ISectionPipe pipe = section as ISectionPipe;
                    R   = pipe.D / 2.0;
                    J   = pipe.J;
                    tau = GetPipeStress(T_u, R, J);
                }
                else
                {
                    throw new Exception("Section type is not applicable for closed section analysis");
                }
            }
            else
            {
                throw new Exception("Section type is not applicable for closed section analysis");
            }
            return(tau);
        }
コード例 #17
0
        public ISteelCompressionMember GetCompressionMember(ISection Shape, double L_ex, double L_ey, double L_ez, double F_y, double E, bool IsRolledShape = true)
        {
            string DEFAULT_EXCEPTION_STRING = "Selected shape is not supported. Select a different shape.";
            ISteelCompressionMember col     = null;
            CalcLog       log      = new CalcLog();
            SteelMaterial Material = new SteelMaterial(F_y, E);

            if (Shape is ISectionI)
            {
                ISectionI     IShape        = Shape as ISectionI;
                SteelSectionI SectionI      = new SteelSectionI(IShape, Material);
                IShapeFactory IShapeFactory = new IShapeFactory();
                return(IShapeFactory.GetIshape(SectionI, IsRolledShape, L_ex, L_ey, L_ez, log));
            }


            else if (Shape is ISectionChannel)
            {
                ISectionChannel     ChannelShape   = Shape as ISectionChannel;
                SteelChannelSection ChannelSection = new SteelChannelSection(ChannelShape, Material);
                throw new Exception(DEFAULT_EXCEPTION_STRING);
            }


            else if (Shape is ISectionPipe)
            {
                ISectionPipe     SectionPipe = Shape as ISectionPipe;
                SteelPipeSection PipeSection = new SteelPipeSection(SectionPipe, Material);
                ChsShapeFactory  ChsFactory  = new ChsShapeFactory();
                return(ChsFactory.GetChsShape(PipeSection, L_ex, L_ey, L_ez, log));
            }

            else if (Shape is ISectionTube)
            {
                ISectionTube    TubeShape       = Shape as ISectionTube;
                SteelRhsSection RectHSS_Section = new SteelRhsSection(TubeShape, Material);
                RhsShapeFactory RhsFactory      = new RhsShapeFactory();
                return(RhsFactory.GetRhsShape(RectHSS_Section, L_ex, L_ey, L_ez, log));
            }


            else if (Shape is ISectionBox)
            {
                ISectionBox     BoxShape   = Shape as ISectionBox;
                SteelBoxSection BoxSection = new SteelBoxSection(BoxShape, Material);

                RhsShapeFactory RhsFactory = new RhsShapeFactory();
                return(RhsFactory.GetRhsShape(BoxSection, L_ex, L_ey, L_ez, log));
            }

            else if (Shape is ISectionTee)
            {
                ISectionTee     TeeShape   = Shape as ISectionTee;
                SteelTeeSection TeeSection = new SteelTeeSection(TeeShape, Material);
                throw new Exception(DEFAULT_EXCEPTION_STRING);
            }
            else
            {
                throw new Exception(DEFAULT_EXCEPTION_STRING);
            }
        }
コード例 #18
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);
        }
コード例 #19
0
        public ISteelCompressionMember GetCompressionMember(ISection Shape, double L_ex, double L_ey, double L_ez, double F_y, double E, bool IsRolledShape = true)
        {
            string DEFAULT_EXCEPTION_STRING = "Selected shape is not supported. Select a different shape.";
            ISteelCompressionMember col     = null;
            CalcLog       log      = new CalcLog();
            SteelMaterial Material = new SteelMaterial(F_y, E);

            if (Shape == null)
            {
                return(new ColumnGeneral(null, L_ex, L_ey, L_ez));
            }

            if (Shape is ISectionI)
            {
                ISectionI     IShape        = Shape as ISectionI;
                SteelSectionI SectionI      = new SteelSectionI(IShape, Material);
                IShapeFactory IShapeFactory = new IShapeFactory();
                return(IShapeFactory.GetIshape(SectionI, IsRolledShape, L_ex, L_ey, L_ez));
            }


            else if (Shape is ISectionChannel)
            {
                ISectionChannel     ChannelShape   = Shape as ISectionChannel;
                SteelChannelSection ChannelSection = new SteelChannelSection(ChannelShape, Material);
                throw new Exception(DEFAULT_EXCEPTION_STRING);
            }


            else if (Shape is ISectionPipe)
            {
                ISectionPipe     SectionPipe = Shape as ISectionPipe;
                SteelPipeSection PipeSection = new SteelPipeSection(SectionPipe, Material);
                ChsShapeFactory  ChsFactory  = new ChsShapeFactory();
                return(ChsFactory.GetChsShape(PipeSection, L_ex, L_ey, L_ez, log));
            }

            else if (Shape is ISectionTube)
            {
                ISectionTube    TubeShape       = Shape as ISectionTube;
                SteelRhsSection RectHSS_Section = new SteelRhsSection(TubeShape, Material);
                RhsShapeFactory RhsFactory      = new RhsShapeFactory();
                return(RhsFactory.GetRhsShape(RectHSS_Section, L_ex, L_ey, L_ez));
            }


            else if (Shape is ISectionBox)
            {
                ISectionBox     BoxShape   = Shape as ISectionBox;
                SteelBoxSection BoxSection = new SteelBoxSection(BoxShape, Material);

                RhsShapeFactory RhsFactory = new RhsShapeFactory();
                return(RhsFactory.GetRhsShape(BoxSection, L_ex, L_ey, L_ez));
            }

            else if (Shape is ISectionRectangular || Shape is ISectionRound)
            {
                ISteelSection solidSec;
                if (Shape is ISectionRectangular)
                {
                    ISectionRectangular RectangleShape = Shape as ISectionRectangular;
                    solidSec = new SteelRectangleSection(RectangleShape, Material);
                }
                else
                {
                    ISectionRound rnd = Shape as ISectionRound;
                    solidSec = new SteelRoundSection(rnd, Material);
                }


                CompressionMemberRectangle SolidShapeSection = new CompressionMemberRectangle(solidSec, L_ex, L_ey, L_ez);
                return(SolidShapeSection);
            }

            else if (Shape is ISectionTee)
            {
                ISectionTee     TeeShape   = Shape as ISectionTee;
                SteelTeeSection TeeSection = new SteelTeeSection(TeeShape, Material);


                IShapeCompactness compactnessTee = new ShapeCompactness.TeeMember(TeeSection);
                CompactnessClassAxialCompression flangeCompactness = compactnessTee.GetFlangeCompactnessCompression();
                CompactnessClassAxialCompression stemCompactness   = compactnessTee.GetWebCompactnessCompression();

                if (flangeCompactness == CompactnessClassAxialCompression.NonSlender && stemCompactness == CompactnessClassAxialCompression.NonSlender)
                {
                    return(new ColumnTee(TeeSection, IsRolledShape, L_ex, L_ey, L_ez));
                }
                else
                {
                    throw new Exception(DEFAULT_EXCEPTION_STRING);
                }
            }

            else
            {
                throw new Exception(DEFAULT_EXCEPTION_STRING);
            }
        }