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 ConcreteSectionTorsion GetConcreteTorsionBeam(double Width, double Height, double fc, double d, bool IsLightWeight, double c_cent) { IConcreteSection Section = GetRectangularSection(Width, Height, fc, IsLightWeight); TorsionShapeFactory tss = new TorsionShapeFactory(); IConcreteTorsionalShape shape = tss.GetShape(Section.SliceableShape, Section.Material, c_cent); ConcreteSectionTorsion s = new ConcreteSectionTorsion(shape); return(s); }
public static Dictionary <string, object> RequiredLongitudinalTorsionRebar(ConcreteFlexureAndAxiaSection ConcreteSection, double T_u, RebarMaterial RebarMaterial, double c_transv_ctr, double theta = 45, string Code = "ACI318-14") { //Default values double A_l = 0; //Calculation logic: TorsionShapeFactory tss = new TorsionShapeFactory(); ConcreteSectionFlexure sec = (ConcreteSectionFlexure)ConcreteSection.FlexuralSection; IConcreteTorsionalShape shape = tss.GetShape(sec.Section.SliceableShape, ConcreteSection.ConcreteMaterial.Concrete, c_transv_ctr); ConcreteSectionTorsion secT = new ConcreteSectionTorsion(shape); double T_u_lb_in = T_u * 1000.0; //internally Kodestruct uses lb - in units for concrete A_l = secT.GetRequiredTorsionLongitudinalReinforcementArea(T_u_lb_in, RebarMaterial.Material.YieldStress); return(new Dictionary <string, object> { { "A_l", A_l } }); }
public static Dictionary <string, object> MaximumTorsionalAndShearStrengthInteraction(ConcreteFlexureAndAxiaSection ConcreteSection, double c_transv_ctr, double V_u, double T_u, double V_c, double b, double d, bool IsPrestressed = false, string Code = "ACI318-14") { //Default values double InteractionRatio = 0; //Calculation logic: TorsionShapeFactory tss = new TorsionShapeFactory(); ConcreteSectionFlexure sec = (ConcreteSectionFlexure)ConcreteSection.FlexuralSection; IConcreteTorsionalShape shape = tss.GetShape(sec.Section.SliceableShape, ConcreteSection.ConcreteMaterial.Concrete, c_transv_ctr); ConcreteSectionTorsion s = new ConcreteSectionTorsion(shape); double V_u_lb = V_u * 1000.0; //internally Kodestruct uses lb - in units for concrete double T_u_lb_in = T_u * 1000.0; //internally Kodestruct uses lb - in units for concrete InteractionRatio = s.GetMaximumForceInteractionRatio(V_u_lb, T_u_lb_in, V_c, b, d); return(new Dictionary <string, object> { { "InteractionRatio", InteractionRatio } }); }