Esempio n. 1
0
        public void HssOverlappedKConnectionReturnsYieldingOfBranchesFromUnevenDistributionValue()
        {
            SectionTube ch = new SectionTube(null, 8, 8, 0.5, 0.465);
            SteelMaterial mat = new SteelMaterial(46.0);
            SteelRhsSection Chord = new SteelRhsSection(ch, mat);

            SectionTube mainBranch = new SectionTube(null, 6, 4, 5.0 / 16.0, 0.291);
            SteelRhsSection MainBranch = new SteelRhsSection(mainBranch, mat);

            SectionTube secBranch = new SectionTube(null, 5, 3, 1.0 / 4.0, 0.233);
            SteelRhsSection SecondaryBranch = new SteelRhsSection(secBranch, mat);

            double O_v = 0.533;

            IHssTrussBranchConnection con = new RhsTrussOverlappedConnection(Chord, MainBranch, 45, 
                SecondaryBranch, 45,
                AxialForceType.Compression, AxialForceType.Tension, false, 0, 0, O_v
                );

            double phiP_nMain = con.GetBranchYieldingFromUnevenLoadDistributionStrength(true).Value;
            double refValueMain = 236; 
            double actualToleranceMain = EvaluateActualTolerance(phiP_nMain, refValueMain);
            Assert.LessOrEqual(actualToleranceMain, tolerance);

            double phiP_nSec = con.GetBranchYieldingFromUnevenLoadDistributionStrength(false).Value;
            double refValueSec = 151;
            double actualToleranceSec = EvaluateActualTolerance(phiP_nSec, refValueSec);
            Assert.LessOrEqual(actualToleranceSec, tolerance);
        }
Esempio n. 2
0
        public void HssGappedKConnectionReturnsYieldingOfBranchesFromUnevenDistributionValue()
        {
            SectionTube ch = new SectionTube(null, 12, 12, 0.625, 0.581);
            SteelMaterial mat = new SteelMaterial(46.0);
            SteelRhsSection Chord = new SteelRhsSection(ch, mat);

            SectionTube mainBranch = new SectionTube(null, 8, 8, 0.375, 0.349);
            SteelRhsSection MainBranch = new SteelRhsSection(mainBranch, mat);

            SectionTube secBranch = new SectionTube(null, 8, 8, 0.375, 0.349);
            SteelRhsSection SecondaryBranch = new SteelRhsSection(secBranch, mat);


            IHssTrussBranchConnection con = new RhsTrussGappedKConnection(Chord, MainBranch, 45,
                SecondaryBranch, 45,
                AxialForceType.Compression, AxialForceType.Tension, false, 430, 0
                );
            //Note: not clear in the design guide why moment is ignored in chord utilization calculation
            double phiP_nMain = con.GetChordWallPlastificationStrength(true).Value;
            double refValueMain = 415;
            double actualToleranceMain = EvaluateActualTolerance(phiP_nMain, refValueMain);
            Assert.LessOrEqual(actualToleranceMain, tolerance);

            double phiP_nSec = con.GetBranchYieldingFromUnevenLoadDistributionStrength(false).Value;
            double refValueSec = 415;
            double actualToleranceSec = EvaluateActualTolerance(phiP_nSec, refValueSec);
            Assert.LessOrEqual(actualToleranceSec, tolerance);
        }
Esempio n. 3
0
        public void HssOverlappedKConnectionReturnsYieldingOfBranchesFromUnevenDistributionValue()
        {
            SectionTube     ch    = new SectionTube(null, 8, 8, 0.5, 0.465);
            SteelMaterial   mat   = new SteelMaterial(46.0);
            SteelRhsSection Chord = new SteelRhsSection(ch, mat);

            SectionTube     mainBranch = new SectionTube(null, 6, 4, 5.0 / 16.0, 0.291);
            SteelRhsSection MainBranch = new SteelRhsSection(mainBranch, mat);

            SectionTube     secBranch       = new SectionTube(null, 5, 3, 1.0 / 4.0, 0.233);
            SteelRhsSection SecondaryBranch = new SteelRhsSection(secBranch, mat);

            double O_v = 0.533;

            IHssTrussBranchConnection con = new RhsTrussOverlappedConnection(Chord, MainBranch, 45,
                                                                             SecondaryBranch, 45,
                                                                             AxialForceType.Compression, AxialForceType.Tension, false, 0, 0, O_v
                                                                             );

            double phiP_nMain          = con.GetBranchYieldingFromUnevenLoadDistributionStrength(true).Value;
            double refValueMain        = 236;
            double actualToleranceMain = EvaluateActualTolerance(phiP_nMain, refValueMain);

            Assert.True(actualToleranceMain <= tolerance);

            double phiP_nSec          = con.GetBranchYieldingFromUnevenLoadDistributionStrength(false).Value;
            double refValueSec        = 151;
            double actualToleranceSec = EvaluateActualTolerance(phiP_nSec, refValueSec);

            Assert.True(actualToleranceSec <= tolerance);
        }
        public RhsTYXTrussBranchConnection(SteelRhsSection Chord, SteelRhsSection BranchMain, double thetaMain,
            SteelRhsSection BranchSecondary, double thetaSecondary, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord,
            double P_uChord, double M_uChord)
            : base( Chord,  BranchMain,  thetaMain, ForceTypeMain,  BranchSecondary,  thetaSecondary, ForceTypeSecond, IsTensionChord,  P_uChord,  M_uChord)
        {

        }
Esempio n. 5
0
        public void HssGappedKConnectionReturnsYieldingOfBranchesFromUnevenDistributionValue()
        {
            SectionTube     ch    = new SectionTube(null, 12, 12, 0.625, 0.581);
            SteelMaterial   mat   = new SteelMaterial(46.0);
            SteelRhsSection Chord = new SteelRhsSection(ch, mat);

            SectionTube     mainBranch = new SectionTube(null, 8, 8, 0.375, 0.349);
            SteelRhsSection MainBranch = new SteelRhsSection(mainBranch, mat);

            SectionTube     secBranch       = new SectionTube(null, 8, 8, 0.375, 0.349);
            SteelRhsSection SecondaryBranch = new SteelRhsSection(secBranch, mat);


            IHssTrussBranchConnection con = new RhsTrussGappedKConnection(Chord, MainBranch, 45,
                                                                          SecondaryBranch, 45,
                                                                          AxialForceType.Compression, AxialForceType.Tension, false, 430, 0
                                                                          );
            //Note: not clear in the design guide why moment is ignored in chord utilization calculation
            double phiP_nMain          = con.GetChordWallPlastificationStrength(true).Value;
            double refValueMain        = 415;
            double actualToleranceMain = EvaluateActualTolerance(phiP_nMain, refValueMain);

            Assert.True(actualToleranceMain <= tolerance);

            double phiP_nSec          = con.GetBranchYieldingFromUnevenLoadDistributionStrength(false).Value;
            double refValueSec        = 415;
            double actualToleranceSec = EvaluateActualTolerance(phiP_nSec, refValueSec);

            Assert.True(actualToleranceSec <= tolerance);
        }
Esempio n. 6
0
 public RhsTrussOverlappedConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain,
                                     SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord,
                                     double P_uChord, double M_uChord,
                                     double O_v)
     : base(Chord, MainBranch, thetaMain, ForceTypeMain, SecondBranch, thetaSecond, ForceTypeSecond, IsTensionChord, P_uChord, M_uChord)
 {
     this.O_v = O_v;
 }
Esempio n. 7
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);
        }
        private void CreateElements()
        {
            SectionTube   ch  = new SectionTube(null, 8, 8, 1 / 4.0, 0.93 * (1.0 / 4.0), 0.35);
            SteelMaterial mat = new SteelMaterial(46.0);

            Chord = new SteelRhsSection(ch, mat);

            SectionTube br = new SectionTube(null, 6, 8, 3.0 / 8.0, 0.93 * (3.0 / 8.0), 0.35);

            Branch = new SteelRhsSection(br, mat);
        }
 public RhsTrussBranchConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain, AxialForceType ForceTypeMain, 
     SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeSecond, bool IsTensionChord,
     double P_uChord, double M_uChord): base(IsTensionChord,P_uChord,M_uChord)
 {
     this.Chord = Chord;
     this.MainBranch       =MainBranch   ;
     this.thetaMain        =thetaMain    ;
     this.SecondBranch = SecondBranch;
     this.thetaSecond = thetaSecond;
     this.ForceTypeMain = ForceTypeMain;
     this.ForceTypeSecond = ForceTypeSecond;
 }
 public RhsTrussBranchConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain, AxialForceType ForceTypeMain,
                                 SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeSecond, bool IsTensionChord,
                                 double P_uChord, double M_uChord) : base(IsTensionChord, P_uChord, M_uChord)
 {
     this.Chord           = Chord;
     this.MainBranch      = MainBranch;
     this.thetaMain       = thetaMain;
     this.SecondBranch    = SecondBranch;
     this.thetaSecond     = thetaSecond;
     this.ForceTypeMain   = ForceTypeMain;
     this.ForceTypeSecond = ForceTypeSecond;
 }
        //no overrides compared to base RhsTYXTrussConnection class

        public RhsTrussYConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain,
                                   SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord,
                                   double P_uChord, double M_uChord)
            : base(Chord, MainBranch, thetaMain, SecondBranch, thetaSecond, ForceTypeMain, ForceTypeSecond, IsTensionChord,
                   P_uChord, M_uChord)
        {
            if (thetaSecond != thetaMain)
            {
                throw new Exception("Please specify same angles theta_Main and theta_Second for Y connection");
            }
            if (MainBranch.Section.B != SecondBranch.Section.B || MainBranch.Section.H != SecondBranch.Section.H)
            {
                throw new Exception("Please specify same values for main and secondary branch for Y connection.");
            }
        }
Esempio n. 12
0
 public RhsTrussXConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain,
                            SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord,
                            double P_uChord, double M_uChord)
     : base(Chord, MainBranch, thetaMain, SecondBranch, thetaSecond, ForceTypeMain, ForceTypeSecond, IsTensionChord,
            P_uChord, M_uChord)
 {
     if (ForceTypeMain == AxialForceType.Tension && ForceTypeSecond != AxialForceType.Tension)
     {
         throw new Exception("Specify the same type of force for both branches or switch to K connection");
     }
     if (ForceTypeSecond == AxialForceType.Tension && ForceTypeMain != AxialForceType.Tension)
     {
         throw new Exception("Specify the same type of force for both branches or switch to K connection");
     }
 }
Esempio n. 13
0
        public RhsTrussXConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain,
            SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord,
            double P_uChord, double M_uChord)
            : base(Chord, MainBranch, thetaMain, SecondBranch, thetaSecond, ForceTypeMain, ForceTypeSecond, IsTensionChord,
            P_uChord, M_uChord)
        {
            if (ForceTypeMain == AxialForceType.Tension && ForceTypeSecond != AxialForceType.Tension )
            {
                throw new Exception("Specify the same type of force for both branches or switch to K connection");
            }
            if (ForceTypeSecond == AxialForceType.Tension && ForceTypeMain != AxialForceType.Tension)
            {
                throw new Exception("Specify the same type of force for both branches or switch to K connection");
            }

        }
Esempio n. 14
0
        //no overrides compared to base RhsTYXTrussConnection class

        public RhsTrussYConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain,
            SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord,
            double P_uChord, double M_uChord)
            : base(Chord, MainBranch, thetaMain, SecondBranch, thetaSecond, ForceTypeMain, ForceTypeSecond, IsTensionChord,
            P_uChord, M_uChord)
        {

            if (thetaSecond != thetaMain)
            {
                throw new Exception("Please specify same angles theta_Main and theta_Second for Y connection");
            }
            if (MainBranch.Section.B != SecondBranch.Section.B || MainBranch.Section.H != SecondBranch.Section.H)
            {
                throw new Exception("Please specify same values for main and secondary branch for Y connection.");
            }

        }
        public void HssRhsConcentratedForceThroughPlateReturnsValue()
        {
            SectionTube ch = new SectionTube(null, 8, 8, 0.25,0.93*0.25,1.5*0.25);
            SteelMaterial matE = new SteelMaterial(46.0);
            SteelRhsSection Element = new SteelRhsSection(ch, matE);

            SectionRectangular rec = new SectionRectangular(0.25,8.0);
            SteelMaterial matR = new SteelMaterial(36.0);
            SteelPlateSection pl = new SteelPlateSection(rec,matR);

            CalcLog log = new CalcLog();

            RhsLongitudinalThroughPlate concForceConnection = new RhsLongitudinalThroughPlate(Element, pl, log, false,45.0, 148.0, 0.0);
            double phiR_n = concForceConnection.GetHssWallPlastificationStrengthUnderAxialLoad().Value;

            double refValueSec = 46.2;
            double actualToleranceSec = EvaluateActualTolerance(phiR_n, refValueSec);
            Assert.LessOrEqual(actualToleranceSec, tolerance);
        }
        public void HssRhsConcentratedForceLongitudinalPlateReturnsValue()
        {
            SectionTube     ch      = new SectionTube(null, 8, 8, 0.25, 0.93 * 0.25, 1.5 * 0.25);
            SteelMaterial   matE    = new SteelMaterial(46.0, 65, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus);
            SteelRhsSection Element = new SteelRhsSection(ch, matE);

            SectionRectangular rec  = new SectionRectangular(0.25, 8.0);
            SteelMaterial      matR = new SteelMaterial(36.0);
            SteelPlateSection  pl   = new SteelPlateSection(rec, matR);

            CalcLog log = new CalcLog();

            RhsLongitudinalPlate concForceConnection = new RhsLongitudinalPlate(Element, pl, log, false, 45.0, 148.0, 0.0);
            double phiR_n = concForceConnection.GetHssMaximumPlateThicknessForShearLoad().Value;

            //double refValueSec = 46.2;
            //double actualToleranceSec = EvaluateActualTolerance(phiR_n, refValueSec);
            //Assert.LessOrEqual(actualToleranceSec, tolerance);
        }
        public void HssRhsConcentratedForceThroughPlateReturnsValue()
        {
            SectionTube     ch      = new SectionTube(null, 8, 8, 0.25, 0.93 * 0.25, 1.5 * 0.25);
            SteelMaterial   matE    = new SteelMaterial(46.0);
            SteelRhsSection Element = new SteelRhsSection(ch, matE);

            SectionRectangular rec  = new SectionRectangular(0.25, 8.0);
            SteelMaterial      matR = new SteelMaterial(36.0);
            SteelPlateSection  pl   = new SteelPlateSection(rec, matR);

            CalcLog log = new CalcLog();

            RhsLongitudinalThroughPlate concForceConnection = new RhsLongitudinalThroughPlate(Element, pl, log, false, 45.0, 148.0, 0.0);
            double phiR_n = concForceConnection.GetHssWallPlastificationStrengthUnderAxialLoad().Value;

            double refValueSec        = 46.2;
            double actualToleranceSec = EvaluateActualTolerance(phiR_n, refValueSec);

            Assert.True(actualToleranceSec <= tolerance);
        }
Esempio n. 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;
        }
Esempio n. 19
0
        public RhsCapPlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss,
            double P_uChord, double M_uChord)
            : base(Hss, Plate, CalcLog, IsTensionHss,P_uChord,M_uChord)
        {

        }
Esempio n. 20
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;
 }
Esempio n. 21
0
 public RhsToPlateConnection(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, double P_uHss, double M_uHss)
     : base(IsTensionHss, P_uHss, M_uHss, CalcLog)
 {
     this.hss   = Hss;
     this.plate = Plate;
 }
Esempio n. 22
0
 public RhsTransversePlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, TransversePlateType PlateType,
                           double P_uHss, double M_uHss)
     : base(Hss, Plate, CalcLog, IsTensionHss, P_uHss, M_uHss)
 {
     this.PlateType = PlateType;
 }
Esempio n. 23
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);
            }
        }
Esempio n. 24
0
 public RhsCapPlate(SteelRhsSection Hss, SteelPlateSection Plate, double t_plCap, ICalcLog CalcLog, bool IsTensionHss, double P_uHss, double M_uHss)
     : base(Hss, Plate, CalcLog, IsTensionHss, P_uHss, M_uHss)
 {
     this.t_plCap = t_plCap;
 }
        public static Dictionary <string, object> HssToTransversePlateLocalCripplingAndYieldingStrengthOfHss(CustomProfile HssSection, CustomProfile PlateSection,
                                                                                                             double theta, string HssTransversePlateType, double F_y, double F_yp, bool IsTensionHss, double P_uHss, double M_uHss)
        {
            //Default values
            double phiR_n = 0;
            bool   IsApplicableLimitState = false;


            //Calculation logic:
            CalcLog log = new CalcLog();
            SteelLimitStateValue limitState = null;

            //PLATE

            SteelPlateSection pl = null;

            if (!(PlateSection.Section is ISectionRectangular))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial       mat = new SteelMaterial(F_y);
                ISectionRectangular rect = PlateSection.Section as ISectionRectangular;
                double t_pl, b_pl = 0.0;
                KodestructSection.SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new KodestructSection.SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new KodestructSection.SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);
            }

            TransversePlateType transvPlateType;
            bool IsValidTransvPlate = Enum.TryParse(HssTransversePlateType, true, out transvPlateType);

            if (IsValidTransvPlate == false)
            {
                throw new Exception("Failed to convert string. Transverse plate type must be TConnection or XConnection. Please check input");
            }

            //HSS

            if (!(HssSection.Section is ISectionHollow))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                if (HssSection.Section is ISectionPipe)
                {
                    SteelChsSection    sec = new SteelChsSection(HssSection.Section as ISectionPipe, mat);
                    ChsTransversePlate transversePlateChs = new ChsTransversePlate(sec, pl, log, IsTensionHss, P_uHss, M_uHss);

                    limitState             = transversePlateChs.GetLocalCripplingAndYieldingStrengthOfHss();
                    phiR_n                 = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;
                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection    sec = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    RhsTransversePlate transversePlateRhs = new RhsTransversePlate(sec, pl, log, IsTensionHss, transvPlateType, P_uHss, M_uHss);

                    limitState             = transversePlateRhs.GetLocalCripplingAndYieldingStrengthOfHss();
                    phiR_n                 = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;
                }
                else
                {
                    throw new Exception("Unsupported type of hollow section. Please use Tube or Pipe.");
                }
            }

            return(new Dictionary <string, object>
            {
                { "phiR_n", phiR_n }
                , { "IsApplicableLimitState", IsApplicableLimitState }
            });
        }
Esempio n. 26
0
 public RhsTrussConnection(SteelRhsSection Chord, SteelRhsSection Branch_i, double theta_i, SteelRhsSection Branch_j, double theta_j)
 {
     this.Chord = Chord;
 }
        public static Dictionary<string, object> HssCapPlateLocalYieldingOrCripplingOfHss(CustomProfile HssSection,CustomProfile PlateSection,double t_pCap,double F_y,double F_yp,bool IsTensionHss,double P_uHss,double M_uHss)
        {
            //Default values
            double phiR_n = 0;
            bool IsApplicableLimitState = false;


            //Calculation logic:
            CalcLog log = new CalcLog();
            SteelLimitStateValue limitState = null;

            //PLATE

            SteelPlateSection pl = null;

            if (!(PlateSection.Section is ISectionRectangular))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
	        {
                SteelMaterial mat = new SteelMaterial(F_y);
                ISectionRectangular rect = PlateSection.Section as ISectionRectangular;
                double t_pl, b_pl = 0.0;
                SectionRectangular rSect;
                if (rect.B<=rect.H)
                {
                    rSect = new SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);

	        }


            //HSS

            if (!(HssSection.Section is ISectionHollow))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                if (HssSection.Section is ISectionPipe)
                {
                    SteelChsSection sec = new SteelChsSection(HssSection.Section as ISectionPipe, mat);
                    ChsCapPlate capRhs = new ChsCapPlate(sec, pl, t_pCap, log, IsTensionHss, P_uHss, M_uHss);

                    limitState = capRhs.GetHssYieldingOrCrippling();
                    phiR_n = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;

                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection sec = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    RhsCapPlate capRhs = new RhsCapPlate(sec, pl, t_pCap, log, IsTensionHss, P_uHss, M_uHss);
                    
                    limitState = capRhs.GetHssYieldingOrCrippling();
                    phiR_n = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;
                }
                else
                {
                    throw new Exception("Unsupported type of hollow section. Please use Tube or Pipe.");
                }
            }



            return new Dictionary<string, object>
            {
                { "phiR_n", phiR_n }
                ,{ "IsApplicableLimitState", IsApplicableLimitState }
 
            };
        }
Esempio n. 28
0
 public RhsCapPlate(SteelRhsSection Hss, SteelPlateSection Plate, double t_plCap, ICalcLog CalcLog, bool IsTensionHss, double P_uHss, double M_uHss)
     : base(Hss, Plate, CalcLog, IsTensionHss,P_uHss,M_uHss)
 {
     this.t_plCap = t_plCap;
 }
        public static Dictionary <string, object> HssToLongitudinalPlateMaximumPlateThicknessForShear(CustomProfile HssSection, CustomProfile PlateSection,
                                                                                                      double F_y, double F_u, double F_yp, bool IsTensionHss, double P_uHss, double M_uHss)
        {
            //Default values
            double t_max = 0;


            //Calculation logic:
            CalcLog log = new CalcLog();
            SteelLimitStateValue limitState = null;

            //PLATE

            SteelPlateSection pl = null;

            if (!(PlateSection.Section is ISectionRectangular))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial       mat = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus);
                ISectionRectangular rect = PlateSection.Section as ISectionRectangular;
                double             t_pl, b_pl = 0.0;
                SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);
            }


            //HSS

            if (!(HssSection.Section is ISectionHollow))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                if (HssSection.Section is ISectionPipe)
                {
                    SteelChsSection      sec = new SteelChsSection(HssSection.Section as ISectionPipe, mat);
                    ChsLongitudinalPlate longitudinalPlateChs = new ChsLongitudinalPlate(sec, pl, log, IsTensionHss, 90.0, P_uHss, M_uHss);

                    //limitState = longitudinalPlateChs.ge
                    //phiR_n = limitState.Value;
                    //IsApplicableLimitState = limitState.IsApplicable;
                    t_max = longitudinalPlateChs.GetHssMaximumPlateThicknessForShearLoad().Value;
                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection      sec = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    RhsLongitudinalPlate longitudinalPlateRhs = new RhsLongitudinalPlate(sec, pl, log, IsTensionHss, 90.0, P_uHss, M_uHss);

                    //limitState = longitudinalPlateRhs.GetHssYieldingOrCrippling();
                    //phiR_n = limitState.Value;
                    //IsApplicableLimitState = limitState.IsApplicable;
                    t_max = longitudinalPlateRhs.GetHssMaximumPlateThicknessForShearLoad().Value;
                }
                else
                {
                    throw new Exception("Unsupported type of hollow section. Please use Tube or Pipe.");
                }
            }

            return(new Dictionary <string, object>
            {
                { "t_max", t_max }
            });
        }
        public IHssTrussBranchConnection GetConnection(HssTrussConnectionMemberType MemberType,
            HssTrussConnectionClassification Classification, ISectionHollow ChordSection, ISectionHollow MainBranchSection,
            ISectionHollow SecondaryBranchSection, double F_yChord, double F_yBranch,
            double thetaMainBranch, double thetaSecondaryBranch, AxialForceType ForceTypeMainBranch, 
            AxialForceType ForceTypeSecondaryBranch, bool IsTensionChord,
            double P_uChord, double M_uChord,
            double O_v=0)
        {
            if (MemberType == HssTrussConnectionMemberType.Rhs)
            {
                if (ChordSection is ISectionTube && MainBranchSection is ISectionTube && SecondaryBranchSection is ISectionTube)
                {

                    SteelMaterial matChord = new SteelMaterial(F_yChord);
                    SteelRhsSection Chord = new SteelRhsSection(ChordSection as ISectionTube, matChord);


                    SteelMaterial matBr = new SteelMaterial(F_yBranch);
                    SteelRhsSection MainBranch = new SteelRhsSection(MainBranchSection as ISectionTube, matBr);

                    SteelRhsSection SecondaryBranch = new SteelRhsSection(SecondaryBranchSection as ISectionTube, matBr);


                    switch (Classification)
                    {
                        case HssTrussConnectionClassification.T:
                            return new RhsTrussTConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch,
                                IsTensionChord, P_uChord, M_uChord);
                            break;
                        case HssTrussConnectionClassification.Y:
                            return new RhsTrussYConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch,
                                IsTensionChord, P_uChord, M_uChord);
                            
                            break;
                        case HssTrussConnectionClassification.X:
                            return new RhsTrussXConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch,
                                IsTensionChord, P_uChord, M_uChord);
                            break;
                        case HssTrussConnectionClassification.GappedK:
                            return new RhsTrussGappedKConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch,
                                ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord,M_uChord);
                            break;
                        case HssTrussConnectionClassification.OverlappedK:
                            return new RhsTrussOverlappedConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch,
                                ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord, M_uChord,O_v);
                            break;
                        default:
                            throw new Exception("Connection classification not recognized.");
                            break;
                    }
                }
                else
                {
                    throw new Exception("One of the member section is not of type ISectionTube. Ensure that a rectangular hollow section object type is used for chord and branches.");
                }

            }
            else
            {
                throw new NotImplementedException("Circular HSS truss connections are not supported yet.");
            }
        }
        public static Dictionary<string, object> HssToLongitudinalPlateWallPlastification(CustomProfile HssSection,CustomProfile PlateSection,
            double F_y,double F_yp, double P_uHss,  double M_uHss,double theta=90.0, bool IsTensionHss=false, bool IsThroughPlate=false)
        {
            //Default values
            double phiR_n = 0;
            bool IsApplicableLimitState = false;


            //Calculation logic:
            CalcLog log = new CalcLog();
            SteelLimitStateValue limitState = null;

            //PLATE

            SteelPlateSection pl = null;

            if (!(PlateSection.Section is ISectionRectangular))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                ISectionRectangular rect = PlateSection.Section as ISectionRectangular;
                double t_pl, b_pl = 0.0;
                WosadSection.SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new WosadSection.SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new WosadSection.SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);

            }


            //HSS

            if (!(HssSection.Section is ISectionHollow))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                if (HssSection.Section is ISectionPipe)
                {
                    SteelChsSection sec = new SteelChsSection(HssSection.Section as ISectionPipe, mat);
                    ChsLongitudinalPlate longitudinalPlateChs = new ChsLongitudinalPlate(sec, pl, log, IsTensionHss,theta, P_uHss, M_uHss);

                    limitState = longitudinalPlateChs.GetHssWallPlastificationStrengthUnderAxialLoad();
                    if (IsThroughPlate == false)
                    {
                        phiR_n = limitState.Value;
                    }
                    else
                    {
                        phiR_n = 2.0* limitState.Value; //analogous to Rectangular HSS provsions
                    }
                    
                    IsApplicableLimitState = limitState.IsApplicable;
                    

                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection sec = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    if (IsThroughPlate == false)
                    {
                        RhsLongitudinalPlate longitudinalPlateRhs = new RhsLongitudinalPlate(sec, pl,  log, IsTensionHss,theta, P_uHss, M_uHss);

                        limitState = longitudinalPlateRhs.GetHssWallPlastificationStrengthUnderAxialLoad();
                        phiR_n = limitState.Value;
                        IsApplicableLimitState = limitState.IsApplicable;  
                    }
                    else
                    {
                        RhsLongitudinalThroughPlate longitudinalPlateRhs = new RhsLongitudinalThroughPlate(sec, pl, log, IsTensionHss,theta, P_uHss, M_uHss);

                        limitState = longitudinalPlateRhs.GetHssWallPlastificationStrengthUnderAxialLoad();
                        phiR_n = limitState.Value;
                        IsApplicableLimitState = limitState.IsApplicable;
                    }
                   
                }
                else
                {
                    throw new Exception("Unsupported type of hollow section. Please use Tube or Pipe.");
                }
            }

            return new Dictionary<string, object>
            {
                { "phiR_n", phiR_n }
,{ "IsApplicableLimitState", IsApplicableLimitState }
 
            };
        }
Esempio n. 32
0
 public RhsTrussConnection(SteelRhsSection Chord, SteelRhsSection Branch_i, double theta_i, SteelRhsSection Branch_j, double theta_j)
 {
     this.Chord = Chord;
 }
        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);
            }


        }
        public IHssTrussBranchConnection GetConnection(HssTrussConnectionMemberType MemberType,
                                                       HssTrussConnectionClassification Classification, ISectionHollow ChordSection, ISectionHollow MainBranchSection,
                                                       ISectionHollow SecondaryBranchSection, double F_yChord, double F_yBranch,
                                                       double thetaMainBranch, double thetaSecondaryBranch, AxialForceType ForceTypeMainBranch,
                                                       AxialForceType ForceTypeSecondaryBranch, bool IsTensionChord,
                                                       double P_uChord, double M_uChord,
                                                       double O_v = 0)
        {
            if (MemberType == HssTrussConnectionMemberType.Rhs)
            {
                if (ChordSection is ISectionTube && MainBranchSection is ISectionTube && SecondaryBranchSection is ISectionTube)
                {
                    SteelMaterial   matChord = new SteelMaterial(F_yChord);
                    SteelRhsSection Chord    = new SteelRhsSection(ChordSection as ISectionTube, matChord);


                    SteelMaterial   matBr      = new SteelMaterial(F_yBranch);
                    SteelRhsSection MainBranch = new SteelRhsSection(MainBranchSection as ISectionTube, matBr);

                    SteelRhsSection SecondaryBranch = new SteelRhsSection(SecondaryBranchSection as ISectionTube, matBr);


                    switch (Classification)
                    {
                    case HssTrussConnectionClassification.T:
                        return(new RhsTrussTConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch,
                                                       IsTensionChord, P_uChord, M_uChord));

                        break;

                    case HssTrussConnectionClassification.Y:
                        return(new RhsTrussYConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch,
                                                       IsTensionChord, P_uChord, M_uChord));

                        break;

                    case HssTrussConnectionClassification.X:
                        return(new RhsTrussXConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch,
                                                       IsTensionChord, P_uChord, M_uChord));

                        break;

                    case HssTrussConnectionClassification.GappedK:
                        return(new RhsTrussGappedKConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch,
                                                             ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord, M_uChord));

                        break;

                    case HssTrussConnectionClassification.OverlappedK:
                        return(new RhsTrussOverlappedConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch,
                                                                ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord, M_uChord, O_v));

                        break;

                    default:
                        throw new Exception("Connection classification not recognized.");
                        break;
                    }
                }
                else
                {
                    throw new Exception("One of the member section is not of type ISectionTube. Ensure that a rectangular hollow section object type is used for chord and branches.");
                }
            }
            else
            {
                throw new NotImplementedException("Circular HSS truss connections are not supported yet.");
            }
        }
 public RhsLongitudinalThroughPlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, double Angle,
                                    double P_uHss, double M_uHss)
     : base(Hss, Plate, CalcLog, IsTensionHss, P_uHss, M_uHss)
 {
     this.Angle = Angle;
 }
Esempio n. 36
0
        public static Dictionary <string, object> HssCapPlateLocalYieldingOrCripplingOfHss(CustomProfile HssSection, CustomProfile PlateSection, double t_pCap, double F_y, double F_yp, bool IsTensionHss, double P_uHss, double M_uHss)
        {
            //Default values
            double phiR_n = 0;
            bool   IsApplicableLimitState = false;


            //Calculation logic:
            CalcLog log = new CalcLog();
            SteelLimitStateValue limitState = null;

            //PLATE

            SteelPlateSection pl = null;

            if (!(PlateSection.Section is ISectionRectangular))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial       mat = new SteelMaterial(F_y);
                ISectionRectangular rect = PlateSection.Section as ISectionRectangular;
                double             t_pl, b_pl = 0.0;
                SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);
            }


            //HSS

            if (!(HssSection.Section is ISectionHollow))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                if (HssSection.Section is ISectionPipe)
                {
                    SteelChsSection sec    = new SteelChsSection(HssSection.Section as ISectionPipe, mat);
                    ChsCapPlate     capRhs = new ChsCapPlate(sec, pl, t_pCap, log, IsTensionHss, P_uHss, M_uHss);

                    limitState             = capRhs.GetHssYieldingOrCrippling();
                    phiR_n                 = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;
                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection sec    = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    RhsCapPlate     capRhs = new RhsCapPlate(sec, pl, t_pCap, log, IsTensionHss, P_uHss, M_uHss);

                    limitState             = capRhs.GetHssYieldingOrCrippling();
                    phiR_n                 = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;
                }
                else
                {
                    throw new Exception("Unsupported type of hollow section. Please use Tube or Pipe.");
                }
            }



            return(new Dictionary <string, object>
            {
                { "phiR_n", phiR_n }
                , { "IsApplicableLimitState", IsApplicableLimitState }
            });
        }
Esempio n. 37
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);
        }
Esempio n. 38
0
        private void CreateElements()
        {
            SectionTube ch = new SectionTube(null, 8, 8, 1 / 4.0, 0.93 * (1.0 / 4.0), 0.35);
            SteelMaterial mat = new SteelMaterial(46.0);
            Chord = new SteelRhsSection(ch, mat);

            SectionTube br = new SectionTube(null, 6, 8, 3.0 / 8.0, 0.93 * (3.0 / 8.0), 0.35);
            Branch = new SteelRhsSection(br, mat);
        }
        public static Dictionary<string, object> HssToLongitudinalPlateMaximumPlateThicknessForShear(CustomProfile HssSection,CustomProfile PlateSection,
            double F_y,double F_yp,bool IsTensionHss,double P_uHss,double M_uHss)
        {
            //Default values
            double t_max = 0;


            //Calculation logic:
            CalcLog log = new CalcLog();
            SteelLimitStateValue limitState = null;

            //PLATE

            SteelPlateSection pl = null;

            if (!(PlateSection.Section is ISectionRectangular))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                ISectionRectangular rect = PlateSection.Section as ISectionRectangular;
                double t_pl, b_pl = 0.0;
                SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);

            }


            //HSS

            if (!(HssSection.Section is ISectionHollow))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                if (HssSection.Section is ISectionPipe)
                {
                    SteelChsSection sec = new SteelChsSection(HssSection.Section as ISectionPipe, mat);
                    ChsLongitudinalPlate longitudinalPlateChs = new ChsLongitudinalPlate(sec, pl, log, IsTensionHss,90.0, P_uHss, M_uHss);

                    //limitState = longitudinalPlateChs.ge
                    //phiR_n = limitState.Value;
                    //IsApplicableLimitState = limitState.IsApplicable;
                    t_max = longitudinalPlateChs.GetHssMaximumPlateThicknessForShearLoad().Value;

                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection sec = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    RhsLongitudinalPlate longitudinalPlateRhs = new RhsLongitudinalPlate(sec, pl, log, IsTensionHss,90.0, P_uHss, M_uHss);

                    //limitState = longitudinalPlateRhs.GetHssYieldingOrCrippling();
                    //phiR_n = limitState.Value;
                    //IsApplicableLimitState = limitState.IsApplicable;
                    t_max = longitudinalPlateRhs.GetHssMaximumPlateThicknessForShearLoad().Value;
                }
                else
                {
                    throw new Exception("Unsupported type of hollow section. Please use Tube or Pipe.");
                }
            }

            return new Dictionary<string, object>
            {
                { "t_max", t_max }
 
            };
        }
 public RhsLongitudinalThroughPlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, double Angle,
     double P_uHss, double M_uHss)
     : base(Hss, Plate, CalcLog, IsTensionHss,P_uHss,M_uHss)
 {
     this.Angle = Angle;
 }
        public static Dictionary<string, object> HssToTransversePlateLocalPunchingStrengthOfPlate(CustomProfile HssSection,CustomProfile PlateSection,
            double theta, string HssTransversePlateType, double F_y, double F_yp, bool IsTensionHss, double P_uHss, double M_uHss)
        {
            //Default values
            double phiR_n = 0;
            bool IsApplicableLimitState = false;


            //Calculation logic:
            CalcLog log = new CalcLog();
            SteelLimitStateValue limitState = null;

            //PLATE

            SteelPlateSection pl = null;

            if (!(PlateSection.Section is ISectionRectangular))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                ISectionRectangular rect = PlateSection.Section as ISectionRectangular;
                double t_pl, b_pl = 0.0;
                WosadSection.SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new WosadSection.SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new WosadSection.SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);

            }

            TransversePlateType transvPlateType;
            bool IsValidTransvPlate = Enum.TryParse(HssTransversePlateType, true, out transvPlateType);
            if (IsValidTransvPlate == false)
            {
                throw new Exception("Failed to convert string. Transverse plate type must be TConnection or XConnection. Please check input");
            }

            //HSS

            if (!(HssSection.Section is ISectionHollow))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                if (HssSection.Section is ISectionPipe)
                {
                    SteelChsSection sec = new SteelChsSection(HssSection.Section as ISectionPipe, mat);
                    ChsTransversePlate transversePlateChs = new ChsTransversePlate(sec, pl, log, IsTensionHss, P_uHss, M_uHss);

                    limitState = transversePlateChs.GetLocalPunchingStrengthOfPlate();
                    phiR_n = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;


                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection sec = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    RhsTransversePlate transversePlateRhs = new RhsTransversePlate(sec, pl, log, IsTensionHss, transvPlateType, P_uHss, M_uHss);

                    limitState = transversePlateRhs.GetLocalPunchingStrengthOfPlate();
                    phiR_n = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;

                }
                else
                {
                    throw new Exception("Unsupported type of hollow section. Please use Tube or Pipe.");
                }
            }
          



            return new Dictionary<string, object>
            {
                { "phiR_n", phiR_n }
,{ "IsApplicableLimitState", IsApplicableLimitState }
 
            };
        }
Esempio n. 42
0
        public static Dictionary <string, object> HssToLongitudinalPlateWallPlastification(CustomProfile HssSection, CustomProfile PlateSection,
                                                                                           double F_y, double F_yp, double P_uHss, double M_uHss, double theta = 90.0, bool IsTensionHss = false, bool IsThroughPlate = false)
        {
            //Default values
            double phiR_n = 0;
            bool   IsApplicableLimitState = false;


            //Calculation logic:
            CalcLog log = new CalcLog();
            SteelLimitStateValue limitState = null;

            //PLATE

            SteelPlateSection pl = null;

            if (!(PlateSection.Section is ISectionRectangular))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial       mat = new SteelMaterial(F_y);
                ISectionRectangular rect = PlateSection.Section as ISectionRectangular;
                double t_pl, b_pl = 0.0;
                KodestructSection.SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new KodestructSection.SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new KodestructSection.SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);
            }


            //HSS

            if (!(HssSection.Section is ISectionHollow))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                if (HssSection.Section is ISectionPipe)
                {
                    SteelChsSection      sec = new SteelChsSection(HssSection.Section as ISectionPipe, mat);
                    ChsLongitudinalPlate longitudinalPlateChs = new ChsLongitudinalPlate(sec, pl, log, IsTensionHss, theta, P_uHss, M_uHss);

                    limitState = longitudinalPlateChs.GetHssWallPlastificationStrengthUnderAxialLoad();
                    if (IsThroughPlate == false)
                    {
                        phiR_n = limitState.Value;
                    }
                    else
                    {
                        phiR_n = 2.0 * limitState.Value; //analogous to Rectangular HSS provsions
                    }

                    IsApplicableLimitState = limitState.IsApplicable;
                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection sec = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    if (IsThroughPlate == false)
                    {
                        RhsLongitudinalPlate longitudinalPlateRhs = new RhsLongitudinalPlate(sec, pl, log, IsTensionHss, theta, P_uHss, M_uHss);

                        limitState             = longitudinalPlateRhs.GetHssWallPlastificationStrengthUnderAxialLoad();
                        phiR_n                 = limitState.Value;
                        IsApplicableLimitState = limitState.IsApplicable;
                    }
                    else
                    {
                        RhsLongitudinalThroughPlate longitudinalPlateRhs = new RhsLongitudinalThroughPlate(sec, pl, log, IsTensionHss, theta, P_uHss, M_uHss);

                        limitState             = longitudinalPlateRhs.GetHssWallPlastificationStrengthUnderAxialLoad();
                        phiR_n                 = limitState.Value;
                        IsApplicableLimitState = limitState.IsApplicable;
                    }
                }
                else
                {
                    throw new Exception("Unsupported type of hollow section. Please use Tube or Pipe.");
                }
            }

            return(new Dictionary <string, object>
            {
                { "phiR_n", phiR_n }
                , { "IsApplicableLimitState", IsApplicableLimitState }
            });
        }
        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);
            }
        }
Esempio n. 44
0
 public RhsCapPlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss,
                    double P_uChord, double M_uChord)
     : base(Hss, Plate, CalcLog, IsTensionHss, P_uChord, M_uChord)
 {
 }
Esempio n. 45
0
 public RhsToPlateConnection(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss,double P_uHss, double M_uHss)
     :base(IsTensionHss,P_uHss,M_uHss, CalcLog)
 {
     this.hss = Hss;
     this.plate = Plate;
 }
 public RhsTYXTrussBranchConnection(SteelRhsSection Chord, SteelRhsSection BranchMain, double thetaMain,
                                    SteelRhsSection BranchSecondary, double thetaSecondary, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord,
                                    double P_uChord, double M_uChord)
     : base(Chord, BranchMain, thetaMain, ForceTypeMain, BranchSecondary, thetaSecondary, ForceTypeSecond, IsTensionChord, P_uChord, M_uChord)
 {
 }
Esempio n. 47
0
 public RhsTransversePlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, TransversePlateType PlateType,
     double P_uHss, double M_uHss)
     : base(Hss, Plate, CalcLog, IsTensionHss,P_uHss,M_uHss)
 {
     this.PlateType = PlateType;
 }