zoukankan      html  css  js  c++  java
  • 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表示一个体积的变化

  • 相关阅读:
    你不知道的正则表达式
    浅谈apache网页优化及方法
    Web基础与HTTP协议
    nfs
    Vi编辑器的工作模式
    磁盘管理和磁盘配额
    系统安全及应用
    正则表达式与文本编辑器
    读书笔记_java设计模式深入研究 第三章 工厂模式 Factory
    JavaScript模式读书笔记 第7章 设计模式
  • 原文地址:https://www.cnblogs.com/FlyingZiming/p/14459174.html
Copyright © 2011-2022 走看看