广义空间离散方案的数值稳定性

计算科学 有限差分 特征值 稳定 雅可比
2021-12-15 15:41:13

在阅读了 Hirsch [1] 的矩阵稳定性章节 (10) 之后,我决定深入研究该章节的参考列表。作为参考引用的其中一篇论文 [2] 展示了一种非常有趣的稳定性分析方法。

这篇论文展示了一个真实世界的具有人工耗散的 NACA0012 翼型的流动解决方案的稳定性评估,以及有望解决这种类型流场的所有铃铛和智慧。

基本上,矩阵稳定性方法,如 Hirsch 中所述,显然在参考文献中使用。[2],定义如下:

如果你有一个离散的 PDE,你最终会得到。

dUdt=SU+Q.

如果您计算雅可比行列式的特征值S,特征值的最大实部告诉您空间离散化方案是否稳定。一个正的真实特征值会随着时间的推移而放大,最终会破坏你的稳定性。

我正在尝试研究一些非常简单的案例的稳定性,但是,我不想使用矩阵的定义带状矩阵定义S. 我希望能够以数值方式推导出它,所以当案例变得不那么琐碎时,我仍然能够评估我的案例的稳定性。我现在面临的问题是如何推导矩阵S,因为它被定义为:

S=RHSU

在哪里RHS代表我的空间离散化方案,和U是我的解决方案向量。

对于一维情况,RHS是一个大小相同的向量U. 我尝试使用简单的有限差分,但是,它们看起来不够健壮。或者,至少,尝试计算导数:

for i in range(1,n_points):
    drhs_du = (rhs[i+1] - rhs[i-1]) / 2.0*(u[i+1] - u[i-1])

给了我很多零除法。

我看到了一些使用 Frechet 导数来计算SJacobian,但使用它的作者(我亲自认识)也报告说这种类型的数值导数相当麻烦。

最后,我的问题与以数字方式计算此雅可比行列式的稳健建议有关。你会使用哪种算法,甚至,你们会使用哪种衍生定义?是否有可靠的高性能库并实现了算法?

谢谢 !

[1] Hirsch.C《内外流数值计算 Vol.01》

[2] Eriksson.LE Rizzi“对欧拉方程离散近似稳态收敛的计算机辅助分析”

编辑#01

以下评论第二段中描述的方法的正确实现是否可以翻译为:

def frhs(unn,unm1,dx):
    return (unn - unm1)/dx

eps = 0.0001

drhs_du = np.zeros((nx,nx))

for i in range(1,nx-1):
    for j in range(1,nx-1):
        drhs_du[i,j] = (frhs(un[i] + eps,un[i-1] + eps,dx) - frhs(un[j],un[j-1],dx))/eps

?

1个回答

因此,在我看来,这似乎存在误解。您的残差或右侧可能取决于多个单元格,因此在构建雅可比式时,您应该问自己残差中的每个条目如何依赖于每个单元格。现在这应该给你一个 nxn 稀疏矩阵。如果您实际上手动对其进行线性化,您应该能够将其存储在一个随单元格数量线性缩放的向量中。鉴于您是 1d,我假设它的大小为 3n,但这取决于您的离散化。这做起来相当简单,但相当乏味。

另一种方法是计算您提到的数值导数,这似乎是您误解的根源。它没有按照您的建议进行评估,它正在查看不同的单元格并获取残差的差异并获取单元格值的差异。相反,它是通过逐个单元格的方法完成的,您可以单独扰动每个单元格的值并查看这如何影响残差,然后您将残差与扰动状态和未扰动状态之间的差值除以扰动。这样做时,您会发现模板非常有限,并且在填写矩阵时应该得到很多零,并且您将能够将这个稀疏矩阵存储在上面提到的向量中。

最后一种可能性是您实际上不需要雅可比矩阵,您需要雅可比向量积。相反,您可以通过在要乘以雅可比的向量方向上的无穷小复数扰动来扰动整个场,评估此扰动状态的残差,您将获得没有舍入误差的 frechet 导数。