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