本文摘要(由AI生成):
文章描述了使用离散元法(DEM)模拟土墙在不同条件下的力学行为。首先,计算了墙体的尺寸和应力分布。然后,通过放大重力加速度模拟了墙体的自重影响,并进行了平衡。接着,通过删除颗粒模拟边坡开挖过程,计算了开挖后边坡的位移和力链变化。结果显示,边坡开挖后滑坡明显,力链发生重分布。
滑坡、隧道、基坑算是岩土的三大问题了,这篇文章叙述一下砂土滑坡离散元模拟的标准过程。这里也是我自己的经验总结,不一定和传统的做法完全一致。
先说一下砂土滑坡的模拟步骤为:成样、预压、自重、切坡
这部分也是经常做的事情,不多讲,注意这里的摩擦系数最好不要加,原因在后面说。
new
def par
width=2.0
height=width*0.5
rdmax=0.009
rdmin=0.006
poro=0.08
end
@par
domain extent [-height*5] [height*5]
set random 10001
wall generate box [-width*0.5] [width*0.5] [-height*0.5] [height*0.5] expand 1.5
ball distribute porosity @poro radius @rdmin @rdmax box [-width*0.5] [width*0.5] ...
[-height*0.5] [height*0.5]
cmat default model linear method deformability emod 100e6 kratio 1.5
ball attribute density 2.7e3 damp 0.7
cycle 2000 calm 50
solve
save sample
关于在边值问题(非单元试验)中是否加入预压过程,我也犹豫过,其实采用砂雨法成样应该才可以真实的模拟现实的过程。但是毕竟是模拟,这里采用预压也是为了释放试样中过大的内应力,这样在自重的时候,试样不至于飞出。
restore sample
[txx=-1e6]
[tyy=-1e6]
[sevro_factor=0.5]
[do_xSevro=true]
[do_ySevro=true]
[sevro_freq=100]
[timestepNow=global.step-1]
def sevro_walls
compute_stress
if timestepNow<global.step then
get_g(sevro_factor)
timestepNow =sevro_freq
endif
if do_xSevro=true then
Xvel=gx*(wxss-txx)
wall.vel.x(wpRight)=-Xvel
wall.vel.x(wpLeft)=Xvel
endif
if do_ySevro=true then
Yvel=gy*(wyss-tyy)
wall.vel.y(wpUp)=-Yvel
wall.vel.y(wpDown)=Yvel
endif
end
def wp_ini
wpDown=wall.find(1)
wpRight=wall.find(2)
wpUp=wall.find(3)
wpLeft=wall.find(4)
end
@wp_ini
def computer_chiCun
wlx=wall.pos.x(wpRight)-wall.pos.x(wpLeft)
wly=wall.pos.y(wpUp)-wall.pos.y(wpDown)
end
def compute_stress
computer_chiCun
wxss=-(wall.force.contact.x(wpRight)-wall.force.contact.x(wpLeft))*0.5/wly
wyss=-(wall.force.contact.y(wpUp)-wall.force.contact.y(wpDown))*0.5/wlx
end
def get_g(fac)
gx=0
gy=0
zongKNX=100e6*2*10
zongKNY=100e6*2*10
loop foreach ct wall.contactmap(wpLeft)
zongKNX =contact.prop(ct,"kn")
endloop
loop foreach ct wall.contactmap(wpRight)
zongKNX =contact.prop(ct,"kn")
endloop
loop foreach ct wall.contactmap(wpUp)
zongKNY =contact.prop(ct,"kn")
endloop
loop foreach ct wall.contactmap(wpDown)
zongKNY =contact.prop(ct,"kn")
endloop
gx=fac*wly/(zongKNX*global.timestep)
gy=fac*wlx/(zongKNY*global.timestep)
end
set fish callback -1.0 @sevro_walls
history id 1 @wxss
history id 2 @wyss
history id 3 @gx
history id 4 @gy
cycle 1
solve
save yuya
这里对应离心机原理,将重力加速度放大n倍,对应现实80m宽40m高的模型。
这里土体参数对应单元试验,也是在预压后加入,我这里没有变形参数,如果改变了变形参数的话,建议自重前再平衡一下。
restore yuya
wall delete walls range id 3
ball property fric 0.5
set gravity [9.8*80/wlx]
set fish callback -1.0 remove @sevro_walls
cycle 1
solve
save zizhong
平衡后,力链图如下所示:
这里采用删除颗粒模拟边坡开挖的过程,这里定义了边坡底部的位置:kengjiaoX与kengjiaoY。和边坡的角度 pojiao。这里设定了截止时间是算10s,这里也可以采用前文说的方法定时保存sav文件。
restore zizhong
ball attribute displacement multiply 0
set mech age 0
[kengjiaoX=wlx*0.5*0.2]
[kengjiaoY=0]
[pojiao=70]
ball delete range plane origin @kengjiaoX @kengjiaoY dip @pojiao above plane origin @kengjiaoX @kengjiaoY dip 0 above
cycle 1
solve time 10
save qiepo
计算前边坡的形状为:
计算完成后边坡的位移图为:
整个滑坡体还是比较明显的。
采用矢量图表示为:
这个也能比较好的看出滑坡带的位置。
力链图为:
可以看出随着滑坡的发生,力链也发生了重分布。