求解不可压缩 Navier-Stokes 方程的最简单方法是什么?

计算科学 流体动力学
2021-12-14 06:48:51

“最简单的”是指从头开始学习和实施的最简单的方法。我希望我的问题能或多或少得到解答。

4个回答

在二维中,速度-涡度公式是最容易实现的,因为变量是并置的,但边界条件可能很复杂,而且它不是对问题的直接陈述。对于原始变量公式,Harlow 和 Welch (1965)的交错网格有限差分法是一个很好的起点。

您可以在此处找到一个非常简单但非常有效的解决方案方法(Chorin 的拆分方法)的完整文档实现

有关其他流行方法的选择,请查看本书的第 21 章。

免责声明:我是演示程序和本书的(共同)作者。这本书可以免费下载。

最简单的总是与您的特定兴趣和需求相关。我同意 Anders 的观​​点,对于具有简单几何形状的域上的不可压缩流,如果您优先考虑易用性和准确性,那么您将很难击败投影方法(即 Chorin 的分裂方法)。

更详细一点,方法是在 [1] 中介绍的问题。更现代的二阶近似投影方法在 [2] 中有很好的解释。其动机是求解完全不可压缩的 Navier-Stokes 方程需要同时求解速度场和压力,由此产生的线性系统是相当病态的。投影方法通过将每个时间步长拆分为速度求解来消除此问题,使用前一个时间步长的压力,然后进行压力更新,这实质上强制速度场保持不可压缩。

要实现这一点,您将需要一些其他组件,但所有组件都可以很容易地学习和编程。

  1. 对于压力求解,假设您对具有恒定密度的系统感兴趣,您需要求解泊松方程。当然,有几十种算法可以解决这个问题,但到目前为止,最容易实现的——如果可能不完全理解的话——是共轭梯度(CG) 算法。我读过的关于 CG 的最佳解释之一是 Jonathan Shewchuk 写的,可以在这里找到。但是,您当然不需要阅读整篇论文,就能简单地实现该算法。

  2. 您需要另一种算法来处理 Navier-Stokes 中的平流项。在多个维度上,对最灵活的方法(例如 Godunov)的健壮实现进行编程可能非常具有挑战性。但是,如果您对具有相对适中的雷诺数(即具有不可忽略的粘度)的流动感兴趣,那么就易于实施而言,基本非振荡 (ENO) 方法之一非常适合该法案。在[3]中对理论和实现都有很好的概述。

  3. 您需要使用隐式方法处理粘性项,通常是 Crank-Nicolson。这在投影方法论文中有详细说明,如果粘度恒定,您可以轻松地使用 CG 进行矩阵求解。

[1] AJ Chorin,Navier-Stokes 方程的数值解,J. Math。计算机,22 (1968),第 745-762 页

[2] A. Almgren、JB Bell 和 W. Szymczak,基于近似投影的不可压缩 Navier-Stokes 方程的数值方法,SIAM J. Sci。计算。17 (1996),第 258-369 页。

[3] S. Osher 和 R. Fedkiw,水平集方法和动态隐式曲面纽约斯普林格出版社,。应用数学科学,153,2002

近年来,计算机图形和游戏对流体模拟产生了巨大的兴趣。 是 Jos Stam 的一篇很棒的论文,它讨论了求解器在实时应用程序中的实现。它带有非常容易理解的源代码。我不知道它有多准确,但它可能是您正在寻找的。