Games201-混合欧拉拉格朗日方法(一)
PIC
APIC
PolyPIC
MPM
拉格朗日和欧拉的对比
定义一个算法好:
1、守恒:动量、角动量、体积、能量
2、性能(并行性,访存性能)
3、复杂程度(实现的角度,越复杂越难优化)
没有一个算法各个方面都好
一个流体sovler一般有两步:
1、Advection
2、Projection(保证不可压缩性)
欧拉视角擅长projection,易于离散化、邻居搜索、precondition,但欧拉grid面对advection很难,模拟的时候回油能量损失,流体看起来非常粘
拉格朗日擅长advection,可以容易的移动粒子,动量守恒很容易,但粒子在空间中不规则,离散化非常tricky,邻居搜索也很头疼
结合两种方法的特点得到混合欧拉拉格朗日视角
混合欧拉拉格朗日
粒子是一等公民,存所有的数据,网格是二等公民,附属的用来计算中间结果的东西
信息在两种格式之间来回转换
PIC ——Particle InCell
速度、温度、力
传输到网格点上信息,从网格点上收集信息
粒子对更近的邻居更重要,一般来说会使用核函数来进行一个模拟
一般就是用Quadratic,足够smooth,linear不够smooth导致系统不够稳定
记录速度和网格点权重,后面要用总的速度除权重
把网格速度重新收集到粒子上
无散度是可以保证体积不变性
PIC就是会有能量耗散
demo PIC vs APIC 平移没有耗散。拉式,旋转,剪切都是有耗散的,运动一会就不动了
自由度变化,从18个自由度到粒子上自由度只有2个了
解决办法:
1、给粒子记录更多的信息,旋转量、剪切量等等 APIC PolyPIC
2、减少耗散的base,只将delta信息进行传输 FLIP
APIC Affine Particle in Cell
记了x y 方向的拉伸、剪切
数学推导复杂但是实现起来很容易
APIC是角动量守恒的
PolyPIC
通过记录更多维度信息,尝试做到无损传输
FLIP
不去gather物理量了,而是gather grid上的物理量的增量
Flip只是一个advection的格式
Particle to Particle (base) + Particle to Grid (delta)
Flip会有noisy的现象,看起来表面很乱
需要一点点的PIC,PIC耗散很大,可以在PIC和FLIP的结果之间进行一个插值
选择哪个
PIC 能量耗散太大
PolyPIC 实现起来复杂。但是精益求精可以使用。
FLIP比较noisy,需要多个grid求delta
APIC 各方面都不错也是MLS-MPM的基础
粒子内存很多的时候网格上的内存基本就可以不计了
MPM
particle存的东西变多了很多
MPM是近年非常火的
处理不同的材料很方便
处理自碰撞
自动的fracture(拉伸到一定程度就破碎)
处理大形变很不错,大形变在模拟里大家都觉得很喜欢
早期10步方法
MLS-MPM
是个Compute bound的算法
就是需要多算一些东西
初始化内容
P2G的过程,多了一个stress,称为 Cauchy Stress,起到的作用是表现抵抗压缩的力
处理权重和边界条件
J表示一个体积的变化