// Lateral-Torsional Buckling F4.2 public double GetLateralTorsionalBucklingCapacity(FlexuralCompressionFiberPosition compressionFiberPosition, double L_b, double Cb) { double M_n = 0.0; double R_pc = GetRpc(compressionFiberPosition); double M_yc = GetCompressionFiberYieldMomentMyc(compressionFiberPosition); F_L = GetStressFL(compressionFiberPosition); switch (compressionFiberPosition) { case FlexuralCompressionFiberPosition.Top: Sxc = Section.Shape.S_xTop; break; case FlexuralCompressionFiberPosition.Bottom: Sxc = Section.Shape.S_xBot; break; default: throw new CompressionFiberPositionException(); } double r_t = GetEffectiveRadiusOfGyration_r_t(compressionFiberPosition); double h_o = this.SectionI.h_o; double L_r = GetL_r(); double L_p = GetL_p(r_t); LateralTorsionalBucklingType BucklingType = GetLateralTorsionalBucklingType(L_b, L_p, L_r); switch (BucklingType) { case LateralTorsionalBucklingType.NotApplicable: M_n = double.PositiveInfinity; break; case LateralTorsionalBucklingType.Inelastic: M_n = Cb * (R_pc * M_yc - (R_pc * M_yc - F_L * Sxc) * ((L_b - L_p) / (L_r - L_p))); //(F4-2) M_n = M_n > R_pc * M_yc ? R_pc * M_yc : M_n; break; case LateralTorsionalBucklingType.Elastic: double Iyc = GetIyc(compressionFiberPosition); double Iy = SectionI.I_x; J = Iyc / Iy <= 0.23 ? 0.0 : J; double Fcr = GetFcr(L_b); break; default: break; } double phiM_n = 0.9 * M_n; return(phiM_n); }
//Lateral Torsional Buckling F2.2 public double GetFlexuralTorsionalBucklingMomentCapacity(double L_b, double Cb) { double Lp = GetLp(r_y, E, F_y); //(F2-5) double rts = Getrts(I_y, C_w, S_x); double Lr = GetLr(rts, E, F_y, S_x, J, c, ho); // (F2-6) LateralTorsionalBucklingType BucklingType = GetLateralTorsionalBucklingType(L_b, Lp, Lr); double M_p; double M_n = 0.0; switch (BucklingType) { case LateralTorsionalBucklingType.NotApplicable: M_n = double.PositiveInfinity; break; case LateralTorsionalBucklingType.Inelastic: M_p = GetMajorNominalPlasticMoment(); M_n = Cb * (M_p - (M_p - 0.7 * F_y * S_x) * ((L_b - Lp) / (Lr - Lp))); //(F2-2) M_n = M_n > M_p ? M_p : M_n; break; case LateralTorsionalBucklingType.Elastic: double Fcr = GetFcr(Cb, E, L_b, rts, J, c, S_x, ho); M_n = Fcr * S_x; //(F2-3) M_p = GetMajorNominalPlasticMoment(); M_n = M_n > M_p ? M_p : M_n; break; } double phiM_n = M_n * 0.9; return(phiM_n); }
// Lateral-Torsional Buckling F5.2 public double GetLateralTorsionalBucklingStrength(FlexuralCompressionFiberPosition compressionFiberPosition, double L_b, double Cb) { double Mn = 0.0; double r_t = GetEffectiveRadiusOfGyration_r_t(compressionFiberPosition); L_p = GetLp(r_t); Lr = GetLr(r_t); Rpg = GetRpg(compressionFiberPosition); double Sxc = compressionFiberPosition == FlexuralCompressionFiberPosition.Top ? Sxtop : Sxbot; LateralTorsionalBucklingType BucklingType = GetLateralTorsionalBucklingType(L_b, L_p, Lr); double Fcr = 0.0; switch (BucklingType) { case LateralTorsionalBucklingType.NotApplicable: Mn = double.PositiveInfinity; break; case LateralTorsionalBucklingType.Inelastic: Fcr = GetFcrLateralTorsionalBucklingInelastic(L_b); break; case LateralTorsionalBucklingType.Elastic: Fcr = GetFcrLateralTorsionalBucklingElastic(r_t, L_b); break; } if (Mn != double.PositiveInfinity) { Mn = Rpg * Fcr * Sxc; //(F5-2) } double phiM_n = 0.9 * Mn; return(phiM_n); }