private void _calc_service_NA(double modRatio) //calculate neutral axis without axial load
        {
            this.calcReinf();
            double          crackedNA        = 0;
            double          compressionDepth = 1;//_radius/2*.8999633;
            double          targetNA         = _radius - compressionDepth;
            CircularSegment compressionBlock = new CircularSegment(_radius, compressionDepth);
            double          increment        = 12.321;

            while (targetNA != crackedNA)
            {
                crackedNA = (ReinforcingFirstMoment + (compressionBlock.Area * compressionBlock.CG) / modRatio) / (ReinforcingArea + compressionBlock.Area / modRatio);
                if (Math.Round(crackedNA, 6) == Math.Round(targetNA, 6))
                {
                    break;
                }
                else if (targetNA > crackedNA)
                {
                    compressionDepth += increment;
                }
                else
                {
                    increment        *= 0.5;
                    compressionDepth -= increment;
                }
                targetNA = _radius - compressionDepth;
                compressionBlock.CompressionDepth = compressionDepth;
            }
            _cracked_NA = crackedNA;
        }
        private void _calc_cracked_moment_of_inertia(double modRatio)
        {
            //_calc_service_NA(modRatio);
            CircularSegment compressionBlock = new CircularSegment(_radius, _radius - _cracked_NA);

            this.calcReinf();
            _cracked_moment_of_inertia = ReinforcingInertia + ReinforcingArea * Math.Pow((_cracked_NA - ReinforcingCG), 2) +
                                         (compressionBlock.Cracked_I + compressionBlock.Area * Math.Pow(_cracked_NA - compressionBlock.CG, 2)) / modRatio;
        } //calculate moment of inertia without axial load
        private double[,] _concrete_service_terms(double radius, double neutralAxis, double stress, int increments) //calculate total concrete force, moment and CG
        {
            CircularSegment compressionBlock = new CircularSegment();

            compressionBlock.Radius = radius;
            double stressIncrement           = stress / increments;
            double compressionDepthIncrement = (radius - neutralAxis) / increments;
            double force       = 0;
            double firstMoment = 0;

            double[,] outputTerms = new double[1, 3];

            for (int i = 0; i < increments; i++)
            {
                compressionBlock.CompressionDepth = (radius - neutralAxis) - compressionDepthIncrement * (i + 0.5);
                force       += compressionBlock.Area * stressIncrement;
                firstMoment += compressionBlock.Area * compressionBlock.CG * stressIncrement;
            }
            outputTerms[0, 0] = force;               //total concrete force
            outputTerms[0, 1] = firstMoment / force; // concrete force CG
            outputTerms[0, 2] = firstMoment / 12;    //total concrete force moment
            return(outputTerms);
        }