如何使用域分解对 FEM 问题进行预处理?

计算科学 有限元 域分解
2021-12-15 19:18:15

假设我有一个 FEM 代码,它会产生以下问题:

Ax=b.
为了用迭代方法更有效地解决这个问题,我想对其进行预处理,
BAx=Bb,
使用域分解。这是域分解方法的常见应用。我的问题是:我如何检索B从施瓦茨域分解方法?

例如,泊松问题的交替 Schwarz 算法首先解决了这个问题:

2u=fin Ω1,u1n=gon Ω1Γ1,u1n=u2n1|Γ1

然后解决这个问题:

2u=fin Ω2,u2n=gon Ω2Γ2,u2n=u1n1|Γ2
在哪里Ω=Ω1Ω2是全局域,并且Γi表示与其他子域重叠的边界部分。通过反复求解这些方程,我对全局解得到越来越好的估计u1u2. 现在假设我想用它来做前置条件Ax=b, 我怎么做?我如何获得B从这些解决方案中提早提到矩阵?

最后,我对加法施瓦茨和乘法施瓦茨也很感兴趣。

2个回答

不要使用域分解方法。它们来自 1990 年代,但我们今天有更好的方法来预处理问题。他们都致力于解决全局问题,而不是子域问题。一个例子是代数多重网格方法。

让我们考虑抽象线性问题

Ax=b,
在哪里A是一个线性算子并且xb某个域上的一些功能。

为了回答您的问题,让我首先讨论一下预处理器应该做什么。选择一个预处理器,使得 BA1, 意味着 BAI,这是一个很容易解决的系统。

重要的是要注意,预处理器应该计算近似值 A1b对于 任何可能的右手边b. 现在的问题是,什么对应于b在你的问题中。

在一般情况下b是您正在解决的问题的输入,即b由组成f和边界函数g. 然而,让我们为简单起见,假设g=0,因此,预条件子的输入只是函数f.

在这个情况下Bb 是用右手边执行交替施瓦茨程序的几个步骤的结果f=b,从一些(最好是零)初始迭代开始。

因此,如果你想获得矩阵B,你必须在你的分段多项式函数空间上写下代表这个过程的矩阵。右手边b(=f),将是一些分段多项式函数。