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

        }
Esempio n. 3
0
 /// <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;
 }
Esempio n. 5
0
        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);
        }
Esempio n. 7
0
        /// <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);
            }
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
 public ConcreteCompressionStrengthResult(double a, double phiM_n,
                                          FlexuralFailureModeClassification FlexuralFailureModeClassification,
                                          double epsilon_t, double epsilon_ty)
     : base(a, phiM_n, FlexuralFailureModeClassification, epsilon_t, epsilon_ty)
 {
 }