MINMOD格式求解一维对流方程的一个算例

1.一维对流方程

利用一维对流方程去用于求解污染物扩散,但对于对流方程这样的差分方程而言,先需要对差分方程进行离散,简单来说有前向差分、后向差分以及中心差分格式(就空间而言前两个是一阶、最后的中心差分格式是二阶),当然还有更多的高阶格式以及变式。

上式中,代表浓度。

2.问题简述

在x轴上,某处突然出现了污染物泄漏(污染物分布详见图1 网格单元划分),同时沿着x轴介质(水或者空气)流动速度为0.5m/s,试求解污染物的扩散。


3.关于MINMOD格式

MINMOD格式也可以称为限制器,它的原理是利用离散化的求解格式计算每个网格单元的具体参数(本例即为浓度)时比较本网格单元向前和向后的浓度梯度,取较小值。

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

------------------------------------------------------------------

------------------------------------------------------------------


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容