压力、密度、能量、温度和浓度等物理量应始终为正值,但数值方法有时会在求解过程中计算出负值。这是不行的,因为方程将计算复杂或无限的值(通常会使代码崩溃)。哪些数值方法可以用来保证这些量保持正数?这些方法中哪种最有效?
哪些方法可以确保物理量在整个 PDE 模拟中保持为正?
最常见的方法是将负值重置为一些小的正数。当然,这不是一个数学上合理的解决方案。一种可能有效且简单的更好的通用方法是减小时间步长。
双曲线 PDE 的解中经常出现负值,因为冲击的出现会导致振荡,如果在冲击附近存在近真空状态,则往往会产生负值。使用总变异减少 (TVD)或其他非振荡 ( ENO, WENO ) 方法可以减少这种趋势。这些方法基于使用非线性限制器来计算解的导数。但是,由于以下几个原因,您仍然可能会得到负值:
- 如果您使用线的方法并应用高阶时间积分器。大多数 TVD 方案仅在半离散意义上或使用 Euler 方法可证明是 TVD。对于高阶时间积分,您应该使用强稳定性保持 (SSP)时间离散化;这些方案也被称为"收缩"或"保持单调性"。Sigal Gottlieb、Chi-Wang Shu 和我最近有一本关于这个主题的书。
- 如果您不对方程组使用局部特征分解,则您的解决方案将不是 TVD(TVD 方案仅具有标量问题的该属性)。所以最好在特征变量中重建/插值。
- 如果您有一个非线性系统,即使您使用局部特征分解,也会出现负值。例如,任何用于浅水方程或欧拉方程的线性化黎曼求解器(如 Roe 求解器)都可以显示在足够具有挑战性的条件下产生负值。一种解决方案是使用HLL 求解器(或 HLL 的变体);其中一些可证明是积极的。
- TVD 方案只是二阶方案;像 WENO 这样的高阶非振荡方案并不严格满足 TVD 或最大原则。但是对这些高阶方案进行了新的修改;它是由张祥雄(Chi-Wang Shu 的学生)在最近的几篇论文中开发的。
当然,对于特定方程,还有许多其他专门的方法,例如在 David George 的 GeoClaw 代码中,它使用带有额外非物理波的黎曼求解器来强制执行正性。
假设我们正在求解没有任何源项的双曲方程,并假设我们提供物理初始条件,确保我们使用的数值方案是总变差递减是确保计算解的“物理性”的好方法。由于 TVD 方案保持单调性,因此不会创建新的最小值或最大值,并且解决方案将保持在我们希望正确设置的初始值的范围内。当然,问题在于 TVD 方案并不是最明显的方案。在线性方案中,只有一阶方案是 TVD (Godunov 1954)。因此,自 50 年代以来,各种非线性 TVD 方案被开发出来,以结合高精度和单调性来求解双曲方程。
对于我的应用,求解具有大压力/密度梯度的 Navier-Stokes 方程,我们使用混合MUSCL -中心方案来捕获大梯度/不连续性并保持良好的精度。第一个 MUSCL 方案(MUSCL 代表 Monotone Upstream-centered Schemes for Conservation Laws)由 Van Leer 于 1979 年设计。
如果您想进一步了解这个主题,请查阅 Harten、Van Leer、Lax、Sod 和 Toro 的作品。
这个问题的答案是,我们从离散化方案中得到的线性方程组 必须是 M 矩阵。这尤其意味着是逆单调矩阵,这意味着逆矩阵是单调矩阵。
单调矩阵是一个矩阵,它只有非负项,其符号表达式是。此外,对于单调矩阵成立:
该条件应用于逆单调系统矩阵意味着它适用于上述线性方程组 因此,如果我们系统的右手边通常在非负初始值和非负边界数据的情况下
通常,导致 M 矩阵的离散化方案称为单调方案,这就是那些保持非负性的方案。