Example #1
0
        /// <summary>
        /// Calculate the acting forces to Cracking forces ratio.
        /// </summary>
        /// <param name="inNMM">The acting forces.</param>
        /// <param name="crackingStress">Stress limit for cracking/uncracking section.</param>
        /// <returns></returns>
        public double ForcesToCrackingForces(InternalForcesContainer inNMM, double crackingStress)
        {
            if (!CalculationUtility.IsZeroM(inNMM.MomentMz))
            {
                throw new Exception("Deflection calculation is not aviable for biaxial bending.");
            }
            double crackigForcesToForces = Double.MaxValue;

            solver.SolveResistance(inNMM.ForceFx, inNMM.MomentMy, 0);
            double strainMin = solver.GetStrainMin(Autodesk.CodeChecking.Concrete.ResultType.Concrete);

            if (strainMin < 0.0)
            {
                double      ActingForceToResistance = 1.0;
                SetOfForces ResistanceForces        = solver.GetInternalForces(Autodesk.CodeChecking.Concrete.ResultType.Section);
                if (Math.Abs(inNMM.MomentMy) > Math.Abs(inNMM.ForceFx))
                {
                    ActingForceToResistance = inNMM.MomentMy / ResistanceForces.MomentX;
                }
                else
                {
                    ActingForceToResistance = inNMM.ForceFx / ResistanceForces.AxialForce;
                }
                Autodesk.CodeChecking.Concrete.Concrete concrete = solver.GetConcrete();
                double noCrackingTensonStress = -strainMin * concrete.ModulusOfElasticity * ActingForceToResistance;
                crackigForcesToForces = crackingStress / noCrackingTensonStress;
            }
            return(crackigForcesToForces);
        }
        /// <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);
        }
Example #3
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);
        }
Example #4
0
        /// <summary>
        /// Set the concrete parameters for calculation.
        /// </summary>
        /// <param name="stressStrainType">Stress-strain relationship. The type of the concrete mechanical behaviour.</param>
        /// <param name="strenght">Concrete strenght.</param>
        /// <param name="youngModulus">Modulus of elasticyty - Young modulus for concrete.</param>
        public void SetConcrete(Autodesk.CodeChecking.Concrete.StressDiagramType stressStrainType, double strenght, double youngModulus)
        {
            Autodesk.CodeChecking.Concrete.Concrete newConcrete = new Autodesk.CodeChecking.Concrete.Concrete();
            double MaximumStrain = 0.0035;           // The variable dependent to RC code.!
            double CompressionReductionFactor = 0.8; // The variable dependent to RC code. Only for D_REC stressStrainType!

            switch (stressStrainType)
            {
            case Autodesk.CodeChecking.Concrete.StressDiagramType.Linear:
                newConcrete.SetStrainStressModelLinear(strenght, strenght / youngModulus, youngModulus);
                break;

            case Autodesk.CodeChecking.Concrete.StressDiagramType.Rectangular:
                newConcrete.SetStrainStressModelRectangular(strenght, MaximumStrain, youngModulus, CompressionReductionFactor);
                break;

            default:
                // Other cases could be necessary for some design codes.
                // Other variables dependent to RC code could be necessary for parameterization!
                throw new Exception("SetConcrete. Unhandled type. 3th party implementation are necessary in this point.");
            }
            SetConcrete(newConcrete);
        }
Example #5
0
 /// <summary>
 /// Set the concrete parameters for calculation.
 /// </summary>
 /// <param name="concrete">Set of reinforcement concrete parameters.</param>
 public void SetConcrete(Autodesk.CodeChecking.Concrete.Concrete concrete)
 {
     solver.SetConcrete(concrete);
 }