分步法的数学基础

计算科学 多物理场
2021-12-04 22:56:37

用于解决多物理场时间演化问题的著名方法称为“分步法”或“分裂法”,通常适用于右侧有项和的偏微分方程,基本上它包括使用部分更新,一次一个术语。所以对于 PDE

tf=F(f,t)+G(f,t)

分数步方法将导致像这样的时间步长方案

f~=f(t)+F(f(t),t)dt

f(t+dt)=f~+G(f~,t)dt,

并且有一些变化可以提高准确性(斯特朗分裂等)

当然,在整个问题中使用针对物理的特定部分调整的专用方法(代码)有很大的优势,例如,对于处理非理想流体动力学,可以将一种特定于理想流体动力学的方法和扩散方程求解器结合起来。但这总是能保证有效吗?

如果我们有两个(或更多)复杂模型FG可作为“黑匣子”(可能实现为单独的复杂代码),我们想研究自洽时间演化FG在右手边,我们怎样才能让自己相信解决方案是正确的?一些信心可能基于改变时间步长的收敛性研究dt. 但即使结果确实在时间步内收敛dt,这真的保证解决方案是正确的吗?我想这个问题更广泛地适用于非线性方程的任何时间积分方法。如果时间积分方法是稳定的,则有 Lax 等价定理可以保证收敛到一致的有限差分近似的精确解,但它仅适用于线性时间演化问题。

对于哪类问题,可以证明分数步时间积分技术的解收敛于方程的精确解?对于哪些类别的问题可以证明这种技术不会导致正确的解决方案?

1个回答

对您的问题的简短回答是,它的工作原理是Zassenhaus 公式简而言之,如果AB是线性算子,那么

et(A+B)=etAetBet22[A,B]

其中椭圆表示高阶项t. 如果您的动力学的两个部分都是线性的,那么对于足够小的时间步,您可以拆分积分并且拆分误差将是有序的δt2通过这个公式。您所说的那些“提高准确性的变化”可以通过对称方案然后查看 Zassenhaus 公式中的高阶项来推导出。对于非线性问题,您可以围绕当前值进行线性化并假设时间步长足够小。

这种方法可以很好地解决许多问题,但有很多警告。假设您通过拆分两个部分来求解对流扩散方程。如果您使用隐式方法求解未拆分形式,则时间步长方案和扩散动力学将为您提供正确整合平流动力学所需的所有稳定性。现在假设您使用扩散的隐式方法和平流的显式方法解决了分裂形式,但是您在向平流求解器中添加人工扩散或其他稳定性时并不十分小心。如果时间步长太长,您最终可能会通过扩散求解器无法充分抑制的对流求解器引入不稳定性。

这是一个更容易犯的错误,但有些问题从根本上更难以通过拆分来解决。一个很好的例子是涉及燃烧的问题,其中化学反应的时间尺度比流体传输的时间尺度短几个数量级。如果您可以对化学使用刚性 ODE 求解器,对流体动力学使用冲击捕获守恒定律求解器,那将非常方便。但即使你可能有一个稳定的化学积分器,分裂误差也会变得巨大。 这篇论文很好地分析了为什么这是一个如此困难的问题。

如果您需要参考,Hairer、 Lubich和 Wanner 的书第 3 章中对此进行了精彩的描述。他们使用李导数以更奇特的方式呈现事物,这比我使用线性化的草率论证更严格。