/// <structural_toolkit_2015>

        /// <summary>
        /// Calculate the moment of inertia for cracking section.
        /// </summary>
        /// <param name="inNMM">The acting forces.</param>
        /// <returns>Returns moment of inertia for cracking section.</returns>
        public double InertiaOfCrackingSection(InternalForcesContainer inNMM)
        {
            double momentOfInertiaCrackingConcreteSection = 0.0;

            SafetyFactor(inNMM);
            SetOfForces solverNMM       = solver.GetInternalForces(Autodesk.CodeChecking.Concrete.ResultType.Section);
            double      neutralAxisDist = solver.GetNeutralAxisDistance();
            double      stressArea      = solver.GetConcreteStressArea();
            double      comprHeight     = 0.5 * totalHeight + neutralAxisDist;
            Steel       steel           = solver.GetSteel();

            Autodesk.CodeChecking.Concrete.Concrete concrete = solver.GetConcrete();
            double n = steel.ModulusOfElasticity / concrete.ModulusOfElasticity;

            switch (crossSectionType)
            {
            case SectionShapeType.RectangularBar:
            {
                momentOfInertiaCrackingConcreteSection = comprHeight * comprHeight * stressArea / 3.0; // bh^3/12 + b*h*(0.5*h)^2, b*h=stressArea
            }
            break;

            default:
                throw new Exception("InertiaOfCrackingSection. Unhandled cross section type. Only rectangular cross-section can be used on this path. 3th party implementation is necessary.");
            }
            foreach (Rebar bar in solver.GetRebars())
            {
                momentOfInertiaCrackingConcreteSection += n * bar.Area * Math.Pow((bar.Y + neutralAxisDist), 2);
            }
            return(momentOfInertiaCrackingConcreteSection);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Calculate the moment of inertia for cracking section.
        /// </summary>
        /// <param name="inNMM">The acting forces.</param>
        /// <returns>Returns moment of inertia for cracking section.</returns>
        public double InertiaOfCrackingSection(InternalForcesContainer inNMM)
        {
            double momentOfInertiaCrackingConcreteSection = 0.0;

            solver.SolveResistance(inNMM.ForceFx, inNMM.MomentMy, 0.0);
            SetOfForces solverNMM        = solver.GetInternalForces(Autodesk.CodeChecking.Concrete.ResultType.Section);
            double      neutralAxisDist  = solver.GetNeutralAxisDistance();
            double      centerOfInertiaY = solverGeometry.CenterOfInertia.Y;
            double      stressArea       = solver.GetConcreteStressArea();
            double      comprHeight      = -neutralAxisDist;
            Steel       steel            = solver.GetSteel();

            Autodesk.CodeChecking.Concrete.Concrete concrete = solver.GetConcrete();
            double bottomWidth = solverGeometry.Point(1).X - solverGeometry.Point(0).X;
            double n           = steel.ModulusOfElasticity / concrete.ModulusOfElasticity;

            momentOfInertiaCrackingConcreteSection  = comprHeight * comprHeight * comprHeight * bottomWidth / 3.0; // bh^3/12 + b*h*(0.5*h)^2
            momentOfInertiaCrackingConcreteSection += n * (solver.GetMomentOfInertiaX(Autodesk.CodeChecking.Concrete.ResultType.Rebars) + Math.Abs(neutralAxisDist) * solver.GetArea(Autodesk.CodeChecking.Concrete.ResultType.Rebars));
            switch (crossSectionType)
            {
            case SectionShapeType.RectangularBar:
                break;

            case SectionShapeType.T:
            {
                bool   bottomMoreCompression = inNMM.MomentMy >= 0.0;
                double TotalWidth            = solverGeometry.Point(4).X - solverGeometry.Point(5).X;
                if (bottomMoreCompression)
                {
                    double WithoutSlabHeight = solverGeometry.Point(2).Y - solverGeometry.Point(1).Y;
                    if (comprHeight > WithoutSlabHeight)
                    {
                        double partT = (comprHeight - WithoutSlabHeight);
                        momentOfInertiaCrackingConcreteSection += Math.Pow(comprHeight - 0.5 * partT, 2) * (TotalWidth - bottomWidth);
                        momentOfInertiaCrackingConcreteSection += (TotalWidth - bottomWidth) * partT * partT * partT / 12.0;
                    }
                }
                else
                {
                    double SlabHeight = solverGeometry.Point(4).Y - solverGeometry.Point(3).Y;
                    SlabHeight = Math.Min(SlabHeight, comprHeight);
                    momentOfInertiaCrackingConcreteSection += Math.Pow(comprHeight - 0.5 * SlabHeight, 2) * (TotalWidth - bottomWidth);
                    momentOfInertiaCrackingConcreteSection += (TotalWidth - bottomWidth) * SlabHeight * SlabHeight * SlabHeight / 12.0;
                }
            }
            break;

            default:
                throw new Exception("InertiaOfCrackingSection. Unhandled cross section type. Only R and T cross-sections can be used on this path.");
            }
            return(momentOfInertiaCrackingConcreteSection);
        }