damyarou

python, GMT などのプログラム

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.


\begin{align}
&b & & \text{width of section} \\
&h & & \text{height of section} \\
\end{align}

From Bernoulli-Euler hypothsis, the strains of tensile and compressive re-bars can be expressed as followings.


\begin{align}
& \epsilon_t=\cfrac{d-x}{x}\cdot \epsilon_{cu} & & +: \text{tensile}\\
& \epsilon_c=\cfrac{x-d'}{x}\cdot \epsilon_{cu} & & +: \text{compressive}
\end{align}

\begin{align}
&\epsilon_t & & \text{strain of tensile re-bar} \\
&\epsilon_c & & \text{strain of compressive re-bar} \\
&\epsilon_{cu} & & \text{ultimate strain of concrete} \\
&x & & \text{location of neutral axis from compressive edge}\\
&d & & \text{effective depth of tensile reinforcement} \\
&d' & & \text{cover of compressive reinforcement}
\end{align}

Using above, the stress of re-bar can be calculated as follows.


\begin{align}
&-f_y/\gamma_m \leq \sigma_s =E_s\cdot \epsilon_t \leq f_y/\gamma_m & & +:\text{tensille}\\
&-f_y/\gamma_m \leq \sigma_s'=E_s\cdot \epsilon_c \leq f_y/\gamma_m & & +:\text{compressive}
\end{align}

\begin{align}
&\sigma_s & & \text{sstress of tensile re-bar} \\
&\sigma_s' & & \text{stress of compressive re-bar} \\
&E_s & & \text{elastic modulus of reinforcement} \\
&f_y & & \text{yield strength of reinforcement} \\
&\gamma_m & & \text{partial safety factor for material}
\end{align}

The height of compressive stress block of cncrete of a is defined as follow using the location of neutral axis of x.


\begin{equation}
a=\beta_1\cdot x \leq h
\end{equation}

\begin{align}
&a & & \text{height of concrete stress block}\\
&\beta_1 & & \text{coefficient for height of concrete stress block}
\end{align}

The axsial force of N and the bending moment of M can be expressed as followings.


\begin{equation}
N=\beta_2\cdot f_{cu}\cdot b\cdot a - A_s\cdot \sigma_s + A_s'\cdot \sigma_s'
\end{equation}

\begin{equation}
M=N\cdot e=\beta_2\cdot f_{cu}\cdot b\cdot d^2 \left(\cfrac{a}{d}\right)
\left\{1-\cfrac{1}{2}\left(\cfrac{a}{d}\right)\right\} + A_s'\cdot \sigma_s'\cdot (d-d')
-N\cdot c
\end{equation}

\begin{align}
&N & & \text{axial force}\\
&M & & \text{bending moment}\\
&e & & \text{distance from centroid to loading point of $N$} \\
&c & & \text{distance from centroid to tensile re-bar}\\
&f_{cu} & & \text{concrete strength} \\
&\beta_2 & & \text{coefficient for width of concrete stress block} \\
&A_s & & \text{section area of tensile reinforcement} \\
&A_s' & & \text{section area of compressive reinforcement} 
\end{align}

f:id:damyarou:20220318143524j:plain

Location of neutral axis

Balanced failure

In the case of balanced failure, following conditions are applied.

  • the concrete strain reaches the ultimate strain of \epsilon_{cu}.
  • the same time, the tensile re-bar stress reaches the yield stress.

From above, the location of neutral axis of x can be obtained as follow.


\begin{gather} 
\epsilon_t=\cfrac{f_y}{\gamma_m\cdot E_s}=\cfrac{d-x}{x}\cdot \epsilon_{cu} \\
x=\cfrac{d}{1+\cfrac{f_y}{\gamma_m\cdot E_s\cdot \epsilon_{cu}}}
\end{gather}

When above x is re-defined as x_0, the axial force of N_0 for balanced failure can be calculated using x_0.

Pure bending

In case of pure bending, following conditions are applied.

  • the axial force is zero (N=0).
  • the concrete strain has reached the ultimate strain of \epsilon_{cu}.
  • if 0 \geq N_0, the failure mode is tensile failure. This means the tensile re-bar stress has reached the yield stress.
  • if N_0 \lt 0, 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 x can be obtained as a root of following quadratic eqiation which is derived from calculation formula of N.

For tensile failure (N=0)


\begin{equation}
\beta_2\cdot f_{cu}\cdot b\cdot \beta_1\cdot x^2
+\left(A_s'\cdot E_s\cdot \epsilon_{cu}-A_s\cdot \cfrac{f_y}{\gamma_m}-N\right)\cdot x
-A_s'\cdot E_s\cdot d'\cdot \epsilon_{cu}=0  
\end{equation}

\begin{align}
&c_1=\beta_2\cdot f_{cu}\cdot b\cdot \beta_1 \\
&c_2=A_s'\cdot E_s\cdot \epsilon_{cu}-A_s\cdot \cfrac{f_y}{\gamma_m}-N \\
&c_3=-A_s'\cdot E_s\cdot d'\cdot \epsilon_{cu}
\end{align}

For compressive failure (N=0)


\begin{equation}
\beta_2\cdot f_{cu}\cdot b\cdot \beta_1\cdot x^2
+\left(A_s\cdot E_s\cdot \epsilon_{cu}+A_s'\cdot \cfrac{f_y}{\gamma_m}-N\right)\cdot x
-A_s\cdot E_s\cdot d\cdot \epsilon_{cu}=0  
\end{equation}

\begin{align}
&c_1=\beta_2\cdot f_{cu}\cdot b\cdot \beta_1 \\
&c_2=A_s\cdot E_s\cdot \epsilon_{cu}+A_s'\cdot \cfrac{f_y}{\gamma_m}-N \\
&c_3=-A_s\cdot E_s\cdot d\cdot \epsilon_{cu}
\end{align}

Root of quadratic equation


\begin{equation}
x=\cfrac{-c_2+\sqrt{c_2{}^2-4\cdot c_1\cdot c_3}}{2\cdot c_1}
\end{equation}

Calculation of ultimate strength

Constants based on BS 8110-1


\begin{align}
&\gamma_m=1.5 & & \text{for concrete} \\
&\gamma_m=1.05 & & \text{for reinforcement} \\
&\beta_1=0.9 & & \text{coefficient for height of concrete stress block} \\
&\beta_2=0.67 / \gamma_m & & =0.447 \quad (\gamma_m=1.5) \\
&E_s=200,000 & & \text{in MPa} \\
&\epsilon_{cu}=0.0035 & & \text{ultimate strain of concrete} \\
\end{align}

f:id:damyarou:20220318144300j:plain

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

f:id:damyarou:20220318143559j:plain

Thank you.