哪些方法可以确保物理量在整个 PDE 模拟中保持为正?

计算科学 pde 流体动力学 双曲-pde
2021-12-20 22:14:21

压力、密度、能量、温度和浓度等物理量应始终为正值,但数值方法有时会在求解过程中计算出负值。这是不行的,因为方程将计算复杂或无限的值(通常会使代码崩溃)。哪些数值方法可以用来保证这些量保持正数?这些方法中哪种最有效?

4个回答

最常见的方法是将负值重置为一些小的正数。当然,这不是一个数学上合理的解决方案。一种可能有效且简单的更好的通用方法是减小时间步长。

双曲线 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 的作品。

上述答案适用于与时间相关的问题,但您也可以在简单的椭圆方程中要求正数。在这种情况下,您可以将其表述为变分不等式,为变量提供界限。

在 PETSc 中,有两个 VI 求解器。一种使用缩减空间方法,其中主动约束中的变量从要求解的系统中删除。另一种使用半光滑牛顿法

这个问题的答案是,我们从离散化方案中得到的线性方程组 必须是 M 矩阵。这尤其意味着是逆单调矩阵,这意味着逆矩阵是单调矩阵。A

Au=b
AA1

单调矩阵是一个矩阵,它只有非负项,其符号表达式是此外,对于单调矩阵成立: BRn×nB0B

(B0)(uv  BuBv,  u,vRn)

该条件应用于逆单调系统矩阵意味着它适用于上述线性方程组 因此,如果我们系统的右手边通常在非负初始值和非负边界数据的情况下A

0b  0=A10A1b=u
bb0

通常,导致 M 矩阵的离散化方案称为单调方案,这就是那些保持非负性的方案。