double get_t() { double t = 0; ISectionRectangular rect = sectionSolid as ISectionRectangular; if (MomentAxis == Common.Entities.MomentAxis.XAxis) { if (rect != null) { t = rect.B; } } else if (MomentAxis == Common.Entities.MomentAxis.YAxis) { if (rect != null) { t = rect.H; } } else { throw new FlexuralBendingAxisException(); } return(t); }
public PlateProjectedFromBuiltUpIShape(ISteelMaterial Material, ISectionI SectionI, ISectionRectangular plate, FlexuralCompressionFiberPosition compressionFiberPosition) : base(Material, SectionI, compressionFiberPosition) { this.plate = plate; }
public PlateProjectedFromRolledIShape(ISteelMaterial Material, ISectionRectangular s) :base(Material) { double bf = s.H; double tf=s.B; base.Overhang = bf; base.Thickness = tf; }
public PlateProjectedFromRolledIShape(ISteelMaterial Material, ISectionRectangular s) : base(Material) { double bf = s.H; double tf = s.B; base.Overhang = bf; base.Thickness = tf; }
public override SteelLimitStateValue GetFlexuralLateralTorsionalBucklingStrength(double C_b, double L_b, FlexuralCompressionFiberPosition CompressionLocation, FlexuralAndTorsionalBracingType BracingType) { SteelLimitStateValue ls = null; double b, h; if (sectionSolid is ISectionRound) { ls = new SteelLimitStateValue(); ls.IsApplicable = false; ls.Value = -1; return(ls); } else if (sectionSolid is ISectionRectangular) { ISectionRectangular recangularShape = sectionSolid as ISectionRectangular; if (MomentAxis == Common.Entities.MomentAxis.XAxis) { b = recangularShape.B; h = recangularShape.H; } else if (MomentAxis == Common.Entities.MomentAxis.YAxis) { b = recangularShape.H; h = recangularShape.B; } else { throw new FlexuralBendingAxisException(); } if (b >= h) { ls.IsApplicable = false; ls.Value = -1; } else { ls = GetLateralTorsionalBucklingStrength(L_b, C_b); } } else { throw new ShapeTypeNotSupportedException(" flexural calculation of solid-shape beam"); } return(ls); }
public override SteelLimitStateValue GetLimitingLengthForFullYielding_Lp(FlexuralCompressionFiberPosition CompressionLocation) { SteelLimitStateValue ls = new SteelLimitStateValue(); if (this.Section.Shape is ISectionRectangular) { ISectionRectangular rectSection = this.Section.Shape as ISectionRectangular; double E = this.Section.Material.ModulusOfElasticity; double Fy = this.Section.Material.YieldStress; double d = rectSection.H; double t = rectSection.B; double Lp = GetL_p(); ls.IsApplicable = true; ls.Value = Lp; } else { ls.Value = double.PositiveInfinity; ls.IsApplicable = false; } return(ls); }
private List <KodestructAci.RebarPoint> GetLongitudinalBars(ISectionRectangular shape, double h_total, double t_w, string RebarSizeId, double N_curtains, double s, double c_edge, BoundaryZone BoundaryZoneTop, BoundaryZone BoundaryZoneBottom, IRebarMaterial LongitudinalRebarMaterial) { List <KodestructAci.RebarPoint> BzTopBars = GetBoundaryZoneBars(BoundaryZoneTop, LongitudinalRebarMaterial, new Point2D(0.0, shape.H / 2.0 - BoundaryZoneTop.h / 2.0), true); List <KodestructAci.RebarPoint> BzBottomBars = GetBoundaryZoneBars(BoundaryZoneBottom, LongitudinalRebarMaterial, new Point2D(0.0, BoundaryZoneTop.h / 2.0 - shape.H / 2.0), false); List <KodestructAci.RebarPoint> retBars = null; if (N_curtains != 0) { List <KodestructAci.RebarPoint> WallBars = GetWallBars(h_total, t_w, RebarSizeId, N_curtains, s, BoundaryZoneTop.h, BoundaryZoneBottom.h, c_edge, LongitudinalRebarMaterial); retBars = BzTopBars.Concat(BzBottomBars).Concat(WallBars).ToList(); } else { retBars = BzTopBars.Concat(BzBottomBars).ToList(); } return(retBars); }
public SteelRectangleSection(ISectionRectangular Section, ISteelMaterial Material) : base(Material) { this.section = Section; }
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 SteelPlateSection(ISectionRectangular Section, ISteelMaterial Material) :base(Material) { this.section = Section; }
public static Dictionary <string, object> HssToTransversePlateLocalCripplingAndYieldingStrengthOfHss(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; KodestructSection.SectionRectangular rSect; if (rect.B <= rect.H) { rSect = new KodestructSection.SectionRectangular(rect.B, rect.H); } else { rSect = new KodestructSection.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.GetLocalCripplingAndYieldingStrengthOfHss(); 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.GetLocalCripplingAndYieldingStrengthOfHss(); 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 double GetPureTorsionStressForClosedSection(ISection section, double T_u) { double tau; double b, h, t, J, R; if (section is ISolidShape) { if (section is ISectionRectangular) { ISectionRectangular sr = section as ISectionRectangular; J = sr.J; R = Math.Min(sr.B, sr.H); } else if (section is ISectionRound) { ISectionRound srou = section as ISectionRound; J = srou.J; R = srou.D / 2.0; } else { throw new Exception("Section type is not applicable for closed section analysis"); } tau = T_u * R / J; } else if (section is ISectionHollow) { if (section is ISectionTube || section is ISectionBox) { if (section is ISectionBox) { ISectionBox sb = section as ISectionBox; b = sb.B; h = sb.H; t = Math.Min(sb.t_f, sb.t_w); } else if (section is ISectionTube) { ISectionTube sT = section as ISectionTube; b = sT.B; h = sT.H; t = sT.t_des; } else { throw new Exception("Section type is not applicable for closed section analysis"); } tau = GetBoxShearStress(T_u, b, h, t); } else if (section is ISectionPipe) { ISectionPipe pipe = section as ISectionPipe; R = pipe.D / 2.0; J = pipe.J; tau = GetPipeStress(T_u, R, J); } else { throw new Exception("Section type is not applicable for closed section analysis"); } } else { throw new Exception("Section type is not applicable for closed section analysis"); } return(tau); }
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 == null) { return(new ColumnGeneral(null, L_ex, L_ey, L_ez)); } 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)); } 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)); } 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)); } else if (Shape is ISectionRectangular || Shape is ISectionRound) { ISteelSection solidSec; if (Shape is ISectionRectangular) { ISectionRectangular RectangleShape = Shape as ISectionRectangular; solidSec = new SteelRectangleSection(RectangleShape, Material); } else { ISectionRound rnd = Shape as ISectionRound; solidSec = new SteelRoundSection(rnd, Material); } CompressionMemberRectangle SolidShapeSection = new CompressionMemberRectangle(solidSec, L_ex, L_ey, L_ez); return(SolidShapeSection); } else if (Shape is ISectionTee) { ISectionTee TeeShape = Shape as ISectionTee; SteelTeeSection TeeSection = new SteelTeeSection(TeeShape, Material); IShapeCompactness compactnessTee = new ShapeCompactness.TeeMember(TeeSection); CompactnessClassAxialCompression flangeCompactness = compactnessTee.GetFlangeCompactnessCompression(); CompactnessClassAxialCompression stemCompactness = compactnessTee.GetWebCompactnessCompression(); if (flangeCompactness == CompactnessClassAxialCompression.NonSlender && stemCompactness == CompactnessClassAxialCompression.NonSlender) { return(new ColumnTee(TeeSection, IsRolledShape, L_ex, L_ey, L_ez)); } else { throw new Exception(DEFAULT_EXCEPTION_STRING); } } else { throw new Exception(DEFAULT_EXCEPTION_STRING); } }
public static Dictionary <string, object> HssToLongitudinalPlateMaximumPlateThicknessForShear(CustomProfile HssSection, CustomProfile PlateSection, double F_y, double F_u, 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, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus); 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 } }); }
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; KodestructSection.SectionRectangular rSect; if (rect.B <= rect.H) { rSect = new KodestructSection.SectionRectangular(rect.B, rect.H); } else { rSect = new KodestructSection.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 } }); }