我正在实施一种有限差分法来求解扩散-平流方程:
ut+v⋅ux=D⋅uxx
(v, D 是常数)。计划使用算子拆分方法(见下文),我现在专注于平流部分。
我选择了交错跳跃法(来自数字食谱书)
un+1j=un−1j−v⋅ΔtΔx(unj+1−unj−1)
因为在通量守恒的情况下它应该是库朗稳定的;事实证明确实如此,因为它使用周期性条件完美地工作。当试图改变界限时,问题就显现出来了。简而言之,我的问题是:如何在这种方法中明确地实现这些条件?下面,我将提供更多关于我的失败的细节。
无通量条件
让我们从更一般的情况开始:正如这里指出的扩散对流方程,需要 Robin 条件来实现封闭边界
v⋅u−Dux=0
我试图离散化它们:
v⋅uj−DΔx(cj−cj−1)=0
但是,当 D=0 时,剩下的唯一条件是
v⋅u=0
因此,我不清楚如何解释这一点:强加 u=0 会导致(失败)吸收条件的策略(见下文),而 v 是恒定的(我不明白我可以在哪里强加它等于零)。
吸收条件
Leapfrog 方法适用于通量守恒的情况。事实上,强加
u(j=0,n) = 0
u(jmax,n) = 0
造成人为的不稳定性。蛙跳式更新分为三部分:一是该点的前一个(前两步)值,一是该值与上坡点成比例增加,另一部分与下坡点成比例减少。这也是从物理角度可以预期的:一些量进入,一些量出去。简单设置空边界失败的原因现在很明显:如果下坡点为空,则没有归约项,所以最后一个点之前的点会爆炸;之前的点现在有一个很大的减少项,所以归零;之前的点有一个小的减少项等等,导致增加和减少项的交替(见图1)。
算子拆分
正如数字食谱书(上面引用的)中所解释的那样,一个等式
ut=Lu
其中线性算子的分解
L=∑imLi
是可能的可以解决应用,对于每一步,序列
U1(U2(…Um(un)…))=un+1
前提是每个算子 U 求解总和中的一项并且是稳定的。
即使我知道替代方案是可能的,通常考虑扩散平流功能,在深入研究它们之前,我愿意解决我的这个疑问。