Esempio n. 1
0
 public ChsTrussYConnection(SteelChsSection Chord, SteelChsSection MainBranch, double thetaMain, AxialForceType ForceTypeMain,
                            SteelChsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeSecond, bool IsTensionChord,
                            double P_uChord, double M_uChord) : base(Chord, MainBranch, thetaMain, ForceTypeMain,
                                                                     SecondBranch, thetaSecond, ForceTypeSecond, IsTensionChord,
                                                                     P_uChord, M_uChord)
 {
 }
Esempio n. 2
0
 public ChsTransversePlate(SteelChsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss,
                           double P_uHss, double M_uHss)
     : base(Hss, Plate, CalcLog, IsTensionHss, P_uHss, M_uHss)
 {
     //assume 90 degrees for plate angle
     Angle = 90.0;
 }
 public ChsTrussBranchConnection(SteelChsSection Chord, SteelChsSection MainBranch, double thetaMain, AxialForceType ForceTypeMain,
                                 SteelChsSection 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;
 }
        /// <summary>
        /// K-connection base class
        /// NOTE THAT IT IS CRITICAL TO SPECIFY MAIN BRANCH AS COMPRESSION BRANCH
        /// </summary>
        /// <param name="Chord">Chord object instance</param>
        /// <param name="MainBranch">Branch object instance</param>
        /// <param name="thetaMain">Main branch angle</param>
        /// <param name="ForceTypeMain">Main branch force type</param>
        /// <param name="SecondBranch">Branch object instance</param>
        /// <param name="thetaSecond">Secondary branch angle</param>
        /// <param name="ForceTypeSecond">Secondary branch force type</param>
        /// <param name="IsTensionChord">Identifies if branch is in tension</param>
        /// <param name="P_uChord">Design axial force in chord</param>
        /// <param name="M_uChord">Design moment in chord</param>
        /// <param name="g">Gap</param>
        public ChsTrussKConnection(SteelChsSection Chord, SteelChsSection MainBranch, double thetaMain, AxialForceType ForceTypeMain,
                                   SteelChsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeSecond, bool IsTensionChord,
                                   double P_uChord, double M_uChord, double g) : base(Chord, IsTensionChord,
                                                                                      P_uChord, M_uChord)
        {
            this.g = g;

            #region Assign chord sections based on forces
            if (ForceTypeMain == AxialForceType.Compression && ForceTypeSecond == AxialForceType.Compression)
            {
                throw new Exception("Branch force types need to be specified to have opposite signs for K conncection");
            }
            if (ForceTypeMain == AxialForceType.Tension && ForceTypeSecond == AxialForceType.Tension)
            {
                throw new Exception("Branch force types need to be specified to have opposite signs for K conncection");
            }
            //if (ForceTypeMain == AxialForceType.Reversible && ForceTypeSecond == AxialForceType.Reversible)
            //{
            //    this.MainBranch = MainBranch;
            //    this.thetaMain = thetaMain;
            //    this.ForceTypeMain = ForceTypeMain;
            //    this.SecondBranch = SecondBranch;
            //    this.thetaSecond = thetaSecond;
            //    this.ForceTypeSecond = ForceTypeSecond;
            //}
            //if (ForceTypeMain == AxialForceType.Compression && ForceTypeSecond == AxialForceType.Reversible)
            //{
            this.MainBranch      = MainBranch;
            this.thetaMain       = thetaMain;
            this.ForceTypeMain   = ForceTypeMain;
            this.SecondBranch    = SecondBranch;
            this.thetaSecond     = thetaSecond;
            this.ForceTypeSecond = ForceTypeSecond;
            //}
            //if (ForceTypeMain == AxialForceType.Tension && ForceTypeSecond == AxialForceType.Reversible)
            //{

            //    this.MainBranch = SecondBranch;
            //    this.thetaMain = thetaSecond;
            //    this.ForceTypeMain = ForceTypeSecond;
            //    this.SecondBranch = MainBranch;
            //    this.thetaSecond = thetaMain;
            //    this.ForceTypeSecond = ForceTypeMain;
            //}
            #endregion
        }
Esempio n. 5
0
 public ChsLongitudinalPlate(SteelChsSection 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 ChsToPlateConnection(SteelChsSection 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. 7
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 }
            });
        }
        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. 9
0
 public ChsCapPlate(SteelChsSection 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 ChsTrussBranchConnection(SteelChsSection Chord, bool IsTensionChord,
                                 double P_uChord, double M_uChord)
     : base(IsTensionChord, P_uChord, M_uChord)
 {
     this.Chord = Chord;
 }
        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 }
            });
        }
Esempio n. 12
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 }
            });
        }