protected double GetFcrGeneral() { SectionRectangular r = new SectionRectangular(t_w, h_o); SteelMaterial mat = new SteelMaterial(Material.YieldStress); CalcLog log = new CalcLog(); AffectedElementInFlexure flexuralElement = new AffectedElementInFlexure(r, mat, log); return flexuralElement.GetPlateBucklingCriticalStress(c); #region Obsolete //double lambda = GetLambda(); //double F_y = Material.YieldStress; //double Q; //if (lambda<=0.7) //{ // Q = 1.0; //} //else if (lambda<=1.41) //{ // Q = (1.34 - 0.468 * lambda); //} //else //{ // Q = ((1.3) / (Math.Pow(lambda, 2))); //} //double F_cr = F_y * Q; //return F_cr; #endregion }
public IShearMember GetShearMemberNonCircular(ShearNonCircularCase ShearCase, double h, double t_w, double a, double F_y,double E) { ISteelMaterial material = new SteelMaterial(F_y,E); IShearMember member =null; bool IsTeeShape; switch (ShearCase) { case ShearNonCircularCase.MemberWithStiffeners: IsTeeShape =false; member = new ShearMemberWithStiffeners(h, t_w, a, material, IsTeeShape); break; case ShearNonCircularCase.Tee: IsTeeShape = true; member = new ShearMemberWithoutStiffeners(h, t_w, material, IsTeeShape); break; case ShearNonCircularCase.Box: member = new ShearMemberBox(h, t_w, material); break; default: IsTeeShape = false; member = new ShearMemberWithoutStiffeners(h, t_w, material, IsTeeShape); break; } return member; }
public void HssOverlappedKConnectionReturnsYieldingOfBranchesFromUnevenDistributionValue() { SectionTube ch = new SectionTube(null, 8, 8, 0.5, 0.465); SteelMaterial mat = new SteelMaterial(46.0); SteelRhsSection Chord = new SteelRhsSection(ch, mat); SectionTube mainBranch = new SectionTube(null, 6, 4, 5.0 / 16.0, 0.291); SteelRhsSection MainBranch = new SteelRhsSection(mainBranch, mat); SectionTube secBranch = new SectionTube(null, 5, 3, 1.0 / 4.0, 0.233); SteelRhsSection SecondaryBranch = new SteelRhsSection(secBranch, mat); double O_v = 0.533; IHssTrussBranchConnection con = new RhsTrussOverlappedConnection(Chord, MainBranch, 45, SecondaryBranch, 45, AxialForceType.Compression, AxialForceType.Tension, false, 0, 0, O_v ); double phiP_nMain = con.GetBranchYieldingFromUnevenLoadDistributionStrength(true).Value; double refValueMain = 236; double actualToleranceMain = EvaluateActualTolerance(phiP_nMain, refValueMain); Assert.LessOrEqual(actualToleranceMain, tolerance); double phiP_nSec = con.GetBranchYieldingFromUnevenLoadDistributionStrength(false).Value; double refValueSec = 151; double actualToleranceSec = EvaluateActualTolerance(phiP_nSec, refValueSec); Assert.LessOrEqual(actualToleranceSec, tolerance); }
public void HssGappedKConnectionReturnsYieldingOfBranchesFromUnevenDistributionValue() { SectionTube ch = new SectionTube(null, 12, 12, 0.625, 0.581); SteelMaterial mat = new SteelMaterial(46.0); SteelRhsSection Chord = new SteelRhsSection(ch, mat); SectionTube mainBranch = new SectionTube(null, 8, 8, 0.375, 0.349); SteelRhsSection MainBranch = new SteelRhsSection(mainBranch, mat); SectionTube secBranch = new SectionTube(null, 8, 8, 0.375, 0.349); SteelRhsSection SecondaryBranch = new SteelRhsSection(secBranch, mat); IHssTrussBranchConnection con = new RhsTrussGappedKConnection(Chord, MainBranch, 45, SecondaryBranch, 45, AxialForceType.Compression, AxialForceType.Tension, false, 430, 0 ); //Note: not clear in the design guide why moment is ignored in chord utilization calculation double phiP_nMain = con.GetChordWallPlastificationStrength(true).Value; double refValueMain = 415; double actualToleranceMain = EvaluateActualTolerance(phiP_nMain, refValueMain); Assert.LessOrEqual(actualToleranceMain, tolerance); double phiP_nSec = con.GetBranchYieldingFromUnevenLoadDistributionStrength(false).Value; double refValueSec = 415; double actualToleranceSec = EvaluateActualTolerance(phiP_nSec, refValueSec); Assert.LessOrEqual(actualToleranceSec, tolerance); }
public void ConnectedPlateReturnsFlexuralStrength() { ICalcLog log = new CalcLog(); SectionRectangular Section = new SectionRectangular(0.5, 8); ISteelMaterial Material = new SteelMaterial(50); AffectedElementInFlexure element = new AffectedElementInFlexure(Section, Material, log); double phiM_n = element.GetFlexuralStrength(); Assert.AreEqual(360.0, phiM_n); }
private void CreateBeam() { FlexuralMemberFactory factory = new FlexuralMemberFactory(); AiscShapeFactory AiscShapeFactory = new AiscShapeFactory(); ISection section = AiscShapeFactory.GetShape("HSS8X6X.500", ShapeTypeSteel.RectangularHSS); SteelMaterial mat = new SteelMaterial(46.0,29000); beam = factory.GetBeam(section,mat,null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top); }
private void CreateBeam() { FlexuralMemberFactory factory = new FlexuralMemberFactory(); AiscShapeFactory AiscShapeFactory = new AiscShapeFactory(); ISection section = AiscShapeFactory.GetShape("W18X35", ShapeTypeSteel.IShapeRolled); SteelMaterial mat = new SteelMaterial(50.0,29000); beam = factory.GetBeam(section,mat,null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top); }
private void CreateColumn(double L_ex, double L_ey, double L_ez = 0, string Shape = "W14X82") { CompressionMemberFactory factory = new CompressionMemberFactory(); AiscShapeFactory AiscShapeFactory = new AiscShapeFactory(); ISection section = AiscShapeFactory.GetShape(Shape, ShapeTypeSteel.IShapeRolled); SteelMaterial mat = new SteelMaterial(50.0,29000); L_ez = L_ez == 0? L_ex : L_ez; column = factory.GetCompressionMember(section,mat, L_ex, L_ey, L_ez); }
private void CreateColumn(double L_ex, double L_ey, double L_ez=0) { CompressionMemberFactory factory = new CompressionMemberFactory(); AiscShapeFactory AiscShapeFactory = new AiscShapeFactory(); ISection section = AiscShapeFactory.GetShape("HSS8X6X.500", ShapeTypeSteel.RectangularHSS); SteelMaterial mat = new SteelMaterial(46.0,29000); L_ez = L_ez == 0? L_ex : L_ez; column = factory.GetCompressionMember(section,mat, L_ex, L_ey, L_ez); }
public AffectedElementInFlexure(ISection section, double F_y, double F_u, bool HasHolesInTensionFlange, double A_fg, double A_fn, bool IsCompactDoublySymmetricForFlexure, bool IsRolled=false) : base(F_y, F_u) { SteelMaterial material = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus); this.Section = new SteelGeneralSection(section, material); this.A_fg = A_fg; this.A_fn = A_fn; this.HasHolesInTensionFlange = HasHolesInTensionFlange; this.IsCompactDoublySymmetricForFlexure = IsCompactDoublySymmetricForFlexure; this.IsRolled=IsRolled; }
public void DoublySymmetricIReturnsFlexuralLateralTorsionalBucklingStrengthInelasticW12 () { FlexuralMemberFactory factory = new FlexuralMemberFactory(); AiscShapeFactory AiscShapeFactory = new AiscShapeFactory(); ISection section = AiscShapeFactory.GetShape("W12X26", ShapeTypeSteel.IShapeRolled); SteelMaterial mat = new SteelMaterial(50.0, 29000); ISteelBeamFlexure beam12 = factory.GetBeam(section, mat, null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top); SteelLimitStateValue LTB = beam12.GetFlexuralLateralTorsionalBucklingStrength(1.0, 19 * 12, FlexuralCompressionFiberPosition.Top, Steel.AISC.FlexuralAndTorsionalBracingType.NoLateralBracing); double phiM_n = LTB.Value; double refValue = 60*12; // from AISC Steel Manual Table 3-10 double actualTolerance = EvaluateActualTolerance(phiM_n, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public void HssRhsConcentratedForceThroughPlateReturnsValue() { SectionTube ch = new SectionTube(null, 8, 8, 0.25,0.93*0.25,1.5*0.25); SteelMaterial matE = new SteelMaterial(46.0); SteelRhsSection Element = new SteelRhsSection(ch, matE); SectionRectangular rec = new SectionRectangular(0.25,8.0); SteelMaterial matR = new SteelMaterial(36.0); SteelPlateSection pl = new SteelPlateSection(rec,matR); CalcLog log = new CalcLog(); RhsLongitudinalThroughPlate concForceConnection = new RhsLongitudinalThroughPlate(Element, pl, log, false,45.0, 148.0, 0.0); double phiR_n = concForceConnection.GetHssWallPlastificationStrengthUnderAxialLoad().Value; double refValueSec = 46.2; double actualToleranceSec = EvaluateActualTolerance(phiR_n, refValueSec); Assert.LessOrEqual(actualToleranceSec, tolerance); }
public void RectangleShapeReturnsYieldStrength() { FlexuralMemberFactory factory = new FlexuralMemberFactory(); SectionRectangular r = new SectionRectangular(0.5, 12.0); SteelMaterial mat = new SteelMaterial(50.0, 29000); ISteelBeamFlexure beam12 = factory.GetBeam(r, mat, null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top); SteelLimitStateValue Y = beam12.GetFlexuralYieldingStrength(FlexuralCompressionFiberPosition.Top); double phiM_n = Y.Value; double refValue = 67.5; double actualTolerance = EvaluateActualTolerance(phiM_n, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public void IShapeReturnsYieldStrength() { FlexuralMemberFactory factory = new FlexuralMemberFactory(); AiscShapeFactory AiscShapeFactory = new AiscShapeFactory(); ISection r = AiscShapeFactory.GetShape("W18X35"); SteelMaterial mat = new SteelMaterial(50.0, 29000); ISteelBeamFlexure beam12 = factory.GetBeam(r, mat, null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top); SteelLimitStateValue Y = beam12.GetFlexuralYieldingStrength(FlexuralCompressionFiberPosition.Top); double phiM_n = Y.Value; double refValue = 249 * 12; // from AISC Steel Manual Table 3-2 double actualTolerance = EvaluateActualTolerance(phiM_n, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public IBeamCope GetCope(BeamCopeCase BeamCopeCase, double d, double b_f, double t_f, double t_w, double d_c, double c, double F_y, double F_u) { ISteelMaterial material = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus); ISectionI section = new SectionI(null, d, b_f, t_f, t_w); IBeamCope cope=null; switch (BeamCopeCase) { case BeamCopeCase.Uncoped: cope = new BeamUncoped(section, material); break; case BeamCopeCase.CopedTopFlange: cope = new BeamCopeSingle(c, d_c, section, material); break; case BeamCopeCase.CopedBothFlanges: cope = new BeamCopeDouble(c, d_c, section, material); break; } return cope; }
public static Dictionary<string, object> ConnectedElementStrengthInFlexure(CustomProfile Shape, double L_b, double F_y, double F_u, bool HasHolesInTensionFlange = false, double A_fg = 0, double A_fn = 0, bool IsCompactDoublySymmetricForFlexure = true, double C_b = 1, string Code = "AISC360-10") { //Default values double phiM_n = 0; //Calculation logic: ICalcLog log = new CalcLog(); ISection Isec = Shape.Section as ISection; ISteelMaterial Material = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus); AffectedElementInFlexure element = new AffectedElementInFlexure(Isec, F_y, F_u, HasHolesInTensionFlange, A_fg, A_fn, IsCompactDoublySymmetricForFlexure); phiM_n = element.GetFlexuralStrength(); return new Dictionary<string, object> { { "phiM_n", phiM_n } }; }
public IShearMember GetShearMemberCircular(double D, double t_nom, bool Is_SAW_member, double L_v, double F_y, double E) { ISteelMaterial material = new SteelMaterial(F_y,E); ShearMemberCircular member = new ShearMemberCircular(D, t_nom, Is_SAW_member, L_v, material); return member; }
public ISteelCompressionMember GetCompressionMember(ISection Shape, double L_ex, double L_ey, double L_ez, double F_y, double E, bool IsRolledShape = true) { string DEFAULT_EXCEPTION_STRING = "Selected shape is not supported. Select a different shape."; ISteelCompressionMember col = null; CalcLog log = new CalcLog(); SteelMaterial Material = new SteelMaterial(F_y, E); if (Shape is ISectionI) { ISectionI IShape = Shape as ISectionI; SteelSectionI SectionI = new SteelSectionI(IShape, Material); IShapeFactory IShapeFactory = new IShapeFactory(); return IShapeFactory.GetIshape(SectionI, IsRolledShape, L_ex, L_ey, L_ez, log); } else if (Shape is ISectionChannel) { ISectionChannel ChannelShape = Shape as ISectionChannel; SteelChannelSection ChannelSection = new SteelChannelSection(ChannelShape, Material); throw new Exception(DEFAULT_EXCEPTION_STRING); } else if (Shape is ISectionPipe) { ISectionPipe SectionPipe = Shape as ISectionPipe; SteelPipeSection PipeSection = new SteelPipeSection(SectionPipe, Material); ChsShapeFactory ChsFactory = new ChsShapeFactory(); return ChsFactory.GetChsShape(PipeSection, L_ex, L_ey, L_ez, log); } else if (Shape is ISectionTube) { ISectionTube TubeShape = Shape as ISectionTube; SteelRhsSection RectHSS_Section = new SteelRhsSection(TubeShape, Material); RhsShapeFactory RhsFactory = new RhsShapeFactory(); return RhsFactory.GetRhsShape(RectHSS_Section, L_ex, L_ey, L_ez, log); } else if (Shape is ISectionBox) { ISectionBox BoxShape = Shape as ISectionBox; SteelBoxSection BoxSection = new SteelBoxSection(BoxShape, Material); RhsShapeFactory RhsFactory = new RhsShapeFactory(); return RhsFactory.GetRhsShape(BoxSection, L_ex, L_ey, L_ez, log); } else if (Shape is ISectionTee) { ISectionTee TeeShape = Shape as ISectionTee; SteelTeeSection TeeSection = new SteelTeeSection(TeeShape, Material); throw new Exception(DEFAULT_EXCEPTION_STRING); } else { throw new Exception(DEFAULT_EXCEPTION_STRING); } }
public void FactoryReturnsChannel() { FlexuralMemberFactory factory = new FlexuralMemberFactory(); AiscShapeFactory AiscShapeFactory = new AiscShapeFactory(); ISectionChannel r = new SectionChannel("", 12.0, 6, 0.4, 0.25); SteelMaterial mat = new SteelMaterial(50.0, 29000); ISteelBeamFlexure beam12 = factory.GetBeam(r, mat, null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top); Assert.IsTrue(true); }
private void CreateElements() { SectionTube ch = new SectionTube(null, 8, 8, 1 / 4.0, 0.93 * (1.0 / 4.0), 0.35); SteelMaterial mat = new SteelMaterial(46.0); Chord = new SteelRhsSection(ch, mat); SectionTube br = new SectionTube(null, 6, 8, 3.0 / 8.0, 0.93 * (3.0 / 8.0), 0.35); Branch = new SteelRhsSection(br, mat); }
public AffectedElementInShear(double F_y, double F_u): base(F_y,F_u) { SteelMaterial mat = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus); }
public static Dictionary<string, object> FlexuralLateralTorsionalBuckling(CustomProfile Shape,string BendingAxis,string FlexuralCompressionLocation,double F_y, double L_b, double C_b = 1.0, string FlexuralBracingCase = "NoLateralBracing", double E = 29000, bool IsRolledMember = true, string Code = "AISC360-10") { //Default values double phiM_n = 0; bool IsApplicableLimitState = false; //Calculation logic: MomentAxis Axis; bool IsValidStringAxis = Enum.TryParse(BendingAxis, true, out Axis); if (IsValidStringAxis == false) { throw new Exception("Axis selection not recognized. Check input string."); } FlexuralCompressionFiberPosition FlexuralCompression; //Calculation logic: bool IsValidStringCompressionLoc = Enum.TryParse(FlexuralCompressionLocation, true, out FlexuralCompression); if (IsValidStringCompressionLoc == false) { throw new Exception("Flexural compression location selection not recognized. Check input string."); } FlexuralAndTorsionalBracingType Bracing; //Calculation logic: bool IsValidStringBracing = Enum.TryParse(FlexuralBracingCase, true, out Bracing); if (IsValidStringBracing == false) { throw new Exception("Flexural bracing case selection not recognized. Check input string."); } SteelMaterial mat = new SteelMaterial(F_y, E); FlexuralMemberFactory factory = new FlexuralMemberFactory(); ISteelBeamFlexure beam = factory.GetBeam(Shape.Section, mat, null, Axis, FlexuralCompression, IsRolledMember); SteelLimitStateValue LTB = beam.GetFlexuralLateralTorsionalBucklingStrength(C_b, L_b, FlexuralCompression, Bracing); phiM_n = LTB.Value; IsApplicableLimitState = LTB.IsApplicable; return new Dictionary<string, object> { { "phiM_n", phiM_n } ,{ "IsApplicableLimitState", IsApplicableLimitState } }; }
public AffectedElement(double F_y, double F_u) { SteelMaterial material = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus); this.Section = new SteelGeneralSection(null, material); }
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> HssToTransversePlateLocalPunchingStrengthOfPlate(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; WosadSection.SectionRectangular rSect; if (rect.B <= rect.H) { rSect = new WosadSection.SectionRectangular(rect.B, rect.H); } else { rSect = new WosadSection.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.GetLocalPunchingStrengthOfPlate(); 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.GetLocalPunchingStrengthOfPlate(); 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> 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; WosadSection.SectionRectangular rSect; if (rect.B <= rect.H) { rSect = new WosadSection.SectionRectangular(rect.B, rect.H); } else { rSect = new WosadSection.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 } }; }
public void ExtendedPlateBucklingFlexuralStrength() { double phiR_n; double h_o = 9.0; double t_w = 0.5; SectionRectangular r = new SectionRectangular(t_w, h_o); SteelMaterial mat = new SteelMaterial(36); CalcLog log = new CalcLog(); AffectedElementInFlexure flexuralElement = new AffectedElementInFlexure(r, mat, log); double lambda = flexuralElement.GetLambda(10); double refValue = 0.408; double actualTolerance = EvaluateActualTolerance(lambda, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public IHssTrussBranchConnection GetConnection(HssTrussConnectionMemberType MemberType, HssTrussConnectionClassification Classification, ISectionHollow ChordSection, ISectionHollow MainBranchSection, ISectionHollow SecondaryBranchSection, double F_yChord, double F_yBranch, double thetaMainBranch, double thetaSecondaryBranch, AxialForceType ForceTypeMainBranch, AxialForceType ForceTypeSecondaryBranch, bool IsTensionChord, double P_uChord, double M_uChord, double O_v=0) { if (MemberType == HssTrussConnectionMemberType.Rhs) { if (ChordSection is ISectionTube && MainBranchSection is ISectionTube && SecondaryBranchSection is ISectionTube) { SteelMaterial matChord = new SteelMaterial(F_yChord); SteelRhsSection Chord = new SteelRhsSection(ChordSection as ISectionTube, matChord); SteelMaterial matBr = new SteelMaterial(F_yBranch); SteelRhsSection MainBranch = new SteelRhsSection(MainBranchSection as ISectionTube, matBr); SteelRhsSection SecondaryBranch = new SteelRhsSection(SecondaryBranchSection as ISectionTube, matBr); switch (Classification) { case HssTrussConnectionClassification.T: return new RhsTrussTConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord, M_uChord); break; case HssTrussConnectionClassification.Y: return new RhsTrussYConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord, M_uChord); break; case HssTrussConnectionClassification.X: return new RhsTrussXConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord, M_uChord); break; case HssTrussConnectionClassification.GappedK: return new RhsTrussGappedKConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord,M_uChord); break; case HssTrussConnectionClassification.OverlappedK: return new RhsTrussOverlappedConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord, M_uChord,O_v); break; default: throw new Exception("Connection classification not recognized."); break; } } else { throw new Exception("One of the member section is not of type ISectionTube. Ensure that a rectangular hollow section object type is used for chord and branches."); } } else { throw new NotImplementedException("Circular HSS truss connections are not supported yet."); } }
public static Dictionary<string, object> FlexuralYielding(CustomProfile Shape, double F_y, string BendingAxis="XAxis", string FlexuralCompressionLocation="Top", double E = 29000, bool IsRolledMember = true, string Code = "AISC360-10") { //Default values double phiM_n = 0; bool IsApplicableLimitState = false; //Calculation logic: MomentAxis Axis; //Calculation logic: bool IsValidStringAxis = Enum.TryParse(BendingAxis, true, out Axis); if (IsValidStringAxis == false) { throw new Exception("Axis selection not recognized. Check input string."); } FlexuralCompressionFiberPosition FlexuralCompression; //Calculation logic: bool IsValidStringCompressionLoc = Enum.TryParse(FlexuralCompressionLocation, true, out FlexuralCompression); if (IsValidStringCompressionLoc == false) { throw new Exception("Flexural compression location selection not recognized. Check input string."); } SteelMaterial mat = new SteelMaterial(F_y, E); FlexuralMemberFactory factory = new FlexuralMemberFactory(); ISteelBeamFlexure beam = factory.GetBeam(Shape.Section, mat, null, Axis, FlexuralCompression, IsRolledMember); SteelLimitStateValue Y = beam.GetFlexuralYieldingStrength(FlexuralCompression); phiM_n = Y.Value; IsApplicableLimitState = Y.IsApplicable; return new Dictionary<string, object> { { "phiM_n", phiM_n } ,{ "IsApplicableLimitState", IsApplicableLimitState } }; }
public static Dictionary<string, object> HssToLongitudinalPlateMaximumPlateThicknessForShear(CustomProfile HssSection,CustomProfile PlateSection, double F_y,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); 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 } }; }