Week 5.1 - Mid term project - Solving the steady and unsteady 2D heat conduction problem
Steady State Heat Conduction
clear all
close all
clc
% inputs
nx=10;
ny=nx;
L=1; %domain Length
x=linspace(0,L,nx);
y=linspace(L,0,ny);
dx=L/(nx-1);
dy=L/(ny-1);
T=ones(nx,ny);
T(1,:)=600;
T(:,1)=400;
T(end,:)=900;
T(:,end)=800;
% averaging around the corners
T(1,1)=(600+400)/2;
T(1,end)=(600+800)/2;
T(end,1)=(900+400)/2;
T(end,end)=(900+800)/2;
Told=T;
error=10;
Tol=1e-4;
w=1.2;
k=2*(dx^2+dy^2)/(dx^2*dy^2);
display=('Enter the iteration method');
prompt='chose iterative solver type 1 =Jacobi solver, 2= gaussidel solver, 3 = SOr method \n';
method=input(prompt);
if method==1
iter=1;
while(error > Tol)
for i=2:nx-1
for j=2:ny-1
t1=(Told(i+1,j)+Told(i-1,j))/(k*dx^2);
t2=(Told(i,j+1)+Told(i,j-1))/(k*dy^2);
T(i,j)=t1+t2;
end
end
error = max(max(abs(Told-T)));
Told=T;
iter=iter+1;
figure(1);
[a,b]= contourf(x,y,T); % contourf is filling the gaps with colors
colormap(jet); % It gives colors more vibrant
clabel(a,b)
colorbar
xlabel("Temp_x")
ylabel("Temp_y")
title_text= sprintf('iterations = %d',iter)
title(title_text)
%title(sprintf('%d',iter))
pause(.03)
end
end
if method==2
iter=1;
while(error > Tol)
for i=2:nx-1
for j=2:ny-1
t1=(Told(i+1,j)+T(i-1,j))/(k*dx^2);
t2=(Told(i,j+1)+T(i,j-1))/(k*dy^2);
T(i,j)=t1+t2;
end
end
error = max(max(abs(Told-T)));
Told=T;
iter=iter+1;
figure(1);
[a,b]= contourf(x,y,T); % contourf is filling the gaps with colors
colormap(jet); % It gives colors more vibrant
clabel(a,b)
colorbar
xlabel("Temp_x")
ylabel("Temp_y")
title_text= sprintf('iterations = %d',iter)
title(title_text)
%title(sprintf('%d',iter))
pause(.03)
end
end
if method ==3
iter=1;
while(error > Tol)
for i=2:nx-1
for j=2:ny-1
t1=(Told(i+1,j)+T(i-1,j))/(k*dx^2);
t2=(Told(i,j+1)+T(i,j-1))/(k*dy^2);
T_gauss(i,j)=t1+t2;
T(i,j)=(1-w)*Told(i,j)+w*T_gauss(i,j);
end
end
error = max(max(abs(Told-T)));
Told=T;
iter=iter+1;
figure(1);
[a,b]= contourf(x,y,T); % contourf is filling the gaps with colors
colormap(jet); % It gives colors more vibrant
clabel(a,b)
colorbar
xlabel("Temp_x")
ylabel("Temp_y")
title_text= sprintf('iterations = %d',iter)
title(title_text)
%title(sprintf('%d',iter))
pause(.03)
end
end
Jacobi Iteration

Gaussidel Equation Solver

SOR method

Transient Heat conduction explicit
close all
clear all
clc
nx=10;
ny=10;
L=1;
x=linspace(0,L,nx);
y=linspace(L,0,ny);
dt=.0001;
t=.1;
nt=t/dt;
dx=L/(nx-1);
dy=L/(ny-1);
dt=L/(nt-1);
T=ones(nx,ny);
T_L=400;
T_R=800;
T_T=600;
T_B=900;
T(:,1)=T_L;
T(:,end)=T_R;
T(1,:)=T_T;
T(end,:)=T_B;
T(1,1)=(T_L+T_T)/2;
T(1,end)=(T_T+T_R)/2;
T(end,1)=(T_L+T_B)/2;
T(end,end)=(T_R+T_B)/2;
tol=1e-4;
error=9e9;
alpha=1.3;
K1=alpha*(dt/dx^2);
K2=alpha*dt/dy^2;
CFL=K1+K2;
Told=T;
for nt=1:1400
for i =2:nx-1
for j=2:ny-1
term1 = K1*(Told(i+1,j)-2*Told(i,j)+Told(i-1,j));
term2=K2*(Told(i,j+1)-2*Told(i,j)+Told(i,j-1));
T(i,j)= Told(i,j)+term1+term2;
end
end
Told=T;
nt=nt+1;
[a,b]=contourf(x,y,T);
colormap(jet)
colorbar
clabel(a,b)
xlabel("Temp_X")
ylabel("Temp_Y")
text=sprintf('iteration =%d',nt);
title(text)
pause(.03)
end

Implicit Transient Sover
clear all
close all
clc
nx=10;
ny=nx;
L=1;
x=linspace(0,L,nx);
y=linspace(0,L,ny);
dx=L/(nx-1);
dy=L/(ny-1);
T=300*ones(nx,ny);
T_T= 600;
T_B= 900;
T_R= 800;
T_L= 400;
T(:,1)=T_L;
T(:,end)=T_R;
T(1,:)=T_T;
T(end,:)=T_B;
T(1,1)=(T_L+T_T)/2;
T(1,end)=(T_T+T_R)/2;
T(end,1)=(T_L+T_B)/2;
T(end,end)=(T_R+T_B)/2;
tol=1e-4;
error=9e9;
alpha=1.3;
dt=.01;
K1=alpha*(dt/dx^2);
K2=alpha*(dt/dy^2);
K=1/(1+2*K1+2*K2);
CFL=K1+K2;
Told=T;
T_prev=T;
t=.1;
w=1.3;
disp('Enter the iterative method');
prompt='chose iterative solver type 1 =Jacobi solver, 2= gaussidel solver, 3 = SOr method \n';
method=input(prompt);
if method ==1
iter=1;
for nt=1:1400
error=9e9;
while (error>tol)
for i=2:nx-1
for j=2:ny-1
term1= K*K1*(Told(i-1,j)+Told(i+1,j));
term2= K*K2*(Told(i,j-1)+Told(i,j+1));
T(i,j)=K*T_prev(i,j)+term1+term2;
end
end
error = max(max(abs(Told-T)));
Told=T;
iter=iter+1;
end
T_prev=T;
end
end
if method ==2
iter =1;
for nt = 1:1400
error = 9e9;
while(error>tol)
for i=2:nx-1
for j=2:ny-1
term1 = K*K1*(T(i-1,j)+Told(i+1,j));
term2 = K*K2*(T(i,j-1)+Told(i,j+1));
T(i,j)= K*T_prev(i,j)+term1+term2;
end
end
error = max(max(abs(T-Told)));
Told=T;
iter=iter+1;
end
T_prev=T;
end
end
if method ==3
iter =1;
for nt=1:1400
error=9e9;
while(error>tol)
for i=2:nx-1
for j=2:ny-1
term1 = K*K1*(T(i-1,j)+Told(i+1,j));
term2 = K*K2*(T(i,j-1)+Told(i,j+1));
T_guass(i,j)= K*T_prev(i,j)+term1+term2;
T(i,j)= (1-w)*Told(i,j)+w*T_guass(i,j);
end
end
error=max(max(abs(T-Told)));
Told=T;
iter=iter+1;
end
T_prev=T;
end
end
[a,b]=contourf(x,y,T);
colorbar
clabel(a,b)
colormap(jet)
xlabel("Temp_x");
ylabel("temp_y");
text=sprintf('timesteps = %d',iter);
title(text)
Jacobi

Gaussidel Solver

SOR Solver
