连续污染源的四维模拟程序
下面来介绍一下在连续的污染源的情况下,如何提高MATLAB编程来实现模拟四维空间分布:
本程序需要注意一下几个问题:
1.本程序运行需要1-3分钟左右时间(视个人电脑配置情况而定);
2.两个M文件都放在MATLAB同一目录下;
3.在命令窗口中输入lianxuwuran(t),回车即可运行,其中t为时间,例如lianxuwuran(20),表示经过20秒扩散的仿真图像。
4.运行出来的图形有等高线数值,但是某些等高线可能没有等高线数值,这是因为数值过于密集,为了避免重叠不便展示,故而进行了编辑。
首先在MATLAB的主界面编辑器中分别写入下列代码:
主程序代码:
%这是主程序,命名为lianxuwuran.m
function Value=lianxuwuran(t)
%现在开始编写连续污染源模型
global xx yy zz;
xmin=-500;dx=10;xmax=500;ymin=-100;dy=5;ymax=100;zmin=-10;dz=1;zmax=10;
Cxyz_t((xmax-xmin)/dx+1,(ymax-ymin)/dy+1,(zmax-zmin)/dz+1)=0;
ii=0;jj=0;kk=0;
for zz=zmin:dz:zmax;kk=kk+1;
for yy=ymin:dy:ymax;jj=jj+1;
for xx=xmin:dx:xmax;ii=ii+1;
Cxyz_t(ii,jj,kk)=quadl(@fun3D,1,t);
end
ii=0;
end
jj=0;
end
Cxyz_tt2=Cxyz_t;
%现在开始编写瞬时点源污染模型
M=200400;K=4.2/(24*60*6);
Dx=50;Dy=5;Dz=2;ux=1.5;uy=0.2;uz=0.1;
[x,y,z]=meshgrid(xmin:dx:xmax,ymin:dy:ymax,zmin:dz:zmax);
C_Point=M./(8.*(pi.*t).^(3./2).*sqrt(Dx.*Dy.*Dz)).*exp(-(x-ux.*t).^2./(4.*Dx.*...
t)-(y-uy.*t).^2./(4.*Dy.*t)-(z-uz.*t).^2./(4.*Dz.*t)).*exp(-K.*t);
if (t<=30&t>0)
figure(1);
subplot(4,1,1);[c,h]=contour(Cxyz_tt2(:,:,11),200);grid on;
axis tight;title('连续污染源中心扩散示意图(a)');
xlabel('x方向污染物浓度/(mg/L)'); ylabel('y方向污染物浓度/(mg/L)');
subplot(4,1,2);[c,h]=contour(C_Point(:,:,11),200);grid on;
axis tight;title('瞬时点源中心扩散示意图(b)');
xlabel('x方向污染物浓度/(mg/L)'); ylabel('y方向污染物浓度/(mg/L)');
subplot(4,1,3);[c,h]=contour(Cxyz_tt2(:,:,1),200);grid on;
axis tight;title('连续污染源水下10米扩散示意图(c)');
xlabel('x方向污染物浓度/(mg/L)'); ylabel('y方向污染物浓度/(mg/L)');
subplot(4,1,4);[c,h]=contour(C_Point(:,:,1),200);grid on;
axis tight;title('瞬时点源水下10米扩散示意图(d)');
xlabel('x方向污染物浓度/(mg/L)'); ylabel('y方向污染物浓度/(mg/L)');
else t>30
figure(1);
subplot(4,1,1);[c,h]=contour(Cxyz_tt2(:,:,11),8);grid on;
clabel(c,h);axis tight;title('连续污染源中心扩散示意图(a)');
xlabel('x方向污染物浓度/(mg/L)'); ylabel('y方向污染物浓度/(mg/L)');
subplot(4,1,2);[c,h]=contour(C_Point(:,:,11),8);grid on;
clabel(c,h);axis tight;title('瞬时点源中心扩散示意图(b)');
xlabel('x方向污染物浓度/(mg/L)'); ylabel('y方向污染物浓度/(mg/L)');
subplot(4,1,3);[c,h]=contour(Cxyz_tt2(:,:,1),8);grid on;
clabel(c,h);axis tight;title('连续污染源水下10米扩散示意图(c)');
xlabel('x方向污染物浓度/(mg/L)'); ylabel('y方向污染物浓度/(mg/L)');
subplot(4,1,4);[c,h]=contour(C_Point(:,:,1),8);grid on;
clabel(c,h);axis tight;title('瞬时点源水下10米扩散示意图(d)');
xlabel('x方向污染物浓度/(mg/L)'); ylabel('y方向污染物浓度/(mg/L)');
end
子程序代码:
%这是子程序,命名为fun3D.m
function CPoint=fun3D(t)
global xx yy zz;
Q=30000;Cq=6.68;K=4.2/(24*60*6);
Dx=50;Dy=5;Dz=2;ux=1.5;uy=0.2;uz=0.1;
CPoint=Cq*Q./(8.*(pi.*t).^(3./2).*sqrt(Dx.*Dy.*Dz)).*exp(-(xx-ux.*t).^2./(4.*Dx.*...
t)-(yy-uy.*t).^2./(4.*Dy.*t)-(zz-uz.*t).^2./(4.*Dz.*t)).*exp(-K.*t);
其次命名保存至自定义路径下,点击运行,结果如下:
从图中得出以下结论:
(1)瞬时污染点源的污染物质量与单位时间内连续污染排放源排放的污染物质量相等,则连续污染源污染的范围比污染点源要大很多。
(2)经过一定的时间,瞬时污染点源沿竖直方向的同一XOY切面(其他切面亦类似)的浓度变化不大,而连续污染源则变化较大。
(3)瞬时污染点源沿着水流方向,污染范围基本不发生变化,但是污染中心却随着水流方向变化。
(4)连续污染源沿着水流方向,污染范围不断扩大,但是污染源中心不会发生变化。
请大家继续关注!!!