/// <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); }
/// <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); }