pfc5.0代码 土石边坡滑坡,代码包括不规则clump导入,生成边坡,诱导破坏。
导入clump千万别傻乎乎手搓坐标,我一般直接调用预制模板:
clump template create name=rock1 ...
position 0.0 0.0 0.0 ...
pebble count 3 ...
pebble position -0.5 -0.3 0.0 ...
pebble position 0.4 0.2 0.0 ...
pebble position 0.1 0.5 0.0
这里有个骚操作——用Python批量生成模板文件,直接循环读取地质勘探的颗粒扫描数据。之前手输坐标把键盘都磨秃了,后来发现用numpy处理点云数据转clump模板,效率直接起飞。
边坡生成这块有个坑要注意,别直接用wall generate命令莽:
wall generate name=slope ...
polygon (0,0) (15,0) (15,10) (5,10) (0,5) ...
segment 10
这种规则边坡看着就像美颜过度的网红脸,实际得用地质剖面数据插值生成。我通常把勘察数据存成csv,用下面这个循环建wall:
[loop local i = 1,10]
wall import nodes fromfile 'profile.csv' skip [i]
更野的路子是直接调用PFC的FISH语言写随机地形生成器,加入断层系数和起伏参数,这样出来的边坡才有那味儿。

诱导滑坡这块我翻车过三次。开始傻傻地直接调重力加速度:
model gravity 20
结果颗粒直接满天飞,场面堪比烟花现场。后来发现得先让边坡静力平衡:
model solve ratio 1e-5
model save 'stable'
然后才是骚操作时间——要么突然移除支护结构:
wall delete range id 5
要么在坡脚搞个"爆破":
fish define detonate
loop foreach local ball ball.list
if ball.pos.x(ball) < 5
ball.force.app = vector(0,-1e5,0)
endif
endloop
end
@detonate
最近发现个邪道玩法:用thermal命令给特定区域颗粒加热,通过热膨胀诱发失稳。实测效果拔群,颗粒飞溅的轨迹特别带劲。
监控数据记得用history全方位覆盖:
history id=1 name='displacement' ball velocity id 235
history id=2 name='energy' mech energy
最后上个大招——用Python的matplotlib实时绘制运动轨迹,配合FFmpeg输出滑坡小视频。甲方爸爸看到动态效果直接拍板打款,比看位移曲线管用多了。
代码跑起来之后,记得泡杯枸杞看着屏幕发呆——这纷飞的颗粒,多像当年头发茂密的自己啊!(完)


被折叠的 条评论
为什么被折叠?



