用线法求解一维对流

计算科学 pde matlab 线法
2021-12-26 07:56:22

我有兴趣使用线法求解以下一维平流方程。

Ct=vCx
空间域已被离散化为 N 个节点。使用前向差分对空间域进行离散化给出,

dCdt=vCi+1CiΔx

在第 N 个节点,应用 Neumann 边界条件

(dCdt)N=0

暗示,CN+1=CN

但是,以下系统不会收敛。我不确定上述程序是否正确。

function convection()
global v;
N= 5;
C0 = [5 0 0 0 0];
v = 10000;
delx = 6;
tspan = [0 10];
[t C]  = ode15s(@(t,s) fun(t,s), tspan , C0);
plot(t,C)
function dC= fun(t,C)
    for i = 1:nnode-1
        dC(i,1) = -v*(C(i+1) - C(i))/delx; 
    end
    dC(nnode,1) = 0;
end
end

我想知道是否必须在两端应用边界条件。我只在终端节点使用了 Neumann BC。

1个回答

我认为您使用的是顺风而不是逆风有限差分。这会导致您的代码在不允许的地方施加边界条件。对流方程的解基本上是(暂时忽略左 BC)

C(x,t)=C0(xvt)

在哪里C0是你的初始值。

因此,如果v>0,它是一个右行信号。域右端的值,在您的情况下,无论您的节点在哪里xN位于,完全由您的初始值和左边界条件确定。在那里强加一个 Neumann BC 会过度确定系统并将导致不稳定。

其次,您的有限差分以错误的方式存在偏差。对于正v(如你的例子)它应该是

dCdt=vCiCi1Δx

更改此设置也将解决您的边界条件问题xN,因为逆风离散化不需要它。