具有能量守恒的数值方案?

计算科学 计算物理学
2021-12-01 06:43:52

我有一组方程可以及时整合一些东西t. 在每个时间步,我计算一个标量场ϕ(t)和一个潜在的V(ϕ). 我还应该用一个方程来控制能量守恒:

E=12(ϕ˙2+V(ϕ))

或数字:

E=12((ϕnϕn1tntn1)2+V(ϕ))

我的问题是:是吗V(ϕn)要么V(ϕn1)?

3个回答

这取决于您想如何解决它:通过式或显式方法

显式方法当然是最容易编码但有限制的dt为了稳定;隐式方法更难编码,但没有这样的限制dt.

例如,如果我们考虑一个简单的平流方程

wt+uwx=0
然后显式方法将其解决为(使用您的符号,我认为大多数人都这样做nn+1, 而不是n1n)
wjn+wjn1dt=u[wj+1n1wj1n12dx]
更常见的写成
wjn=wjn1+χu[wj+1n1wj1n1]
在哪里χ=dt/2dx. 隐式方法将其解决为
wjn+wjn1dt=u[wj+1nwj1n2dx]
更常见的写成
χuwj+1n+wjnχuwj1n=wjn1
这需要求解一个三对角矩阵(幸运的是有一个相对简单的算法可以解决这个问题)。

我通常会建议先尝试方法,然后看看时间步长是否足够有用;如果不是,那么是时候使用隐式方法了。

我将总结评论中的有用评论。两个近似值

E=12((ϕnϕn1tntn1)2+V(ϕn))

E=12((ϕnϕn1tntn1)2+V(ϕn1))

将为您提供能量的一阶准确近似值。如果您希望获得高于一阶精度,则应使用更准确的有限差分近似ϕ˙. 例如,您可以使用

E=12((ϕn+1/2ϕn1/2tntn1)2+V(ϕn)).

导数的定义是

ϕ˙n=limδt0ϕn+1ϕnδt
其中因此,您正在计算的导数是为第步计算的。因此,我会说你应该选择δttntn1n1V(ϕn1)