public double GetCompressionFlangeLocalBucklingCapacity() { // compactness criteria is selected by the most slender flange double Mn = 0; ShapeCompactness.IShapeMember compactnessTop = new ShapeCompactness.IShapeMember(Section, IsRolledMember, FlexuralCompressionFiberPosition.Top); CompactnessClassFlexure flangeCompactnessTop = compactnessTop.GetFlangeCompactnessFlexure(); ShapeCompactness.IShapeMember compactnessBot= new ShapeCompactness.IShapeMember(Section, IsRolledMember, FlexuralCompressionFiberPosition.Top); CompactnessClassFlexure flangeCompactnessBot= compactnessTop.GetFlangeCompactnessFlexure(); double lambda = 0.0; double lambdaTop = compactnessTop.GetCompressionFlangeLambda(); double lambdaBot = compactnessBot.GetCompressionFlangeLambda(); CompactnessClassFlexure flangeCompactness; ShapeCompactness.IShapeMember compactness; double b = 0; double tf = 0.0; if (lambdaTop>lambdaBot) { compactness = compactnessTop; flangeCompactness = flangeCompactnessTop; lambda = lambdaTop; b = GetBfTop(); tf = Get_tfTop(); } else { compactness = compactnessBot; flangeCompactness = flangeCompactnessBot; lambda = lambdaBot; b = GetBfBottom(); tf = Get_tfBottom(); } double Mp = Zy * Fy; double lambdapf = compactness.GetFlangeLambda_p( StressType.Flexure); double lambdarf = compactness.GetFlangeLambda_r(StressType.Flexure); switch (flangeCompactness) { case CompactnessClassFlexure.Compact: Mn = double.PositiveInfinity; break; case CompactnessClassFlexure.Noncompact: Mn = Mp - (Mp - 0.7 * Fy * Sy) * ((lambda - lambdapf) / (lambdarf - lambdapf)); //(F6-2) break; case CompactnessClassFlexure.Slender: double Fcr = 0.69 * E / Math.Pow(b / tf, 2.0); //(F6-4) Mn = Fcr * Sy; //(F6-3) break; } double phiM_n = 0.9 * Mn; return phiM_n; }
public ISteelBeamFlexure GetBeamCase() { ISteelBeamFlexure beam = null; IShapeCompactness compactness = new ShapeCompactness.IShapeMember(section, IsRolledMember, compressionFiberPosition); CompactnessClassFlexure flangeCompactness = compactness.GetFlangeCompactnessFlexure(); CompactnessClassFlexure webCompactness = compactness.GetWebCompactnessFlexure(); if (flangeCompactness == CompactnessClassFlexure.Compact && webCompactness == CompactnessClassFlexure.Compact) { return new BeamIDoublySymmetricCompact(section, IsRolledMember, CalcLog); } else { if (webCompactness == CompactnessClassFlexure.Compact) { return new BeamIDoublySymmetricCompactWebOnly(section, IsRolledMember, CalcLog); } else if ( webCompactness == CompactnessClassFlexure.Noncompact) { if (flangeCompactness == CompactnessClassFlexure.Compact) { return new BeamINoncompactWebCompactFlange(section, IsRolledMember, CalcLog); } else { return new BeamINoncompactWeb(section, IsRolledMember, CalcLog); } } else //slender web { if (flangeCompactness == CompactnessClassFlexure.Compact) { return new BeamISlenderWebCompactFlange(section, IsRolledMember, CalcLog); } else { return new BeamISlenderWeb(section, IsRolledMember, CalcLog); } } } return beam; }
//Compression Flange Local Buckling F3.2 public double GetCompressionFlangeLocalBucklingCapacity() { double M_n = 0.0; double phiM_n = 0.0; ISectionI sectionI = Section as ISectionI; if (sectionI!=null) { ShapeCompactness.IShapeMember compactness = new ShapeCompactness.IShapeMember(Section, IsRolledMember,FlexuralCompressionFiberPosition.Top); CompactnessClassFlexure cClass = compactness.GetFlangeCompactnessFlexure(); if (cClass== CompactnessClassFlexure.Noncompact || cClass== CompactnessClassFlexure.Slender) { double lambda = this.GetLambdaCompressionFlange(FlexuralCompressionFiberPosition.Top); double lambdapf = this.GetLambdapf(FlexuralCompressionFiberPosition.Top); double lambdarf = this.GetLambdarf(FlexuralCompressionFiberPosition.Top); //note: section is doubly symmetric so top flange is taken double Sx = this.Section.Shape.S_xTop; double Fy = this.Section.Material.YieldStress; double E = this.Section.Material.ModulusOfElasticity; //double Zx = Section.SectionBase.Z_x; if (cClass== CompactnessClassFlexure.Noncompact) { double Mp = this.GetMajorNominalPlasticMoment(); M_n = Mp - (Mp - 0.7 * Fy * Sx) * ((lambda - lambdapf) / (lambdarf - lambdapf)); //(F3-1) } else { double kc = this.Getkc(); M_n = 0.9 * E * kc * Sx / Math.Pow(lambda, 2); //(F3-2) } } else { } if (cClass == CompactnessClassFlexure.Compact) { throw new LimitStateNotApplicableException("Flange local buckling"); } } phiM_n = 0.9 * M_n; return phiM_n; }
//Compression Flange Local Buckling F4.3 public double GetCompressionFlangeLocalBucklingCapacity(FlexuralCompressionFiberPosition compressionFiberPosition) { double Mn = 0.0; double bf = GetCompressionFlangeWidthbfc(compressionFiberPosition); double tf = GetCompressionFlangeThicknesstfc(compressionFiberPosition); ShapeCompactness.IShapeMember compactness = new ShapeCompactness.IShapeMember(Section, IsRolledMember, compressionFiberPosition); CompactnessClassFlexure flangeCompactness = compactness.GetFlangeCompactnessFlexure(); double lambda = compactness.GetCompressionFlangeLambda(); double Sxc = GetSectionModulusCompressionSxc(compressionFiberPosition); switch (flangeCompactness) { case CompactnessClassFlexure.Compact: throw new LimitStateNotApplicableException("Compression Flange Local buckling"); case CompactnessClassFlexure.Noncompact: double Rpc = GetRpc(compressionFiberPosition); double Myc = GetCompressionFiberYieldMomentMyc(compressionFiberPosition); double lambdapf = compactness.GetFlangeLambda_p(StressType.Flexure); double lambdarf = compactness.GetFlangeLambda_r(StressType.Flexure); double FL = GetStressFL(compressionFiberPosition); Mn = Rpc * Myc - (Rpc * Myc - FL * Sxc) * ((lambda - lambdapf) / (lambdarf - lambdapf)); //(F4-13) break; case CompactnessClassFlexure.Slender: double kc = Getkc(); double E = this.Section.Material.ModulusOfElasticity; Mn = 0.9 * E * kc * Sxc / Math.Pow(lambda, 2); break; } double phiM_n = 0.9 * Mn; return phiM_n; }