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);
            }
        }
Ejemplo n.º 10
0
        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);
        }