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 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 } }); }