使用八叉树模拟水和烟雾 Simulating Water and Smoke with an Octree Data Structure 论文阅读笔记

本文介绍了如何通过特殊设计使八叉树在自适应网格中处理水面模拟时,克服非均匀性,保持泊松方程对称正定,避免了多级泊松求解器的问题,重点在于处理界面和精度问题,以及简化压强梯度计算以实现对称性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:

Losasso, Frank, Frédéric Gibou, and Ron Fedkiw. “Simulating water and smoke with an octree data structure.” Acm siggraph 2004 papers. 2004. 457-462.

引言

这篇文章扩展了 [Popinet 2003] 的工作,拓展到表面自由流,并且使得八叉树不受限制

自适应网格划分的一个缺点是,它的模板不是均匀的,进而导致泊松方程中的系数矩阵是非对称的

我觉得他这个模板的意思就是,离散化速度的二阶导的这个离散的模板吧
或者说是格式?
比如对于最简单的均匀网格,对于某一个网格,考虑它的前后左右上下,因为是对称的,所以只需要三个方向,up right front 三个变量。以自己为中心,自己有一个 center 变量。所以构建矩阵的时候,每一个网格都有自己的一套 up = 0 right = 0 front = 0 center = 1。如果上方向是流体,那么 up = -c, center += c。这种模板?

[Popinet 2003] 对于这个非均匀的方程组是使用多级泊松求解器来求解的

但是 [Day et al. 1998] 指出这种方法在处理具有高频细节的物体的时候存在问题

这种方法也难以处理界面,比如空气与水的界面

本身界面的准确表达就是很困难的

[Suss-man et al. 1999] 提出了在界面处涂抹密度的方法(听起来这个涂抹就是一种混合?)

界面上的波是由压力差导致的,这种涂抹就是在减小高频的压力差,所以会消除细节

这篇文章坚持使用八叉树作为自适应方法,虽然一般情况下这会导致非均匀的泊松方程组,但是这篇文章使用了特殊的设计,根据这种设计,他们得到的泊松方程仍然是对称正定的

虽然“使用了特殊的设计”并不是它的原话,但是我觉得他是这个意思?

以往的工作

求解 NS 方程,半拉格朗日求解平流,火、云、粒子爆炸、粘性流、气泡和表面张力、水花和泡沫

SPH

八叉树上的 SDF

SDF 的重新初始化

速度外推

半拉格朗日法求解水平集可能耗散比较大,导致质量损失严重

粒子水平集法的耗散可能更少

使用四叉树的水平集演化

但是这些研究都没有考虑到水的界面

水的界面,不就是水平集的一个应用吗?有点不理解

自适应网格细化 adaptive mesh refinement (AMR) 通常使用多个不同分辨率的网格,重叠在一起

一开始这是为了研究激波的,所以块状结构能够减少切换网格层次所带来的伪激波反射

但是,如果不考虑激波,那么就可以使用不受限的八叉树

这里讲的是它的灵感来源?

八叉树

压强存储在格子中心,速度存储在面上(MAC 网格),其他标量存储在格子节点

他说使用节点存储标量很方便,因为它的插值方便(我怎么不觉得)

在这里插入图片描述

粗粒化是把小单元合并成大单元

在这个过程中,节点中的旧值,要么被删除,要么保持不变;面上的旧值经过平均赋给新值

我一开始想,这里讲的“节点中的旧值”,包不包括网格中心上的值?

在这里插入图片描述

画了一下,八个块变成一个块,最后的大块的中心的那个压强应该是平均来的才对,之前那个位置是存别的标量的顶点的位置……所以他指的“节点中的旧值”应该是不包括网格中心的值

那他这里就说少了一个情况啊……算了

细化是从一个大单元细分成多个小单元。边的半点上的值来自两端顶点的平均值,面中心的顶点的新值来源于这个面的四个角点的平均值。细分后的面上的速度,是来源于细分后的顶点上的速度的平均。而细分后的顶点上的速度,来源于他周围四个细分前的面的平均。

这个"细分前"、"细分后"定语都是我自己加的
我觉得这个细分后的顶点上的速度的来源很奇怪啊,不是所有细分后的顶点都是周围四个面,也有周围两个面的。那对于这个两个面的,是不是只是两个面的速度的平均?
下面是我画的,获得细分后的顶点上的速度的两种情况的示意图

在这里插入图片描述

对于所有变量,我们将边上的 T 形连接节点约束为从该边上的邻居进行线性插值。类似地,面上的 T 形连接节点被限制为周围四个角值的平均值。参见,[Westermann et al. 1999]

这个是真的有点难理解,只好机翻了

八叉树上的 NS 方程

散度算子

泊松方程

∇ 2 p = ∇ ⋅ u ∗ / Δ t \nabla^2 p = \nabla \cdot u^* / \Delta t 2p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值