单轴和巴西劈裂

目录

单轴和巴西劈裂

单轴试验

巴西劈裂成样

巴西劈裂预压

巴西劈裂加载


单轴和巴西劈裂


单轴试验


采用双轴实验的chengyang、yuya、jiajiaojie和fracture文件

对岩石进行卸载

restore jiajiaojie
[txx=1e2]
[tyy=1e2]

cycle 1
solve 
save xiezai

设定加载板

restore xiezai
set fish callback -1.0 remove @sevro_walls 

wall delete walls range id 2
wall delete walls range id 4

cycle 1
solve
save jiazaiban

进行加载——直接删掉伺服


巴西劈裂成样


构建圆形试样

new
def par

    sample_radius=0.4
    rdmin=0.006
    rdmax=0.009
    poro=0.12
end
@par

domain extent [-sample_radius*2.0] [sample_radius*2.0] ...
        [-sample_radius*2.0] [sample_radius*2.0]
set random 10001

wall generate circle position 0 0 radius @sample_radius resolution 0.1
;resolution 0.1能够控制圆形的精度,数字越小圆形越精确
ball distribute porosity @poro radius [rdmin] [rdmax] range annulus ...
        center 0 0 radius 0 @sample_radius
;给出圆环的内径和外径
ball attribute density 2e3 damp 0.7
cmat default model linear method deform emod 100e6 kratio 1.5
cycle 2000 calm 50
ball property fric 0.5
solve
save sample

巴西劈裂预压


预压:整个圆形的半径减小,对其进行压缩。控制墙体节点的位移(用伺服实现)

 loop循环结构之foreach

loop foreach <local> var expr1
…
endloop

对顶点进行速度赋值

    loop foreach vt wall.vertexlist(wp)   ;把速度给顶点
        direct=math.unit(wall.vertex.pos(vt)) ;顶点的位置即为速度的方向
        vel_vector=direct*rvel  ;得到矢量
        wall.vertex.vel(vt)=vel_vector
    endloop    

wall.vertexlist 获取墙体上所有顶点

v = wall.vertex.vel(v<,i>)  获取/设置顶点速度。

restore sample

[trr=1e6]  ;应力

[servo_factor=0.5]
[vpOnWall = wall.vertex.find(1)] ;选取在墙体上的一个点
[wp=wall.find(1)] ;得到墙体指针,用在getg部分
;在预压过程中,随着圆形放大或者缩小,圆形的半径发生变化

def calChiCun
    wlr=math.mag(wall.vertex.pos(vpOnWall)) ;得出半径
end
;math.mag对矢量取模

def calStress
    sumForce=0
    loop foreach ct contact.list("ball-facet")
        sumForce+=contact.force.normal(ct)
    endloop
    wsrr=sumForce/(2*math.pi*wlr)  ;应力=总力/周长
end

def getg
    zongKNR=100e6*2.0
    loop foreach ct wall.contactmap(wp)
        zongKNR+=contact.prop(ct,"kn")
    endloop
    gr=1.0*servo_factor*2*math.pi*wlr/(zongKNR*global.timestep)  
end

[sevro_freq=100]
[time_record=global.step-1]
def sevro_wall
    calStress
    if global.step>time_record then
        getg
        time_record=global.step+sevro_freq
    endif   
    
    rvel=gr*(wsrr-trr)   ;根据应力差来计算速度
    
    loop foreach vt wall.vertexlist(wp)   ;把速度给顶点
        direct=math.unit(wall.vertex.pos(vt)) ;顶点的位置即为速度的方向
        vel_vector=direct*rvel
        wall.vertex.vel(vt)=vel_vector
    endloop    
end

set fish callback -1.0 @sevro_wall

history id 1 @wsrr
cycle 1
solve
save yuya


巴西劈裂加载


预压后加胶结并进行卸载

加胶结

卸载

restore jiajiaojie
[trr=1e2]

cycle 1
solve 
save xiezai

加载板

restore xiezai
set fish callback -1.0 remove @sevro_wall ;删去伺服
wall delete
wall create id 1 vertices [-wlr] [wlr] [wlr] [wlr]
wall create id 2 vertices [-wlr] [-wlr] [wlr] [-wlr]
;生成顶板和底板

cycle 1
solve 
save jiazaiban

加载

restore jiazaiban

ball attribute displacement multiply 0
[strainRate=1e-1]
wall attribute yvel [strainRate*wlr*2] range id 2
wall attribute yvel [-strainRate*wlr*2] range id 1

def wall_init
    wpup=wall.find(1)
    wpdown=wall.find(2)
end
@wall_init

def computer_strain
    disp=wall.disp.y(wpup)-wall.disp.y(wpdown)
    stress=(wall.force.contact.y(wpup)-wall.force.contact.y(wpdown))/(math.pi*2*wlr)
    ;2P是上部力和下部力的集合(上部力和下部力方向相反)
    ;2*wlr为其半径,假设此处圆盘只发生小变形,wlr不变
end
set fish callback -1.0 @computer_strain
history delete 
history id 1 @disp
history id 2 @stress

call fracture.p2fis
@track_init
[stop_me=0]
def stop_me
    if weyy>0.2 then
        stop_me=1
    endif
end
solve fishhalt @stop_me

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值