Homework2: A Failed Fluid-Solid Coupling

What I Do?

我尝试在mpm99的代码基础上,加入一个风车(刚性固体,固定在某点处,绕着该点旋转。)
前情提要:我根本不懂mpm的理论,代码是靠着直觉摸的,我希望它能有点模样。

code link

情形一

这个场景下风车匀速转动,与流体发生交互。风车会改变流体的运动状态,但风车的运动状态不受流体影响。
实现方式是:使用额外的粒子来表示风车,在做p2grid时,风车粒子也一起scatter到grid上。因为风车不会发生形变,所以风车的F和J都不更新。
out

#情形二
我希望能让风车的运动靠水流来驱动。我所掌握的公式仅有:力矩=力×力臂。
于是我在情形一的基础上,在grid2p时,add up风车上所有粒子的:

a_p.dot(c_p-c0)

这里的a_p表示风车粒子p相对于质心位置的角加速度,c_p表示粒子的位置,c0是质心位置。液体和风车交互的时候,没有考虑液体的重力对风车运动状态的影响。
这个情形下的模拟结果一点也不正常。我不知道我的思路是不是错的。
out2

#情形三(playing)
请大家欣赏我的滚筒洗衣机 。
out3

4 个赞

情形一又叫做one-way coupling(单向耦合)我觉得你的做法没问题~

情形二就比较复杂,属于two-way coupling,做法就没有那么容易了。如果是想做rigid body和mpm耦合,可以看看CPIC (http://taichi.graphics/wp-content/uploads/2019/03/mls-mpm-cpic.pdf),不过CPIC实现起来就比较复杂了。:slight_smile:

Thanks for your reply! That really helps me a lot!

Thanks for your reply! That will help me a lot!

请问关于 cpic 及其前置知识有没有推荐的学习材料?我有尝试着去看 mls-mpm 那篇论文,但是不大能理解……