PFC3D 6.0的单轴压缩试验

By Zhan Congcong

Eamil:zhanccmail@126.com

一、单轴压缩试验

岩石在单轴压缩载荷作用下达到破坏前所能承受的最大压应力称为岩石的单轴抗压强度(uniaxial compressive strength),或称为非限制性抗压强度(unconfined compressive strength)。国际上通常将单轴抗压强度表示为UCS,我国则习惯表示为\sigma_c

试样在单轴压缩荷载作用下破坏时,可产生三种破坏形式:

图1 单轴压缩试件破坏状态示意图

        (1)X状共轭斜面破坏。破坏面法线与荷载轴向的夹角\beta=\frac{\pi}{4}+\frac{\phi}{2},式中\phi为岩石的内摩擦角。该种破坏形式为最常见的破坏形式。

        (2)单斜面剪切破坏。\beta角与X状共轭斜面破坏定义相同,且这两种破坏形式均是由于破坏面上的剪应力超过了极限所引起,被视为剪切破坏。

        (3)拉伸破坏。在轴向压应力作用下横向将产生拉应力,这是泊松效应的结果。这种破坏是由于横向拉应力超过了岩石的抗拉极限所形成的。

单轴压缩强度同岩石的其它强度参数一样,并不是岩石的固有属性。故而在通过试件确定岩石的强度指标值时会受到各种因素的影响:

        (1)试件尺寸。随尺寸的增大,测得的岩石强度值增大。这种岩石强度的尺寸效应通常用岩石内部的裂隙分布来解释。

        (2)试件形状。使用长方体、正方体及圆柱体得到强度值通常不同。

        (3)尺寸比例。在进行单轴压缩或拉伸试验时,宽高比越大测得的强度值越大。

\sigma_c=\frac{\sigma_c'}{0.778+0.222\frac{D}{L}}

图2 试验得到的单轴压缩强度与试样高度直径比的关系

        (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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值