Advection Equation Matlab Error

78 Views Asked by At

I was recently writing code to solve the 1D advection equation in Matlab by Finite Differences when I was given a frustrating error in my for loop. It was pertaining to the expression: u_mat(idx,tdx+1)=u_mat(idx,tdx)-vdt^2(u_mat(idx+dx,tdx)-2*u_mat(idx,tdx)+u_mat(idx-dx,tdx)). The error was that the index exceeded the matrix dimensions, how can I fix this? Below you’ll find my full code. Thanks in advance.

L = 10; %pipe length 
N = 10; %no. of nodes
v = 2; %velocity

x_vec = linspace(0,L,N)
dx = x_vec(2)-x_vec(1); 

dt = 0.1; 
t_vec = 0:dt:10;

u_mat = zeros(length(x_vec),length(t_vec));
u_mat(1,:) = 200; %dirichlet condition for left end
u_mat(end,:) =100; %dirichlet condition for right end

for tdx = 1:length(t_vec)-1 %integrator integrates to tdx+1
   for idx = 2:length(x_vec)-1              
       u_mat(idx,tdx+1) = u_mat(idx,tdx) - v*dt^2*(u_mat(idx+dx,tdx)-2*u_mat(idx,tdx)+u_mat(idx-dx,tdx));
   end
end                   

[tt,xx] = meshgrid(t_vec,x_vec);
mesh(xx,tt,u_mat)

xlabel('Position')
ylabel('Time')
zlabel('Temperature')