H1H1-泊松方程有限元法的收敛率,取决于元素阶数

计算科学 有限元 收敛 加勒金
2021-12-22 01:24:30

我想通过应用制造解决方案的方法来验证我的 FEM 程序,同时使用连续 Galerkin 方法求解二维泊松方程

2u=f
with 导致 我的系统是和狄利克雷边界条件的正方形上定义
u=sin(πx)sin(πy)
f=2π2sin(πx)sin(πy)
Ω=[0,1]2uΩ=0

-seminorm 在不同网格密度下从二阶到八阶的元素的收敛速度,导致H1

+--------------+---------+----------+----------+------------+-------------+--------------+---------------+
| cell numbers  |  P2     |  P3      |  P4      |  P5        |  P6         |  P7          |  P8           |
+--------------+---------+----------+----------+------------+-------------+--------------+---------------+
| 4            |  11.04  |  339     |  852.46  |  10595.67  |  137926.51  |  6300733.33  |  69993038.13  |
| 16           |  3.97   |  62.5    |  12.8    |  14.29     |  56.35      |  335.63      |  295.60       |
| 64           |  4      |  125.47  |  12.81   |  14.02     |  56.95      |  350.12      |  299.23       |
| 256          |  4      |  251.15  |  12.81   |  13.96     |  57.10      |  303.92      |  12.77        |
| 1024         |  4      |  502.4   |  12.8    |  13.94     |  57.24      |  6.82        |  1.16         |
+--------------+---------+----------+----------+------------+-------------+--------------+---------------+

这里有些事情我(认为我可以)解释,有些则不能。一方面,第一行中的大值是因为我从开始,而对于其他每一步,我都会重复使用上一步的结果,该结果已被插入到新网格中。因此,除了第一步之外,我预计会出现正确的收敛速度。 此外,我假设七阶和八阶元素的递减值表明插值对于低网格密度已经非常好。那是对的吗? 我在这里不明白的事情: u0=0

  • 为什么三阶元素的收敛速度比四阶和五阶元素的收敛速度高得多(并且随着密度的增加而增加)?这是偶然的,即三阶元素只是很好地插入了测试函数,还是别的什么?

  • 为什么从二阶到四阶(跳过三阶)的收敛速度有很大的进步,而四阶和五阶之间几乎没有差异?再一次,从五阶到六阶,从六阶到七阶,但在七阶和八阶之间几乎看不到任何区别。

我该如何解释这些事情?(我希望程序本身没有错误......)

编辑: -seminorm 本身的值是H1

+--------------+----------+----------+----------+-----------+-----------+-----------+-----------+
| cell numbers |    P2    |    P3    |    P4    |    P5     |    P6     |    P7     |    P8     |
+--------------+----------+----------+----------+-----------+-----------+-----------+-----------+
|            4 | 3.485e-1 | 1.135e-2 | 4.514e-3 | 3.631e-4  | 2.790e-5  | 6.107e-7  | 5.497e-8  |
|           16 | 8.820e-2 | 7.335e-4 | 2.897e-4 | 1.172e-5  | 4.451e-7  | 4.343e-9  | 2.131e-10 |
|           64 | 2.210e-2 | 4.624e-5 | 1.823e-5 | 3.684e-7  | 6.994e-9  | 3.293e-11 | 8.274e-13 |
|          256 | 5.527e-3 | 2.896e-6 | 1.141e-6 | 1.157e-8  | 1.094e-10 | 2.981e-13 | 7.630e-14 |
|         1024 | 1.382e-3 | 1.811e-7 | 7.135e-8 | 3.617e-10 | 1.708e-12 | 1.183e-13 | 1.428e-13 |
+--------------+----------+----------+----------+-----------+-----------+-----------+-----------+

我正在使用库 deal.II 来计算值,并将元素FE_Q用作基础元素。它从具有等距支持点的拉格朗日多项式(最多 2 阶)切换到更高阶的 Gauss-Lobatto-多项式(另请参阅https://www.dealii.org/developer/doxygen/deal.II/classFE__Q.html) . 这可能是观察到的收敛行为的原因吗?

3个回答

您的代码中有一个错误:-) 首先,在每一列中,您会遇到错误再次变大的情况,这显然不应该发生,因为有限元空间是从上到下嵌套的。其次,从左到右移动误差也应该减少,因为有限元空间是嵌套的,但同样不会发生这种情况。最后,在大多数列中,错误似乎不会收敛到零,而是收敛到某个有限值——这显然也不应该发生。

因此,如果表格显示错误,则某处存在错误。相反,如果该表显示了解决方案半范式而不是错误,那么某处仍然存在错误,因为从上到下和从左到右仍然应该导致收敛到确切值,但是您的价值观无处不在。H1

您实际上是如何计算误差范数和收敛速度的?

如果我使用你的错误表,我会得到预期的结果。例如

P2、256 和 1024 细胞

In [1]: log(5.527e-3/1.382e-3)/log(2)                                           
Out[1]: 1.9997389968259023

P4、256 和 1024 细胞

In [4]: log(1.141e-6/7.135e-8)/log(2)                                           
Out[4]: 3.9992415517002806

你的 P3 结果有些奇怪。您必须仔细检查您的代码。

更新:我有一个 deal.II 代码几乎可以解决这里的问题

https://github.com/cpraveen/fembook/tree/master/deal.II/ex04

修改这个为你的特定问题度= 3,我得到

cells dofs       L2             H1       
    4   49 1.359e-03    - 2.668e-02    - 
   16  169 8.812e-05 3.95 3.376e-03 2.98 
   64  625 5.564e-06 3.99 4.233e-04 3.00 
  256 2401 3.486e-07 4.00 5.295e-05 3.00 
 1024 9409 2.180e-08 4.00 6.620e-06 3.00 

我找到了对这种行为的解释:为了计算差异的积分,我使用了一个固定的三阶元素。这解释了 P3 的高收敛速度和所有其他元素的较低速度。当用更合适的顺序(例如FE_degree * 2 + 1)替换固定顺序时,我的收敛速度变为

P2    4
P3    8
P4    16
P5    32
P6    64
P7    128
P8    256

正如预期的那样。