public double GetRequiredShearReinforcementArea(double phiV_s) { double f_yt = rebarMaterial.YieldStress; StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); double phi = f.Get_phi_ShearReinforced(); double A_v = ((phiV_s * s) / (f_yt * phi * d)); return(A_v); }
public double GetSteelShearStrength() { double f_yt = rebarMaterial.YieldStress; double V_s = ((A_v * f_yt * d) / (s)); StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); double phi = f.Get_phi_ShearReinforced(); return(phi * V_s); }
public double GetMaximumShearStrength(double phiV_c) { StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); double phi = f.Get_phi_ShearReinforced(); //Section 22.5.1.2 double phiV_nMax = phiV_c + phi * 8 * Section.Material.Sqrt_f_c_prime * b_w * d; return(phiV_nMax); }
FlexuralCompressionFiberPosition FlexuralCompressionFiberPosition; //stored value for iteration private double phiFactorDifferenceCalculation(double phi) { double P_nIter = phiP_n / phi; IStrainCompatibilityAnalysisResult nominalResult = this.GetNominalMomentResult(P_nIter, FlexuralCompressionFiberPosition); ConcreteCompressionStrengthResult result = new ConcreteCompressionStrengthResult(nominalResult, FlexuralCompressionFiberPosition, this.Section.Material.beta1); StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); FlexuralFailureModeClassification failureMode = f.GetFlexuralFailureMode(result.epsilon_t, result.epsilon_ty); double phiActual = f.Get_phiFlexureAndAxial(failureMode, ConfinementReinforcementType, result.epsilon_t, result.epsilon_ty); return(phi - phiActual); }
public double GetRequiredTorsionTransverseReinforcementArea(double T_u, double s, double f_yt, double theta = 45.0) { double A_o = 0.85 * Shape.GetA_oh(); double thetaRad = theta.ToRadians(); StrengthReductionFactorFactory srf = new StrengthReductionFactorFactory(); double phi = srf.Get_phi_Torsion(); //(22.7.6.1a) double A_tReq = ((T_u * s) / (phi * 2.0 * A_o * f_yt)) * 1.0 / (Math.Tan(thetaRad)); return(A_tReq); }
public double GetRequiredTorsionLongitudinalReinforcementArea(double T_u, double f_y, double theta = 45.0) { double A_o = 0.85 * Shape.GetA_oh(); double p_h = Shape.Get_p_h(); double thetaRad = theta.ToRadians(); StrengthReductionFactorFactory srf = new StrengthReductionFactorFactory(); double phi = srf.Get_phi_Torsion(); //(22.7.6.1b) double A_lReq = ((T_u * p_h) / (phi * 2 * A_o * f_y)) * 1.0 / (Math.Tan(thetaRad)); return(A_lReq); }
public double GetMaximumForceInteractionRatio(double V_u, double T_u, double phiV_c, double b, double d) { StrengthReductionFactorFactory srf = new StrengthReductionFactorFactory(); double phi = srf.Get_phi_Torsion(); double phi_shear = srf.Get_phi_ShearReinforced(); double V_c = phiV_c / phi_shear; //(22.7.7.1a) double Sqrt_f_c = Shape.Material.Sqrt_f_c_prime; double p_h = Shape.Get_p_h(); double A_oh = Shape.GetA_oh(); double IR1 = Math.Sqrt(Math.Pow((((V_u) / (b * d))), 2) + Math.Pow((((T_u * p_h)) / (1.7 * Math.Pow(A_oh, 2))), 2)); double IR2 = phi * ((V_c) / (b * d) + 8 * Sqrt_f_c); double IR = IR1 / IR2; return(IR); }
public ConcreteCompressionStrengthResult GetDesignMomentWithCompressionStrength(double phiP_n, FlexuralCompressionFiberPosition FlexuralCompressionFiberPosition, bool CapAxialForceAtMaximum = true) { this.phiP_n = phiP_n; //store value for iteration this.FlexuralCompressionFiberPosition = FlexuralCompressionFiberPosition; double P_o = GetMaximumForce(); StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); double phiAxial = f.Get_phiFlexureAndAxial(FlexuralFailureModeClassification.CompressionControlled, ConfinementReinforcementType, 0, 0); double phiP_nMax = phiAxial * P_o; if (phiP_n > phiP_nMax) { if (CapAxialForceAtMaximum == false) { throw new Exception("Axial forces exceeds maximum axial force."); } else { phiP_n = phiP_n; } } //Estimate resistance factor to adjust from phiP_n to P_n double phiMin = 0.65; double phiMax = 0.9; double ConvergenceTolerance = 0.0001; double targetPhiFactorDifference = 0.0; //Find P_n by guessing a phi-factor and calculating the result double phiIterated = RootFinding.Brent(new FunctionOfOneVariable(phiFactorDifferenceCalculation), phiMax, phiMin, ConvergenceTolerance, targetPhiFactorDifference); double P_nActual = phiP_n / phiIterated; //Calculate final results using the estimated value of phi IStrainCompatibilityAnalysisResult nominalResult = this.GetNominalMomentResult(P_nActual, FlexuralCompressionFiberPosition); ConcreteCompressionStrengthResult result = new ConcreteCompressionStrengthResult(nominalResult, FlexuralCompressionFiberPosition, this.Section.Material.beta1); FlexuralFailureModeClassification failureMode = f.GetFlexuralFailureMode(result.epsilon_t, result.epsilon_ty); double phiFinal = f.Get_phiFlexureAndAxial(failureMode, ConfinementReinforcementType, result.epsilon_t, result.epsilon_ty); double phiM_n = phiFinal * nominalResult.Moment; result.phiM_n = phiM_n; result.FlexuralFailureModeClassification = failureMode; return(result); }
public List <PMPair> GetPMPairs(FlexuralCompressionFiberPosition CompressionFiberPosition, int NumberOfSteps = 50, bool IncludeResistanceFactor = true) { List <PMPair> Pairs = new List <PMPair>(); List <SectionAnalysisResult> SectionResults = GetInteractionResults(CompressionFiberPosition, NumberOfSteps); foreach (var thisDistibutionResult in SectionResults) { IStrainCompatibilityAnalysisResult nominalResult = GetResult(thisDistibutionResult); ConcreteCompressionStrengthResult result = new ConcreteCompressionStrengthResult(nominalResult, CompressionFiberPosition, this.Section.Material.beta1); StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); FlexuralFailureModeClassification failureMode = f.GetFlexuralFailureMode(result.epsilon_t, result.epsilon_ty); double phi; if (IncludeResistanceFactor == true) { phi = f.Get_phiFlexureAndAxial(failureMode, ConfinementReinforcementType, result.epsilon_t, result.epsilon_ty); } else { phi = 1.0; } double SignFactor = 1.0; //if (CompressionFiberPosition == FlexuralCompressionFiberPosition.Bottom) //{ // SignFactor = -1.0; //} double P = thisDistibutionResult.AxialForce * phi; double M = thisDistibutionResult.Moment * phi * SignFactor; PMPair thisPair = new PMPair(P, M); Pairs.Add(thisPair); } if (IncludeResistanceFactor == true) { List <PMPair> TruncatedPairs = TruncateInteractionDiagram(Pairs, CompressionFiberPosition); return(TruncatedPairs); } else { return(Pairs); } }
public double GetUpperLimitShearStrength(double phiV_c) { double h = Section.SliceableShape.YMax - Section.SliceableShape.YMin; this.A_g = Section.SliceableShape.A; this.N_u = N_u; this.rho_w = rho_w; double V_max; double f_c = Section.Material.SpecifiedCompressiveStrength; double lambda = Section.Material.lambda; StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); double phi = f.Get_phi_ShearReinforced(); V_max = phiV_c + phi * (10.0 * lambda * Section.Material.Sqrt_f_c_prime * b_w * d); // (22.5.1.2) return(V_max); }
public double GetConcreteShearStrength(double N_u, double rho_w, double M_u, double V_u) { double h = Section.SliceableShape.YMax - Section.SliceableShape.YMin; this.A_g = Section.SliceableShape.A; this.N_u = N_u; this.rho_w = rho_w; double V_c; double f_c = Section.Material.SpecifiedCompressiveStrength; double lambda = Section.Material.lambda; if (N_u == 0) { if (rho_w == 0 || M_u == 0 || V_u == 0) { V_c = 2 * lambda * Section.Material.Sqrt_f_c_prime * b_w * d; // (22.5.5.1) } else { //use detailed formula //Table 22.5.5.1 double V_c_a = (1.9 * lambda * Section.Material.Sqrt_f_c_prime + 2500.0 * rho_w * ((V_u * d) / (M_u))) * b_w * d; double V_c_b = (1.9 * lambda * Section.Material.Sqrt_f_c_prime + 2500.0 * rho_w) * b_w * d; double V_c_c = 3.5 * lambda * Section.Material.Sqrt_f_c_prime * b_w * d; List <double> V_cList = new List <double>() { V_c_a, V_c_b, V_c_c }; V_c = V_cList.Min(); } } else { if (N_u > 0) //compression { if (rho_w == 0 || h == 0) { //Use simplified formula V_c = 2.0 * (1 + ((N_u) / (2000.0 * A_g))) * lambda * Section.Material.Sqrt_f_c_prime * b_w * d; } else { //Table 22.5.6.1 double V_c_b = 3.5 * lambda * Section.Material.Sqrt_f_c_prime * b_w * d * Math.Sqrt(1 + ((N_u) / (500.0 * A_g))); if (M_u - N_u * (((4.0 * h - d) / (8.0))) <= 0) { V_c = V_c_b; } else { double V_c_a = (1.9 * lambda * Section.Material.Sqrt_f_c_prime + 2500.0 * rho_w * ((V_u * d) / (M_u - N_u * (((4.0 * h - d) / (8.0)))))) * b_w * d; V_c = Math.Min(V_c_a, V_c_b); } } } else //tension { V_c = 2.0 * (1.0 + ((N_u) / (500.0 * A_g))) * lambda * Section.Material.Sqrt_f_c_prime * b_w * d; //(22.5.7.1) } } V_c = V_c < 0 ? 0 : V_c; StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); double phi = f.Get_phi_ShearReinforced(); return(phi * V_c); }