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