public static Dictionary <string, object> CrackingMoment(ConcreteFlexureAndAxiaSection ConcreteSection, string FlexuralCompressionFiberLocation = "Top", string Code = "ACI318-14") { //Default values double M_cr = 0; //Calculation logic: FlexuralCompressionFiberPosition p; bool IsValidStringFiber = Enum.TryParse(FlexuralCompressionFiberLocation, true, out p); if (IsValidStringFiber == false) { throw new Exception("Flexural compression fiber location is not recognized. Check input."); } ConcreteSectionFlexure beam = ConcreteSection.FlexuralSection as ConcreteSectionFlexure; M_cr = beam.GetCrackingMoment(p) / 1000.0; // Conversion from ACI318 psi units to ksi units return(new Dictionary <string, object> { { "M_cr", M_cr } }); }
public void BeamReturnsphiMn() { var ConcreteMaterial = new Kodestruct.Concrete.ACI318_14.Materials.ConcreteMaterial(6000, ACI.Entities.ConcreteTypeByWeight.Normalweight, null); FlexuralSectionFactory flexureFactory = new FlexuralSectionFactory(); double b = 16; double h = 40; double f_y = 60000; RebarMaterialGeneral LongitudinalRebarMaterial = new RebarMaterialGeneral(f_y); List <RebarPoint> LongitudinalBars = new List <RebarPoint>(); Rebar TopRebar = new Rebar(4, LongitudinalRebarMaterial); RebarPoint TopPoint = new RebarPoint(TopRebar, new RebarCoordinate() { X = 0, Y = h / 2.0 - 3 }); LongitudinalBars.Add(TopPoint); Rebar BottomRebar = new Rebar(4, LongitudinalRebarMaterial); RebarPoint BottomPoint = new RebarPoint(BottomRebar, new RebarCoordinate() { X = 0, Y = -h / 2.0 + 3 }); LongitudinalBars.Add(BottomPoint); CrossSectionRectangularShape shape = new CrossSectionRectangularShape(ConcreteMaterial, null, b, h); IConcreteFlexuralMember fs = new ConcreteSectionFlexure(shape, LongitudinalBars, null, ConfinementReinforcementType.Ties); ConcreteFlexuralStrengthResult result = fs.GetDesignFlexuralStrength(FlexuralCompressionFiberPosition.Top); }
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 ColumnDistributedInteractionReturnsSPCOL_Nominal2() { double b = 16; double h = 16; double f_c = 5000; List <RebarPoint> LongitudinalBars = new List <RebarPoint>(); FlexuralSectionFactory flexureFactory = new FlexuralSectionFactory(); CompressionSectionFactory compressionFactory = new CompressionSectionFactory(); IConcreteMaterial mat = GetConcreteMaterial(f_c); IRebarMaterial rebarMat = new MaterialAstmA615(A615Grade.Grade60); ConcreteSectionFlexure flexureMember = flexureFactory.GetRectangularSectionFourSidesDistributed(b, h, 4.0, 0, 2.5, 2.5, mat, rebarMat, ConfinementReinforcementType.Ties, 1); ConcreteSectionCompression col = compressionFactory.GetCompressionMemberFromFlexuralSection(flexureMember, CompressionMemberType.NonPrestressedWithTies); double P = 500 * 1000; double refValue = 369 * 12 * 1000; //from SP column software double M_n = col.GetNominalMomentResult(P, FlexuralCompressionFiberPosition.Top).Moment; double phiM_n_KipFt = M_n / 1000.0 / 12.0; double actualTolerance = EvaluateActualTolerance(M_n, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public void ColumnDistributedInteractionReturnsSPCOL_Nominal1_Strains() { double b = 16; double h = 16; double f_c = 5000; List <RebarPoint> LongitudinalBars = new List <RebarPoint>(); FlexuralSectionFactory flexureFactory = new FlexuralSectionFactory(); CompressionSectionFactory compressionFactory = new CompressionSectionFactory(); IConcreteMaterial mat = GetConcreteMaterial(f_c); IRebarMaterial rebarMat = new MaterialAstmA615(A615Grade.Grade60); ConcreteSectionFlexure flexureMember = flexureFactory.GetRectangularSectionFourSidesDistributed(b, h, 4.0, 0, 2.5, 2.5, mat, rebarMat, ConfinementReinforcementType.Ties, 1); ConcreteSectionCompression col = compressionFactory.GetCompressionMemberFromFlexuralSection(flexureMember, CompressionMemberType.NonPrestressedWithTies); double refForce = 1220; double refMoment = 160.8; double SteelStrain = 0.000654; double P = col.SectionAxialForceResultantFunction(SteelStrain) / 1000.0; double actualTolerance = EvaluateActualTolerance(P, refForce); //IStrainCompatibilityAnalysisResult momentResult = col.GetNominalMomentResult(refForce, FlexuralCompressionFiberPosition.Top); //double M_n = momentResult.Moment / 12000.0; Assert.LessOrEqual(actualTolerance, tolerance); }
public ConcreteSectionFlexure GetConcreteBeam(double Width, double Height, double fc, bool IsBottomReinforced, params RebarInput[] rebarInput) { IConcreteSection Section = GetRectangularSection(Width, Height, fc); List <RebarPoint> LongitudinalBars = new List <RebarPoint>(); if (IsBottomReinforced == true) { foreach (var bar in rebarInput) { Rebar thisBar = new Rebar(bar.Area, new MaterialAstmA615(A615Grade.Grade60)); RebarPoint point = new RebarPoint(thisBar, new RebarCoordinate() { X = 0, Y = -Height / 2.0 + bar.Cover }); LongitudinalBars.Add(point); } } else { foreach (var bar in rebarInput) { Rebar thisBar = new Rebar(bar.Area, new MaterialAstmA615(A615Grade.Grade60)); RebarPoint point = new RebarPoint(thisBar, new RebarCoordinate() { X = 0, Y = Height / 2.0 - bar.Cover }); LongitudinalBars.Add(point); } } ConcreteSectionFlexure beam = new ConcreteSectionFlexure(Section, LongitudinalBars, log, ConfinementReinforcementType.NoReinforcement); return(beam); }
public void GeneralBeamFlexuralCapacityTopReturnsNominalValue() { double fc = 4000.0; FlexuralSectionFactory sf = new FlexuralSectionFactory(); IConcreteMaterial mat = GetConcreteMaterial(fc); List <Point2D> PolyPoints = new List <Point2D>() { new Point2D(-6.0, 0.0), new Point2D(-6.0, 12.0), new Point2D(6.0, 12.0), new Point2D(6.0, 0) }; Rebar thisBar = new Rebar(1.0, new MaterialAstmA615(A615Grade.Grade60)); var coord = new RebarCoordinate(0, 1.0); List <RebarPoint> RebarPoints = new List <RebarPoint>() { new RebarPoint(thisBar, coord) }; //GetGeneralSection(List<Point2D> PolygonPoints, //ConcreteMaterial Concrete, List<RebarPoint> RebarPoints, double b_w, double d) ConcreteSectionFlexure beam = sf.GetGeneralSection(PolyPoints, mat, RebarPoints, 12.0, 9.0); IStrainCompatibilityAnalysisResult MResult = beam.GetNominalFlexuralCapacity(FlexuralCompressionFiberPosition.Top); double M_n = MResult.Moment / 12000; double refValue = 51.32; double actualTolerance = EvaluateActualTolerance(M_n, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public void ColumnDistributedInteractionReturnsSPCOL_Nominal0_Strains() { double b = 16; double h = 16; double f_c = 5000; List <RebarPoint> LongitudinalBars = new List <RebarPoint>(); FlexuralSectionFactory flexureFactory = new FlexuralSectionFactory(); CompressionSectionFactory compressionFactory = new CompressionSectionFactory(); IConcreteMaterial mat = GetConcreteMaterial(f_c); IRebarMaterial rebarMat = new MaterialAstmA615(A615Grade.Grade60); ConcreteSectionFlexure flexureMember = flexureFactory.GetRectangularSectionFourSidesDistributed(b, h, 4.0, 0, 2.5, 2.5, mat, rebarMat, ConfinementReinforcementType.Ties, 1); ConcreteSectionCompression col = compressionFactory.GetCompressionMemberFromFlexuralSection(flexureMember, CompressionMemberType.NonPrestressedWithTies); double refForce = 1440; double refMoment = 43.0; double SteelStrain = 0.00126; double P = col.SectionAxialForceResultantFunction(SteelStrain) / 1000.0; double actualTolerance = EvaluateActualTolerance(P, refForce); Assert.True(actualTolerance <= tolerance); }
public void ThreeLayerBeamFlexuralCapacityReturnsValue() { ConcreteSectionFlexure beam = GetConcreteBeam(12, 12, 4000, true, new RebarInput(1, 1), new RebarInput(1, 3), new RebarInput(1, 7)); IStrainCompatibilityAnalysisResult MResult = beam.GetNominalFlexuralCapacity(FlexuralCompressionFiberPosition.Top); double phiMn = MResult.Moment; Assert.AreEqual(1101327, Math.Round(phiMn, 0)); }
public ConcreteSectionCompression GetCompressionMemberFromFlexuralSection(ConcreteSectionFlexure flexuralSection, CompressionMemberType CompressionMemberType) { CalcLog log = new CalcLog(); ConcreteSectionCompression compSection = new ConcreteSectionCompression(flexuralSection, CompressionMemberType, log); return(compSection); }
public void CrackedMomentOfInertiaReturnsValue() { ConcreteSectionFlexure beam = GetConcreteBeam(12, 22, 3000, true, new RebarInput(1.8, 2.5), new RebarInput(0.6, 19.5)); double Icr = beam.GetCrackedMomentOfInertia(FlexuralCompressionFiberPosition.Top); double refValue = 3770.0; double actualTolerance = EvaluateActualTolerance(Icr, refValue); Assert.True(actualTolerance <= tolerance); }
public void CrackingMomentReturnsValue() { ConcreteSectionFlexure beam = GetConcreteBeam(12, 22, 3000, true, new RebarInput(1.8, 2.5), new RebarInput(0.6, 19.5)); double Mcr = beam.GetCrackingMoment(FlexuralCompressionFiberPosition.Top) / 1000.00; //to get to kip*in double refValue = 33.2 * 12; double actualTolerance = EvaluateActualTolerance(Mcr, refValue); Assert.True(actualTolerance <= tolerance); }
public ConcreteSectionCompression GetConcreteCompressionMember(double Width, double Height, double fc, List <RebarPoint> LongitudinalBars, ConfinementReinforcementType ConfinementReinforcementType) { CalcLog log = new CalcLog(); IConcreteSection Section = GetRectangularSection(Width, Height, fc); IConcreteFlexuralMember fs = new ConcreteSectionFlexure(Section, LongitudinalBars, new CalcLog(), ConfinementReinforcementType); ConcreteSectionCompression column = new ConcreteSectionCompression(fs as IConcreteSectionWithLongitudinalRebar, ConfinementReinforcementType, log); return(column); }
public ConcreteSectionCompression GetCompressionMemberFromFlexuralSection(ConcreteSectionFlexure flexuralSection, ConfinementReinforcementType ConfinementReinforcement, bool IsPrestressed = false) { CalcLog log = new CalcLog(); CompressionMemberType CompressionMemberType = GetCompressionMemberType(ConfinementReinforcement, IsPrestressed); ConcreteSectionCompression compSection = new ConcreteSectionCompression(flexuralSection, CompressionMemberType, log); return(compSection); }
public void ShearWallFlexuralCapacityTopReturnsNominalValue() { ConcreteSectionFlexure beam = GetShearWall(); IStrainCompatibilityAnalysisResult MResult = beam.GetNominalFlexuralCapacity(FlexuralCompressionFiberPosition.Top); double M_n = MResult.Moment; double refValue = 7182.546387 * 1000.0 * 12.0; double actualTolerance = EvaluateActualTolerance(M_n, refValue); Assert.True(actualTolerance <= tolerance); }
public void SimpleBeamFlexuralCapacityCompressionBottomReturnsNominalValue() { ConcreteSectionFlexure beam = GetConcreteBeam(12, 12, 4000, false, new RebarInput(1, 1)); IStrainCompatibilityAnalysisResult MResult = beam.GetNominalFlexuralCapacity(FlexuralCompressionFiberPosition.Bottom); double M_n = MResult.Moment / 12000.0; double refValue = 51.32; double actualTolerance = EvaluateActualTolerance(M_n, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public void SimpleBeamFlexuralCapacityTopReturnsNominalValue() { ConcreteSectionFlexure beam = GetConcreteBeam(12, 20, 4000, true, new RebarInput(4, 2.5)); IStrainCompatibilityAnalysisResult MResult = beam.GetNominalFlexuralCapacity(FlexuralCompressionFiberPosition.Top); double M_n = MResult.Moment; double refValue = 291000 * 12.0; double actualTolerance = EvaluateActualTolerance(M_n, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public void SimpleBeamFlexuralCapacityTopReturnsDesignValue() { ConcreteSectionFlexure beam = GetConcreteBeam(12, 20, 4000, true, new RebarInput(4, 2.5)); ConcreteFlexuralStrengthResult MResult = beam.GetDesignFlexuralStrength(FlexuralCompressionFiberPosition.Top); double M_n = MResult.phiM_n / 1000 / 12.0; double refValue = 253.0; double actualTolerance = EvaluateActualTolerance(M_n, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public void StrainDistributionReturnsValue() { ConcreteSectionFlexure beam = GetShearWall(); LinearStrainDistribution StrainDistribution = new LinearStrainDistribution(192, 0.003, -0.051272); List <RebarPointResult> r = beam.CalculateRebarResults(StrainDistribution, FlexuralCompressionFiberPosition.Top); SectionAnalysisResult TrialSectionResult = beam.GetSectionResult(StrainDistribution, FlexuralCompressionFiberPosition.Top); double M_n = TrialSectionResult.Moment / 12000.0; double refValue = 7182.546387; double actualTolerance = EvaluateActualTolerance(M_n, refValue); Assert.True(actualTolerance <= tolerance); }
ConcreteSectionFlexure GetShearWall() { ConcreteSectionFlexure beam = GetConcreteBeam(24, 192, 4000, true, new RebarInput(1.58, 3), new RebarInput(1.58, 15), new RebarInput(1.58, 27), new RebarInput(1.58, 39), new RebarInput(1.58, 51), new RebarInput(1.58, 141), new RebarInput(1.58, 153), new RebarInput(1.58, 165), new RebarInput(1.58, 177), new RebarInput(1.58, 189) ); return(beam); }
public ConcreteSectionCompression GetConcreteExampleColumnWithDistributed() { double b = 16; double h = 16; double f_c = 5000; List <RebarPoint> LongitudinalBars = new List <RebarPoint>(); FlexuralSectionFactory flexureFactory = new FlexuralSectionFactory(); CompressionSectionFactory compressionFactory = new CompressionSectionFactory(); IConcreteMaterial mat = GetConcreteMaterial(f_c); IRebarMaterial rebarMat = new MaterialAstmA615(A615Grade.Grade60); ConcreteSectionFlexure flexureMember = flexureFactory.GetRectangularSectionFourSidesDistributed(b, h, 4, 0, 2.5, 2.5, mat, rebarMat); ConcreteSectionCompression column = compressionFactory.GetCompressionMember(flexureMember, CompressionMemberType.NonPrestressedWithTies); return(column); }
public ConcreteSectionFlexure GetConcreteBeam(double Width, double Height, double fc, params RebarInput[] rebarInput) { IConcreteSection Section = GetRectangularSection(Width, Height, fc); List <RebarPoint> LongitudinalBars = new List <RebarPoint>(); foreach (var bar in rebarInput) { Rebar thisBar = new Rebar(bar.Area, new MaterialAstmA615(A615Grade.Grade60)); RebarPoint point = new RebarPoint(thisBar, new RebarCoordinate() { X = 0, Y = -Height / 2.0 + bar.Cover }); LongitudinalBars.Add(point); } ConcreteSectionFlexure beam = new ConcreteSectionFlexure(Section, LongitudinalBars, log); return(beam); }
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 ConcreteSectionCompression GetGeneralCompressionMember(List <Point2D> PolygonPoints, List <RebarPoint> LongitudinalBars, IConcreteMaterial ConcreteMaterial, IRebarMaterial RebarMaterial, ConfinementReinforcementType ConfinementReinforcement, double b_w = 0.0, double d = 0.0, bool IsPrestressed = false) { CalcLog log = new CalcLog(); var GenericShape = new PolygonShape(PolygonPoints); if (b_w == 0.0) { b_w = GenericShape.XMax - GenericShape.XMin; } if (d == 0.0) { d = GenericShape.YMax - GenericShape.YMin; } CrossSectionGeneralShape Section = new CrossSectionGeneralShape(ConcreteMaterial, null, GenericShape, b_w, d); ConcreteSectionFlexure flexuralSection = new ConcreteSectionFlexure(Section, LongitudinalBars, log, ConfinementReinforcement); return(GetCompressionMemberFromFlexuralSection(flexuralSection, ConfinementReinforcement, IsPrestressed)); }
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 } }); }
internal RectangularSectionFourSideReinforced(double b, double h, double A_sTopBottom, double A_sLeftRight, double c_cntrTopBottom, double c_cntrLeftRight, ConcreteMaterial ConcreteMaterial, RebarMaterial LongitudinalRebarMaterial, bool hasTies = false) { KodestructAci.ConfinementReinforcementType ConfinementReinforcementType; if (hasTies == true) { ConfinementReinforcementType = KodestructAci.ConfinementReinforcementType.Ties; } else { ConfinementReinforcementType = KodestructAci.ConfinementReinforcementType.NoReinforcement; } base.ConcreteMaterial = ConcreteMaterial; //duplicate save of concrete material into base Dynamo class FlexuralSectionFactory flexureFactory = new FlexuralSectionFactory(); ConcreteSectionFlexure fs = flexureFactory.GetRectangularSectionFourSidesDistributed(b, h, A_sTopBottom, A_sLeftRight, c_cntrTopBottom, c_cntrLeftRight, ConcreteMaterial.Concrete, LongitudinalRebarMaterial.Material, ConfinementReinforcementType); this.FlexuralSection = fs; }