采用pfc模拟岩土工程领域地基处理中的振动密实法。 通过clump构建振冲器或振动杆。
在岩土工程里处理软弱地基,振动密实法是个狠角色。想要在颗粒流(PFC)里复现这个过程,得先解决两个核心问题:怎么造出能振动的钢杆,以及如何让颗粒体系产生密实效果。咱们直接从建模开整。

先说振冲器的造型设计。PFC的clump功能最适合用来捏这种不规则刚体。下面这段代码搞了个带锥形头的振动杆:
fish
; 生成振冲器主体
clump template create name='vibrator' ...
position 0 0 0 ...
nodes 0 0 0 0.3 0.5 0.3 0.5 0.3 0.5 ;锥头坐标
pebbles 0.2 0.25 0.3 ;不同粒径的鹅卵石组合
; 实际生成振动杆
clump create template 'vibrator' ...
position 5 5 10 ...
material steel ;自定义钢材参数
group 'vibrator_group'
这里用pebbles参数搞了个渐变截面,模拟真实振冲器的锥形头。材料参数里记得给杨氏模量设个2e8 Pa以上的值,毕竟钢杆可不能随便变形。
振动逻辑才是重头戏。要让clump动起来,得在每次计算循环里更新受力状态:
fish
[global freq = 30.0] ;振动频率
[global amp = 0.15] ;振幅
fish define apply_vibration
local clp = clump.find(1)
local t = mech.time.total
local phase = 2*math.pi*freq*t
;施加正弦波式的激振力
clp.force.x = 80000 * math.sin(phase)
clp.force.z = 150000 * (math.cos(phase/2) - 1)
;加个扭矩模拟旋转振动
clp.torque.y = 5e4 * math.sin(phase*0.8)
end
这个振动函数里混入了轴向振动和旋转振动,更接近现场施工时的情况。注意z方向的力用了个变形波形,模拟冲击贯入力。

参数调试阶段最容易翻车。建议搞个实时监控:
fish
; 在计算循环里插个监测
fish define monitor_density
local meas_ball = measure.ball(1)
current_density = meas_ball.porosity
if mech.time.total % 0.1 == 0
io.out('当前孔隙比: '+string(current_density))
endif
end
孔隙比突然下降太快?可能是振动参数过猛导致颗粒飞溅。这时候该回头调调amp和freq这对冤家,通常频率控制在20-50Hz,振幅别超过粒径的1/3。
最后来个工程应用实例------模拟分层振冲:
fish
fish define layered_compaction
loop layer from 1 to 5
;贯入阶段
clp.pos.z = 10 - layer*2.0
mech.solve(1000) ;贯入耗时
;振动密实阶段
loop vib_step from 1 to 30
apply_vibration
mech.solve(50)
end_loop
end_loop
end
这个分层下压配合间歇振动的策略,能有效避免过冲。跑完模拟后用measure sphere做个体密度检测,对比处理前后的孔隙率变化,效果立竿见影。

搞振动模拟最怕能量不守恒。建议在代码里加个能量审计:
fish
fish define energy_check
local ke = mech.kinetic
local strain = mech.strain
io.out('动能/应变能比值: '+string(ke/strain))
end
比值突然飙高说明可能有数值不稳定,该检查时间步长或接触刚度了。记住,好的振动模拟应该像打桩机作业------动静结合,张弛有度。