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表示一个体积的变化
作者:FlyingZiming
出处:https://www.cnblogs.com/FlyingZiming/p/14459174.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
但行好事,莫问前程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示