大线性弹性问题的预处理是什么?

计算科学 有限元 线性求解器 预处理
2021-12-16 16:04:51

我要解决的问题是线弹性的位移公式:

σ=0inΩσ=λ(u)I+μ(u+ut)inΩu=0overΓDσn=g over ΓN
u位移矢量,σ应力张量和ϵ变形张量。

弱公式是标准公式:

a(u,v)=Ωλuv+Ω2μϵ(u):ϵ(v)f(v)=ΓNgv

然后是使用 1 或 2 阶的经典拉格朗日函数基础对四面体或六面体网格进行 FEM 离散化。(P1 或 P2 用于四面体网格,Q1 或 Q2 用于六面体网格)

我可以组装线性系统Ax=B没有困难,但我无法解决不重要的问题。

我已将我的测试用例减少到以下内容:

Ω is the unit cube u=0 for z=0σn=0.5sin(πx)sin(πy)ez for z=1
网格是立方体的四面体(或六面体)的常规细分。

我正在使用共轭梯度来求解线性系统。我使用 Jacobi 或 Gauss-Seidel 预处理器进行了测试,但没有它们,CG 求解器会更快。

对于 Q1 函数基础:

  • 当有超过 300k 个未知数(100k 个顶点)时,CG 求解器不收敛(几乎恒定残差)

对于第二季度的基础:

  • 它在 200k 未知数处开始变慢,并且在它根本不会收敛之后

使用 Jacobi 或 Gauss-Seidel 预处理器不会提高收敛性。

为了比较视图,我使用热方程(标量场)和类似问题(单位立方体,混合边界条件)进行了测试,CG 求解器在 600k 未知数下快速收敛。由于差异主要是标量与矢量场,我想我在矢量问题的预处理中遗漏了一些东西。

具有 200k 未知数(8000 个六角形,9000 个顶点,Q2 基础)和微不足道的几何形状的线性弹性问题似乎很小,但我失败了。而更简单的预处理器并不能改善事情。所以我的问题是:

  • 我应该如何选择线性弹性预调节器?
  • 解决大型弹性问题(数百万个未知数)的人们如何处理此类问题?

如果您对此主题有任何建议或参考,我将非常感激,谢谢。

1个回答

您可以随时尝试将 AMG 作为一种预处理器。

还有其他几种方法可以使用。查看 Johanes Kraus、Neytcheva、Owe Axelsson 的论文。

如果您使用单独的排量排序,您可以尝试非常有效的 Schur 补码型预处理器。

您可能会注意到对于不可压缩材料ν=0.5你得到λ这是一个问题。

人们所做的是他们引入另一个这样的方程

μuμ2λp=0

您使用稳定对 Q2-Q1up. 从这里你得到一个二乘二矩阵A你可以用 Schur 补码来解决。

我已经为此工作了一段时间,寻找 Ali Dorostkar(即我)和 Maya Neytcheva 的论文。

更新

我在这里忘记提到一件事。由 Korn 不等式可知,矩阵的块对角部分A光谱上等价于A所以你可以用它作为你的预处理器。这意味着您创建了一个预处理器

D=[A11A22]

自从Ax是一个向量(让我们命名它v) 在每次迭代中,您都应用您拥有的预调节器

D1Ax=D1v
但你不想倒置D所以你要做的是解决另一个这样的系统

Dy=v

现在由于 D 是块对角线,您只需要解决两个较小的系统。您使用 AMG 进行预处理的每个较小的系统。

我知道这很复杂,但我想这可能会让你感兴趣。