protected virtual double GetCompressionFlangeWidth_b(MomentAxis MomentAxis) { // since section is symmetrical the location of compression fiber // does not matter double b_c = 0.0; double B = 0.0; B = GetSectionWidth(MomentAxis); if (ShapeTube != null) { if (ShapeTube.CornerRadiusOutside == -1.0) { b_c = ShapeTube.B - 3.0 * ShapeTube.t_des; } else { b_c = ShapeTube.B - 2.0 * ShapeTube.CornerRadiusOutside; } } else if (ShapeBox != null) { b_c = ShapeBox.B; } else { throw new ShapeTypeNotSupportedException(" effective moment of interia calculation for hollow section"); } return(b_c); return(b_c); }
private double GetFlangeThickness(MomentAxis MomentAxis) { double t_flange = 0.0; if (ShapeTube != null) { t_flange = ShapeTube.t_des; } else if (ShapeBox != null) { if (MomentAxis == Common.Entities.MomentAxis.XAxis) { t_flange = ShapeBox.t_f; } else if (MomentAxis == Common.Entities.MomentAxis.YAxis) { t_flange = ShapeBox.t_w; } else { throw new Exception("Principal flexure calculation not supported. Select X-axis and Y-axis"); } } else { throw new ShapeTypeNotSupportedException(" effective moment of interia calculation for hollow section"); } return(t_flange); }
public SteelLimitStateValue GetPlasticMomentCapacity(MomentAxis MomentAxis) { SteelLimitStateValue ls = new SteelLimitStateValue(); double phiM_n; double M_n = 0.0; switch (MomentAxis) { case MomentAxis.XAxis: M_n = GetMajorNominalPlasticMoment(); break; case MomentAxis.YAxis: M_n = GetMinorNominalPlasticMoment(); break; default: throw new FlexuralBendingAxisException(); break; } phiM_n = 0.9 * M_n; ls.Value = phiM_n; ls.IsApplicable = true; return(ls); }
private double GetEffectiveSectionModulusX(MomentAxis MomentAxis) { double Se = 0.0; double be = GetEffectiveFlangeWidth_beff(MomentAxis); double b = GetCompressionFlangeWidth_b(MomentAxis); double AOriginal = Section.Shape.A; double t_f = GetFlangeThickness(MomentAxis); double bRemoved = (b - be); double ADeducted = bRemoved * t_f; double h = GetSectionHeight(MomentAxis); //Find I reduced double I_Reduced = GetReducedMomentOfInertiaX(MomentAxis, ADeducted, bRemoved, t_f); double yCentroidModifiedFromBottom = h / 2.0 - ADeducted / AOriginal; double yCentroidModifiedFromTop = h / 2.0 + ADeducted / AOriginal; Se = I_Reduced / yCentroidModifiedFromTop; return(Se); }
public double GetWebLocalBucklingCapacity(MomentAxis MomentAxis, FlexuralCompressionFiberPosition CompressionLocation) { double M_n = 0.0; double S; double Mp; if (MomentAxis ==MomentAxis.XAxis) { Mp = GetMajorNominalPlasticMoment(); S = Math.Min(Section.Shape.S_yLeft, Section.Shape.S_yRight); } else if (MomentAxis == MomentAxis.YAxis) { Mp = GetMinorNominalPlasticMoment(); S = Math.Min(Section.Shape.S_xTop, Section.Shape.S_xBot); } else { throw new FlexuralBendingAxisException(); } double lambdaWeb = GetLambdaWeb(CompressionLocation,MomentAxis); M_n = Mp - (Mp - Fy * S) * (0.305 * lambdaWeb * Math.Sqrt(Fy / E) - 0.738); //(F7-5) M_n = M_n > Mp ? Mp : M_n; double phiM_n = 0.9 * M_n; return phiM_n; }
public double GetWebLocalBucklingCapacity(MomentAxis MomentAxis, FlexuralCompressionFiberPosition CompressionLocation) { double M_n = 0.0; double S; double Mp; if (MomentAxis == MomentAxis.XAxis) { Mp = GetMajorNominalPlasticMoment(); S = Math.Min(Section.Shape.S_yLeft, Section.Shape.S_yRight); } else if (MomentAxis == MomentAxis.YAxis) { Mp = GetMinorNominalPlasticMoment(); S = Math.Min(Section.Shape.S_xTop, Section.Shape.S_xBot); } else { throw new FlexuralBendingAxisException(); } double lambdaWeb = GetLambdaWeb(CompressionLocation, MomentAxis); M_n = Mp - (Mp - Fy * S) * (0.305 * lambdaWeb * Math.Sqrt(Fy / E) - 0.738); //(F7-5) M_n = M_n > Mp ? Mp : M_n; double phiM_n = 0.9 * M_n; return(phiM_n); }
public BeamRectangularHss(ISteelSection section, FlexuralCompressionFiberPosition compressionFiberPosition, MomentAxis MomentAxis, ICalcLog CalcLog) : base(section, CalcLog) { GetSectionValues(); this.MomentAxis = MomentAxis; FlangeCompactnessClass = GetFlangeCompactness(compressionFiberPosition, MomentAxis); }
protected virtual double GetFlangeWidth_bf(MomentAxis MomentAxis) { double b = 0 ; double tdes = SectionTube.t_des; double h; //B4-1b. Stiffened Elements if (MomentAxis == MomentAxis.XAxis) { b = SectionTube.B - 3.0 * tdes; } else if (MomentAxis == MomentAxis.YAxis) { b = SectionTube.H - 3.0 * tdes; } return b; //if (sectionTube.CornerRadiusOutside == -1.0) //{ // b = SectionTube.B - 3.0 * sectionTube.t_des; //} //else //{ // b = sectionTube.B - 2.0 * sectionTube.CornerRadiusOutside; //} }
protected virtual double GetFlangeWidth_bf(MomentAxis MomentAxis) { double b = 0; double tdes = SectionTube.t_des; double h; //B4-1b. Stiffened Elements if (MomentAxis == MomentAxis.XAxis) { b = SectionTube.B - 3.0 * tdes; } else if (MomentAxis == MomentAxis.YAxis) { b = SectionTube.H - 3.0 * tdes; } return(b); //if (sectionTube.CornerRadiusOutside == -1.0) //{ // b = SectionTube.B - 3.0 * sectionTube.t_des; //} //else //{ // b = sectionTube.B - 2.0 * sectionTube.CornerRadiusOutside; //} }
private double GetEffectiveSectionModulusX(MomentAxis MomentAxis) { double Se=0.0; double be = GetEffectiveFlangeWidth_beff(MomentAxis); double b = GetCompressionFlangeWidth_b(MomentAxis); double AOriginal = Section.Shape.A; double t_f = GetFlangeThickness(MomentAxis); double bRemoved = (b - be); double ADeducted = bRemoved * t_f; double h = GetSectionHeight(MomentAxis); //Find I reduced double I_Reduced = GetReducedMomentOfInertiaX(MomentAxis, ADeducted, bRemoved, t_f); double yCentroidModifiedFromBottom = h / 2 - ADeducted / AOriginal; double yCentroidModifiedFromTop = h / 2 + ADeducted / AOriginal; Se = I_Reduced / yCentroidModifiedFromTop; return Se; }
private double GetFlexuralTorsionalBucklingMomentCapacity(double L_b, double C_b, FlexuralCompressionFiberPosition CompressionLocation, FlexuralAndTorsionalBracingType BracingType, MomentAxis MomentAxis) { double M_n = 0.0; double M_n1 = 0.0; double M_n2 = 0.0; double M_e = GetM_e(L_b, C_b, CompressionLocation, BracingType, MomentAxis); double M_y = GetYieldingMomentGeometricXCapacity(CompressionLocation, BracingType); if (M_e<=M_y) { //F10-2 M_n1=(0.92-((0.17*M_e) / (M_y)))*M_e; } else { //F10-3 M_n1=(1.92-1.17*Math.Sqrt(((M_y) / (M_e))))*M_y; } M_n2 = 1.5*M_y; M_n= Math.Min(M_n1,M_n2); double phiM_n = 0.9 * M_n; return phiM_n; }
public BeamAngle(ISteelSection section, ICalcLog CalcLog, AngleRotation AngleRotation, MomentAxis MomentAxis, AngleOrientation AngleOrientation = AngleOrientation.ShortLegVertical) : base(section, CalcLog, AngleOrientation) { this.AngleRotation = AngleRotation; this.AngleOrientation = AngleOrientation; this.MomentAxis = MomentAxis; GetSectionValues(); }
protected double GetEffectiveFlangeWidth_beff(MomentAxis MomentAxis) { double b = GetCompressionFlangeWidth_b(MomentAxis); double tf = GetFlangeThickness(MomentAxis); double be = 1.92 * tf * SqrtE_Fy() * (1.0 - 0.38 / (b / tf) * SqrtE_Fy() - 0.738); //(F7-4) be = be > b? b :be; be = be < 0? 0 : be; return(be); }
private double GetReducedMomentOfInertiaX(MomentAxis MomentAxis, double ADeducted, double bRemoved, double tdes) { double IOriginal = GetMomentOfInertia(MomentAxis); //Section.Shape.I_x; double h = GetSectionHeight(MomentAxis); double yDeducted = (h - tdes) / 2.0; double Ideducted = bRemoved * Math.Pow(tdes, 3) / 12.0; //Use parallel axis theorem: double IFinal = IOriginal - (ADeducted * Math.Pow(yDeducted, 2) + Ideducted); return(IFinal); }
public BeamAngle(ISteelSection section, ICalcLog CalcLog, AngleRotation AngleRotation, MomentAxis MomentAxis, AngleOrientation AngleOrientation= AngleOrientation.ShortLegVertical) : base(section, CalcLog, AngleOrientation) { this.AngleRotation = AngleRotation; this.AngleOrientation = AngleOrientation; this.MomentAxis = MomentAxis; GetSectionValues(); }
public BeamSolid(ISteelSection section, ICalcLog CalcLog, MomentAxis MomentAxis) : base(section, CalcLog) { this.MomentAxis = MomentAxis; GetSectionValues(); sectionSolid = null; ISolidShape s = Section.Shape as ISolidShape; if (s == null) { throw new SectionWrongTypeException(typeof(ISolidShape)); } }
//ICompactnessElement FlangeCompactness; //ICompactnessElement WebCompactness; public HollowMember(ISteelSection section, FlexuralCompressionFiberPosition compressionFiberPosition, MomentAxis MomentAxis) { ISection Section = section.Shape; if (Section is ISectionTube|| Section is ISectionPipe || Section is ISectionBox) { if (Section is ISectionTube) { ISectionTube tube = Section as ISectionTube; if (MomentAxis == MomentAxis.XAxis) { FlangeCompactness = new FlangeOfRhs(section.Material, tube, MomentAxis); WebCompactness = new WebOfRhs(section.Material, tube, MomentAxis); } else { WebCompactness = new FlangeOfRhs(section.Material, tube, MomentAxis); FlangeCompactness = new WebOfRhs(section.Material, tube, MomentAxis); } } if (Section is ISectionPipe) { ISectionPipe pipe = Section as ISectionPipe; FlangeCompactness = new WallOfChs(section.Material, pipe); WebCompactness = new WallOfChs(section.Material, pipe); } if (Section is ISectionBox) { ISectionBox box = Section as ISectionBox; if (MomentAxis == MomentAxis.XAxis) { FlangeCompactness = new FlangeOfBox(section.Material, box); WebCompactness = new WebOfBox(section.Material, box); } else { WebCompactness = new FlangeOfBox(section.Material, box); FlangeCompactness = new WebOfBox(section.Material, box); } } } else { throw new SectionWrongTypeException("ISectionTube, ISectionPipe or ISectionBox"); } }
public double GetFlexuralStrength_Vertical(sCrossSection section, eColorMode forceType, IFrameSet fs) { sKodeStructConverter kcon = new sKodeStructConverter(); SteelMaterial mat = kcon.ToKodeStructMaterial_Steel(section); string Code = "AISC360-10"; double phiM_n = 0; double b_eff = this.GetBeamEffectiveSlabWidth(fs); double SumQ_n = this.GetSumOfStudsStrength(fs); // assuming, // Shear Stud Anchor // Light Weight Concrete : 4ksi // solid concrete thickness = 2.5" // rib thickness = 3" // double h_solid = 2.5; double h_rib = 3.0; double F_y = mat.YieldStress; //?? unit ?? F_y of what?? double fc_prime = 4.0; //?? unit ?? MomentAxis Axis = kcon.ToKodeStructMomentAxis(forceType); //?? just this for composite? ISection shape = kcon.ToKodeStructCrossSection(section); if (shape is ISliceableShapeProvider) { ISliceableShapeProvider prov = shape as ISliceableShapeProvider; ISliceableSection sec = prov.GetSliceableShape(); CompositeBeamSection cs = new CompositeBeamSection(sec, b_eff, h_solid, h_rib, F_y, fc_prime); phiM_n = cs.GetFlexuralStrength(SumQ_n); } else { if (shape is ISliceableSection) { ISliceableSection sec = shape as ISliceableSection; CompositeBeamSection cs = new CompositeBeamSection(sec, b_eff, h_solid, h_rib, F_y, fc_prime); phiM_n = cs.GetFlexuralStrength(SumQ_n); } else { throw new Exception("Shape type not supported. Please provide a shape object of standard geometry"); } } return(phiM_n); }
protected virtual double GetWebWallHeight_h(MomentAxis MomentAxis) { double tdes = SectionTube.t_des; double h =0; //B4-1b. Stiffened Elements if (MomentAxis == MomentAxis.XAxis) { h = SectionTube.H - 3.0 * tdes; } else if (MomentAxis == MomentAxis.YAxis) { h = SectionTube.B - 3.0 * tdes; } return h; }
protected virtual double GetWebWallHeight_h(MomentAxis MomentAxis) { double tdes = SectionTube.t_des; double h = 0; //B4-1b. Stiffened Elements if (MomentAxis == MomentAxis.XAxis) { h = SectionTube.H - 3.0 * tdes; } else if (MomentAxis == MomentAxis.YAxis) { h = SectionTube.B - 3.0 * tdes; } return(h); }
private double GetSectionModulus(MomentAxis MomentAxis) { double S = 0 ; if (MomentAxis == MomentAxis.XAxis) { S = this.Section.Shape.S_xTop; } else if (MomentAxis == MomentAxis.YAxis) { S = this.Section.Shape.S_yLeft; } else { throw new FlexuralBendingAxisException(); } return S; }
private double GetMomentOfInertia(MomentAxis MomentAxis) { double I; if (MomentAxis == Common.Entities.MomentAxis.XAxis) { I = Section.Shape.I_x; } else if (MomentAxis == Common.Entities.MomentAxis.YAxis) { I = Section.Shape.I_y; } else { throw new Exception("Principal flexure calculation not supported. Select X-axis and Y-axis"); } return(I); }
private double GetSectionModulus(MomentAxis MomentAxis) { double S = 0; if (MomentAxis == MomentAxis.XAxis) { S = this.Section.Shape.S_xTop; } else if (MomentAxis == MomentAxis.YAxis) { S = this.Section.Shape.S_yLeft; } else { throw new FlexuralBendingAxisException(); } return(S); }
private double GetSectionHeight(MomentAxis MomentAxis) { double h = 0.0; if (ShapeTube != null) { if (MomentAxis == Common.Entities.MomentAxis.XAxis) { h = ShapeTube.H; } else if (MomentAxis == Common.Entities.MomentAxis.YAxis) { h = ShapeTube.B; } else { throw new Exception("Principal flexure calculation not supported. Select X-axis and Y-axis"); } } else if (ShapeBox != null) { if (MomentAxis == Common.Entities.MomentAxis.XAxis) { h = ShapeBox.H; } else if (MomentAxis == Common.Entities.MomentAxis.YAxis) { h = ShapeBox.B; } else { throw new Exception("Principal flexure calculation not supported. Select X-axis and Y-axis"); } } else { throw new ShapeTypeNotSupportedException(" effective moment of interia calculation for hollow section"); } return h; }
private double GetSectionHeight(MomentAxis MomentAxis) { double h = 0.0; if (ShapeTube != null) { if (MomentAxis == Common.Entities.MomentAxis.XAxis) { h = ShapeTube.H; } else if (MomentAxis == Common.Entities.MomentAxis.YAxis) { h = ShapeTube.B; } else { throw new Exception("Principal flexure calculation not supported. Select X-axis and Y-axis"); } } else if (ShapeBox != null) { if (MomentAxis == Common.Entities.MomentAxis.XAxis) { h = ShapeBox.H; } else if (MomentAxis == Common.Entities.MomentAxis.YAxis) { h = ShapeBox.B; } else { throw new Exception("Principal flexure calculation not supported. Select X-axis and Y-axis"); } } else { throw new ShapeTypeNotSupportedException(" effective moment of interia calculation for hollow section"); } return(h); }
public FlangeOfRhs(ISteelMaterial Material, ISectionTube SectionTube, MomentAxis MomentAxis) //double OutsideCornerRadius=-1.0) :base(Material) { this.SectionTube = SectionTube; ISectionTube s = SectionTube; double td = s.t_des; //if (OutsideCornerRadius==-1.0) //{ // this.Width = s.B - 3.0 * td; //} //else //{ // if (OutsideCornerRadius<0) // { // throw new Exception("Invalid RHS corner radius. Must be over 0"); // } // this.Width = s.B - 2.0 * OutsideCornerRadius; //} this.Width = GetFlangeWidth_bf(MomentAxis); this.Thickness = td; }
public double GetFlexuralStrength_Vertical(sCrossSection section, eColorMode forceType) { sKodeStructConverter kcon = new sKodeStructConverter(); SteelMaterial mat = kcon.ToKodeStructMaterial_Steel(section); string flexuralCompressional = "Top"; string Code = "AISC360-10"; bool IsRolledMember = true; double phiM_n = 0; MomentAxis Axis = kcon.ToKodeStructMomentAxis(forceType); FlexuralCompressionFiberPosition FlexuralCompression; bool IsValidStringCompressionLoc = Enum.TryParse(flexuralCompressional, true, out FlexuralCompression); if (IsValidStringCompressionLoc == false) { throw new Exception("Flexural compression location selection not recognized. Check input string."); } ISection shape = kcon.ToKodeStructCrossSection(section); FlexuralMemberFactory factory = new FlexuralMemberFactory(); ISteelBeamFlexure beam = factory.GetBeam(shape, mat, null, Axis, FlexuralCompression, IsRolledMember); SteelLimitStateValue Y = beam.GetFlexuralYieldingStrength(FlexuralCompression); phiM_n = Y.Value; if (Y.IsApplicable) { return(phiM_n); } else { return(-1); } }
public FlangeOfRhs(ISteelMaterial Material, ISectionTube SectionTube, MomentAxis MomentAxis) //double OutsideCornerRadius=-1.0) : base(Material) { this.SectionTube = SectionTube; ISectionTube s = SectionTube; double td = s.t_des; //if (OutsideCornerRadius==-1.0) //{ // this.Width = s.B - 3.0 * td; //} //else //{ // if (OutsideCornerRadius<0) // { // throw new Exception("Invalid RHS corner radius. Must be over 0"); // } // this.Width = s.B - 2.0 * OutsideCornerRadius; //} this.Width = GetFlangeWidth_bf(MomentAxis); this.Thickness = td; }
public SteelLimitStateValue GetPlasticMomentCapacity(MomentAxis MomentAxis) { SteelLimitStateValue ls = new SteelLimitStateValue(); double phiM_n; double M_n=0.0; switch (MomentAxis) { case MomentAxis.XAxis: M_n = GetMajorNominalPlasticMoment(); break; case MomentAxis.YAxis: M_n = GetMinorNominalPlasticMoment(); break; default: throw new FlexuralBendingAxisException(); break; } phiM_n =0.9*M_n; ls.Value = phiM_n; ls.IsApplicable = true; return ls; }
//Compression Flange Local Buckling F7.2 public double GetCompressionFlangeLocalBucklingCapacity(FlexuralCompressionFiberPosition CompressionLocation, MomentAxis MomentAxis) { double Mn = 0.0; double phiM_n = 0.0; if (Section != null) { double lambda = this.GetLambdaCompressionFlange(CompressionLocation, MomentAxis); double lambdapf = this.GetLambdapf(CompressionLocation, MomentAxis); double lambdarf = this.GetLambdarf(CompressionLocation, MomentAxis); //note: section is doubly symmetric so top flange is taken double S = GetSectionModulus(MomentAxis); double Fy = this.Section.Material.YieldStress; double E = this.Section.Material.ModulusOfElasticity; CompactnessClassFlexure cClass = GetFlangeCompactness(CompressionLocation, MomentAxis); if (cClass == CompactnessClassFlexure.Noncompact) { double Mp = this.GetMajorNominalPlasticMoment(); Mn = GetMnNoncompact(Mp, Fy, S, lambda); } else { double Sxe = GetEffectiveSectionModulusX(MomentAxis); Mn = GetMnSlender(Sxe, Fy); } } phiM_n = 0.9 * Mn; return phiM_n; }
public virtual SteelLimitStateValue GetFlexuralLateralTorsionalBucklingStrength(double C_b, double L_b, FlexuralCompressionFiberPosition CompressionLocation, FlexuralAndTorsionalBracingType BracingType, MomentAxis MomentAxis) { double phiM_n = GetFlexuralTorsionalBucklingMomentCapacity(CompressionLocation, L_b); SteelLimitStateValue ls = new SteelLimitStateValue(-1, false); return(ls); }
//Compression Flange Local Buckling F7.2 public double GetCompressionFlangeLocalBucklingCapacity(FlexuralCompressionFiberPosition CompressionLocation, MomentAxis MomentAxis) { double Mn = 0.0; double phiM_n = 0.0; if (Section != null) { double lambda = this.GetLambdaCompressionFlange(CompressionLocation, MomentAxis); double lambdapf = this.GetLambdapf(CompressionLocation, MomentAxis); double lambdarf = this.GetLambdarf(CompressionLocation, MomentAxis); //note: section is doubly symmetric so top flange is taken double S = GetSectionModulus(MomentAxis); double Fy = this.Section.Material.YieldStress; double E = this.Section.Material.ModulusOfElasticity; CompactnessClassFlexure cClass = GetFlangeCompactness(CompressionLocation, MomentAxis); if (cClass == CompactnessClassFlexure.Noncompact) { double Mp = this.GetMajorNominalPlasticMoment(); Mn = GetMnNoncompact(Mp, Fy, S, lambda); } else { double Sxe = GetEffectiveSectionModulusX(MomentAxis); Mn = GetMnSlender(Sxe, Fy); } } phiM_n = 0.9 * Mn; return(phiM_n); }
public double GetLambdaWeb(FlexuralCompressionFiberPosition compressionFiberPosition, MomentAxis MomentAxis) { ShapeCompactness.HollowMember compactness = new ShapeCompactness.HollowMember(this.Section, compressionFiberPosition, MomentAxis); return(compactness.GetWebLambda()); }
protected virtual double GetLambdarf(FlexuralCompressionFiberPosition compressionFiberPosition, MomentAxis MomentAxis) { compactness = new ShapeCompactness.HollowMember(this.Section, compressionFiberPosition, MomentAxis); return compactness.GetFlangeLambda_r(StressType.Flexure); }
public double GetLambdaWeb(FlexuralCompressionFiberPosition compressionFiberPosition, MomentAxis MomentAxis) { ShapeCompactness.HollowMember compactness = new ShapeCompactness.HollowMember(this.Section, compressionFiberPosition, MomentAxis); return compactness.GetWebLambda(); }
public CompactnessClassFlexure GetFlangeCompactness(FlexuralCompressionFiberPosition compressionFiberPosition, MomentAxis MomentAxis) { ShapeCompactness.HollowMember compactness = new ShapeCompactness.HollowMember(this.Section, compressionFiberPosition, MomentAxis); return compactness.GetFlangeCompactnessFlexure(); }
public ISteelBeamFlexure GetBeam(ISection Shape, ISteelMaterial Material, ICalcLog Log, MomentAxis MomentAxis, FlexuralCompressionFiberPosition compressionFiberPosition, bool IsRolledMember = true) { ISteelBeamFlexure beam = null; if (MomentAxis == Common.Entities.MomentAxis.XAxis) { if (Shape is ISectionI) { ISectionI IShape = Shape as ISectionI; SteelSectionI SectionI = new SteelSectionI(IShape, Material); if (IShape.b_fBot == IShape.b_fTop && IShape.t_fBot == IShape.t_fTop) // doubly symmetric { DoublySymmetricIBeam dsBeam = new DoublySymmetricIBeam(SectionI, Log, compressionFiberPosition, IsRolledMember); beam = dsBeam.GetBeamCase(); } else { SinglySymmetricIBeam ssBeam = new SinglySymmetricIBeam(SectionI, IsRolledMember, compressionFiberPosition, Log); beam = ssBeam.GetBeamCase(); } } else if (Shape is ISolidShape) { ISolidShape solidShape = Shape as ISolidShape; SteelSolidSection SectionSolid = new SteelSolidSection(solidShape, Material); beam = new BeamSolid(SectionSolid, Log, MomentAxis); } else if (Shape is ISectionChannel) { ISectionChannel ChannelShape = Shape as ISectionChannel; SteelChannelSection ChannelSection = new SteelChannelSection(ChannelShape, Material); beam = new BeamChannel(ChannelSection, IsRolledMember, Log); IShapeCompactness compactness = new ShapeCompactness.ChannelMember(ChannelSection, IsRolledMember, compressionFiberPosition); CompactnessClassFlexure flangeCompactness = compactness.GetFlangeCompactnessFlexure(); CompactnessClassFlexure webCompactness = compactness.GetWebCompactnessFlexure(); if (flangeCompactness != CompactnessClassFlexure.Compact || webCompactness != CompactnessClassFlexure.Compact) { throw new Exception("Channels with non-compact and slender flanges or webs are not supported. Revise input."); } } else if (Shape is ISectionPipe) { ISectionPipe SectionPipe = Shape as ISectionPipe; SteelPipeSection PipeSection = new SteelPipeSection(SectionPipe, Material); beam = new BeamCircularHss(PipeSection, Log); } else if (Shape is ISectionTube) { ISectionTube TubeShape = Shape as ISectionTube; SteelRhsSection RectHSS_Section = new SteelRhsSection(TubeShape, Material); beam = new BeamRectangularHss(RectHSS_Section, compressionFiberPosition, MomentAxis, Log); } else if (Shape is ISectionBox) { ISectionBox BoxShape = Shape as ISectionBox; SteelBoxSection BoxSection = new SteelBoxSection(BoxShape, Material); beam = new BeamRectangularHss(BoxSection, compressionFiberPosition, MomentAxis, Log); } else if (Shape is ISectionTee) { ISectionTee TeeShape = Shape as ISectionTee; SteelTeeSection TeeSection = new SteelTeeSection(TeeShape, Material); beam = new BeamTee(TeeSection, Log); } else if (Shape is ISectionAngle) { ISectionAngle Angle = Shape as ISectionAngle; SteelAngleSection AngleSection = new SteelAngleSection(Angle, Material); beam = new BeamAngle(AngleSection, Log, Angle.AngleRotation, MomentAxis, Angle.AngleOrientation); } else if (Shape is ISolidShape) { ISolidShape SolidShape = Shape as ISolidShape; SteelSolidSection SolidSection = new SteelSolidSection(SolidShape, Material); beam = new BeamSolid(SolidSection, Log, MomentAxis); } else { throw new Exception("Specified section type is not supported for this node."); } } else // weak axis { if (Shape is ISectionI) { ISectionI IShape = Shape as ISectionI; SteelSectionI SectionI = new SteelSectionI(IShape, Material); beam = new BeamIWeakAxis(SectionI, IsRolledMember, Log); } else { throw new NotImplementedException(); } } return(beam); }
private ISteelBeamFlexure CreateRhsBeam(CompactnessClassFlexure FlangeCompactness, FlexuralCompressionFiberPosition compressionFiberPosition, CompactnessClassFlexure WebCompactness, ISectionTube RhsSec, ISteelMaterial Material, MomentAxis MomentAxis, ICalcLog Log) { SteelRhsSection steelSection = new SteelRhsSection(RhsSec, Material); ISteelBeamFlexure beam = null; beam = new BeamRectangularHss(steelSection, compressionFiberPosition, MomentAxis, Log); return(beam); }
private double GetFlangeThickness(MomentAxis MomentAxis ) { double t_flange = 0.0; if (ShapeTube!=null) { t_flange = ShapeTube.t_des; } else if (ShapeBox!=null) { if (MomentAxis == Common.Entities.MomentAxis.XAxis) { t_flange = ShapeBox.t_f; } else if (MomentAxis == Common.Entities.MomentAxis.YAxis) { t_flange = ShapeBox.t_w; } else { throw new Exception("Principal flexure calculation not supported. Select X-axis and Y-axis"); } } else { throw new ShapeTypeNotSupportedException(" effective moment of interia calculation for hollow section"); } return t_flange; }
protected virtual double GetLambdarf(FlexuralCompressionFiberPosition compressionFiberPosition, MomentAxis MomentAxis) { compactness = new ShapeCompactness.HollowMember(this.Section, compressionFiberPosition, MomentAxis); return(compactness.GetFlangeLambda_r(StressType.Flexure)); }
private ISteelBeamFlexure CreateRhsBeam(CompactnessClassFlexure FlangeCompactness, FlexuralCompressionFiberPosition compressionFiberPosition, CompactnessClassFlexure WebCompactness, ISectionTube RhsSec, ISteelMaterial Material, MomentAxis MomentAxis, ICalcLog Log) { SteelRhsSection steelSection = new SteelRhsSection(RhsSec, Material); ISteelBeamFlexure beam = null; beam = new BeamRectangularHss(steelSection,compressionFiberPosition, MomentAxis, Log); return beam; }
public CompactnessClassFlexure GetFlangeCompactness(FlexuralCompressionFiberPosition compressionFiberPosition, MomentAxis MomentAxis) { ShapeCompactness.HollowMember compactness = new ShapeCompactness.HollowMember(this.Section, compressionFiberPosition, MomentAxis); return(compactness.GetFlangeCompactnessFlexure()); }
public ISteelBeamFlexure GetBeam(ISection Shape, ISteelMaterial Material, ICalcLog Log, MomentAxis MomentAxis, FlexuralCompressionFiberPosition compressionFiberPosition, bool IsRolledMember=true) { ISteelBeamFlexure beam = null; if (MomentAxis == Common.Entities.MomentAxis.XAxis) { if (Shape is ISectionI) { ISectionI IShape = Shape as ISectionI; SteelSectionI SectionI = new SteelSectionI(IShape, Material); if (IShape.b_fBot == IShape.b_fTop && IShape.t_fBot == IShape.t_fTop) // doubly symmetric { DoublySymmetricIBeam dsBeam = new DoublySymmetricIBeam(SectionI, Log, compressionFiberPosition, IsRolledMember); beam = dsBeam.GetBeamCase(); } else { SinglySymmetricIBeam ssBeam = new SinglySymmetricIBeam(SectionI, IsRolledMember, compressionFiberPosition, Log ); beam = ssBeam.GetBeamCase(); } } else if (Shape is ISolidShape) { ISolidShape solidShape = Shape as ISolidShape; SteelSolidSection SectionSolid = new SteelSolidSection(solidShape, Material); beam = new BeamSolid(SectionSolid, Log, MomentAxis); } else if (Shape is ISectionChannel) { ISectionChannel ChannelShape = Shape as ISectionChannel; SteelChannelSection ChannelSection = new SteelChannelSection(ChannelShape, Material); beam = new BeamChannel(ChannelSection, IsRolledMember, Log); IShapeCompactness compactness = new ShapeCompactness.ChannelMember(ChannelSection, IsRolledMember, compressionFiberPosition); CompactnessClassFlexure flangeCompactness = compactness.GetFlangeCompactnessFlexure(); CompactnessClassFlexure webCompactness = compactness.GetWebCompactnessFlexure(); if (flangeCompactness != CompactnessClassFlexure.Compact || webCompactness != CompactnessClassFlexure.Compact) { throw new Exception("Channels with non-compact and slender flanges or webs are not supported. Revise input."); } } else if (Shape is ISectionPipe) { ISectionPipe SectionPipe = Shape as ISectionPipe; SteelPipeSection PipeSection = new SteelPipeSection(SectionPipe, Material); beam = new BeamCircularHss(PipeSection, Log); } else if (Shape is ISectionTube) { ISectionTube TubeShape = Shape as ISectionTube; SteelRhsSection RectHSS_Section = new SteelRhsSection(TubeShape, Material); beam = new BeamRectangularHss(RectHSS_Section,compressionFiberPosition, MomentAxis, Log); } else if (Shape is ISectionBox) { ISectionBox BoxShape = Shape as ISectionBox; SteelBoxSection BoxSection = new SteelBoxSection(BoxShape, Material); beam = new BeamRectangularHss(BoxSection, compressionFiberPosition, MomentAxis, Log); } else if (Shape is ISectionTee) { ISectionTee TeeShape = Shape as ISectionTee; SteelTeeSection TeeSection = new SteelTeeSection(TeeShape, Material); beam = new BeamTee(TeeSection, Log); } else if (Shape is ISectionAngle) { ISectionAngle Angle = Shape as ISectionAngle; SteelAngleSection AngleSection = new SteelAngleSection(Angle,Material); beam = new BeamAngle(AngleSection, Log, Angle.AngleRotation, MomentAxis, Angle.AngleOrientation); } else if (Shape is ISolidShape) { ISolidShape SolidShape = Shape as ISolidShape; SteelSolidSection SolidSection = new SteelSolidSection(SolidShape, Material); beam = new BeamSolid(SolidSection, Log,MomentAxis); } else { throw new Exception("Specified section type is not supported for this node."); } } else // weak axis { if (Shape is ISectionI) { ISectionI IShape = Shape as ISectionI; SteelSectionI SectionI = new SteelSectionI(IShape, Material); beam = new BeamIWeakAxis(SectionI, IsRolledMember, Log); } else { throw new NotImplementedException(); } } return beam; }
protected virtual double GetCompressionFlangeWidth_b(MomentAxis MomentAxis) { // since section is symmetrical the location of compression fiber // does not matter double b_c = 0.0; double B = 0.0; B = GetSectionWidth(MomentAxis); if (ShapeTube != null) { if (ShapeTube.CornerRadiusOutside == -1.0) { b_c = ShapeTube.B - 3.0 * ShapeTube.t_des; } else { b_c = ShapeTube.B - 2.0 * ShapeTube.CornerRadiusOutside; } } else if (ShapeBox != null) { b_c = ShapeBox.B; } else { throw new ShapeTypeNotSupportedException(" effective moment of interia calculation for hollow section"); } return b_c; return b_c; }
private double GetFlexuralTorsionalBucklingMomentCapacity(double L_b, double C_b, FlexuralCompressionFiberPosition CompressionLocation, FlexuralAndTorsionalBracingType BracingType, MomentAxis MomentAxis) { double M_n = 0.0; double M_n1 = 0.0; double M_n2 = 0.0; double M_e = GetM_e(L_b, C_b, CompressionLocation, BracingType, MomentAxis); double M_y = GetYieldingMomentGeometricXCapacity(CompressionLocation, BracingType); if (M_e <= M_y) { //F10-2 M_n1 = (0.92 - ((0.17 * M_e) / (M_y))) * M_e; } else { //F10-3 M_n1 = (1.92 - 1.17 * Math.Sqrt(((M_y) / (M_e)))) * M_y; } M_n2 = 1.5 * M_y; M_n = Math.Min(M_n1, M_n2); double phiM_n = 0.9 * M_n; return(phiM_n); }
protected double GetEffectiveFlangeWidth_beff(MomentAxis MomentAxis) { double b = GetCompressionFlangeWidth_b(MomentAxis); double tf = GetFlangeThickness(MomentAxis); double be = 1.92*tf*SqrtE_Fy()*(1.0-0.38/(b/tf)*SqrtE_Fy()-0.738); //(F7-4) be = be > b? b :be; be= be<0? 0 : be; return be; }
private double GetM_e(double L_b, double C_b, FlexuralCompressionFiberPosition CompressionLocation, FlexuralAndTorsionalBracingType BracingType, MomentAxis MomentAxis) { double M_e; if (MomentAxis == MomentAxis.MajorPrincipalAxis) { if (IsEqualLeg == true) { M_e = ((0.46 * E * Math.Pow(b, 2) * Math.Pow(t, 2) * C_b) / (L_b)); //F10-4 } else { double beta_wCorrected; //F10-5 if (CompressionLocation == FlexuralCompressionFiberPosition.Top) { if (AngleRotation == AngleRotation.FlatLegBottom) { if (d < b) //short leg in compression { beta_wCorrected = beta_w; } else { beta_wCorrected = -beta_w; } } else { if (d > b) //short leg in compression { beta_wCorrected = beta_w; } else { beta_wCorrected = -beta_w; } } } else if (CompressionLocation == FlexuralCompressionFiberPosition.Bottom) { if (AngleRotation == AngleRotation.FlatLegBottom) { if (d > b) { beta_wCorrected = beta_w; } else { beta_wCorrected = -beta_w; } } else { if (d < b) { beta_wCorrected = beta_w; } else { beta_wCorrected = -beta_w; } } } else { throw new CompressionFiberPositionException(); } M_e = ((4.9 * E * I_z * C_b) / (Math.Pow(L_b, 2))) * (Math.Sqrt(Math.Pow(beta_wCorrected, 2) + 0.052 * Math.Pow((((L_b * t) / (r_z))), 2)) + beta_wCorrected); } } else { if (CompressionLocation == FlexuralCompressionFiberPosition.Top) { //F10-6a M_e = ((0.66 * E * Math.Pow(b, 4) * t * C_b) / (Math.Pow(L_b, 2))) * (Math.Sqrt(1 + 0.78 * Math.Pow((((L_b * t) / (Math.Pow(b, 2)))), 2)) - 1); } else { //F10-6b M_e = ((0.66 * E * Math.Pow(b, 4) * t * C_b) / (Math.Pow(L_b, 2))) * (Math.Sqrt(1 + 0.78 * Math.Pow((((L_b * t) / (Math.Pow(b, 2)))), 2)) + 1); } if (BracingType == FlexuralAndTorsionalBracingType.AtPointOfMaximumMoment) { M_e = 1.25 * M_e; } } return(M_e); }
//ICompactnessElement FlangeCompactness; //ICompactnessElement WebCompactness; public HollowMember(ISteelSection section, FlexuralCompressionFiberPosition compressionFiberPosition, MomentAxis MomentAxis) { ISection Section = section.Shape; if (Section is ISectionTube || Section is ISectionPipe || Section is ISectionBox) { if (Section is ISectionTube) { ISectionTube tube = Section as ISectionTube; if (MomentAxis == MomentAxis.XAxis) { FlangeCompactness = new FlangeOfRhs(section.Material, tube, MomentAxis); WebCompactness = new WebOfRhs(section.Material, tube, MomentAxis); } else { WebCompactness = new FlangeOfRhs(section.Material, tube, MomentAxis); FlangeCompactness = new WebOfRhs(section.Material, tube, MomentAxis); } } if (Section is ISectionPipe) { ISectionPipe pipe = Section as ISectionPipe; FlangeCompactness = new WallOfChs(section.Material, pipe); WebCompactness = new WallOfChs(section.Material, pipe); } if (Section is ISectionBox) { ISectionBox box = Section as ISectionBox; if (MomentAxis == MomentAxis.XAxis) { FlangeCompactness = new FlangeOfBox(section.Material, box); WebCompactness = new WebOfBox(section.Material, box); } else { WebCompactness = new FlangeOfBox(section.Material, box); FlangeCompactness = new WebOfBox(section.Material, box); } } } else { throw new SectionWrongTypeException("ISectionTube, ISectionPipe or ISectionBox"); } }
private double GetReducedMomentOfInertiaX(MomentAxis MomentAxis, double ADeducted, double bRemoved, double tdes) { double IOriginal = GetMomentOfInertia(MomentAxis); //Section.Shape.I_x; double h = GetSectionHeight(MomentAxis); double yDeducted = (h - tdes) / 2.0; double Ideducted = bRemoved * Math.Pow(tdes, 3) / 12.0; //Use parallel axis theorem: double IFinal = IOriginal - (ADeducted * Math.Pow(yDeducted, 2) + Ideducted); return IFinal; }
private double GetMomentOfInertia(MomentAxis MomentAxis) { double I; if (MomentAxis == Common.Entities.MomentAxis.XAxis) { I = Section.Shape.I_x; } else if (MomentAxis == Common.Entities.MomentAxis.YAxis) { I = Section.Shape.I_y; } else { throw new Exception("Principal flexure calculation not supported. Select X-axis and Y-axis"); } return I; }
private double GetM_e(double L_b, double C_b, FlexuralCompressionFiberPosition CompressionLocation, FlexuralAndTorsionalBracingType BracingType, MomentAxis MomentAxis) { double M_e; if (MomentAxis == MomentAxis.MajorPrincipalAxis) { if (IsEqualLeg == true) { M_e = ((0.46 * E * Math.Pow(b, 2) * Math.Pow(t, 2) * C_b) / (L_b)); //F10-4 } else { double beta_wCorrected; //F10-5 if (CompressionLocation == FlexuralCompressionFiberPosition.Top) { if (AngleRotation == AngleRotation.FlatLegBottom) { if (d < b) //short leg in compression { beta_wCorrected = beta_w; } else { beta_wCorrected = -beta_w; } } else { if (d > b) //short leg in compression { beta_wCorrected = beta_w; } else { beta_wCorrected = -beta_w; } } } else if (CompressionLocation == FlexuralCompressionFiberPosition.Bottom) { if (AngleRotation == AngleRotation.FlatLegBottom) { if (d > b) { beta_wCorrected = beta_w; } else { beta_wCorrected = -beta_w; } } else { if (d < b) { beta_wCorrected = beta_w; } else { beta_wCorrected = -beta_w; } } } else { throw new CompressionFiberPositionException(); } M_e = ((4.9 * E * I_z * C_b) / (Math.Pow(L_b, 2))) * (Math.Sqrt(Math.Pow(beta_wCorrected, 2) + 0.052 * Math.Pow((((L_b * t) / (r_z))), 2)) + beta_wCorrected); } } else { if (CompressionLocation == FlexuralCompressionFiberPosition.Top) { //F10-6a M_e = ((0.66 * E * Math.Pow(b, 4) * t * C_b) / (Math.Pow(L_b, 2))) * (Math.Sqrt(1 + 0.78 * Math.Pow((((L_b * t) / (Math.Pow(b, 2)))), 2)) - 1); } else { //F10-6b M_e = ((0.66 * E * Math.Pow(b, 4) * t * C_b) / (Math.Pow(L_b, 2))) * (Math.Sqrt(1 + 0.78 * Math.Pow((((L_b * t) / (Math.Pow(b, 2)))), 2)) + 1); } if (BracingType == FlexuralAndTorsionalBracingType.AtPointOfMaximumMoment) { M_e = 1.25 * M_e; } } return M_e; }