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 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.True(actualToleranceMain <= tolerance); double phiP_nSec = con.GetBranchYieldingFromUnevenLoadDistributionStrength(false).Value; double refValueSec = 151; double actualToleranceSec = EvaluateActualTolerance(phiP_nSec, refValueSec); Assert.True(actualToleranceSec <= tolerance); }
public RhsTYXTrussBranchConnection(SteelRhsSection Chord, SteelRhsSection BranchMain, double thetaMain, SteelRhsSection BranchSecondary, double thetaSecondary, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord, double P_uChord, double M_uChord) : base( Chord, BranchMain, thetaMain, ForceTypeMain, BranchSecondary, thetaSecondary, ForceTypeSecond, IsTensionChord, P_uChord, M_uChord) { }
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.True(actualToleranceMain <= tolerance); double phiP_nSec = con.GetBranchYieldingFromUnevenLoadDistributionStrength(false).Value; double refValueSec = 415; double actualToleranceSec = EvaluateActualTolerance(phiP_nSec, refValueSec); Assert.True(actualToleranceSec <= tolerance); }
public RhsTrussOverlappedConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain, SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord, double P_uChord, double M_uChord, double O_v) : base(Chord, MainBranch, thetaMain, ForceTypeMain, SecondBranch, thetaSecond, ForceTypeSecond, IsTensionChord, P_uChord, M_uChord) { this.O_v = O_v; }
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 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 RhsTrussBranchConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain, AxialForceType ForceTypeMain, SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeSecond, bool IsTensionChord, double P_uChord, double M_uChord): base(IsTensionChord,P_uChord,M_uChord) { this.Chord = Chord; this.MainBranch =MainBranch ; this.thetaMain =thetaMain ; this.SecondBranch = SecondBranch; this.thetaSecond = thetaSecond; this.ForceTypeMain = ForceTypeMain; this.ForceTypeSecond = ForceTypeSecond; }
public RhsTrussBranchConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain, AxialForceType ForceTypeMain, SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeSecond, bool IsTensionChord, double P_uChord, double M_uChord) : base(IsTensionChord, P_uChord, M_uChord) { this.Chord = Chord; this.MainBranch = MainBranch; this.thetaMain = thetaMain; this.SecondBranch = SecondBranch; this.thetaSecond = thetaSecond; this.ForceTypeMain = ForceTypeMain; this.ForceTypeSecond = ForceTypeSecond; }
//no overrides compared to base RhsTYXTrussConnection class public RhsTrussYConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain, SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord, double P_uChord, double M_uChord) : base(Chord, MainBranch, thetaMain, SecondBranch, thetaSecond, ForceTypeMain, ForceTypeSecond, IsTensionChord, P_uChord, M_uChord) { if (thetaSecond != thetaMain) { throw new Exception("Please specify same angles theta_Main and theta_Second for Y connection"); } if (MainBranch.Section.B != SecondBranch.Section.B || MainBranch.Section.H != SecondBranch.Section.H) { throw new Exception("Please specify same values for main and secondary branch for Y connection."); } }
public RhsTrussXConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain, SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord, double P_uChord, double M_uChord) : base(Chord, MainBranch, thetaMain, SecondBranch, thetaSecond, ForceTypeMain, ForceTypeSecond, IsTensionChord, P_uChord, M_uChord) { if (ForceTypeMain == AxialForceType.Tension && ForceTypeSecond != AxialForceType.Tension) { throw new Exception("Specify the same type of force for both branches or switch to K connection"); } if (ForceTypeSecond == AxialForceType.Tension && ForceTypeMain != AxialForceType.Tension) { throw new Exception("Specify the same type of force for both branches or switch to K connection"); } }
public RhsTrussXConnection(SteelRhsSection Chord, SteelRhsSection MainBranch, double thetaMain, SteelRhsSection SecondBranch, double thetaSecond, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord, double P_uChord, double M_uChord) : base(Chord, MainBranch, thetaMain, SecondBranch, thetaSecond, ForceTypeMain, ForceTypeSecond, IsTensionChord, P_uChord, M_uChord) { if (ForceTypeMain == AxialForceType.Tension && ForceTypeSecond != AxialForceType.Tension ) { throw new Exception("Specify the same type of force for both branches or switch to K connection"); } if (ForceTypeSecond == AxialForceType.Tension && ForceTypeMain != AxialForceType.Tension) { throw new Exception("Specify the same type of force for both branches or switch to K connection"); } }
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 HssRhsConcentratedForceLongitudinalPlateReturnsValue() { SectionTube ch = new SectionTube(null, 8, 8, 0.25, 0.93 * 0.25, 1.5 * 0.25); SteelMaterial matE = new SteelMaterial(46.0, 65, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus); 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(); RhsLongitudinalPlate concForceConnection = new RhsLongitudinalPlate(Element, pl, log, false, 45.0, 148.0, 0.0); double phiR_n = concForceConnection.GetHssMaximumPlateThicknessForShearLoad().Value; //double refValueSec = 46.2; //double actualToleranceSec = EvaluateActualTolerance(phiR_n, refValueSec); //Assert.LessOrEqual(actualToleranceSec, 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.True(actualToleranceSec <= tolerance); }
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; }
public RhsCapPlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, double P_uChord, double M_uChord) : base(Hss, Plate, CalcLog, IsTensionHss,P_uChord,M_uChord) { }
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 RhsToPlateConnection(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, double P_uHss, double M_uHss) : base(IsTensionHss, P_uHss, M_uHss, CalcLog) { this.hss = Hss; this.plate = Plate; }
public RhsTransversePlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, TransversePlateType PlateType, double P_uHss, double M_uHss) : base(Hss, Plate, CalcLog, IsTensionHss, P_uHss, M_uHss) { this.PlateType = PlateType; }
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 RhsCapPlate(SteelRhsSection Hss, SteelPlateSection Plate, double t_plCap, ICalcLog CalcLog, bool IsTensionHss, double P_uHss, double M_uHss) : base(Hss, Plate, CalcLog, IsTensionHss, P_uHss, M_uHss) { this.t_plCap = t_plCap; }
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 RhsTrussConnection(SteelRhsSection Chord, SteelRhsSection Branch_i, double theta_i, SteelRhsSection Branch_j, double theta_j) { this.Chord = Chord; }
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 RhsCapPlate(SteelRhsSection Hss, SteelPlateSection Plate, double t_plCap, ICalcLog CalcLog, bool IsTensionHss, double P_uHss, double M_uHss) : base(Hss, Plate, CalcLog, IsTensionHss,P_uHss,M_uHss) { this.t_plCap = t_plCap; }
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 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> 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 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 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 RhsLongitudinalThroughPlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, double Angle, double P_uHss, double M_uHss) : base(Hss, Plate, CalcLog, IsTensionHss, P_uHss, M_uHss) { this.Angle = Angle; }
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 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); }
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 } }; }
public RhsLongitudinalThroughPlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, double Angle, double P_uHss, double M_uHss) : base(Hss, Plate, CalcLog, IsTensionHss,P_uHss,M_uHss) { this.Angle = Angle; }
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; 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 } }); }
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 RhsCapPlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, double P_uChord, double M_uChord) : base(Hss, Plate, CalcLog, IsTensionHss, P_uChord, M_uChord) { }
public RhsToPlateConnection(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss,double P_uHss, double M_uHss) :base(IsTensionHss,P_uHss,M_uHss, CalcLog) { this.hss = Hss; this.plate = Plate; }
public RhsTYXTrussBranchConnection(SteelRhsSection Chord, SteelRhsSection BranchMain, double thetaMain, SteelRhsSection BranchSecondary, double thetaSecondary, AxialForceType ForceTypeMain, AxialForceType ForceTypeSecond, bool IsTensionChord, double P_uChord, double M_uChord) : base(Chord, BranchMain, thetaMain, ForceTypeMain, BranchSecondary, thetaSecondary, ForceTypeSecond, IsTensionChord, P_uChord, M_uChord) { }
public RhsTransversePlate(SteelRhsSection Hss, SteelPlateSection Plate, ICalcLog CalcLog, bool IsTensionHss, TransversePlateType PlateType, double P_uHss, double M_uHss) : base(Hss, Plate, CalcLog, IsTensionHss,P_uHss,M_uHss) { this.PlateType = PlateType; }