WENO5 对 Hamilton--Jacobi 方程的奇异收敛行为

计算科学 收敛 测试
2021-12-05 14:17:09

我有以下问题。我有一个代码函数,它使用 WENO5 计算函数导数的右偏和左偏近似值,用于 Hamilton-Jacobi 方程,如中所述

@Article{Jiang2000,
  Title                    = {Weighted {ENO} Schemes for {Hamilton--Jacobi} Equations},
  Author                   = {Jiang, Guang-Shan and Peng, Danping},
  Journal                  = SIAM Journal of Scientific Computing,
  Year                     = {2000},
  Month                    = jan,
  Number                   = {6},
  Pages                    = {2126--2143},
  Volume                   = {21},
  DOI                      = {10.1137/S106482759732455X},
}

我在下面将这个 WENO 称为 WENO5JP。

我通过检查收敛顺序,同时逼近简单平滑函数的导数,对我的 WENO5JP 实现进行单元测试。我获得了导数的右偏和左偏近似值,将它们平均,并将该结果与解析导数进行比较。然后我测量 -norm 中的误差,然后计算观察到的准确度顺序。L

但是,当一个函数的准确度在 5 到 6.5 阶之间,而另一个函数的准确度在 4 到 6 阶之间时,我会出现奇怪的行为。

计算观察到的精度顺序我使用以下标准公式来估计准确度的顺序:

pk=ln(Ek1/Ek)ln(Nk/Nk1),
其中是网格大小的观察顺序,这里我使用pkNkNk/Nk1=2

详情以下是我得到的收敛行为的详细信息。

  1. 我将 WENO5JP 应用于并得到如下表所示的精度顺序y=sinx[0;2π]

    |------------|-------|
    | Resolution | Order |
    |         11 |   nan |
    |         41 |  6.68 |
    |         81 |  6.24 |
    |        161 |  6.12 |
    |        321 |  6.15 |
    |        641 |  5.12 |
    |       1281 |  0.60 |
    |       2561 | -1.36 |
    |------------|-------|
    

的线性最小二乘法将p阶估计这是对数刻度“误差与网格大小”的图:E=plnN+lnCpp=6.06

正弦函数的误差与网格大小

  1. 我将 WENO5JP 应用于Trefethen 的关于光谱方法的书(第 56 页)expxsin(5x)

    |------------|-------|
    | Resolution | Order |
    |         11 |   nan |
    |         21 |  4.16 |
    |         41 |  5.64 |
    |         81 |  4.90 |
    |        161 |  4.47 |
    |        321 |  4.11 |
    |        641 |  4.21 |
    |       1281 |  4.45 |
    |       2561 |  5.92 |
    |       5121 | -0.84 |
    |------------|-------|
    

的线性最小二乘法将p阶估计这是对数刻度“误差与网格大小”的图:E=plnN+lnCpp=4.58

Trefethen 平滑函数的误差与网格大小

如您所见,WENO5JP 表现出一些奇怪的行为,其中一个示例给出了超过 5 阶的精度,而在另一个示例中,精度下降到 4 阶。每个表的最后一行显示舍入误差在该方法在这些网格步长处的截断误差。

我的问题是:WENO5JP 具有这种不稳定的准确顺序是否正常?

据我从关于守恒定律的 WENO 文献中可以看出,即使对于简单的线性问题,人们通常也不会得到严格的 5 阶。

但是,由于这种奇怪的收敛行为,我仍然不清楚我是否可以说我的实现是正确的。

更新:您可以在这里找到代码:https ://github.com/dmitry-kabanov/weno5jp-issue

0个回答
没有发现任何回复~