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) { }
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 }
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; }
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 } }); }
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 } }); }
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 } }); }