damyarou

python, GMT などのプログラム

設計 圧縮材のせん断と引張に対する安全率

記事の最後に行く

Safety Factor for Shear Strength and Tensile Strength

The definitions of symbols are shown below in this discussion considering compression members such as concrete or rock material.

 c cohesion of material
 \phi internal friction angle of material
 \sigma_tuniaxial tensile strength of material (positive value)
 \sigma_1first principal stress
 \sigma_2second principal stress


f:id:damyarou:20190521131705j:plain

Referring above figure, following distances on  \sigma- \tau plane can be defined.


\begin{align}
& D_1=\left(c-\cfrac{\sigma_1+\sigma_2}{2}\cdot \tan\phi\right)\cdot \cos\phi & \quad 
& d_1=D_1-\cfrac{\sigma_1-\sigma_2}{2} \\
& D_2=\sigma_t-\cfrac{\sigma_1+\sigma_2}{2} & \quad
& d_2=\sigma_t-\sigma_1
\end{align}

From above, the safety factors for shear strength and for tensile strength can be defined as follows, generally.


\begin{align}
&\text{For shear strength}   & &SF_1=\cfrac{D_1}{D_1-d_1}\\
&\text{For tensile strength} & &SF_2=\cfrac{D_2}{D_2-d_2}
\end{align}

Next, a special case is considered. Since there is the following relationship which can be understood from a figure shown above, the safety factors should be defined for a case of  \sigma_1=\sigma_2.


\begin{equation}
D_1-d_1=D_2-d_2=\cfrac{\sigma_1-\sigma_2}{2}
\end{equation}

In this case, the safety factors for each strength will be defined as follows.


\begin{equation}
\text{For shear strength} \quad SF_1=
\begin{cases}
\infty & & (\sigma_1 \lt \sigma_t) \\
0      & & (\sigma_t \leqq \sigma_1)
\end{cases}
\end{equation}

\begin{equation}
\text{For tensile strength} \quad SF_2=
\begin{cases}
\infty              & & (\sigma_1 \leqq 0) \\
\sigma_t / \sigma_1 & & (0 \lt \sigma_1)
\end{cases}
\end{equation}

Finally, the minimum safety factor can be obtained as follow.


\begin{equation}
SF_{min}=min(SF_1, SF_2)
\end{equation}

作図プログラム

import numpy as np
import matplotlib.pyplot as plt


# global variables
sigt=3
sigc=-8
phi=np.arcsin((np.abs(sigc)-sigt)/(np.abs(sigc)+sigt))
cc=np.abs(sigc)*sigt/(np.abs(sigc)+sigt)/np.cos(phi)
aa=cc/np.tan(phi)
ps1=0.2*sigc
ps2=0.9*sigc


def barrow(x1,y1,x2,y2,ss,dd,ii):
    # (x1,y1),(x2,y2):両矢印始点と終点
    # 両矢印始点と終点座標は文字列の傾きを考慮して決定する
    # ss:描画文字列
    # dd:文字列中央の寸法線からの距離
    # ii:1なら寸法線の上側,2なら寸法線の下側にテキストを描画
    col='#333333'
    arst='<->,head_width=3,head_length=10'
    aprop=dict(arrowstyle=arst,connectionstyle='arc3',facecolor=col,edgecolor=col,shrinkA=0,shrinkB=0,lw=1)
    plt.annotate('',
        xy=(x1,y1), xycoords='data',
        xytext=(x2,y2), textcoords='data', fontsize=0, arrowprops=aprop)
    al=np.sqrt((x2-x1)**2+(y2-y1)**2)
    cs=(x2-x1)/al
    sn=(y2-y1)/al
    rt=np.degrees(np.arccos(cs))
    if y2-y1<0: rt=-rt
    if ii==1:
        xs=0.5*(x1+x2)-dd*sn
        ys=0.5*(y1+y2)+dd*cs
        plt.text(xs,ys,ss,ha='center',va='center',rotation=rt)
    else:
        xs=0.5*(x1+x2)+dd*sn
        ys=0.5*(y1+y2)-dd*cs
        plt.text(xs,ys,ss,ha='center',va='center',rotation=rt)
        
    
def draw_axes(xmin,xmax,ymin,ymax):
    # 座標軸描画
    col='#000000'
    arst='<|-,head_width=0.3,head_length=0.5'
    aprop=dict(arrowstyle=arst,connectionstyle='arc3',facecolor=col,edgecolor=col,lw=1)
    plt.annotate(r'$\sigma$',
        xy=(xmin,0), xycoords='data',
        xytext=(xmax,0), textcoords='data', fontsize=20, ha='left',va='center', arrowprops=aprop)
    plt.annotate(r'$\tau$',
        xy=(0,0), xycoords='data',
        xytext=(0,ymax), textcoords='data', fontsize=20, ha='center',va='bottom', arrowprops=aprop)
    

def drawfig(xmin,xmax,ymin,ymax,fsz):
    # x-y axses
    draw_axes(xmin,xmax,0,ymax)
    # failure criterion
    x1=sigt   ; y1=0
    x2=sigt ; y2=cc-x2*np.tan(phi)
    x3=sigc ; y3=cc-x3*np.tan(phi)
    plt.plot([x1,x2,x3],[y1,y2,y3],'-',color='#ff0000',lw=3)
    xs=0.5*sigc; ys=cc-xs*np.tan(phi)
    strs="Mohr-Coulomb's Failure Criteria\n$\\tau=c-\sigma\cdot\\tan{\phi}$"
    plt.text(xs,ys+0.08*(ymax),strs,ha='center',va='center',rotation=-np.degrees(phi),fontsize=fsz-4)    
    theta=np.linspace(np.pi-phi,np.pi,20,endpoint=True)
    r1=0.07*(xmax-xmin)
    x=r1*np.cos(theta)+x2
    y=r1*np.sin(theta)+y2
    plt.plot(x,y,'-',color='#000000',lw=1)
    r2=r1*0.9
    x=r2*np.cos(theta)+x2
    y=r2*np.sin(theta)+y2
    plt.plot(x,y,'-',color='#000000',lw=1)
    plt.text(sigt-r1,y2,r'$\phi$',ha='right',va='bottom',color='#000000')
    plt.plot([0.5*sigt,x2],[y2,y2],'-',color='#000000',lw=1)
    # Mohr circle
    theta=np.linspace(0,np.pi,180,endpoint=True)
    rr=(ps1-ps2)/2
    psm=(ps1+ps2)/2
    x=rr*np.cos(theta)+psm
    y=rr*np.sin(theta)
    plt.plot(x,y,'-',color='#0000ff',lw=2)
    # points
    x=np.array([ps2,psm,ps1,sigt])
    y=np.array([0,0,0,0])
    plt.plot(x,y,'o',color='#000000',clip_on=False)

    ds=0.01*(ymax)
    plt.text(ps2-ds,0,r'$\sigma_2$',va='bottom',ha='right',fontsize=fsz)
    plt.text(psm,-ds,r'$\frac{\sigma_1+\sigma_2}{2}$',va='top',ha='center',fontsize=fsz)
    plt.text(ps1+ds,0,r'$\sigma_1$',va='bottom',ha='left',fontsize=fsz)
    plt.text(sigt+ds,0,r'$\sigma_t$',va='bottom',ha='left',fontsize=fsz)
    plt.plot([0],[cc],'o',color='#000000')
    plt.text(0.1,cc,r'$c$',va='bottom',ha='left',fontsize=fsz)

    ds=0.05*(ymax)
    ddl1=(cc-psm*np.tan(phi))*np.cos(phi)
    dds1=ddl1-rr
    ddl2=sigt-psm
    dds2=sigt-ps1
    dds=ds; dx=dds*np.cos(phi); dy=dds*np.sin(phi)
    x1=psm; y1=0; x2=psm+ddl1*np.sin(phi); y2=ddl1*np.cos(phi); barrow(x1,y1,x2,y2,r'$D_1$',ds,1)
    x1=psm+rr*np.sin(phi)+dx; y1=rr*np.cos(phi)-dy; x2=x2+dx; y2=y2-dy; barrow(x1,y1,x2,y2,r'$d_1$',ds,2)
    x1=psm-rr*np.cos(np.radians(20)); y1=rr*np.sin(np.radians(20)); x2=psm; y2=0; barrow(x1,y1,x2,y2,r'$\frac{\sigma_1-\sigma_2}{2}$',ds,1)
    dy=0.05*(ymax)
    x1=ps1; y1=-1*dy; x2=sigt; y2=y1; barrow(x1,y1,x2,y2,r'$d_2$',ds,2)
    x1=psm; y1=-3*dy; x2=sigt; y2=y1; barrow(x1,y1,x2,y2,r'$D_2$',ds,2)

    
    
def main():
    xmin=sigc-1; xmax=aa+1
    ymax=cc-xmin*np.tan(phi); ymin=-0.2*ymax
    fsz=20   # fontsize
    iw=10     # image width
    ih=iw*(ymax-ymin)/(xmax-xmin)
    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.axis('off')
    plt.gca().set_aspect('equal',adjustable='box')

    drawfig(xmin,xmax,ymin,ymax,fsz)

    plt.tight_layout()
    fnameF='fig_mohr2.jpg'
    plt.savefig(fnameF, dpi=200, bbox_inches="tight", pad_inches=0.1)
    plt.show()


#==============
# Execution
#==============
if __name__ == '__main__': main()

Thank you.

記事の先頭に行く