还记得几年前知乎爆火的那篇文章吗?
99行代码的《冰雪奇缘》
这篇文章中,来自清华姚班的大佬胡渊鸣基于Taichi模型,仅用99行代码就实现了三种不同材质的碰撞模拟。而这并不仅仅只是动画效果,也是基于真实的物理定律。
https://zhuanlan.zhihu.com/p/97700605?share_code=LEmQ8gorGPY6&utm_psn=2058223170180625638
过去要使用这样的模型来做一些有意思的事情,还是需要一定Python基础的。但现在有了AI,普通的CAE工程师也可以轻松地做二次开发。不禁产生了一个想法。能否利用这个Taichi模型来做一些有意思的有限元仿真呢?
恰好之前看到很久以前 USim 老师做的克拉尼板DEM-FEM耦合模拟,我很受震撼。一个看起来像艺术图案的现象,背后其实是很标准的结构动力学问题:板结构、边界条件、固有频率、模态振型和节点线。但用传统的有限元软件实现还是很有难度的。我想,能否借助 AI 工具,尝试用 Taichi(太极) 做一个类似模拟呢?
也想提供一些思路:
或许AI时代,可以跳出传统求解器的限制,对一些特定问题,利用AI结合开源代码进行一些针对性的开发。
Taichi(太极)是一个源自清华大学的开源高性能计算与物理仿真框架。它并不是大模型,而是一套让开发者能够使用 Python 语言编写高性能物理模拟程序的基础设施。借助自动并行化和 GPU 加速能力,Taichi 可以用于流体仿真、有限元分析、粒子系统、机器人控制、数字孪生以及近年来备受关注的 Physical AI 等领域。
作为一个开源项目,Taichi的代码仓库和软件发行渠道目前依然存在并持续更新。尽管相比几年前在计算机图形学和科学计算领域引发广泛关注的时期,其社区热度已经有所下降。随着大模型浪潮兴起,越来越多资源转向 AI 方向,Taichi 似乎逐渐进入了相对成熟和稳定维护的阶段。
对于关注 Digital Twin、CAE、仿真驱动设计以及 Physical AI 的工程师而言,Taichi 依然是一个非常值得了解的项目。它代表了一种重要的发展方向:让更多开发者能够以 Python 的开发体验获得高性能物理计算能力,从而在人工智能与物理世界之间建立更加紧密的连接。
得那只是薄一块薄板,一把细沙,一个固定频率的振动。最后竟然会长出像花纹一样的图案。
克拉尼板通常是一块薄板,可以是方形、圆形或其他形状。
实验时会在板面上撒细沙、盐粒或其他小颗粒,然后用扬声器、振动台、琴弓或其他激励方式让薄板振动。
当激励频率接近某个固有频率时,板会出现比较稳定的振型。

一个典型的克拉尼板
如果只看有限元软件里的模态云图,很多人会觉得那只是几张颜色不同的结果图。但克拉尼板不一样,他最迷人的地方就在这里:它把“模态”和“节点线”这些抽象概念,变成了肉眼能看见的物理现象:哪里振得厉害,沙粒会被抖开;哪里几乎不动,沙粒会留下来。最后看到的图案,其实就是这块板在某个频率下的振型。
这次模拟里,我把问题拆成两部分,全程没有用到任何其他求解器。
第一部分是模态分析。
这一部分仍然采用有限元方式来计算。模型中的薄板是一块 320 mm × 320 mm 的方板,厚度为 1.0 mm。材料按铝合金设置:弹性模量 70 GPa,泊松比 0.33,密度 2700 kg/m³。
边界条件上,中心附近半径 12 mm 内的全部节点位移约束为 0,相当于给板施加了一个中心固定区域。计算其前20阶模态以及对应的固有频率。
第二部分是粒子运动。
这里采用图形学方式进行模拟。粒子半径约 0.1 mm,粒子数量约 50000 个。
也就是说:
有限元负责描述板的振动形态,Taichi 粒子模拟负责把“沙粒如何被振动驱动并逐渐聚集到节点线附近”这个过程可视化出来。
当然,这个例子的重点不是证明 Taichi 可以替代有限元软件,但这类方法很适合用来做教学、验证直觉,或者做一些快速可视化实验,而无需依赖传统求解器。对于具体的代码实现不再赘述,实际上,只要和AI对话即可生成了。这里附上代码架构。
克拉尼板 DEM-FEM 耦合模拟的代码架构
再简单介绍下整套模拟流程,可以理解为三层。
第一层是命令行入口。
它负责读取板参数、颗粒参数、模拟参数和输出参数。这样后续可以比较方便地调整板尺寸、材料、粒子数量、时间步长和输出形式。
第二层是有限元模态分析。
有限元部分采用 Mindlin-Reissner 四节点板单元,组装全局刚度矩阵和质量矩阵,并通过 ARPACK 求解固有频率和振型。
第三层是 Taichi GPU 粒子模拟。
它把有限元得到的振型场插值到粒子位置,计算板-颗粒交互、接触力、摩擦力、法向力和时间积分,最后输出实时显示、模态振型图和 GIF 动画。
粒子数量一多,CPU 逐个更新就会比较吃力。
Taichi 比较适合这类场景:它可以用接近 Python 的方式描述计算逻辑,同时把大量重复计算交给 GPU 执行。
这次模拟时,GPU 资源被明显拉起来。下面是运行过程中的状态截图,可以看到 NVIDIA GeForce RTX 4090 的 3D 计算占用很高。
Taichi 粒子振动模拟运行时的 GPU 调用状态
这里 AI 工具主要帮我做了两类事情:
• 辅助整理模拟逻辑,把有限元结果、粒子参数和可视化流程串起来;
• 辅助写代码和调试,让 Taichi 的 GPU 计算流程更快跑通。
但真正需要人判断的地方仍然没有消失。
比如边界条件怎么设,粒子半径是否合理,粒子数量是否足够,图案和有限元模态是否能对应起来,这些仍然需要工程判断。
程序运行得到了两种结果,一种是有限元结果,一种是粒子动态图,其实是在看同一个振型问题的两个侧面。
有限元模态图里,红蓝区域表示板面不同方向的位移幅值,灰色或过零区域附近就是节点线的位置。
随着频率升高,节点线会从简单的斜线、十字、圆形,逐渐变成更复杂的网格状图案。
基于Taichi计算的不同频率下的振型
把同一组振型拿去驱动粒子后,看到的就不再是云图,而是类似真实克拉尼板实验的“沙粒聚集线”。
Taichi 粒子模拟得到的不同频率克拉尼图案
对比这两张图会发现,粒子最终形成的亮线,和有限元模态图中的节点线位置基本对应。
这也是克拉尼板最直观的地方:
有限元告诉我们板怎么振,粒子图案把这个振型“翻译”成了肉眼能看见的线条。
沙粒不是停在振幅最大的地方,而是逐渐聚集到振动较小的节点线附近。
这个过程一旦动起来,读者对“节点线”的理解会比单纯看公式更直观。
所以这个例子不是简单地把有限元结果换个颜色显示,而是把模态结果和粒子运动连接起来,让一个结构动力学概念变成了可以观察的动态过程。
| |
| |
| |
上图展示了某传统仿真软件仿真的模态结果,以及我们自己的脚本实现的有限元仿真的模态结果和用太极来呈现的粒子动态效果(以第8阶和第9阶模态为例),我们可以看到三种图像是相当吻合的。说明我们的这个程序是可以很好的模拟克拉尼板的物理现象。
也给到我们一个很好的启发——仿真结果不一定只能停留在传统云图里,我们可以把有限元结果和粒子模拟、GPU 计算、交互可视化结合起来,让抽象结果变得更容易理解。
尽管目前在实际的工程中,还难以代替传统求解器,但对教学、演示、方案沟通都很有价值。
过去我们常说“仿真不仅是仿真”。在这个例子里,它还可以是一个解释物理现象的工具,一个连接工程计算和直观体验的工具。