public static Dictionary <string, object> TorsionalFunctionValues(string TorsionalFunctionCaseId, double E, double G, double J, double L, double z, double T, double C_w, double t, double alpha)
        {
            //Default values
            double theta      = 0;
            double theta_1der = 0;
            double theta_2der = 0;
            double theta_3der = 0;


            //Calculation logic:

            TorsionalFunctionCase TCase;
            bool IsValidStringTorsionCase = Enum.TryParse(TorsionalFunctionCaseId, true, out TCase);

            if (IsValidStringTorsionCase == false)
            {
                throw new Exception("Torsional case is not recognized. Check input string.");
            }

            TorsionalFunctionFactory tf = new TorsionalFunctionFactory();

            ITorsionalFunction function = tf.GetTorsionalFunction(TCase, E, G, J, L, z, T, C_w, t, alpha);

            theta      = function.Get_theta();
            theta_1der = function.Get_theta_1();
            theta_2der = function.Get_theta_2();
            theta_3der = function.Get_theta_3();

            #region For debugging calculate the normalized values as in AISC design Guide

            double thetaNorm;
            double theta_1derNorm;
            double theta_2derNorm;
            double theta_3derNorm;
            //FOR TESTING CALCULATE THE SECTION PROPS
            double a  = Math.Sqrt((E * C_w) / (G * J));
            double la = L / a;

            #region Case 12
            thetaNorm      = theta * (G * J / t) * 1 / (Math.Pow(a, 2));
            theta_1derNorm = theta_1der * (G * J / t) * 2.0 / (a);
            theta_2derNorm = theta_2der * G * J / t;
            theta_3derNorm = theta_3der * G * J / t * a;


            #endregion
            #endregion

            return(new Dictionary <string, object>
            {
                { "theta", theta }
                , { "theta_1der", theta_1der }
                , { "theta_2der", theta_2der }
                , { "theta_3der", theta_3der }
            });
        }
        public void DGExample5_1ReturnsWarpingStressAtMidspan()
        {
            SetAiscDG9Example5_1Parameters();
            z = 0.5 * L;
            TorsionalFunctionFactory tf       = new TorsionalFunctionFactory();
            ITorsionalFunction       function = tf.GetTorsionalFunction(TorsionalFunctionCase.Case3, E, G, J, L, z, T_u, C_w, t, alpha);
            double theta_2der        = function.Get_theta_2();
            SectionStressAnalysis st = new SectionStressAnalysis();
            double sigma             = st.GetNormalStressDueToWarpingOpenSection(E, W_no, theta_2der);
            double refValue          = 28.0;
            double actualTolerance   = EvaluateActualTolerance(sigma, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
        public void TorsionalFunctionCase7ReturnsThirdDerivativeA02L()
        {
            SetAiscDG9Example5_5Parameters();
            z = 0.2 * L;
            TorsionalFunctionFactory tf = new TorsionalFunctionFactory();
            //double a_rev = Math.Sqrt(E * C_w / (G * J));
            ITorsionalFunction function            = tf.GetTorsionalFunction(TorsionalFunctionCase.Case7, E, G, J, L, z, T_u, C_w, t, alpha);
            double             theta_3der          = function.Get_theta_3();
            double             refValue            = 0.5;
            double             ratio               = L / a;
            double             GraphValuePredicted = theta_3der * G * J / t * 2.0 * Math.Pow(a, 2) / L;
            double             actualTolerance     = EvaluateActualTolerance(GraphValuePredicted, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
        public void TorsionalFunctionCase3ReturnsThirdDerivativeAtSupport()
        {
            //AISC Design Guide 9 Example 5.1
            //Case 3, with alpha = 0.5:
            SetAiscDG9Example5_1Parameters();
            z = 0;
            TorsionalFunctionFactory tf       = new TorsionalFunctionFactory();
            ITorsionalFunction       function = tf.GetTorsionalFunction(TorsionalFunctionCase.Case3, E, G, J, L, z, T_u, C_w, t, alpha);
            double theta_3der = function.Get_theta_3();
            double refValue   = 0.22 * (-5.78) * Math.Pow(10, -3.0) / 62.1;

            double actualTolerance = EvaluateActualTolerance(theta_3der, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
        public void TorsionalFunctionCase3ReturnsFirstDerivativeAtMidspan()
        {
            //AISC Design Guide 9 Example 5.1
            //Case 3, with alpha = 0.5:
            SetAiscDG9Example5_1Parameters();
            z = L / 2;
            TorsionalFunctionFactory tf       = new TorsionalFunctionFactory();
            ITorsionalFunction       function = tf.GetTorsionalFunction(TorsionalFunctionCase.Case3, E, G, J, L, z, T_u, C_w, t, alpha);
            double theta_1der = function.Get_theta_1();
            double refValue   = 0;

            double actualTolerance = EvaluateActualTolerance(theta_1der, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
Example #6
0
        public void TorsionalFunctionCase6ReturnsFirstDerivativeAt02()
        {
            SetAiscDG9Example5_1Parameters();
            z = 0.2 * L;
            TorsionalFunctionFactory tf = new TorsionalFunctionFactory();
            //double a_rev = Math.Sqrt(E * C_w / (G * J));
            ITorsionalFunction function            = tf.GetTorsionalFunction(TorsionalFunctionCase.Case6, E, G, J, L, z, T_u, C_w, t, alpha);
            double             theta_1der          = function.Get_theta_1();
            double             refValue            = 0.1;
            double             ratio               = L / a;
            double             GraphValuePredicted = theta_1der * G * J / T_u;
            double             actualTolerance     = EvaluateActualTolerance(GraphValuePredicted, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
Example #7
0
        public void TorsionalFunctionCase12ReturnsSecondDerivativeAtSupport()
        {
            SetAiscDG9Example5_1Parameters();
            z = 0.0 * L;
            TorsionalFunctionFactory tf = new TorsionalFunctionFactory();

            T_u = 0.0;
            t   = 5.0;
            ITorsionalFunction function            = tf.GetTorsionalFunction(TorsionalFunctionCase.Case12, E, G, J, L, z, T_u, C_w, t, alpha);
            double             theta_2der          = function.Get_theta_2();
            double             refValue            = 0.84;
            double             ratio               = L / a;
            double             GraphValuePredicted = theta_2der * G * J / t;
            double             actualTolerance     = EvaluateActualTolerance(GraphValuePredicted, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
        public ITorsionalFunction  GetTorsionalFunction(TorsionalFunctionCase Case, double E, double G, double J, double L, double z, double T, double C_w, double t, double alpha)
        {
            TorsionalParameters torProps = new TorsionalParameters();
            double a = torProps.Get_a(C_w, E, G, J);

            ITorsionalFunction function = null;

            switch (Case)
            {
            case TorsionalFunctionCase.Case1:   function = new  TorsionalFunctionCase1(G, J, L, z, T);     break;

            case TorsionalFunctionCase.Case2:   function = new  TorsionalFunctionCase2(G, J, L, z, a, T);     break;

            case TorsionalFunctionCase.Case3:   function = new  TorsionalFunctionCase3(G, J, L, z, a, T, alpha);     break;

            case TorsionalFunctionCase.Case4:   function = new  TorsionalFunctionCase4(G, J, L, z, a, t);     break;

            case TorsionalFunctionCase.Case5:   function = new  TorsionalFunctionCase5(G, J, L, z, a, t);     break;

            case TorsionalFunctionCase.Case6:   function = new  TorsionalFunctionCase6(G, J, L, z, a, T, alpha);     break;

            case TorsionalFunctionCase.Case7:   function = new  TorsionalFunctionCase7(G, J, L, z, a, t);     break;

            case TorsionalFunctionCase.Case8:   function = new  TorsionalFunctionCase8(G, J, L, z, a, t);     break;

            case TorsionalFunctionCase.Case9:   function = new  TorsionalFunctionCase9(G, J, L, z, a, T, alpha);     break;

            case TorsionalFunctionCase.Case10:  function = new  TorsionalFunctionCase10(G, J, L, z, a, t, alpha);     break;

            case TorsionalFunctionCase.Case11:  function = new  TorsionalFunctionCase11(G, J, L, z, a, t);     break;

            case TorsionalFunctionCase.Case12: function = new  TorsionalFunctionCase12(G, J, L, z, a, t); break;
            }

            return(function);
        }