YADE离散元法(DEM, Discrete Element Method)仿真的开源软件
文章目录
YADE离散元法(DEM, Discrete Element Method)仿真的开源软件
YADE(Yet Another Dynamic Engine)是一个用于离散元法(DEM, Discrete Element Method)仿真的开源软件,主要用于模拟颗粒材料(如沙子、岩石、粉末等)的力学行为。它由Václav Šmilauer等人在捷克理工大学(Czech Technical University in Prague)开发,基于C++编写,并提供了Python接口,便于用户进行脚本化建模和后处理。
⚠️ 注意:YADE 有时容易与另一个缩写相同的工具混淆(如用于ETL的YADE),但在此上下文中,我们讨论的是 YADE - Yet Another Dynamic Engine,即用于物理仿真的离散元仿真引擎。
一、YADE 简介
1. 核心功能
YADE 是一个强大的多物理场仿真平台,主要功能包括:
- 离散元法(DEM):模拟大量刚性颗粒之间的接触力、碰撞、摩擦、滚动阻力等。
- 刚体动力学:支持复杂几何体的运动和相互作用。
- 耦合求解器:可与有限元法(FEM)、流体动力学(CFD)耦合(通过LBM等)。
- 自定义材料模型:支持用户定义接触模型(如Hertz-Mindlin、Linear Elastic、Cohesive等)。
- 可视化与后处理:内置OpenGL可视化器,支持导出VTK、CSV等格式。
- 脚本驱动:使用Python控制仿真流程,易于自动化和参数化研究。
2. 技术特点
- 开源(GPL许可证)
- 跨平台(支持 Linux、macOS,Windows支持有限)
- 高性能并行计算(支持OpenMP、MPI)
- 模块化架构,便于扩展
二、YADE 的安装
1. Ubuntu/Debian 安装(推荐)
sudo add-apt-repository ppa:yade-dev/trunk
sudo apt update
sudo apt install yade
2. 从源码编译(适用于高级用户)
git clone https://gitlab.com/yade-dev/trunk.git yade
cd yade
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install
需要安装依赖:Boost、Eigen3、Qt5、OpenGL、VTK、Python3-dev 等。
三、基本使用示例
以下是一个简单的 YADE 脚本示例,模拟球体在重力作用下落入盒子中:
# example.py
from yade import pack, plot, utils, yade
# 创建空场景
O.materials.append(FrictMat(young=1e8, poisson=0.3, frictionAngle=0.5, density=2000, label='mat'))
# 创建地面
O.bodies.append(utils.wall(position=(0,0,0), axis=2, sense=-1, material='mat'))
# 生成随机球体云
sp = pack.SpherePack()
sp.makeCloud((0,0,1), (1,1,3), rMean=0.05, rRelFuzz=0.5)
for s in sp:
b = utils.sphere(s[0], s[1], material='mat')
O.bodies.append(b)
# 设置引擎
O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Wall_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_Dem3DofGeom(), Ig2_Wall_Sphere_Dem3DofGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_Dem3DofGeom_FrictPhys_CundallStrack()]
),
NewtonIntegrator(gravity=(0,0,-9.81), damping=0.4),
PyRunner(command='plotData()', iterPeriod=100)
]
# 设置时间步长
O.dt = 0.3 * utils.PWaveTimeStep()
# 收集数据
def plotData():
plot.addData(time=O.time, energy=utils.kineticEnergy())
# 可视化
O.run(10000, True) # 运行10000步并显示
plot.plots = {'time': 'energy'}
plot.plot()
运行方式:
yade example.py
四、核心概念解析
| 概念 | 说明 |
|---|---|
O.bodies |
存储所有刚体(颗粒、墙壁等) |
O.materials |
材料属性(弹性模量、摩擦角等) |
O.engines |
仿真引擎序列(碰撞检测、力计算、积分等) |
InteractionLoop |
处理接触生成、物理属性赋值、力定律 |
NewtonIntegrator |
牛顿运动方程积分器(含重力、阻尼) |
PyRunner |
在指定步数执行Python函数(用于监控、输出) |
五、应用场景
- 岩土工程:边坡稳定性、地基沉降
- 工业过程:料仓排料、搅拌机、破碎机
- 地质灾害:雪崩、泥石流、落石
- 制药与食品:粉末混合、压片
- 新材料研究:颗粒复合材料力学行为
六、优势与局限
✅ 优势
- 完全开源,可自由修改和扩展
- Python脚本控制,灵活易用
- 支持大规模并行计算
- 社区活跃,文档较完善
❌ 局限
- 学习曲线较陡(需理解DEM原理)
- Windows支持较差
- 图形界面较原始(主要依赖脚本)
- 内存消耗大(尤其大规模仿真)
七、学习资源
- 官方网站:https://www.yade-dem.org
- 文档与教程:https://yade-dem.org/doc/
- 源码仓库:https://gitlab.com/yade-dev/trunk
- 用户邮件列表:yade-users@lists.launchpad.net
- 示例脚本:
yade --check-examples可运行内置示例
八、常见问题
Q: 如何加快仿真速度?
- 使用
O.dt设置合理的时间步长 - 启用 OpenMP 并行:编译时开启
ENABLE_OPENMP=ON - 减少碰撞检测频率(调整
InsertionSortCollider的verletDist)
Q: 如何导出数据?
from yade import export
export.text('output.csv') # 导出颗粒位置
export.vtk('output.vtk') # 导出VTK用于Paraview可视化
总结
YADE 是一个功能强大、灵活开放的离散元仿真平台,适用于科研和工程中对颗粒系统动力学行为的研究。虽然入门有一定门槛,但其基于Python的脚本化设计使得建模、参数扫描和自动化极为方便。对于从事岩土、材料、机械等领域的研究人员,YADE 是一个非常有价值的工具。
如果你希望深入学习,建议从官方教程中的 examples/ 目录开始,逐步构建自己的模型。
如需进一步帮助(如建模、接触模型选择、性能优化),欢迎继续提问!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)