コード例 #1
0
        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 }
            });
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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));
        }
コード例 #10
0
        public ConcreteSectionCompression GetCompressionMemberFromFlexuralSection(ConcreteSectionFlexure flexuralSection,
                                                                                  CompressionMemberType CompressionMemberType)
        {
            CalcLog log = new CalcLog();

            ConcreteSectionCompression compSection = new ConcreteSectionCompression(flexuralSection, CompressionMemberType, log);

            return(compSection);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        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);
        }
コード例 #17
0
        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);
        }
コード例 #18
0
        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);
        }
コード例 #19
0
        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);
        }
コード例 #20
0
        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);
        }
コード例 #21
0
        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);
        }
コード例 #22
0
        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 }
            });
        }
コード例 #24
0
        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 }
            });
        }
コード例 #26
0
        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;
        }