用离散元做动力特性的比较少,前面使用比较经典的落球试验证实了离散元中模拟振动传递及其衰减的可行性(PFC模拟振动衰减)。本文采用桩作为波的输入装置,在桩底平面处布置测点来研究振动的衰减。基本的模拟顺序为:成样、自重、插桩、给参数、振动。
这里成样采用的分层压缩法,生成1*0.5的试样。
new
def par
width=1.0
height= width*0.5
y_vel=10.0
cengshu=8.0
pengzhangxishu=5.0
tbjipei=table.create("jipei")
table(tbjipei,0.004)=0.1
table(tbjipei,0.005)=0.12
table(tbjipei,0.0055)=0.14
table(tbjipei,0.006)=0.3
table(tbjipei,0.0065)=0.6
table(tbjipei,0.007)=0.8
table(tbjipei,0.0075)=0.95
table(tbjipei,0.008)=1
poro=0.12
;dengchaxian=0.02
end
@par
domain extent [-height*10] [height*10]
set random 10001
wall generate box [-width*0.5] [width*0.5] [-height*0.5] [height*(pengzhangxishu-1)-height*0.5] expand 1.5
cmat default model linear method deformability emod 100e6 kratio 1.5
def create_sample
tb_ceng=table.create("ceng_poro")
loop n(1,cengshu)
dibuzuobiao=-height*0.5 height*(n-1)/cengshu
dingbuzuobiao=-height*0.5 height*(n)/cengshu
pengzhangGaoDu=dingbuzuobiao height*(pengzhangxishu-1)/cengshu
command
wall delete walls range id 3
wall create id 3 vertices [-width*0.5*1.5] [pengzhangGaoDu] [width*0.5*1.5] [pengzhangGaoDu]
endcommand
poroceng=poro;-(n-(cengshu 1)*0.5)*dengchaxian/(cengshu-1)
table(tb_ceng,n)=poroceng
keligeoup=table.size(tbjipei)
Vs=height*width*(1-poroceng)/cengshu
cenggName=string.build("ceng%1",n)
loop m(1,keligeoup)
keligid=keligeoup 1-m
vslocal=0
if keligid=1 then
vslocal=Vs*table.y(tbjipei,keligid)
else
vslocal=Vs*(table.y(tbjipei,keligid)-table.y(tbjipei,keligid-1))
endif
kelinum=vslocal/(math.pi*(table.x(tbjipei,keligid)*0.5)^2)
command
ball generate radius [table.x(tbjipei,keligid)*0.5] number [math.ceiling(kelinum)] box [-width*0.5] [width*0.5] ...
[dibuzuobiao] [pengzhangGaoDu] group @cenggName tries 20000
ball attribute density 2.7e3 damp 0.7
endcommand
endloop
command
wall attribute yvel [-y_vel] range id 3
solve time [(pengzhangGaoDu-dingbuzuobiao)/y_vel]
wall attribute yvel 0 range id 3
cycle 2000
endcommand
endloop
end
@create_sample
solve
save sample
成样的结果为:
第二步是加自重:
restore sample
set gravity [80*9.8/width]
cycle 1
solve
save zizhongtemp1
wall delete walls range id 3
cycle 1
solve
save zizhong
自重后的结果为:
第三步为插桩,这里修改了一下之前的插桩程序,将删除颗粒与生成wall放在一起,而且将删除颗粒的区域设置的比桩的区域大一点。这样的物理意义为是挖土插桩而不是将桩挤入土中。
restore zizhong
[chicunbi=80/width]
[pile_pos_x=-width*0.5*0.5]
[pile_length=28/chicunbi]
[pile_bizhi=0.9]
[pile_rad=0.5/chicunbi]
def get_max_pos
tu_height=1e-100
loop foreach bp ball.list
ball_shang_pos_y=ball.pos.y(bp) ball.radius(bp)
if ball_shang_pos_y>tu_height then
tu_height=ball_shang_pos_y
endif
endloop
end
@get_max_pos
wall generate box [pile_pos_x-pile_rad] [pile_pos_x pile_rad] [tu_height-pile_length*0.9] [tu_height pile_length*0.1] onewall
ball delete range x [pile_pos_x-pile_rad*1.3] [pile_pos_x pile_rad*1.3] y [tu_height-pile_length*0.9] [tu_height pile_length*0.1]
cycle 1
solve
save addpile
插入桩的状态为:
最后一步为桩的振动激励:
restore canshu
ball attribute displacement multiply 0
set mech age 0
[vel_max=-2e-3]
[wp_pile=wall.find(5)]
def addwallvel
whilestepping
pinlv=1 199*mech.age
y_vel=vel_max*math.sin(2*math.pi*pinlv*mech.age math.pi)
wall.vel.y(wp_pile)=y_vel
end
@addwallvel
[bp1=ball.near(pile_pos_x 5/chicunbi,tu_height-pile_length*0.9)]
[bp2=ball.near(pile_pos_x 13.5/chicunbi,tu_height-pile_length*0.9)]
[bp3=ball.near(pile_pos_x 25/chicunbi,tu_height-pile_length*0.9)]
[bp4=ball.near(pile_pos_x 39/chicunbi,tu_height-pile_length*0.9)]
[ball.group(bp1,2)="jiance"]
[ball.group(bp2,2)="jiance"]
[ball.group(bp3,2)="jiance"]
[ball.group(bp4,2)="jiance"]
def jiance
whilestepping
time=mech.age
weiyi1_y=ball.disp.y(bp1)
weiyi2_y=ball.disp.y(bp2)
weiyi3_y=ball.disp.y(bp3)
weiyi4_y=ball.disp.y(bp4)
sudu1_y=ball.vel.y(bp1)
sudu2_y=ball.vel.y(bp2)
sudu3_y=ball.vel.y(bp3)
sudu4_y=ball.vel.y(bp4)
end
history id 1 @time
history id 2 @y_vel
history id 3 @weiyi1_y
history id 4 @weiyi2_y
history id 5 @weiyi3_y
history id 6 @weiyi4_y
history id 7 @sudu1_y
history id 8 @sudu2_y
history id 9 @sudu3_y
history id 10 @sudu4_y
[baocunpinlv=0.1] ;;这个是多长时间保存一个save文件
[time_record=mech.age-100]
[count=1]
def savefile
if mech.age-time_record > baocunpinlv then
filename=string.build("jieguo%1",count)
command
save @filename
endcommand
time_record=mech.age
count =1
endif
end
set fish callback -1.0 @savefile
solve time 2
save result
这里给桩施加一个余弦速度,可以设置峰值,这里以扫频的方式输入,即频率在一秒内从1HZ增加到200HZ。
下面为0.3s内速度的变化趋势,可以看出还是满足我们的需求的。
测点布置为:
先看看1s内的时程曲线,可以看出距离越远,其振动是越弱的。而且传递的滞后性也很明显。
但是到0.3s左右的时候,随着桩频率的增加,土体的振动也增加,而且最后的速度幅值超过了输入幅值
后面算到2s左右,振动逐渐变的类似于交通荷载振动的感觉,不知道其内在机理是什么,如果有朋友懂的话可以留言交流一下。
看一下速度场:
0.2s左右还是比较正常的波传递的图。
0.5s的时候,激励的频率逐渐提高,很明显会在模型中出现波谷了。
算到2s的时候基本上就比较乱了,我的专业知识也不足以帮助我分析了。
将时程图做傅里叶变化得到频域图。
下图为桩输入的频域曲线
下图为测点4的频域曲线
可以发现、。。。。。。嗯。。。什么也看不出来,分析不出啥玩意,求动力学专家指导交流。