Ultimate limit strength of rectangular RC section (2022.03.18)
- A method of calculation of ultimate limit strength of rectangular RC member using rectangular stress block is described.
- In this document, the positive sign of stress and strain for concretee and compressive reinforcement mean compression, and the positive sign of stress and asrein for tensile reinforcement means tension.
- The calculation program is basically for symmetric rebar arrangement.
General formulas
A rectangular concrete cross section with double reinforcement is considered.
From Bernoulli-Euler hypothsis, the strains of tensile and compressive re-bars can be expressed as followings.
Using above, the stress of re-bar can be calculated as follows.
The height of compressive stress block of cncrete of is defined as follow using the location of neutral axis of .
The axsial force of and the bending moment of can be expressed as followings.
Location of neutral axis
Balanced failure
In the case of balanced failure, following conditions are applied.
- the concrete strain reaches the ultimate strain of .
- the same time, the tensile re-bar stress reaches the yield stress.
From above, the location of neutral axis of can be obtained as follow.
When above is re-defined as , the axial force of for balanced failure can be calculated using .
Pure bending
In case of pure bending, following conditions are applied.
- the axial force is zero ().
- the concrete strain has reached the ultimate strain of .
- if , the failure mode is tensile failure. This means the tensile re-bar stress has reached the yield stress.
- if , the failure mode is compressive failure. This means the compressive re-bar stress has reached the yield stress.
From above, the location of neutral axis of can be obtained as a root of following quadratic eqiation which is derived from calculation formula of .
For tensile failure ()
For compressive failure ()
Root of quadratic equation
Calculation of ultimate strength
Constants based on BS 8110-1
Calculation steps
Step | Description |
---|---|
1 | Inpput parameters |
3 | Calculate neutral axis for balanced failure and pure bending |
2 | Specify neutral axis |
3 | Calculate axial force and moment |
4 | Draw M-N diagram |
Program
import numpy as np import matplotlib.pyplot as plt def drawfig(a_ax,a_mo,tstr): fsz=10 xmin=0 ; xmax=5; dx=1 ymin=-10; ymax=30; dy=5 iw,ih=5,5 plt.figure(figsize=(iw,ih),facecolor='w') plt.rcParams['font.size']=fsz plt.rcParams['font.family']='sans-serif' plt.xlim([xmin,xmax]) plt.ylim([ymin,ymax]) plt.xlabel('Bending moment M/b/h**2 (MPa)') plt.ylabel('Axialforce N/b/h (MPa)') plt.xticks(np.arange(xmin,xmax+dx,dx)) plt.yticks(np.arange(ymin,ymax+dy,dy)) plt.grid(color='#999999',linestyle='solid') plt.title(tstr,loc='left',fontsize=fsz) plt.plot(a_mo,a_ax,'o-',ms=4,clip_on=False) plt.tight_layout() fnameF='fig_mn_rebar1.jpg' plt.savefig(fnameF, dpi=100, bbox_inches="tight", pad_inches=0.1) #plt.show() def pure_bend(fcu,beta1,beta2,ecu,fy,rms,Es,ast,asc,dd,dc,bb,ax0): ax=0 # axial force if 0<ax0: # tensile failure c1=beta2*fcu*bb*beta1 c2=asc*Es*ecu-ast*fy/rms-ax c3=-asc*Es*dc*ecu else: # compressive failure c1=beta2*fcu*bb*beta1 c2=ast*Es*ecu+asc*fy/rms-ax c3=-ast*Es*dd*ecu x=(-c2+np.sqrt(c2**2-4*c1*c3))/2/c1 # neutral axis return x def cal_mn(bb,hh,fcu,x,dd,dc,cc,beta1,beta2,ecu,Es,fy,rms,ast,asc): et=(dd-x)/x*ecu ec=(x-dc)/x*ecu sigt=Es*et sigc=Es*ec if fy/rms < sigt: sigt=fy/rms if sigt < -fy/rms: sigt=-fy/rms if fy/rms < sigc: sigc=fy/rms if sigc < -fy/rms: sigc=-fy/rms aa=beta1*x if hh<aa: aa=hh ax=beta2*fcu*bb*aa-ast*sigt+asc*sigc mo=beta2*fcu*bb*dd**2*(aa/dd)*(1-1/2*(aa/dd))+asc*sigc*(dd-dc)-ax*cc return ax,mo def calc(fcu,fy,bb,hh,ast,asc,dt,dc): # constants rmc=1.5 # partial safety factor for concrete rms=1.05 # partial safety factor for reinforcement beta1=0.9 # coefficient for height of concrete stress block beta2=0.67/rmc # coefficient for width of concrete stress block Es=200000 # elastic modulus of reinforcement ecu=0.0035 # ultimate strain of concrete dd=hh-dt cc=hh/2-dt # Balanced failure x0=dd/(1+fy/rms/Es/ecu) ax0,mo0=cal_mn(bb,hh,fcu,x0,dd,dc,cc,beta1,beta2,ecu,Es,fy,rms,ast,asc) # Pure bending xb=pure_bend(fcu,beta1,beta2,ecu,fy,rms,Es,ast,asc,dd,dc,bb,ax0) # Max and Min axial force ax_max=beta2*fcu*bb*hh+ast*fy/rms+asc*fy/rms ax_min=-(ast*fy/rms+asc*fy/rms) # Definition of neutral axis for calculation xxx=np.linspace(1,1.2*hh,20) xxx=np.concatenate([xxx,[x0,xb]]) xxx=np.sort(xxx) # calculation a_ax=np.zeros(len(xxx),dtype=np.float64) a_mo=np.zeros(len(xxx),dtype=np.float64) for i,x in enumerate(xxx): ax,mo=cal_mn(bb,hh,fcu,x,dd,dc,cc,beta1,beta2,ecu,Es,fy,rms,ast,asc) a_ax[i]=ax a_mo[i]=mo a_ax=a_ax/bb/hh a_mo=a_mo/bb/hh**2 a_ax=np.concatenate([a_ax,[ax_max/bb/hh,ax_min/bb/hh]]) a_mo=np.concatenate([a_mo,[0,0]]) ii=np.argsort(a_ax) a_ax=a_ax[ii] a_mo=a_mo[ii] return a_ax,a_mo def main(): # parameteers fcu=30 # concrete strength fy=460 # yield strength of reinforcement bb=2000 # width of member hh=2000 # height of member ast=np.pi*32**2/4*20 # section area of tensile reinforcement asc=np.pi*32**2/4*20 # section area of compressive reinforcement dt=200 # cover of tensile reinforcement dc=200 # cover of compressive reinforcement a_ax,a_mo=calc(fcu,fy,bb,hh,ast,asc,dt,dc) tstr='2T32ctc200x2layer,double,bxh=2000x2000' drawfig(a_ax,a_mo,tstr) #--------------- # Execute #--------------- if __name__ == '__main__': main()
Example of analysis result
Thank you.