public double GetBoltHoleWidth(BoltHoleType HoleType, bool IsTensionOrShearCalculation = true) { double d_h = 0.0; if (BoltHoleSizeCalculated == false) { GetBoltHoleDimensions(HoleType, IsTensionOrShearCalculation); } return d_hWidth; }
public double GetBoltHoleLength(BoltHoleType HoleType, bool IsTensionOrShearCalculation = true) { double d_h = 0.0; if (BoltHoleSizeCalculated == false) { GetBoltHoleDimensions(HoleType, IsTensionOrShearCalculation); } return(d_hLength); }
public BoltSlipCriticalGroupA(double Diameter, BoltThreadCase ThreadType, BoltFayingSurfaceClass FayingSurface, BoltHoleType HoleType, BoltFillerCase Fillers, int NumberOfSlipPlanes, ICalcLog log, double PretensionMultiplier = 1.13) : base(Diameter, ThreadType, FayingSurface, HoleType, Fillers, NumberOfSlipPlanes, log, PretensionMultiplier) { material = new BoltGroupAMaterial(); nominalTensileStress = material.GetNominalTensileStress(ThreadType); nominalShearStress = material.GetNominalTensileStress(ThreadType); }
public BoltSlipCriticalGroupA(double Diameter, BoltThreadCase ThreadType, BoltFayingSurfaceClass FayingSurface, BoltHoleType HoleType, BoltFillerCase Fillers, int NumberOfSlipPlanes, ICalcLog log, double PretensionMultiplier = 1.13): base(Diameter,ThreadType,FayingSurface,HoleType,Fillers,NumberOfSlipPlanes,log,PretensionMultiplier) { material = new BoltGroupAMaterial(); nominalTensileStress = material.GetNominalTensileStress(ThreadType); nominalShearStress = material.GetNominalTensileStress(ThreadType); }
public BoltSlipCritical(double Diameter, BoltThreadCase ThreadType, BoltFayingSurfaceClass FayingSurface, BoltHoleType HoleType, BoltFillerCase Fillers, int NumberOfSlipPlanes, ICalcLog log, double PretensionMultiplier=1.13) : base(Diameter, ThreadType, log) { this.fayingSurface = FayingSurface; this.holeType = HoleType; this.fillers = Fillers; this.pretensionMultiplier = PretensionMultiplier; this.numberOfSlipPlanes = NumberOfSlipPlanes; }
public BoltSlipCritical(double Diameter, BoltThreadCase ThreadType, BoltFayingSurfaceClass FayingSurface, BoltHoleType HoleType, BoltFillerCase Fillers, int NumberOfSlipPlanes, ICalcLog log, double PretensionMultiplier = 1.13) : base(Diameter, ThreadType, log) { this.fayingSurface = FayingSurface; this.holeType = HoleType; this.fillers = Fillers; this.pretensionMultiplier = PretensionMultiplier; this.numberOfSlipPlanes = NumberOfSlipPlanes; }
/// <summary> /// Bearing Strength at Bolt Holes /// </summary> /// <param name="l_c">Clear distance, in the direction of the force, between the edge of the hole and the edge of the adjacent hole or edge of the material</param> /// <param name="d_b">Nominal bolt diameter</param> /// <param name="t">Thickness of connected material</param> /// <param name="F_y">Yield stress of base metal</param> /// <param name="F_u">Ultimate stress of base metal</param> /// <param name="BoltHoleType">Type of bolt hole</param> /// <param name="BoltHoleDeformationType">Identifies whetehr deformation at the bolt hole at service load is a design consideration</param> /// <param name="IsUnstiffenedHollowSection">Identifies whether this is a connection made using bolts that pass completely through an unstiffened box member or HSS</param> /// <returns></returns> public double GetBearingStrengthAtBoltHole(double l_c, double d_b, double t, double F_y, double F_u, BoltHoleType BoltHoleType, BoltHoleDeformationType BoltHoleDeformationType, bool IsUnstiffenedHollowSection=false) { double phiR_n; if (IsUnstiffenedHollowSection == false) { double phiR_n1; double phiR_n2; if (BoltHoleType == Wosad.Steel.AISC.SteelEntities.Bolts.BoltHoleType.LSL_Perpendicular) { //(J3-6c) phiR_n1=0.75*(1.0*l_c*t*F_u); phiR_n2=0.75*(2.0*d_b*t*F_u); } else { if (BoltHoleDeformationType == Wosad.Steel.AISC.BoltHoleDeformationType.ConsideredUnderServiceLoad) { //(J3-6a) phiR_n1=0.75*(1.2*l_c*t*F_u); phiR_n2=0.75*(2.4*d_b*t*F_u); } else { //(J3-6b) phiR_n1=0.75*(1.5*l_c*t*F_u); phiR_n2=0.75*(3.0*d_b*t*F_u); } } phiR_n = Math.Min(phiR_n1, phiR_n2); } else { phiR_n=0.75*(1.8*d_b*t*F_y); } return phiR_n; }
private void GetBoltHoleDimensions(BoltHoleType HoleType, bool IsTensionOrShearCalculation = true) { #region Read Table Data //<Diameter><Standard>< Oversize><Short-Slot Width><Short-Slot Length><Long-Slot Width><Long-Slot Length> var Tv11 = new { d_b = 0.0, STD = 0.0, OVS = 0.0, SSL_Width = 0.0, SSL_Length = 0.0, LSL_Width = 0.0, LSL_Length = 0.0, }; // sample var AllBoltsList = ListFactory.MakeList(Tv11); using (StringReader reader = new StringReader(Resources.AISC360_10TableJ3_3NominalHoleDimensions)) { string line; while ((line = reader.ReadLine()) != null) { string[] Vals = line.Split(','); if (Vals.Count() == 7) { double V0 = double.Parse(Vals[0], CultureInfo.InvariantCulture); double V1 = double.Parse(Vals[1], CultureInfo.InvariantCulture); double V2 = double.Parse(Vals[2], CultureInfo.InvariantCulture); double V3 = double.Parse(Vals[3], CultureInfo.InvariantCulture); double V4 = double.Parse(Vals[4], CultureInfo.InvariantCulture); double V5 = double.Parse(Vals[5], CultureInfo.InvariantCulture); double V6 = double.Parse(Vals[6], CultureInfo.InvariantCulture); AllBoltsList.Add(new { d_b = V0, STD = V1, OVS = V2, SSL_Width = V3, SSL_Length = V4, LSL_Width = V5, LSL_Length = V6, }); } } } #endregion if (Diameter >= 1 + 1.0 / 8.0) { switch (HoleType) { case BoltHoleType.STD: d_hWidth = Diameter + 1 / 16.0; d_hLength = Diameter + 1 / 16.0; break; case BoltHoleType.SSL_Perpendicular: d_hWidth = Diameter + 1 / 16.0; d_hLength = Diameter + 3 / 8.0; break; case BoltHoleType.SSL_Parallel: d_hWidth = Diameter + 1 / 16.0; d_hLength = Diameter + 3 / 8.0; break; case BoltHoleType.OVS: d_hWidth = Diameter + 5 / 16.0; d_hLength = Diameter + 5 / 16.0; break; case BoltHoleType.LSL_Perpendicular: d_hWidth = Diameter + 1 / 16.0; d_hLength = Diameter * 2.5; break; case BoltHoleType.LSL_Parallel: d_hWidth = Diameter + 1 / 16.0; d_hLength = Diameter * 2.5; break; } } else { var closest_d_b = AllBoltsList.Aggregate((x, y) => Math.Abs(x.d_b - Diameter) < Math.Abs(y.d_b - Diameter) ? x : y); switch (HoleType) { case BoltHoleType.STD: d_hWidth = closest_d_b.STD; d_hLength = closest_d_b.STD; break; case BoltHoleType.SSL_Perpendicular: d_hWidth = closest_d_b.SSL_Width; d_hLength = closest_d_b.SSL_Length; break; case BoltHoleType.SSL_Parallel: d_hWidth = closest_d_b.SSL_Width; d_hLength = closest_d_b.SSL_Length; break; case BoltHoleType.OVS: d_hWidth = closest_d_b.OVS; d_hLength = closest_d_b.OVS; break; case BoltHoleType.LSL_Perpendicular: d_hWidth = closest_d_b.LSL_Width; d_hLength = closest_d_b.LSL_Length; break; case BoltHoleType.LSL_Parallel: d_hWidth = closest_d_b.LSL_Width; d_hLength = closest_d_b.LSL_Length; break; } } // Per AISC add if (IsTensionOrShearCalculation == true) { d_hWidth = d_hWidth + 1.0 / 16.0; d_hLength = d_hLength + 1.0 / 16.0; } BoltHoleSizeCalculated = true; }
/// <summary> /// Bearing Strength at Bolt Holes /// </summary> /// <param name="l_c">Clear distance, in the direction of the force, between the edge of the hole and the edge of the adjacent hole or edge of the material</param> /// <param name="d_b">Nominal bolt diameter</param> /// <param name="t">Thickness of connected material</param> /// <param name="F_y">Yield stress of base metal</param> /// <param name="F_u">Ultimate stress of base metal</param> /// <param name="BoltHoleType">Type of bolt hole</param> /// <param name="BoltHoleDeformationType">Identifies whetehr deformation at the bolt hole at service load is a design consideration</param> /// <param name="IsUnstiffenedHollowSection">Identifies whether this is a connection made using bolts that pass completely through an unstiffened box member or HSS</param> /// <returns></returns> public double GetBearingStrengthAtBoltHole(double l_c, double d_b, double t, double F_y, double F_u, BoltHoleType BoltHoleType, BoltHoleDeformationType BoltHoleDeformationType, bool IsUnstiffenedHollowSection = false) { double phiR_n; if (IsUnstiffenedHollowSection == false) { double phiR_n1; double phiR_n2; if (BoltHoleType == Kodestruct.Steel.AISC.SteelEntities.Bolts.BoltHoleType.LSL_Perpendicular) { //(J3-6c) phiR_n1 = 0.75 * (1.0 * l_c * t * F_u); phiR_n2 = 0.75 * (2.0 * d_b * t * F_u); } else { if (BoltHoleDeformationType == Kodestruct.Steel.AISC.BoltHoleDeformationType.ConsideredUnderServiceLoad) { //(J3-6a) phiR_n1 = 0.75 * (1.2 * l_c * t * F_u); phiR_n2 = 0.75 * (2.4 * d_b * t * F_u); } else { //(J3-6b) phiR_n1 = 0.75 * (1.5 * l_c * t * F_u); phiR_n2 = 0.75 * (3.0 * d_b * t * F_u); } } phiR_n = Math.Min(phiR_n1, phiR_n2); } else { phiR_n = 0.75 * (1.8 * d_b * t * F_y); } return(phiR_n); }
private void GetBoltHoleDimensions(BoltHoleType HoleType, bool IsTensionOrShearCalculation=true) { #region Read Table Data //<Diameter><Standard>< Oversize><Short-Slot Width><Short-Slot Length><Long-Slot Width><Long-Slot Length> var Tv11 = new { d_b = 0.0, STD = 0.0, OVS = 0.0, SSL_Width = 0.0, SSL_Length = 0.0, LSL_Width = 0.0, LSL_Length = 0.0,}; // sample var AllBoltsList = ListFactory.MakeList(Tv11); using (StringReader reader = new StringReader(Resources.AISC360_10TableJ3_3NominalHoleDimensions)) { string line; while ((line = reader.ReadLine()) != null) { string[] Vals = line.Split(','); if (Vals.Count() == 7) { double V0 = double.Parse(Vals[0], CultureInfo.InvariantCulture); double V1 = double.Parse(Vals[1], CultureInfo.InvariantCulture); double V2 = double.Parse(Vals[2], CultureInfo.InvariantCulture); double V3 = double.Parse(Vals[3], CultureInfo.InvariantCulture); double V4 = double.Parse(Vals[4], CultureInfo.InvariantCulture); double V5 = double.Parse(Vals[5], CultureInfo.InvariantCulture); double V6 = double.Parse(Vals[6], CultureInfo.InvariantCulture); AllBoltsList.Add(new { d_b = V0, STD = V1, OVS = V2, SSL_Width = V3, SSL_Length = V4, LSL_Width = V5, LSL_Length = V6, }); } } } #endregion if (Diameter >= 1 + 1.0 / 8.0) { switch (HoleType) { case BoltHoleType.STD: d_hWidth = Diameter + 1 / 16.0; d_hLength = Diameter + 1 / 16.0; break; case BoltHoleType.SSL_Perpendicular: d_hWidth = Diameter + 1 / 16.0; d_hLength = Diameter +3 / 8.0; break; case BoltHoleType.SSL_Parallel: d_hWidth = Diameter + 1 / 16.0; d_hLength = Diameter +3 / 8.0; break; case BoltHoleType.OVS: d_hWidth = Diameter + 5 / 16.0; d_hLength = Diameter +5 / 16.0; break; case BoltHoleType.LSL_Perpendicular: d_hWidth = Diameter + 1 / 16.0; d_hLength = Diameter*2.5; break; case BoltHoleType.LSL_Parallel: d_hWidth = Diameter + 1 / 16.0; d_hLength = Diameter*2.5; break; } } else { var closest_d_b = AllBoltsList.Aggregate((x, y) => Math.Abs(x.d_b - Diameter) < Math.Abs(y.d_b - Diameter) ? x : y); switch (HoleType) { case BoltHoleType.STD: d_hWidth = closest_d_b.STD; d_hLength = closest_d_b.STD; break; case BoltHoleType.SSL_Perpendicular: d_hWidth = closest_d_b.SSL_Width; d_hLength = closest_d_b.SSL_Length; break; case BoltHoleType.SSL_Parallel: d_hWidth = closest_d_b.SSL_Width; d_hLength = closest_d_b.SSL_Length; break; case BoltHoleType.OVS: d_hWidth = closest_d_b.OVS; d_hLength = closest_d_b.OVS; break; case BoltHoleType.LSL_Perpendicular: d_hWidth = closest_d_b.LSL_Width; d_hLength = closest_d_b.LSL_Length; break; case BoltHoleType.LSL_Parallel: d_hWidth = closest_d_b.LSL_Width; d_hLength = closest_d_b.LSL_Length; break; } } // Per AISC add if (IsTensionOrShearCalculation==true) { d_hWidth = d_hWidth+ 1.0/16.0; d_hLength = d_hLength + 1.0 / 16.0; } BoltHoleSizeCalculated = true; }
public IBoltSlipCritical GetSlipCriticalBolt(double Diameter, BoltThreadCase ThreadType, BoltFayingSurfaceClass SurfaceClass, BoltHoleType HoleType, BoltFillerCase FillerCase, double NumberOfSlipPlanes) { CalcLog log = new CalcLog(); int NPlanes = (int)NumberOfSlipPlanes; IBoltSlipCritical bsc = null; switch (MaterialId) { case "A325": bsc = new BoltSlipCriticalGroupA(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; case "A490": bsc = new BoltSlipCriticalGroupB(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; case "F1852": bsc = new BoltSlipCriticalGroupA(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; case "A354GradeBC": bsc = new BoltSlipCriticalGroupA(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; case "A354GradeBD": bsc = new BoltSlipCriticalGroupB(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; case "A449": bsc = new BoltSlipCriticalGroupA(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; default: throw new Exception("Unrecognized bolt material or specified material cannot be used for high-strength bolting. Check input"); } return bsc; }
public IBoltSlipCritical GetSlipCriticalBolt(double Diameter, BoltThreadCase ThreadType, BoltFayingSurfaceClass SurfaceClass, BoltHoleType HoleType, BoltFillerCase FillerCase, double NumberOfSlipPlanes) { CalcLog log = new CalcLog(); int NPlanes = (int)NumberOfSlipPlanes; IBoltSlipCritical bsc = null; switch (MaterialId) { case "A325": bsc = new BoltSlipCriticalGroupA(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; case "A490": bsc = new BoltSlipCriticalGroupB(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; case "F1852": bsc = new BoltSlipCriticalGroupA(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; case "A354GradeBC": bsc = new BoltSlipCriticalGroupA(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; case "A354GradeBD": bsc = new BoltSlipCriticalGroupB(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; case "A449": bsc = new BoltSlipCriticalGroupA(Diameter, ThreadType, SurfaceClass, HoleType, FillerCase, NPlanes, log); break; default: throw new Exception("Unrecognized bolt material or specified material cannot be used for high-strength bolting. Check input"); } return(bsc); }