public double GetTensionFlangeRuptureStrength(ISectionI ShapeIGross, ISectionI ShapeINet) { double phiM_n = -1; double F_y = Section.Material.YieldStress; double F_u = Section.Material.UltimateStress; double S_g = Math.Min(ShapeIGross.S_xBot, ShapeIGross.S_xTop); SectionIWithFlangeHoles netSec = ShapeINet as SectionIWithFlangeHoles; if (netSec == null) { throw new Exception("Net section shape not recognized"); } double A_fgB = ShapeIGross.b_fBot * ShapeIGross.t_fBot; double A_fgT = ShapeIGross.b_fTop * ShapeIGross.t_fTop; double A_fnB = netSec.b_fBot * netSec.t_fBot - netSec.b_hole * netSec.N_holes; double A_fnT = netSec.b_fTop * netSec.t_fTop - netSec.b_hole * netSec.N_holes; double Y_t = GetY_t(); double BotFlangeRuptureMoment = GetNetSectionRuptureStrength(A_fnB, A_fgB, Y_t); double TopFlangeRuptureMoment = GetNetSectionRuptureStrength(A_fnT, A_fgT, Y_t); phiM_n = Math.Min(BotFlangeRuptureMoment, TopFlangeRuptureMoment); return(phiM_n); }
public void SectionIWithFlangeHolesRolledReturnsIy() { SectionIWithFlangeHoles shape = new SectionIWithFlangeHoles("", 17.7, 6.0, 0.425, 0.3, 0.001, 2); double Iy = shape.I_y; double refValue = 15.3; double actualTolerance = EvaluateActualTolerance(Iy, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public double GetFlexuralStrength(double L_b) { double phiM_n = 0.0; double F_y = this.Section.Material.YieldStress; double F_u = this.Section.Material.UltimateStress; ISection section = Section.Shape; bool IsValidGrossSection = ValidateGrossSection(); bool IsValidNetSection = true; if (this.NetSectionShape != null) { IsValidNetSection = ValidateNetSection(); } double phiM_nLTB, phiM_nNet, phiM_nGross; //Gross Section Yielding if (IsCompactDoublySymmetricForFlexure == true) { double Z = GrossSectionShape.Z_x; phiM_nGross = 0.9 * F_y * Z; } else { double S = Math.Min(GrossSectionShape.S_xBot, GrossSectionShape.S_xTop); phiM_nGross = 0.9 * F_y * S; } //Net Section Fracture if (NetSectionShape == null) { phiM_nNet = double.PositiveInfinity; } else { if (GrossSectionShape is ISectionI) { if (NetSectionShape is ISectionI) { SectionIWithFlangeHoles netSec = NetSectionShape as SectionIWithFlangeHoles; phiM_nNet = GetTensionFlangeRuptureStrength(GrossSectionShape as ISectionI, NetSectionShape as ISectionI); } else { throw new Exception("If I-Shape is used for Gross section,specify I-Shape with holes object type for net sections."); } } else { phiM_nNet = 0.75 * NetSectionShape.Z_x * F_u; } } //Lateral Stability if (L_b != 0) { double S = NetSectionShape == null?Math.Min(GrossSectionShape.S_xBot, GrossSectionShape.S_xTop) : Math.Min(NetSectionShape.S_xBot, NetSectionShape.S_xTop); double lambda = this.GetLambda(L_b); double Q = this.GetBucklingReductionCoefficientQ(lambda); double F_cr = F_y * Q; phiM_nLTB = 0.9 * S * F_cr; } else { phiM_nLTB = double.PositiveInfinity; } List <double> LimitStates = new List <double>() { phiM_nLTB, phiM_nNet, phiM_nGross }; phiM_n = LimitStates.Min(); return(phiM_n); }