使用 rothe 方法和线方法的 PDE 离散化(模块化实现)

计算科学 有限元 pde 有限体积 软件 罗特法
2021-12-08 08:05:45

热方程在空间中用 FV(或 FEM)离散化,得到一个半离散方程(ODE 系统)。这种方法,称为线方法,允许轻松地从一种时间离散化切换到另一种时间离散化,而无需重复代码。特别是,您可以毫不费力地为 ODE 重用任何时间积分器。这非常方便,因为如果您决定将空间离散化从 FV 更改为 FE,您仍然会得到一个半离散方程,并且您的时间积分器仍然可以工作。

现在我正在尝试为同样的问题实现rothe 的方法。然而,时间离散化首先迫使我为我可能想要使用的每个时间离散化方案重写空间离散化。这消除了我以前拥有的时间积分器的重用,并且使得编写可以使用线方法或 Rothe 方法离散化 PDE 的模块化软件变得非常复杂。

有没有一种方法可以实现这两种方法,而无需重复代码?

编辑:

在对流主导的问题中,有限元离散化需要时间和空间上的稳定,使得 Rothe 方法成为“最佳”选择。但是,FV/DG 方法并非如此。

线法中,偏微分方程先在空间离散,后在时间离散。在 Rothe 的方法中,PDE 先在时间上离散,然后在空间上。第三种可能性是同时在空间和时间上离散化(也称为时空离散化)。可以在这里找到关于线条方法和 Rothe 方法的讨论。有关更多信息,来自 Donea 和 Huerta 的“Finite Element Methods for Flow Problems”一书是一个很好的资源。

1个回答

在您链接到的页面上,我真的没有太多要说的,但对我来说,主要论点是这样的:

  • 在许多问题中,需要在时间步长之间调整网格。这样做的概念框架是 Rothe 方法,在该方法中,人们可以在每个时间步独立地选择空间离散化,而先验线法假设 PDE 被转换为 ODE 系统——这与网格自适应不兼容。

  • 另一方面,如果您不想调整网格,那么没关系:在大多数情况下,如果时间步之间的空间离散化是相同的,那么您是否想要首先使用您最喜欢的时间积分器在空间上离散化,然后在时间上离散化,或者反过来 - 您将在每个时间步中解决相同的离散问题。在这种情况下,Rothe 方法和 Lines 方法是相同的。

  • 这扩展到您只想每隔一段时间调整一次网格的情况:您可以将其视为将线应用于多个时间步的方法,然后调整网格,然后再设置一组时间步应用线的方法。或者您可以将其视为 Rothe 方法,其中您只是偶尔调整网格。它基本上会得出相同的数字方案,只是不同的哲学观点。

可能值得再补充一点:在 ODE 世界中,通常使用具有多个阶段或多个步骤的高阶方案。因此,将这些算法装入包中具有显着的好处,您只需以一种或另一种方式处理 ODE 系统即可。另一方面,对于时间相关的偏微分方程,大多数时候使用相当简单的时间步进方法(一些双曲线求解器除外):例如,Crank-Nicolson、BDF-2 或仅使用前向或后向欧拉方案. 对于这些简单的时间积分器,手动编码时间积分并不是特别困难,因为它比空间离散化简单得多。这意味着用 Rothe 方法思考所付出的代价——不能使用 ODE 求解器包——是很小的,而使用线的方法所付出的代价——不能在时间步之间调整网格——是一个很大的代价。这或许可以解释为什么自适应有限元领域的大多数人更喜欢按照 Rothe 方法进行思考。

作为最后一点的推论,回到最初的问题:确实,在 Rothe 方法中很难以面向对象的方式很好地打包所有内容。但是,(i)只要您坚持使用单一类别的 ODE 积分器,您当然仍然可以将一个类中积分器的各个阶段的系数制成表格,并将计算它们的代码完全封装;(ii) 人们通常将相对简单的时间积分器用于时间相关的偏微分方程这一事实意味着实现时间积分所需的代码量通常远小于处理空间离散化的代码量。换句话说,我不知道如何使用 Rothe 方法很好地将空间离散化与时间离散化分开,但我没有