By Zhan Congcong
Eamil:zhanccmail@126.com
一、单轴压缩试验
岩石在单轴压缩载荷作用下达到破坏前所能承受的最大压应力称为岩石的单轴抗压强度(uniaxial compressive strength),或称为非限制性抗压强度(unconfined compressive strength)。国际上通常将单轴抗压强度表示为UCS,我国则习惯表示为。
试样在单轴压缩荷载作用下破坏时,可产生三种破坏形式:

(1)X状共轭斜面破坏。破坏面法线与荷载轴向的夹角,式中
为岩石的内摩擦角。该种破坏形式为最常见的破坏形式。
(2)单斜面剪切破坏。角与X状共轭斜面破坏定义相同,且这两种破坏形式均是由于破坏面上的剪应力超过了极限所引起,被视为剪切破坏。
(3)拉伸破坏。在轴向压应力作用下横向将产生拉应力,这是泊松效应的结果。这种破坏是由于横向拉应力超过了岩石的抗拉极限所形成的。
单轴压缩强度同岩石的其它强度参数一样,并不是岩石的固有属性。故而在通过试件确定岩石的强度指标值时会受到各种因素的影响:
(1)试件尺寸。随尺寸的增大,测得的岩石强度值增大。这种岩石强度的尺寸效应通常用岩石内部的裂隙分布来解释。
(2)试件形状。使用长方体、正方体及圆柱体得到强度值通常不同。
(3)尺寸比例。在进行单轴压缩或拉伸试验时,宽高比越大测得的强度值越大。

(4)加载速率。岩石的单轴压缩强度与加载速率成正比,加载速率越大测得的强度值越大。
(5)湿度。例如,页岩和一些沉积岩在饱和水时测得的强度值较干试件会下降一半。
为了保证岩石强的试验所获得的指标具有可比性,国际岩石力学学会(ISRM)对岩石强度试验所使用的试件的形状、尺寸、加载速率和湿度等制定了相应的标准。
对于单轴压缩试验,推荐的试件形状为直径不小于50mm的圆柱;加载速率为0.5~1.0MPa/s;试件的高度(L)与直径(D)径比为2.5~3;试件保存期不超过30天,尽可能保持其天然含水条件。对于不符合标准试件和标准试验条件的强度指标必须进行相应修正。
二、PFC模拟的命令流代码
1.制作样品
model new
model title 'UCS_TEST'
model domain extent -0.05 0.05 -0.05 0.05 -0.1 0.1 condition destroy
contact cmat default model linear method deformability emod 1.0e9 kratio 0.0
contact cmat default property dp_nratio 0.5
wall generate id 1 plane dip 0 dip-direction 0 position 0 0 0.04
wall generate id 2 plane dip 0 dip-direction 0 position 0 0 -0.04
wall generate id 3 plane dip 90 dip-direction 90 position -0.025 0 0
wall generate id 4 plane dip 90 dip-direction 90 position 0.025 0 0
wall generate id 5 plane dip 90 dip-direction 0 position 0 -0.025 0
wall generate id 6 plane dip 90 dip-direction 0 position 0 0.025 0
model random 10002
ball distribute porosity 0.2 radius 1.0e-3 1.5e-3 ...
box -0.025 0.025 -0.025 0.025 -0.04 0.04
ball attribute density 2500 damp 0.7
model cycle 1000 calm 10
model mechanical timestep scale
model solve ratio-average 1e-4
model mechanical timestep auto
model calm
wall delete walls range id 3 6
ball delete range cylinder end-1 0 0 -0.04 end-2 0 0 0.04 rad 0.015 not
model save 'unbonded'
2.胶结样品
model restore 'unbonded'
contact model linearpbond range contact type 'ball-ball'
contact method bond gap 2.0e-4
contact method pb_deformability emod 12e9 kratio 3.0
contact property pb_ten 13e6 pb_coh 20e6 pb_fa 10
contact property dp_nratio 0.7
contact property fric 0.4 range contact type 'ball-ball'
ball attribute displacement multiply 0.0
contact property lin_force 0.0 0.0 0.0 lin_mode 1
ball attribute force-contact multiply 0.0 moment-contact multiply 0.0
model cycle 1
model solve ratio-average 1e-5
model save 'parallel_bonded'
3.进行加载计算
import itasca as it
it.command("python-reset-state false")
from itasca import ballarray as ba
from itasca import ball as balls
from itasca import contact as contacts
import numpy as np
import matplotlib.pylab as plt
it.command("""
model restore 'parallel_bonded'
echo off
call 'ss_wall.fis'
call 'fracture.p3fis'
echo on
; set up global parameters for stress and strain measurement
@setup_wall
[u=0.05]
; apply loading by moving top and bottom walls
wall attribute velocity-z [-u] range id 1
wall attribute velocity-z [u] range id 2
; apply a small amount of damping
ball attribute damp 0.1
;v = stress/dt
fish define user_v
local force1 = -wall.force.contact(wp_top,vertical_direction)
local force2 = wall.force.contact(wp_bottom,vertical_direction)
axial_stress_wall = 0.5*(force1+force2)/cross_sectional_area
user_v = axial_stress_wall/(2.0*wall.disp(wp_top,vertical_direction)/u)
end
history delete
@track_init
fish history name 1 @crack_num
fish history name 2 @user_v
""")
strain = []
stress = []
plt.plot(strain, stress)
plt.title("Stress vs Strain")
plt.xlabel("Strain [%]")
plt.ylabel("Stress [MPa]")
plt.grid(True)
plt.draw()
def store_force(*args):
"""This function is called during |pfc| cycling to record the stress
strain curve.
"""
if it.cycle() % 100: return
strain.append(abs(it.fish.call_function('@axial_strain_wall'))*100)
stress.append(abs(it.fish.call_function('@axial_stress_wall'))/1e6)
plt.gca().clear()
plt.xlabel("Strain [%]")
plt.ylabel("Stress [MPa]")
plt.grid(True)
plt.plot(strain, stress)
plt.draw()
it.set_callback("store_force", 43.0)
it.command("""
; cycle a few steps to get past initial vibations
model cycle 1000
""")
it.command("""
; run the test until stress falls below 70% of the peak
[peak_fraction = 0.7]
model solve fish-halt @loadhalt_wall
list @peak_stress
""")
speak = np.amax(stress)
ipeak = np.argmax(stress)
epeak = strain[ipeak]/100.0
i50 = int(0.5*ipeak)
s50 = stress[i50]*1e6
e50 = strain[i50]/100.0
emod50 = s50 / e50 / 1e9
txtE = r'$E_{{50}}={:.1f} GPa$'.format(emod50)
txtS = r'$UCS = {:.1f} MPa$'.format(speak)
plt.text(0.25*100*e50,0.5*speak, txtE,fontsize=12)
plt.text(0.65*100*epeak,1.0*speak, txtS,fontsize=12)
plt.draw()
plt.savefig('p3d-test-ucs.png')
plt.close('all')
#by Zhan Congcong
#Email:zhanccmail@126.com
4.其它文件
计算过程需要ss_wall.fis和fracture.p3fis文件用于计算墙体位置、应力以及统计裂纹。
参考资料:
【1】岩石力学与工程(第二版),科学出版社
【2】PFC程序文档,ITASCA