public ConcreteCompressionStrengthResult(double a, double phiM_n, FlexuralFailureModeClassification FlexuralFailureModeClassification, double epsilon_t, double epsilon_ty) : base(a, phiM_n, FlexuralFailureModeClassification, epsilon_t, epsilon_ty) { }
/// <summary> /// Strength reduction factor per Table 21.2.2 /// </summary> /// <param name="failureMode">Compression, tension-controlled or transitional</param> /// <param name="ConfinementReinforcementType"></param> /// <param name="epsilon_t">Actual calculated tensile strain</param> /// <param name="epsilon_ty">Yield strain</param> /// <returns></returns> public double Get_phiFlexureAndAxial(FlexuralFailureModeClassification failureMode, ConfinementReinforcementType ConfinementReinforcementType, double epsilon_t, double epsilon_ty) { epsilon_t = Math.Abs(epsilon_t); switch (failureMode) { case FlexuralFailureModeClassification.CompressionControlled: if (ConfinementReinforcementType == ACI.ConfinementReinforcementType.Spiral) { return 0.75; } else { return 0.65; } break; case FlexuralFailureModeClassification.Transition: if (ConfinementReinforcementType == ACI.ConfinementReinforcementType.Spiral) { return 0.75 + 0.15 * (epsilon_t - epsilon_ty) / (0.005 - epsilon_ty); } else { return 0.65 + 0.25 * (epsilon_t - epsilon_ty) / (0.005 - epsilon_ty); } break; case FlexuralFailureModeClassification.TensionControlled: return 0.9; break; default: return 0.65; break; } }
/// <summary> /// /// </summary> /// <param name="a">Depth of compression block</param> /// <param name="phiM_n" Moment strength</param> /// <param name="FlexuralFailureModeClassification"> Identifies if section is tension-controlled, transitional or compression-controlled</param> /// <param name="epsilon_t">Controlling tensile strain</param> /// <param name="epsilon_t">Controlling bar tensile yield strain</param> public ConcreteFlexuralStrengthResult(double a, double phiM_n, FlexuralFailureModeClassification FlexuralFailureModeClassification, double epsilon_t, double epsilon_ty) { this.a = a; this.phiM_n = phiM_n; this.FlexuralFailureModeClassification = FlexuralFailureModeClassification; this.epsilon_t = epsilon_t; this.epsilon_ty = epsilon_ty; }
/// <summary> /// /// </summary> /// <param name="a">Depth of compression block</param> /// <param name="phiM_n" Moment strength</param> /// <param name="FlexuralFailureModeClassification"> Identifies if section is tension-controlled, transitional or compression-controlled</param> /// <param name="epsilon_t">Controlling tensile strain</param> /// <param name="epsilon_t">Controlling bar tensile yield strain</param> public ConcreteFlexuralStrengthResult(double a, double phiM_n, FlexuralFailureModeClassification FlexuralFailureModeClassification, double epsilon_t, double epsilon_ty) { this.a =a ; this.phiM_n =phiM_n ; this.FlexuralFailureModeClassification = FlexuralFailureModeClassification; this.epsilon_t = epsilon_t; this.epsilon_ty = epsilon_ty; }
public ConcreteFlexuralStrengthResult GetDesignFlexuralStrength(FlexuralCompressionFiberPosition FlexuralCompressionFiberPosition) { IStrainCompatibilityAnalysisResult nominalResult = this.GetNominalFlexuralCapacity(FlexuralCompressionFiberPosition); ConcreteFlexuralStrengthResult result = new ConcreteFlexuralStrengthResult(nominalResult, FlexuralCompressionFiberPosition, this.Section.Material.beta1); StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); FlexuralFailureModeClassification failureMode = f.GetFlexuralFailureMode(result.epsilon_t, result.epsilon_ty); double phi = f.Get_phiFlexureAndAxial(failureMode, ConfinementReinforcementType, result.epsilon_t, result.epsilon_ty); double phiM_n = phi * nominalResult.Moment; result.phiM_n = phiM_n; result.FlexuralFailureModeClassification = failureMode; return(result); }
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); }
/// <summary> /// Strength reduction factor per Table 21.2.2 /// </summary> /// <param name="failureMode">Compression, tension-controlled or transitional</param> /// <param name="ConfinementReinforcementType"></param> /// <param name="epsilon_t">Actual calculated tensile strain</param> /// <param name="epsilon_ty">Yield strain</param> /// <returns></returns> public double Get_phiFlexureAndAxial(FlexuralFailureModeClassification failureMode, ConfinementReinforcementType ConfinementReinforcementType, double epsilon_t, double epsilon_ty) { if (epsilon_t >= 0) { return(0.65); } else { epsilon_t = Math.Abs(epsilon_t); switch (failureMode) { case FlexuralFailureModeClassification.CompressionControlled: if (ConfinementReinforcementType == ACI.ConfinementReinforcementType.Spiral) { return(0.75); } else { return(0.65); } break; case FlexuralFailureModeClassification.Transition: if (ConfinementReinforcementType == ACI.ConfinementReinforcementType.Spiral) { return(0.75 + 0.15 * (epsilon_t - epsilon_ty) / (0.005 - epsilon_ty)); } else { return(0.65 + 0.25 * (epsilon_t - epsilon_ty) / (0.005 - epsilon_ty)); } break; case FlexuralFailureModeClassification.TensionControlled: return(0.9); break; default: return(0.65); break; } } }
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 ConcreteCompressionStrengthResult GetDesignMomentWithCompressionStrength(double P_u, FlexuralCompressionFiberPosition FlexuralCompressionFiberPosition, ConfinementReinforcementType ConfinementReinforcementType) { double P_o = GetMaximumForce(); StrengthReductionFactorFactory ff = new StrengthReductionFactorFactory(); double phiAxial = ff.Get_phiFlexureAndAxial(FlexuralFailureModeClassification.CompressionControlled, ConfinementReinforcementType, 0, 0); double phiP_n = phiAxial * P_o; if (P_u > phiP_n) { throw new Exception("Axial forces exceeds maximum axial force."); } IStrainCompatibilityAnalysisResult nominalResult = this.GetNominalMomentResult(P_u, 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 phi = f.Get_phiFlexureAndAxial(failureMode, ConfinementReinforcementType, result.epsilon_t, result.epsilon_ty); double phiM_n = phi * nominalResult.Moment; result.phiM_n = phiM_n; result.FlexuralFailureModeClassification = failureMode; return(result); }