MATLAB实现用有限差分法模拟三维对流扩散方程
前言
题目引入:
背景:地下水污染物的扩散和迁移直接影响水质安全。
任务:基于二维或三维Advection-Dispersion方程,建立地下水污染物迁移模型。
要求:使用MATLAB实现数值解法(如有限差分法)分析不同条件下污染物的扩散情况。
一、三维对流扩散方程介绍
此方式的三维方程同二维,只是多了一个方向而已,此处就把二维放上方便表示。
二、代码详解
1.参数设置
% 参数设置
Lx = 1000; % x方向长度
Ly = 1000; % y方向长度
T = 100; % 总时间
Nx = 100; % x方向网格数
Ny = 100; % y方向网格数
Nt = 200; % 时间步数
Dx = Lx / Nx; % x方向步长
Dy = Ly / Ny; % y方向步长
Dt = T / Nt; % 时间步长
vx = 0.1; % x方向水流速度
vy = 1; % y方向水流速度
vz = 0; % z方向水流速度(假设与x,y相同)
Dx_coef = 1; % x方向扩散系数
Dy_coef = 1; % y方向扩散系数
Dz_coef = 5; % z方向扩散系数
S = 0; % 源项(假设无源)
Lz = 1000; % z方向长度
Nz = 40; % z方向网格数
Dz = Lz / Nz; % z方向步长
% 初始化浓度矩阵
C = zeros(Nx, Ny, Nz); % 创建三维浓度矩阵
C(Nx/2, Ny/2, Nz/2) = 1000; % 设置初始点源源强和位置
2.计算部分
实现y-z方向可视化输出
% 创建视频文件
videoFile = VideoWriter('FTCS3D.avi', 'Uncompressed AVI');
videoFile.FrameRate = 10; % 设置视频帧率
open(videoFile);
figure('Position', [1, 1, 1536, 864]); %设置总画幅大小
% 时间循环
for t = 1:Nt
% 临时矩阵
C_new = C;
% 空间离散化计算污染物浓度
for i = 2:Nx-1
for j = 2:Ny-1
for k = 2:Nz-1 % 在 z 方向上进行计算
% 计算扩散项(分别为 x、y、z 方向的扩散项)
diffusion_x = Dx_coef * (C(i+1,j,k) - 2*C(i,j,k) + C(i-1,j,k)) / Dx^2;
diffusion_y =