damyarou

python, GMT などのプログラム

設計 圧縮材のせん断強度と圧縮強度・引張強度の関係

記事の最後に行く

Relationship between Shear Strength and Uniaxial 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_cuniaxial compressive strength of material (negative value)
 \sigma_tuniaxial tensile strength of material (positive value)


f:id:damyarou:20190522083439j:plain

Considering a parameter  a, a cohesion  c can be expressed as follow.


\begin{equation}
c=a\cdot \tan\phi
\end{equation}

A radius of Mohr circle for a compressive strength  \sigma_c can be expressed as follow.


\begin{equation}
\cfrac{|\sigma_c|}{2}=\left(a+\cfrac{|\sigma_c|}{2}\right)\cdot \sin\phi
\end{equation}

Using same manner, a radius of Mohr circle for a tensile strength  \sigma_t can be expressed as follow.


\begin{equation}
\cfrac{\sigma_t}{2}=\left(a-\cfrac{\sigma_t}{2}\right)\cdot \sin\phi
\end{equation}

From above relationships, a compressive strength  \sigma_c and a tensile strength  \sigma_t can be obtained as functions of  c and  \phi by erasing parameter  a.


\begin{equation}
|\sigma_c|=\cfrac{2\cdot c\cdot \cos\phi}{1-\sin\phi} \qquad \sigma_t=\cfrac{2\cdot c\cdot \cos\phi}{1+\sin\phi}
\end{equation}

Next, using above relations, following equation can be obtained.


\begin{gather}
2\cdot c\cdot \cos\phi=|\sigma_c|\cdot (1-\sin\phi)=\sigma_t\cdot (1+\sin\phi) \\
|\sigma_c|-\sigma_t=\sin\phi\cdot (|\sigma_c|+\sigma_t) \\
\sin\phi=\cfrac{|\sigma_c|-\sigma_t}{|\sigma_c|+\sigma_t}
\end{gather}

Using above, a cohesion  c can be obtained as follow.


\begin{equation}
c=\cfrac{|\sigma_c|\cdot \sigma_t}{\cos\phi\cdot (|\sigma_c|+\sigma_t)}
\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)


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,ymin,ymax)
    # failure criterion
    x1=aa   ; y1=0
    x2=sigc ; y2=cc-sigc*np.tan(phi)
    plt.plot([x1,x2],[y1,y2],'-',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-ymin),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)+aa
    y=r1*np.sin(theta)
    plt.plot(x,y,'-',color='#000000',lw=1)
    r2=r1*0.9
    x=r2*np.cos(theta)+aa
    y=r2*np.sin(theta)
    plt.plot(x,y,'-',color='#000000',lw=1)
    plt.text(aa-r1,0,r'$\phi$',ha='right',va='bottom',color='#000000')
    # Mohr circle
    theta=np.linspace(0,np.pi,180,endpoint=True)
    rr=sigt/2
    x=rr*np.cos(theta)+rr
    y=rr*np.sin(theta)
    plt.plot(x,y,'-',color='#0000ff',lw=2)
    rr=-sigc/2
    x=rr*np.cos(theta)-rr
    y=rr*np.sin(theta)
    plt.plot(x,y,'-',color='#0000ff',lw=2)
    # points
    x=np.array([sigc,sigc/2,0,sigt/2,sigt,aa])
    y=np.array([0,0,0,0,0,0])
    plt.plot(x,y,'o',color='#000000',clip_on=False)

    ds=0.02*(ymax-ymin)
    ss=[r'$\sigma_c$',r'$\frac{\sigma_c}{2}$',r'$0$',r'$\frac{\sigma_t}{2}$',r'$\sigma_t$',r'$a$']
    for i in range(len(ss)):
        plt.text(x[i],-ds,ss[i],va='top',ha='center',fontsize=fsz)
    plt.plot([0],[cc],'o',color='#000000')
    plt.text(0.1,cc,r'$c$',va='bottom',ha='left',fontsize=fsz)

    ds=0.08*(ymax-ymin)
    x2=-cc*np.cos(phi); y2=cc+cc*np.sin(phi); x1=sigc/2; y1=0; barrow(x1,y1,x2,y2,r'$\frac{|\sigma_c|}{2}$',ds,1)
    x2=cc*np.cos(phi); y2=cc-cc*np.sin(phi); x1=sigt/2; y1=0; barrow(x1,y1,x2,y2,r'$\frac{\sigma_t}{2}$',ds,1)
    
    
    
def main():
    xmin=sigc-1; xmax=aa+1
    ymin=0     ; ymax=cc-xmin*np.tan(phi)
    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_mohr1.jpg'
    plt.savefig(fnameF, dpi=200, bbox_inches="tight", pad_inches=0.1)
    plt.show()


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

Thank you.

記事の先頭に行く