时间离散化:Runge-Kutta 方法与标准后向差异

计算科学 有限差分 流体动力学 时间积分 龙格库塔
2021-12-22 17:24:29

我最近编写了一个代码,该代码使用时间和空间的高阶方法解决了 Navier-Stokes 方程的不可压缩/低马赫数公式。我的导师坚持让我使用三阶龙格-库塔法。但是,我发现它不适合我们当前的问题。

在不可压缩求解器中,必须求解压力的泊松方程,这非常耗费 CPU 时间并且通常是此类求解器的瓶颈(对于低马赫数问题,燃烧也可能是瓶颈)。当使用 RK 方法时,必须在每个 RK 步求解泊松方程,这不是有效的。因此,我认为使用标准的顺序向后差分方法可能更适合我们的情况。3rd

据我所知,Runge-Kutta 方法的主要优点是它们实现起来相对简单、自启动且非常稳定就我而言,只有最后一个是重要的。

我不知道的 RK 方法还有其他优点吗?顺序向后差分方法,我会失去很多准确性/稳定性吗?此外,正如本文所述,我已经证明空间离散化错误可能是我的模拟人生中的主要错误,因此决定了我的代码的全局准确性。3rd

2个回答

本次讨论的关键问题是显式与隐式 ODE 求解器。传统的 Runge-Kutta (RK) 方法是显式的,因此时间步长必须足够小才能满足稳定性要求。后向差分方法 (BDF) 是隐式的,因此可以简单地根据准确解的需要来选择时间步长;通常比显式方法大得多。我认为这基本上是您关于 RK 与 BDF 的问题的重点。

不可压缩的 Navier-Stokes (NS) 方程对这两类方法都提出了非常有趣的挑战。这在许多关于计算流体动力学的书籍中都有讨论。我发现这个特别的调查Langtangen是对这个主题的一个特别好的介绍。

具体来说,对于低雷诺数流,粘性项很重要,这使得隐式方法很有吸引力,因为这些项在显式求解器中规定了非常小的时间步长。

但是,对流项可以与显式求解器和更大的时间步长集成。此外,这些项是非线性的,这使得隐式求解器更具吸引力,因为必须在每个时间步求解一组非线性代数方程。该系统包括所有速度自由度,因此计算成本可能很高。

因此,正如在参考论文中所讨论的,不可压缩 NS 方程的最新算法通常在效果最好的地方使用显式求解器 - 集成对流项 - 并在效果最好的地方使用隐式求解器 -整合粘性项。

通常我会建议离散空间中的方程,然后使用现成的 ODE 求解器。但由于大多数标准 ODE 求解器仅实现显式隐式算法,因此使用其中一种算法并不是解决此问题的最佳方法。

出于教学目的,Benjamin Seibold 基于这些原理编写了一个 NS 求解器,Seibold使用了 100 多行 MATLAB 代码!值得花时间研究和试验它。

如果您将问题离散化为 ODE,那么您不必担心这一点,因为您可能无论如何都不应该编写 ODE 求解器。此时,将离散化 ODE 插入您的编程语言中可用的任何求解器并交换,尝试 BDF 方法或 Runge-Kutta 方法,看看哪个更快。你不会通过编写一个特殊用途的方法来打败它,并且使用 ODE 包将有很多已经内置的东西(比如自适应时间步长),这对于解决问题非常有帮助。