1.一维对流方程
利用一维对流方程去用于求解污染物扩散,但对于对流方程这样的差分方程而言,先需要对差分方程进行离散,简单来说有前向差分、后向差分以及中心差分格式(就空间而言前两个是一阶、最后的中心差分格式是二阶),当然还有更多的高阶格式以及变式。
上式中,C 代表浓度。
2.问题简述
在x轴上,某处突然出现了污染物泄漏(污染物分布详见图1 网格单元划分),同时沿着x轴介质(水或者空气)流动速度为0.5m/s,试求解污染物的扩散。
3.关于MINMOD格式
MINMOD格式也可以称为限制器,它的原理是利用离散化的求解格式计算每个网格单元的具体参数(本例即为浓度C )时比较本网格单元向前和向后的浓度梯度,取较小值。
4.编程实现
下面给出程序的主要部分:
for m=1:nstep
mf(:,m)=f;
lf(:,m)=fu;
if m==1
% hold off;
figure (1)
plot(x,f,'k-')
hold on
elseif m==200||m==400||m==600
plot(x,f,'b--');
plot(x,fu,'r-.');
% pause(0.5)
end
foo=f;
for is=1:2 %two steps per timestep
fo=f;
for i=2:n-1
bot=(fo(i)-fo(i-1));
top=(fo(i+1)-fo(i));
r=top*bot/(bot^2+0.00001);
psi=max([0, min([r,1])]); % minmod
fh(i)=fo(i)+0.5*psi*(fo(i)-fo(i-1));
end
bot=(fo(1)-fo(n-1));
top=(fo(2)-fo(1));
r=top*bot/(bot^2+0.00001);
psi=max([0, min([r,1])]); % minmod
fh(1)=fo(1)+0.5*psi*(fo(1)-fo(n-1));
fh(n)=fh(1);
for i=2:n-1
f(i)=fo(i)-Co*(fh(i)-fh(i-1) );
end
f(1)=fo(1)-Co*(fh(1)-fh(n-1) );
f(n)=f(1);
end
for i=1:n
f(i)=0.5*(f(i)+foo(i));
end
%一阶迎风
fuo=fu;
for i=2:n-1
fu(i)=fuo(i)-Co*(fuo(i)-fuo(i-1));
end
fu(1)=fuo(1)-Co*(fuo(1)-fuo(n-1));
fu(n)=fu(1);
end
5.结果展示
------------------------------------------------------------------
------------------------------------------------------------------
获取全部代码,请回复
MINMOD
------------------------------------------------------------------
------------------------------------------------------------------