public static Dictionary <string, object> ThresholdTorsion(ConcreteFlexureAndAxiaSection ConcreteSection, double N_u, double c_transv_ctr,
                                                                   bool IsPrestressed = false, string Code = "ACI318-14")
        {
            //Default values
            double phiT_th = 0;


            //Calculation logic:
            TorsionShapeFactory    tss           = new TorsionShapeFactory();
            ConcreteSectionFlexure cross_Section = ConcreteSection.FlexuralSection as ConcreteSectionFlexure;

            if (cross_Section != null)
            {
                if (cross_Section.Section.SliceableShape is ISectionRectangular)
                {
                    IConcreteTorsionalShape shape = tss.GetShape(cross_Section.Section.SliceableShape, ConcreteSection.ConcreteMaterial.Concrete, c_transv_ctr);
                    ConcreteSectionTorsion  s     = new ConcreteSectionTorsion(shape);
                    phiT_th = s.GetThreshholdTorsion(N_u) / 1000.0; //Conversion from ACI psi units to ksi units
                }
                else
                {
                    throw new Exception("Only rectangular cross-sections are currently supported for torsional calculations");
                }
            }
            else
            {
                throw new Exception("Unrecognized shape type");
            }

            return(new Dictionary <string, object>
            {
                { "T_th", phiT_th }
            });
        }
        public void RectangularBeamReturnsThresholdTorsionValue()
        {
            double h        = 24.0;
            double d        = 21.5;
            double b        = 14.0;
            double N_u      = 0.0;
            double fc       = 3000.0;
            double c_center = 0.0;

            ConcreteSectionTorsion tb = GetConcreteTorsionBeam(b, h, fc, d, false, c_center);

            double T_th = tb.GetThreshholdTorsion(N_u) / 1000.0; //Conversion from ACI psi units to ksi units

            double refValue        = 61;                         //Example 7-2
            double actualTolerance = EvaluateActualTolerance(T_th, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }