public static Dictionary <string, object> UnbalancedMomentFactors(PunchingShearPerimeter PunchingShearPerimeter)
        {
            //Default values
            double gamma_vx = 0;
            double gamma_vy = 0;


            //Calculation logic:

            PunchingShearPerimeter p = PunchingShearPerimeter;

            PunchingPerimeterConfiguration Configuration;
            bool IsValidInputString = Enum.TryParse(p.Configuration, true, out Configuration);

            if (IsValidInputString == false)
            {
                throw new Exception("Failed to convert string. Examples of acceptable values are Interior, EdgeLeft, CornerLeftTop. Please check input");
            }
            ConcreteSectionTwoWayShear sec = new ConcreteSectionTwoWayShear(p.PerimeterData, p.d, p.c_x, p.c_y, Configuration);

            gamma_vx = sec.Get_gamma_vx();
            gamma_vy = sec.Get_gamma_vy();

            return(new Dictionary <string, object>
            {
                { "gamma_vx", gamma_vx }
                , { "gamma_vy", gamma_vy }
            });
        }
        public static Dictionary <string, object> TwoWayShearStressFromConcentricLoad(double V_u, PunchingShearPerimeter PunchingShearPerimeter)
        {
            //Default values
            double v_u = 0;


            //Calculation logic:
            PunchingShearPerimeter p = PunchingShearPerimeter;

            PunchingPerimeterConfiguration Configuration;
            bool IsValidInputString = Enum.TryParse(p.Configuration, true, out Configuration);

            if (IsValidInputString == false)
            {
                throw new Exception("Failed to convert string. Examples of acceptable values are Interior, EdgeLeft, CornerLeftTop. Please check input");
            }


            ConcreteSectionTwoWayShear sec = new ConcreteSectionTwoWayShear(p.PerimeterData, p.d, p.c_x, p.c_y, Configuration);

            v_u = sec.GetConcentricShearStress(V_u);

            return(new Dictionary <string, object>
            {
                { "v_u", v_u }
            });
        }
示例#3
0
        public static Dictionary <string, object> TwoWayShearStressFromMomentAndShear(double M_ux, double M_uy, double V_u, PunchingShearPerimeter PunchingShearPerimeter, string PunchingPerimeterConfiguration,
                                                                                      double gamma_vx, double gamma_vy, bool AllowShearRedistribution = false)
        {
            //Default values
            double v_u_Max = 0;
            double v_u_Min = 0;



            //Calculation logic:
            PunchingShearPerimeter p = PunchingShearPerimeter;

            PunchingPerimeterConfiguration Configuration;
            bool IsValidInputString = Enum.TryParse(p.Configuration, true, out Configuration);

            if (IsValidInputString == false)
            {
                throw new Exception("Failed to convert string. Examples of acceptable values are Interior, EdgeLeft, CornerLeftTop. Please check input");
            }



            ConcreteSectionTwoWayShear sec = new ConcreteSectionTwoWayShear(p.PerimeterData, p.d, p.c_x, p.c_y, Configuration, false);

            //Check gamma's
            double v_uConcentric = sec.GetConcentricShearStress(V_u);
            double phi_v_c       = sec.GetTwoWayStrengthForUnreinforcedConcrete() / 1000.0; //convert to ksi

            if (gamma_vx == 1.0 && v_uConcentric > 0.75 * phi_v_c)
            {
                throw new Exception("gamma_vx cannot be 1.0 if stress due to concentric shear force exceeds 75% of concrete shear strength");
            }
            if (gamma_vy == 1.0 && v_uConcentric > 0.75 * phi_v_c)
            {
                throw new Exception("gamma_vy cannot be 1.0 if stress due to concentric shear force exceeds 75% of concrete shear strength");
            }

            ResultOfShearStressDueToMoment result = sec.GetCombinedShearStressDueToMomementAndShear(M_ux, M_uy, V_u, gamma_vx, gamma_vy, AllowShearRedistribution);

            v_u_Max  = result.v_max;
            v_u_Min  = result.v_min;
            gamma_vx = result.gamma_vx;
            gamma_vy = result.gamma_vy;

            return(new Dictionary <string, object>
            {
                { "v_u_Max", v_u_Max }
                , { "v_u_Min", v_u_Min }
                , { "gamma_vx", gamma_vx }
                , { "gamma_vy", gamma_vy }
            });
        }
        public static Dictionary <string, object> TwoWayShearStrengthProvidedByReinforcedSection(PunchingShearPerimeter PunchingShearPerimeter,
                                                                                                 ConcreteMaterial ConcreteMaterial, RebarMaterial RebarMaterial,
                                                                                                 double A_v, double s, string PunchingReinforcementType)
        {
            //Default values
            double phi_v_n = 0;


            //Calculation logic:


            Kodestruct.Concrete.ACI.ACI318_14.SectionalStrength.Shear.TwoWay.PunchingReinforcementType ReinforcementType;
            bool IsValidInputString = Enum.TryParse(PunchingReinforcementType, true, out ReinforcementType);

            if (IsValidInputString == false)
            {
                throw new Exception("Failed to convert string. Examples of acceptable values are Interior, EdgeLeft, CornerLeftTop. Please check input");
            }

            ReinforcedSectionTwoWayShear sec = new ReinforcedSectionTwoWayShear(ConcreteMaterial.Concrete, RebarMaterial.Material, PunchingShearPerimeter.PerimeterData, A_v, s, ReinforcementType);

            phi_v_n = sec.GetTwoWayStrength() / 1000.0; //convert to ksi

            return(new Dictionary <string, object>
            {
                { "phi_v_n", phi_v_n }
            });
        }
        public static Dictionary <string, object> TwoWayShearStrengthProvidedByConcrete(PunchingShearPerimeter PunchingShearPerimeter,
                                                                                        ConcreteMaterial ConcreteMaterial, double d, double c_x, double c_y, bool IsSectionAtColumnFace = true)
        {
            //Default values
            double phi_v_c = 0;


            //Calculation logic:

            PunchingPerimeterConfiguration Configuration;
            bool IsValidInputString = Enum.TryParse(PunchingShearPerimeter.Configuration, true, out Configuration);

            if (IsValidInputString == false)
            {
                throw new Exception("Failed to convert string. Examples of acceptable values are Interior, EdgeLeft, CornerLeftTop. Please check input");
            }

            ConcreteSectionTwoWayShear sec = new ConcreteSectionTwoWayShear(ConcreteMaterial.Concrete,
                                                                            PunchingShearPerimeter.PerimeterData, d, c_x, c_y, Configuration);

            phi_v_c = sec.GetTwoWayStrengthForUnreinforcedConcrete() / 1000.0; //convert to ksi

            return(new Dictionary <string, object>
            {
                { "phi_v_c", phi_v_c }
            });
        }