/// <summary> /// /// </summary> /// <param name="Section">I-section (as shape)</param> /// <param name="SlabEffectiveWidth"></param> /// <param name="SlabSolidThickness">Concrete fill</param> /// <param name="SlabDeckThickness">Metal deck thickness</param> /// <param name="F_y">Yield stress of shape</param> /// <param name="f_cPrime">Concrete strength</param> /// <param name="N_studs">Total number of studs (between point of zero and maximum moment)</param> /// <param name="Q_n">Stud strength (in shear)</param> /// <param name="N_o">Number of connectors over opening</param> /// <param name="a_o">Length of opening</param> /// <param name="h_o">Height of opening</param> /// <param name="e">Eccentriciy of opening with repect to neutral axis</param> /// <param name="t_r">Thickness of reinforcing plate</param> /// <param name="b_r">Width of reinforcing plate</param> /// <param name="DeckAtBeamCondition">Orientation of deck over beam </param> /// <param name="w_rMin">Minimum deck rib width (used in case deck is parallel to beam)</param> /// <param name="s_r">Deck rib spacing (used in case deck is parallel to beam)</param> /// <param name="IsSingleSideReinforcement"> Indicates if reinforcement is placed on one side of the web</param> /// <param name="PlateOffset">Reinforcement plate offset with respect to edge of web opening</param> public CompositeIBeamWebOpening(ISectionI Section, double SlabEffectiveWidth, double SlabSolidThickness, double SlabDeckThickness, double F_y, double f_cPrime, double N_studs, double Q_n, double N_o, double a_o, double h_o, double e, double t_r, double b_r, DeckAtBeamCondition DeckAtBeamCondition, double w_rMin, double s_r, bool IsSingleSideReinforcement = false, double PlateOffset=0) : base(Section, a_o, h_o, e, F_y, t_r, b_r, IsSingleSideReinforcement, PlateOffset) { if (IsSingleSideReinforcement==false) { A_r = t_r * b_r; } else { A_r = 2.0* t_r * b_r; } this.N_o = N_o; this.N_studs = N_studs; this.Q_n = Q_n; SumQ_n = N_studs * Q_n; this.f_cPrime = f_cPrime; this.SlabEffectiveWidth=SlabEffectiveWidth; this.SlabSolidThickness=SlabSolidThickness; this.SlabDeckThickness = SlabDeckThickness; this.DeckAtBeamCondition = DeckAtBeamCondition; this.w_rMin = w_rMin; this.s_r = s_r; this.ValuesNeedRecalculation = true; this.ValuesCalculated = false; }
double Get_d_l(double P_cl, DeckAtBeamCondition DeckAtBeamCondition, double w_rMin, double s_r) { double d_l; double t_s; double b_e = SlabEffectiveWidth; switch (DeckAtBeamCondition) { case DeckAtBeamCondition.NoDeck: d_l = P_cl / (1.7 * f_cPrime * b_e); //(3-18a) break; case DeckAtBeamCondition.Parallel: double b_em = b_e / s_r * w_rMin; d_l = P_cl / (1.7 * f_cPrime * b_em); //(3-18a) break; case DeckAtBeamCondition.Perpendicular: t_s = SlabDeckThickness + SlabSolidThickness; d_l = t_s - SlabSolidThickness + P_cl / (1.7 * f_cPrime * b_e); //(3-18b) break; default: t_s = SlabDeckThickness + SlabSolidThickness; d_l = t_s - SlabSolidThickness + P_cl / (1.7 * f_cPrime * b_e); //(3-18b) break; } return(d_l); }
public double GetNominalShearStrength(DeckAtBeamCondition HeadedAnchorDeckCondition, HeadedAnchorWeldCase HeadedAnchorWeldCase, double N_saRib, double e_mid_ht, double h_r, double w_r, double d_sa, double fc_prime, double F_u, double w_c) { double R_g = GetGroupFactorR_g(HeadedAnchorDeckCondition, HeadedAnchorWeldCase, N_saRib, h_r, w_r); double R_p = GetPlacementFactorR_p(HeadedAnchorDeckCondition, HeadedAnchorWeldCase, e_mid_ht); return(GetNominalShearStrength(d_sa, R_g, R_p, fc_prime, F_u, w_c)); }
public double GetEffectiveJoistWidth(double fc_prime, double w_c, double h_solid, double h_rib,double w_r,double s_r, DeckAtBeamCondition DeckAtBeamCondition,double L_j, double I_j,double S_j, double L_floor, BeamFloorLocationType BeamLocation) { double D_e = this.Get_d_e(h_solid, h_rib, w_r, s_r); double n = Get_n(fc_prime, w_c); double D_j = GetDistributedJoistMomentOfInertia(I_j, S_j); double D_s = GetDistributedSlabMomentOfInertia(n, D_e); double B_j = GetEffectiveJoistWidth(D_s, D_j, L_j, BeamLocation, L_floor); return B_j; }
public double GetEffectiveJoistWidth(double fc_prime, double w_c, double h_solid, double h_rib, double w_r, double s_r, DeckAtBeamCondition DeckAtBeamCondition, double L_j, double I_j, double S_j, double L_floor, BeamFloorLocationType BeamLocation) { double D_e = this.Get_d_e(h_solid, h_rib, w_r, s_r); double n = Get_n(fc_prime, w_c); double D_j = GetDistributedJoistMomentOfInertia(I_j, S_j); double D_s = GetDistributedSlabMomentOfInertia(n, D_e); double B_j = GetEffectiveJoistWidth(D_s, D_j, L_j, BeamLocation, L_floor); return(B_j); }
public double GetPlacementFactorR_p(DeckAtBeamCondition HeadedAnchorDeckCondition, HeadedAnchorWeldCase HeadedAnchorWeldCase, double e_mid_ht) { double R_p; if (HeadedAnchorWeldCase == AISC.HeadedAnchorWeldCase.WeldedDirectly) { //(1a) steel headed stud anchors welded directly to the steel shape; R_p = 0.75; } else { if (HeadedAnchorDeckCondition == AISC.DeckAtBeamCondition.Parallel) { //(1c) steel headed stud anchors welded through steel deck, or steel sheet //used as girder filler material, and embedded in a composite slab with //the deck oriented parallel to the beam R_p = 0.75; } else if (HeadedAnchorDeckCondition == AISC.DeckAtBeamCondition.Perpendicular) { if (e_mid_ht >= 2) { //(1b) steel headed stud anchors welded in a composite slab with the deck //oriented perpendicular to the beam and emid-ht ≥ 2 in.; R_p = 0.75; } else { //(3) for steel headed stud anchors welded in a composite slab with deck //oriented perpendicular to the beam and emid-ht < 2 in R_p = 0.6; } } else //No decking { R_p = 0.75; } } return(R_p); }
public double GetPlacementFactorR_p(DeckAtBeamCondition HeadedAnchorDeckCondition,HeadedAnchorWeldCase HeadedAnchorWeldCase,double e_mid_ht) { double R_p; if (HeadedAnchorWeldCase == AISC.HeadedAnchorWeldCase.WeldedDirectly) { //(1a) steel headed stud anchors welded directly to the steel shape; R_p = 0.75; } else { if (HeadedAnchorDeckCondition == AISC.DeckAtBeamCondition.Parallel) { //(1c) steel headed stud anchors welded through steel deck, or steel sheet //used as girder filler material, and embedded in a composite slab with //the deck oriented parallel to the beam R_p = 0.75; } else if (HeadedAnchorDeckCondition == AISC.DeckAtBeamCondition.Perpendicular) { if (e_mid_ht>=2) { //(1b) steel headed stud anchors welded in a composite slab with the deck //oriented perpendicular to the beam and emid-ht ≥ 2 in.; R_p = 0.75; } else { //(3) for steel headed stud anchors welded in a composite slab with deck //oriented perpendicular to the beam and emid-ht < 2 in R_p = 0.6; } } else //No decking { R_p = 0.75; } } return R_p; }
double Get_d_l(double P_cl, DeckAtBeamCondition DeckAtBeamCondition, double w_rMin, double s_r) { double d_l; double t_s; double b_e = SlabEffectiveWidth; switch (DeckAtBeamCondition) { case DeckAtBeamCondition.NoDeck: d_l = P_cl / (1.7 * f_cPrime * b_e); //(3-18a) break; case DeckAtBeamCondition.Parallel: double b_em = b_e / s_r * w_rMin; d_l = P_cl / (1.7 * f_cPrime * b_em); //(3-18a) break; case DeckAtBeamCondition.Perpendicular: t_s = SlabDeckThickness + SlabSolidThickness; d_l = t_s - SlabSolidThickness + P_cl / (1.7 * f_cPrime * b_e); //(3-18b) break; default: t_s = SlabDeckThickness + SlabSolidThickness; d_l = t_s - SlabSolidThickness + P_cl / (1.7 * f_cPrime * b_e); //(3-18b) break; } return d_l; }
public double GetGroupFactorR_g(DeckAtBeamCondition HeadedAnchorDeckCondition, HeadedAnchorWeldCase HeadedAnchorWeldCase, double N_saRib, double h_r, double w_r) { double R_g; if (HeadedAnchorWeldCase == AISC.HeadedAnchorWeldCase.WeldedDirectly) { //(1b) any number of steel headed stud anchors welded in a row directly to the steel shape R_g = 1.0; } else { double w_rTo_h_r = w_r / h_r; if (HeadedAnchorDeckCondition == AISC.DeckAtBeamCondition.Parallel) { if (w_r / h_r >= 1.5) { //(1c) // any number of steel headed stud anchors welded in a row through // steel deck with the deck oriented parallel to the steel shape and the // ratio of the average rib width to rib depth = 1.5 R_g = 1.0; } else { if (N_saRib == 1) { //(2b) one steel headed stud anchor welded through steel deck with the deck //oriented parallel to the steel shape and the ratio of the average rib //width to rib depth < 1.5 R_g = 0.85; } else { R_g = 0.7; // this value is assumed as the spec does not explcitly cover the case } } } else if (HeadedAnchorDeckCondition == AISC.DeckAtBeamCondition.Perpendicular) { if (N_saRib == 1) { //(1a) one steel headed stud anchor welded in a steel deck rib with the deck //oriented perpendicular to the steel shape; R_g = 1.0; } else if (N_saRib == 2) { //(2a) two steel headed stud anchors welded in a steel deck rib with the deck //oriented perpendicular to the steel shape; R_g = 0.85; } else { //(3) for three or more steel headed stud anchors welded in a steel deck rib //with the deck oriented perpendicular to the steel shape R_g = 0.7; } } else //No deck { R_g = 1.0; } } return(R_g); }
/// <summary> /// /// </summary> /// <param name="Section">I-section (as shape)</param> /// <param name="SlabEffectiveWidth"></param> /// <param name="SlabSolidThickness">Concrete fill</param> /// <param name="SlabDeckThickness">Metal deck thickness</param> /// <param name="F_y">Yield stress of shape</param> /// <param name="f_cPrime">Concrete strength</param> /// <param name="N_studs">Total number of studs (between point of zero and maximum moment)</param> /// <param name="Q_n">Stud strength (in shear)</param> /// <param name="N_o">Number of connectors over opening</param> /// <param name="a_o">Length of opening</param> /// <param name="h_o">Height of opening</param> /// <param name="e">Eccentriciy of opening with repect to neutral axis</param> /// <param name="t_r">Thickness of reinforcing plate</param> /// <param name="b_r">Width of reinforcing plate</param> /// <param name="DeckAtBeamCondition">Orientation of deck over beam </param> /// <param name="w_rMin">Minimum deck rib width (used in case deck is parallel to beam)</param> /// <param name="s_r">Deck rib spacing (used in case deck is parallel to beam)</param> /// <param name="IsSingleSideReinforcement"> Indicates if reinforcement is placed on one side of the web</param> /// <param name="PlateOffset">Reinforcement plate offset with respect to edge of web opening</param> public CompositeIBeamWebOpening(ISectionI Section, double SlabEffectiveWidth, double SlabSolidThickness, double SlabDeckThickness, double F_y, double f_cPrime, double N_studs, double Q_n, double N_o, double a_o, double h_o, double e, double t_r, double b_r, DeckAtBeamCondition DeckAtBeamCondition, double w_rMin, double s_r, bool IsSingleSideReinforcement = false, double PlateOffset = 0, double M_u = 0, double V_u = 0) : base(Section, a_o, h_o, e, F_y, t_r, b_r, IsSingleSideReinforcement, PlateOffset, M_u, V_u) { if (IsSingleSideReinforcement == true) { A_r = t_r * b_r; double A_f_top = Section.b_fTop * Section.t_fTop; double A_f_bot = Section.b_fBot * Section.t_fBot; if (A_r > A_f_top / 3.0 || A_r > A_f_bot / 3.0) { throw new Exception("Reinforcement area cannot exceed A_f/3"); } } else { A_r = 2.0 * t_r * b_r; } this.N_o = N_o; this.N_studs = N_studs; this.Q_n = Q_n; SumQ_n = N_studs * Q_n; this.f_cPrime = f_cPrime; this.SlabEffectiveWidth = SlabEffectiveWidth; this.SlabSolidThickness = SlabSolidThickness; this.SlabDeckThickness = SlabDeckThickness; this.DeckAtBeamCondition = DeckAtBeamCondition; this.w_rMin = w_rMin; this.s_r = s_r; this.ValuesNeedRecalculation = true; this.ValuesCalculated = false; }
/// <summary> /// /// </summary> /// <param name="Section">I-section (as shape)</param> /// <param name="SlabEffectiveWidth"></param> /// <param name="SlabSolidThickness">Concrete fill</param> /// <param name="SlabDeckThickness">Metal deck thickness</param> /// <param name="F_y">Yield stress of shape</param> /// <param name="f_cPrime">Concrete strength</param> /// <param name="N_studs">Total number of studs (between point of zero and maximum moment)</param> /// <param name="Q_n">Stud strength (in shear)</param> /// <param name="N_o">Number of connectors over opening</param> /// <param name="a_o">Length of opening</param> /// <param name="h_o">Height of opening</param> /// <param name="e">Eccentriciy of opening with repect to neutral axis</param> /// <param name="t_r">Thickness of reinforcing plate</param> /// <param name="b_r">Width of reinforcing plate</param> /// <param name="DeckAtBeamCondition">Orientation of deck over beam </param> /// <param name="w_rMin">Minimum deck rib width (used in case deck is parallel to beam)</param> /// <param name="s_r">Deck rib spacing (used in case deck is parallel to beam)</param> /// <param name="IsSingleSideReinforcement"> Indicates if reinforcement is placed on one side of the web</param> /// <param name="PlateOffset">Reinforcement plate offset with respect to edge of web opening</param> public CompositeIBeamWebOpening(ISectionI Section, double SlabEffectiveWidth, double SlabSolidThickness, double SlabDeckThickness, double F_y, double f_cPrime, double N_studs, double Q_n, double N_o, double a_o, double h_o, double e, double t_r, double b_r, DeckAtBeamCondition DeckAtBeamCondition, double w_rMin, double s_r, bool IsSingleSideReinforcement = false, double PlateOffset = 0) : base(Section, a_o, h_o, e, F_y, t_r, b_r, IsSingleSideReinforcement, PlateOffset) { if (IsSingleSideReinforcement == false) { A_r = t_r * b_r; } else { A_r = 2.0 * t_r * b_r; } this.N_o = N_o; this.N_studs = N_studs; this.Q_n = Q_n; SumQ_n = N_studs * Q_n; this.f_cPrime = f_cPrime; this.SlabEffectiveWidth = SlabEffectiveWidth; this.SlabSolidThickness = SlabSolidThickness; this.SlabDeckThickness = SlabDeckThickness; this.DeckAtBeamCondition = DeckAtBeamCondition; this.w_rMin = w_rMin; this.s_r = s_r; this.ValuesNeedRecalculation = true; this.ValuesCalculated = false; }
public double GetGroupFactorR_g(DeckAtBeamCondition HeadedAnchorDeckCondition,HeadedAnchorWeldCase HeadedAnchorWeldCase, double N_saRib,double h_r,double w_r) { double R_g; if (HeadedAnchorWeldCase == AISC.HeadedAnchorWeldCase.WeldedDirectly) { //(1b) any number of steel headed stud anchors welded in a row directly to the steel shape R_g = 1.0; } else { double w_rTo_h_r = w_r / h_r; if (HeadedAnchorDeckCondition == AISC.DeckAtBeamCondition.Parallel) { if (w_r / h_r>=1.5) { //(1c) // any number of steel headed stud anchors welded in a row through // steel deck with the deck oriented parallel to the steel shape and the // ratio of the average rib width to rib depth ≥ 1.5 R_g = 1.0; } else { if (N_saRib == 1) { //(2b) one steel headed stud anchor welded through steel deck with the deck //oriented parallel to the steel shape and the ratio of the average rib //width to rib depth < 1.5 R_g = 0.85; } else { R_g = 0.7; // this value is assumed as the spec does not explcitly cover the case } } } else if (HeadedAnchorDeckCondition == AISC.DeckAtBeamCondition.Perpendicular) { if (N_saRib ==1) { //(1a) one steel headed stud anchor welded in a steel deck rib with the deck //oriented perpendicular to the steel shape; R_g = 1.0; } else if (N_saRib ==2) { //(2a) two steel headed stud anchors welded in a steel deck rib with the deck //oriented perpendicular to the steel shape; R_g = 0.85; } else { //(3) for three or more steel headed stud anchors welded in a steel deck rib //with the deck oriented perpendicular to the steel shape R_g = 0.7; } } else //No deck { R_g = 1.0; } } return R_g; }
public double GetNominalShearStrength(DeckAtBeamCondition HeadedAnchorDeckCondition,HeadedAnchorWeldCase HeadedAnchorWeldCase, double N_saRib,double e_mid_ht,double h_r,double w_r,double d_sa, double fc_prime, double F_u, double w_c) { double R_g = GetGroupFactorR_g(HeadedAnchorDeckCondition, HeadedAnchorWeldCase, N_saRib, h_r, w_r); double R_p = GetPlacementFactorR_p(HeadedAnchorDeckCondition, HeadedAnchorWeldCase,e_mid_ht); return GetNominalShearStrength(d_sa, R_g, R_p, fc_prime, F_u,w_c); }