如何在 scipy 中使用黑盒积分器实现 Galerkin Method of Lines / FEM

计算科学 有限元 时间积分
2021-12-12 08:54:52

假设我有一些时间相关的 PDE,它可以写成强形式

ut+L(u)=f

其中是一些微分运算符。如果我在不离散时间项的情况下编写问题的弱形式,我最终会得到标准弱形式问题,即找到使得LuhXh

m(uht,v)+a(uh,v)=f(v),vXh

在这一点上,我通常以以下方式在时间上离散化(这里使用反向欧拉)

m(uhk+1uhkΔt,v)+a(uhk+1,v)=f(v),vXh

此时,我知道如何通过将项放在右侧、选择测试、试验空间、离散化和求解来解决问题。m(uhk,v)

但是,如果我想从第二个等式开始并构造我的代码以使用黑盒积分器呢?有这样做的标准方法吗?我知道右手边的项会随着高阶时间离散化而变得更加复杂。

编辑:

似乎答案是首先在空间上离散化,并将离散系统表示为矩阵系统但是,如果黑盒时间积分器库不支持 DAE 系统(允许用户输入)矩阵,那么您就不走运了(这似乎是 的情况)。如果可以廉价地反转,那么黑盒积分器可以处理等效问题或者,可以使用质量集总,但如果您对隐式时间推进方案感兴趣,这似乎很荒谬。BUh˙+AUh=FBscipy.integrate.odeBUh˙=B1(AUhF)

1个回答

您是否有一个特定的黑盒 ode 积分器需要解决? 和初始条件,我将在这些笔记的其余部分中跳过这些条件。一般来说,这只是一个微分代数方程组(DAE)也可以使用 DAE 的求解器来求解,例如MATLAB中的ode15i

m(uht,v)+a(uh,v)f(v)=0,vXh
F(t,u,ut)=0.