【GAMES201学习笔记】物质点法入门

拉格朗日方法与欧拉方法 理解拉格朗日方法与欧拉方法的区别 阅读详情
AI摘要

该博客围绕物质点法入门展开,先介绍流体力学的拉格朗日和欧拉两种描述及其优缺点,接着阐述Particle - In - Cell methods(PIC)、Affine Particle - In - Cell(APIC)的思路、代码实现与局限性,最后详细讲解物质点法(MPM),包括简介、MLS - MPM及代码实现等内容。

1. 流体力学中的两种描述

1.1 拉格朗日描述

1.1.1 什么是拉格朗日描述

拉格朗日描述 的观察对象是组成物体的 质点 , 粒子(particle) ,或者说 流体微元 :

  • 随着物体变化,对应 “粒子” 的位置也会随之变化,跟踪的观察对象是单个 “粒子” 的属性变化;
  • 拉格朗日描述最显著的特征就是观察对象会发生位置或者形状的变换。

1.1.2 常见的使用拉格朗日描述的方法

  • 弹簧质点模型(观察质点的变换)
  • 有限元法(观察有限微元的变换)

1.1.3 拉格朗日描述擅长的地方

  • 拉格朗日描述擅长对独立粒子的操作;
  • 物体的变换操作:这时对粒子施加相应的变换即可;
  • 粒子的质量和动量守恒是简单的;
  • 定义物体的材质:定义单个粒子相关参数。

1.1.4 拉格朗日描述不擅长的地方

由于粒子经过变换之后,对应的位置和形变都是不确定的,因此虽然可以查询之前已经建立了 邻接信息 的粒子之间的关系(当然,在拉格朗日中找邻接粒子本身是一个困难的问题);但查询未确立 邻接信息 的粒子之间的关系(例如任意两个粒子之间的距离),会异常困难。

这导致当有查询 未邻接的两个粒子 之间关系的需求时,会遇到一定的麻烦:例如在使用有限元进行仿真时,如果没有合理处理自相交问题,会发生模型穿透的情况。

弹性方块的 FEM 模拟 :

FEM_Cube.gif

弹性平面的 FEM 模拟 :

  • 由于仅做了邻接粒子之间、粒子与球之间的碰撞检测,所以在平面折叠时发生了穿透。

FEM_Plane.gif

不过目前在有限元领域,对于碰撞问题,也已经有了对应的解决方案:

1.2 欧拉描述

1.2.1 什么是欧拉描述

欧拉描述 的观察对象是物体所在 空间的场 , 网格(Grid) ,或者说 流体元胞(Cell) :

  • 网格是在空间中的绝对参照系的微元,随着物体变化,网格的位置和形状不会随之变化,仅物体映射到网格上的信息发生改变;
  • 欧拉描述最显著的特征就是观察对象不会发生位置或者形状的变换。

1.2.2 欧拉描述擅长的地方

  • 拉格朗日描述擅长处理粒子之间的相对关系;
  • 物体性质的变化:质量密度、速度、温度、熵、焓,甚至单位流体中的磁通量;
  • 物体内部的压力压强计算,可以很快的获得能量密度函数;
  • 边界碰撞检测:欧拉描述可以很快的获得任意粒子之间的相对关系信息,或者说在欧拉视角下物体自然而然地在进行着碰撞检测。

1.2.3 欧拉描述不擅长的地方

  • 物体的变换:显然,拉格朗日描述擅长的地方就是欧拉描述不擅长的地方,在物体发生变换的过程中,需要更新网格和相邻网格的信息,这个过程是较为繁琐的。

2. Particle-In-Cell methods(PIC)

Note :

  • 在混合拉格朗日 - 欧拉方法中,“粒子”是一等公民,“网格”是用来计算场信息的中间量。

2.1 粒子信息映射到网格(P2G)

2.1.1 思路

将粒子信息映射到网格上,或者说从一组粒子重建整个场的信息,这里采用了一个 SPH 中处理类似问题的方法:

  • 使用一个径向对称的 核函数 (有时称为 基函数 ),来确定一个粒子对周边空间的 “影响(贡献)”,即一种加权计算 ;
  • 其中粒子的影响是局部化的,核函数通常选择 有限支撑 ,即存在一个最大支撑距离;
  • 核函数是归一化的: ∮ R N ^ ( r ) d r = 1 \oint_{R} \hat{N}(\bold{r})d\bold{r} = 1 ∮R​N^(r)dr=1 ,其中 R R R 是整个支撑集。

B 样条核函数 :

screenShot.png

在二维空间下,仅考虑粒子周围的九个网格节点。

screenShot.png

2.1.2 代码实现

mpm88.py Line 30,42 (除去了 APIC 的部分):

for p in x:
        Xp = x[p] / dx
        base = int(Xp - 0.5)
        fx = Xp - base
        # Quadratic B-spline
        w = [0.5 * (1.5 - fx)**2, 0.75 - (fx - 1)**2, 0.5 * (fx - 0.5)**2]

        for i, j in ti.static(ti.ndrange(3, 3)):
            offset = ti.Vector([i, j])
            weight = w[i].x * w[j].y
            grid_v[base + offset] += weight * (p_mass * v[p])
            grid_m[base + offset] += weight * p_mass

Note :

  • 粒子在中间网格里;
  • base :粒子所在周边网格的网格点 p [ 0 , 0 ] \bold{p}_{[0,0]} p[0,0]​ ,坐标 (0.5 * dx, 0.5 * dx) ;
  • fx :粒子距离网格点 p [ 0 , 0 ] \bold{p}_{[0,0]} p[0,0]​ 的距离;
     
  • 距离中间的网格点: ω = 3 4 − ∣ ( x p − x b a s e ) − 1 ∣ 2 \omega = \frac{3}{4} - \vert (\bold{x}_p - \bold{x}_{base}) - 1 \vert^2 ω=43​−∣(xp​−xbase​)−1∣2
     
  • 距离靠左下的网格点: ω = 1 2 ( 3 2 − ∣ x p − x b a s e ∣ ) 2 \omega = \frac{1}{2}(\frac{3}{2} - \vert \bold{x}_p - \bold{x}_{base} \vert)^2 ω=21​(23​−∣xp​−xbase​∣)2
     
  • 距离靠右上的网格点: ω = 1 2 ( 2 − ( 3 2 − ∣ x p − x b a s e ∣ ) ) 2 = 1 2 ( ∣ x p − x b a s e ∣ − 1 2 ) 2 \omega = \frac{1}{2}(2 - (\frac{3}{2} - \vert \bold{x}_p - \bold{x}_{base} \vert))^2 = \frac{1}{2}(\vert \bold{x}_p - \bold{x}_{base} \vert - \frac{1}{2})^2 ω=21​(2−(23​−∣xp​−xbase​∣))2=2
简单初识 Material Point Method(MPM) 简单初识 Material Point Method(MPM):先介绍了Lagrangian和Eulerian,并简单介绍了MPM Method 阅读详情

相关推荐

MPM物质点法原理与Taichi实战:从物理建模到工业仿真

物质点法(MPM)是一种融合拉格朗日与欧拉描述的混合数值模拟方法,核心在于用携带完整本构模型的物质点离散连续介质,并依托背景网格完成动量传递与应力求解。其‘泼洒-求解-采样’三步闭环保障质量守恒与大变形稳定性,天然支持可微分物理引擎构建。相比传统粒子系统或SPH/FLIP,MPM不依赖粒子间核函数交互,更适合处理断裂、多相耦合与强非线性材料行为。在工程实践中,Taichi凭借自动内存优化、原子操作封装与高阶MPM模块(如APIC/XPIC),显著降低GPU编程门槛并提升开发效率。本文围绕MPM物理本质、Ta

weixin_31155097的博客 192

从零实现物质点法MPM:PIC与APIC原理、调试与工程落地

物质点法(MPM)是一种融合粒子离散性与网格连续性的混合仿真方法,核心在于通过粒子-网格双向映射解决大变形下传统有限元网格畸变和纯粒子法数值不稳的双重困境。其物理本质是将材料本构状态由随体粒子携带,而动力学求解依托固定网格完成,从而兼顾运动学保真与数值稳定性。技术价值体现在对沙土坍塌、布料形变、冲击穿透等强非线性场景的高保真模拟能力,广泛应用于游戏物理、工业预演与数字孪生。本文聚焦GAMES201经典案例,深入解析P2G/GU/G2P三阶段实现逻辑,重点剖析PIC与APIC在运动学建模上的根本差异,并提供C

weixin_29009339的博客 331

对物质导数与拉格朗日视角、欧拉视角之间的关系的粗浅理解

之前有一个没怎么注意到的疑问,在拉格朗日视角和欧拉视角中,分别有不同形式的N-S方程(或者叫动量方程),拉格朗日视角中是这样的: DuDt=−1ρ∇+ν∇⋅∇u+g(1) \frac{\mathrm{D}\boldsymbol{u}}{\mathrm{D}{t}}=-\frac{1}{\rho}\nabla+\nu\nabla\cdot{\nabla}\boldsymbol{u}+\boldsymbol{g}\tag{1} DtDu​=−ρ1​∇+ν∇⋅∇u+g(1) 欧拉视角中是这样的: ∂u∂t=−(u

qq_41814987的博客 1788

【信息科学与工程学】【数据科学】数据科学领域——第三篇 数学08 几何学00总篇

编号英文名称中文名称简要说明/归属1Foundations of Geometry几何基础公理化方法, Hilbert《几何基础》2Euclidean Geometry (Synthetic)欧几里得几何(综合法)《几何原本》传统3Analytic Geometry解析几何坐标方法, Descartes, Fermat4Plane Geometry平面几何三角形、圆、共点共线等经典问题5Solid Geometry立体几何三维空间中的图形与度量6Non-Euclidean Geometry非欧几何平行公设不

weixin_49199313的博客 190

物质点法开源代码合集

一些物质点法代码合集,都是比较小的开源代码,可以作为初始时期学习使用

物质点法开源代码 material point method

物质点法开源代码 material point method, 主要用于雪的仿真,不知是否为迪士尼动画片所用的版本

物质点法开源代码 uintah-1.2.0

物质点法开源代码 uintah-1.2.0,不错的开源代码,架构很庞大,最新版本为2.1.0

物质点法开源代码MPM-Julia

物质点法开源代码MPM-Julia, 是Julia语言编写,Julia这种专门为数值分析开发的语言不知道有没有未来。

【张量分解(二)】CP分解

一、CP分解 1.1 定义 CP分解就是将一个张量分解成多个单秩张量的和。例如,给定一个三阶张量X∈RI×J×K\mathcal{X}\in\mathbb{R}^{I\times J\times K}X∈RI×J×K,则CP分解可以写为 X≈∑r=1Rar∘br∘cr\mathcal{X}\approx\sum_{r=1}^{R}\textbf{a}_r\circ\textbf{b}_r\circ...

bqw的博客 2万+

solidworks实体显示线框

solidworks实体莫名其妙显示为有点虚的线框

qq_35858902的博客 1万+

第6章: MMU Notifier在KVM虚拟化中的应用

本文分析了KVM如何利用MMU Notifier机制维护客户机与宿主机地址映射一致性。KVM采用三层地址空间转换架构(GVA→GPA→HPA),通过硬件辅助虚拟化(EPT/NPT)实现高效转换。重点探讨了KVM MMU Notifier回调实现,包括invalidate_range_start/end等核心函数,以及HVA范围处理流程。当宿主机内存变化时,KVM通过注册的notifier回调及时更新映射关系,确保虚拟化环境的内存一致性。文章详细解析了相关数据结构和关键代码实现,揭示了KVM内存管理的核心机制

图形/计算GPU的驱动与虚拟化技术分享园地 2315

使用AI预测彩票的架构思路

彩票是随机的数字游戏,不要过度依赖AI,本文仅供娱乐研究

淘淘小窝 9407

【Bug已解决】Claude Code WebFetch 报错 Unable to verify if domain is safe to fetch 解决方案

方案适用场景推荐指数放行域名校验接口根本解决方式,需要网络管理员配合⭐⭐⭐⭐⭐curl 手动验证具体拦截环节精确定位问题,避免排查方向跑偏⭐⭐⭐⭐⭐排查企业 SSL 中间人代理证书企业统一代理策略较严格的环境⭐⭐⭐⭐检查系统时间准确性排除证书有效期误判的可能性⭐⭐⭐手动复制内容作为过渡方案网络策略调整周期较长的场景⭐⭐⭐报错的本质是**WebFetch。

一键难忘的博客 4500

DA14531之如何Debug(在线调试、Jlink仿真、串口打印)

在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。

hejinwu1314的博客 1791

冷门但实用:Python爬取微信公众号历史文章,突破微信反爬限制(2025有效)

2025年微信公众号爬取的核心是「冷门方法+指纹伪装」,而非常规接口破解,itchat-uos+Playwright组合是突破设备指纹的关键;登录态持久化、动态Token实时获取、频率严格控制是避免被封禁的三大核心;文章内容解析需解决2025新增的编码混淆问题,chardet+BeautifulSoup是冷门但有效的方案;合规是前提,爬取频率、数据用途需严格遵守平台/法律规则。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3775

Transformer在BEV感知中的统治地位

Transformer在BEV感知中的统治地位 ,人工智能,计算机视觉,大模型,AI,本文围绕 Transformer 在 BEV 感知中的统治地位展开,介绍了 Transformer 的基础原理,如自注意力、多头注意力机制等,以及 BEV 感知的概念、任务与挑战。阐述了 Transformer 在 BEV 感知中的技术优势,包括全局建模、灵活特征融合和长距离依赖捕捉能力,还介绍了典型架构、代码示例及在自动驾驶目标检测等领域的应用案例。同时,评估了其性能,提及优化方法,并展望了与其他技术融合、端到端系统等…

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 20万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 【Shader学习随笔】00 - ShaderToy到VsCode
下一篇: 【GAMES201学习笔记】线性有限元
紫薯馒头卡
博客等级 码龄8年 145粉丝 38原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值