clc
#node along x
nx = 10;
#nodes along y
ny = 10;
del_x = 1; #difference between 2 nodes along x direction
del_y = 1; #difference between 2 nodes along y direction
k = 2*(del_x^2+del_y^2)/(del_x^2*del_y^2);
#Boundary Conditions
T_u = 600; #Top layer temperature
T_b = 900; #bottom layer temperature
T_l = 400; #left layer temperature
T_r = 800; #right layer temperature
T = (ones(nx,ny))*300; #Initial Conditions
T(1,:) = T_u;
T(nx,:) = T_b;
T(:,1) = T_l;
T(:,ny) = T_r;
T(1,1) = (T_u+T_l)/2;
T(1,ny) = (T_u+T_r)/2;
T(nx,1) = (T_l+T_b)/2;
T(nx,ny) = (T_b+T_r)/2;
#Saving the T value
T_old = T;
#to initiate
tol = 1e-10;
error = 1;
iteration = 0;
#Jocobi Method
function iteration_Jocobi_steady_state = Jocobi_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
#Saving the T value
T_old = T;
tol = 1e-10;
error = 1;
iteration = 0;
Jocobi_Method = 1.1
iteration_Jocobi_steady_state = 0;
while error>tol
for i=2:(nx-1)
for j = 2:(ny-1)
T(i,j) = (1/k)*(((T_old((i-1),j)+T_old((i+1),j))/del_x^2)+((T_old((i),(j-1))+T_old((i),(j+1)))/del_y^2));
endfor
endfor
error = max(max(abs(T_old - T)));
T_old = T;
iteration_Jocobi_steady_state = iteration_Jocobi_steady_state+1;
#contour plot
pcolor(T);
set(gca,'YDir','reverse')
shading flat;
colorbar
xlabel ("x-axis");
ylabel ("y-axis");
title (sprintf('the temperature profile on %d th iteration in Jacobi method',iteration_Jocobi_steady_state))
saveas(1,sprintf('the temperature profile on %d th iteration in Jacobi method.png',iteration_Jocobi_steady_state))
pause(0.01)
endwhile
endfunction
#GS Method
function iteration_GS_steady_state = GS_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
GS_Method = 1.2
iteration_GS_steady_state = 0;
while error>tol
for i=2:(nx-1)
for j = 2:(ny-1)
T(i,j) = (1/k)*(((T((i-1),j)+T_old((i+1),j))/del_x^2)+((T((i),(j-1))+T_old((i),(j+1)))/del_y^2));
endfor
endfor
error = max(max(abs(T_old - T)));
T_old = T;
iteration_GS_steady_state = iteration_GS_steady_state+1;
#contour plot
pcolor(T);
set(gca,'YDir','reverse')
shading flat;
colorbar
xlabel ("x-axis");
ylabel ("y-axis");
title (sprintf('the temperature profile on %d th iteration in Jacobi method',iteration_GS_steady_state))
saveas(1,sprintf('the temperature profile on %d th iteration in Jacobi method.png',iteration_GS_steady_state))
pause(0.01)
endwhile
endfunction
#SOR Method
function iteration_sor_steady_state = SOR_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
SOR_Method = 1.3
alpha = 1;
T_gs = T;
iteration_sor_steady_state = 0;
while error>tol
for i=2:(nx-1)
for j = 2:(ny-1)
T_gs(i,j) = (1/k)*(((T((i-1),j)+T((i+1),j))/del_x^2)+((T_old((i),(j-1))+T_old((i),(j+1)))/del_y^2));
endfor
endfor
T = ((1-alpha).*T_old)+(alpha.*T_gs);
error = max(max(abs(T_old - T)));
T_old = T;
iteration_sor_steady_state = iteration_sor_steady_state+1;
#contour plot
pcolor(T);
set(gca,'YDir','reverse')
shading flat;
colorbar
xlabel ("x-axis");
ylabel ("y-axis");
title (sprintf('the temperature profile on %d th iteration in Jacobi method',iteration_sor_steady_state))
saveas(1,sprintf('the temperature profile on %d th iteration in Jacobi method.png',iteration_sor_steady_state))
pause(0.01)
endwhile
endfunction
#Transient State Analysis
#Explict method
#transient state analysis
#Explict Analysis
#Jocobi Method
function iteration_explict_jacobi = explict_Jocobi_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
Jocobi_Method = 2.1
del_T = 0.2;
alpha = 1;
CFL_x = k_1 = alpha * del_T/del_x^2;
CFL_y = k_2 = alpha * del_T/del_y^2;
iteration_explict_jacobi = 0;
while error>tol
for i = 2:nx-1
for j = 2:ny-1
T(i,j) = T_old(i,j) + k_1 * (T_old(i-1,j)-(2*T_old(i,j))+T_old(i+1,j)) + k_2 * (T_old(i,j-1)-(2*T_old(i,j))+T_old(i,j+1));
endfor
endfor
error = max(max(abs(T_old - T)));
T_old = T;
iteration_explict_jacobi = iteration_explict_jacobi+1;
pcolor(T);
set(gca,'YDir','reverse')
shading flat;
colorbar
xlabel ("x-axis");
ylabel ("y-axis");
title (sprintf('the temperature profile on %d th iteration in Jacobi method',iteration_explict_jacobi))
saveas(1,sprintf('the temperature profile on %d th iteration in Jacobi method.png',iteration_explict_jacobi))
pause(0.01)
endwhile
endfunction
function iteration_explict_gs = explict_gs_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
#GS Method
GS_Method = 2.2
del_T = 0.2;
alpha = 1;
CFL_x = k_1 = alpha * del_T/del_x^2;
CFL_y = k_2 = alpha * del_T/del_y^2;
iteration_explict_gs = 0;
while error>tol
for i = 2:nx-1
for j = 2:ny-1
T(i,j) = T_old(i,j) + k_1 * (T(i-1,j)-(2*T_old(i,j))+T_old(i+1,j)) + k_2 * (T(i,j-1)-(2*T_old(i,j))+T_old(i,j+1));
endfor
endfor
error = max(max(abs(T_old - T)));
T_old = T;
iteration_explict_gs = iteration_explict_gs+1;
pcolor(T);
set(gca,'YDir','reverse')
shading flat;
colorbar
xlabel ("x-axis");
ylabel ("y-axis");
title (sprintf('the temperature profile on %d th iteration in Jacobi method',iteration_explict_gs))
saveas(1,sprintf('the temperature profile on %d th iteration in Jacobi method.png',iteration_explict_gs))
pause(0.01)
endwhile
endfunction
#SOR Method
function iteration_Explict_sor = Explict_sor_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
SOR_Method = 2.3
del_T = 0.2;
alpha = 1;
CFL_x = k_1 = alpha * del_T/del_x^2;
CFL_y = k_2 = alpha * del_T/del_y^2;
T_gs = T;
iteration_Explict_sor = 0;
while error>tol
for i=2:(nx-1)
for j = 2:(ny-1)
T_gs(i,j) = T_old(i,j) + k_1 * (T(i-1,j)-(2*T_old(i,j))+T_old(i+1,j)) + k_2 * (T(i,j-1)-(2*T_old(i,j))+T_old(i,j+1));
endfor
endfor
T = ((1-alpha).*T_old)+(alpha.*T_gs);
error = max(max(abs(T_old - T)));
T_old = T;
iteration_Explict_sor = iteration_Explict_sor+1;
#contour plot
pcolor(T);
set(gca,'YDir','reverse')
shading flat;
colorbar
xlabel ("x-axis");
ylabel ("y-axis");
title (sprintf('the temperature profile on %d th iteration in Jacobi method',iteration_Explict_sor))
saveas(1,sprintf('the temperature profile on %d th iteration in Jacobi method.png',iteration_Explict_sor))
pause(0.01)
endwhile
endfunction
#Implict_method
#Jocobi Method
function iteration_Implict_jacobi = Jocobi_Method_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
Jocobi_Method = 3.1
del_T = 0.1;
alpha = 1;
CFL_x = k_1 = alpha * del_T/del_x^2;
CFL_y = k_2 = alpha * del_T/del_y^2;
term_1 = 1/(1+(2*k_1)+(2*k_2));
term_2 = k_1 * term_1;
term_3 = k_2 * term_1;
T_prev = T;
iteration_Implict_jacobi = 0
while error>tol
while error>tol
for i = 2:nx-1
for j = 2:ny-1
T(i,j) = (term_1 * T_prev(i,j)) + (term_2*(T_old(i-1,j)+T_old(i+1,j))) + (term_3*(T_old(i,j-1)+T_old(i,j+1)));
endfor
endfor
error = max(max(abs(T_old - T)));
T_old = T;
iteration = iteration+1;
endwhile
error = max(max(abs(T_prev - T)));
T_prev = T;
iteration_Implict_jacobi = iteration_Implict_jacobi+1
pcolor(T);
set(gca,'YDir','reverse')
shading flat;
colorbar
xlabel ("x-axis");
ylabel ("y-axis");
title (sprintf('the temperature profile on %d th iteration in Jacobi method',iteration_Implict_jacobi))
saveas(1,sprintf('the temperature profile on %d th iteration in Jacobi method.png',iteration_Implict_jacobi))
pause(0.01)
endwhile
endfunction
#Jocobi Method
function iteration_Implict_gs = Jocobi_Method_gs(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
Jocobi_Method = 3.2
del_T = 0.1;
alpha = 1;
CFL_x = k_1 = alpha * del_T/del_x^2;
CFL_y = k_2 = alpha * del_T/del_y^2;
term_1 = 1/(1+(2*k_1)+(2*k_2));
term_2 = k_1 * term_1;
term_3 = k_2 * term_1;
T_prev = T;
iteration_Implict_gs = 0
while error>tol
while error>tol
for i = 2:nx-1
for j = 2:ny-1
T(i,j) = (term_1 * T_prev(i,j)) + (term_2*(T(i-1,j)+T_old(i+1,j))) + (term_3*(T(i,j-1)+T_old(i,j+1)));
endfor
endfor
error = max(max(abs(T_old - T)));
T_old = T;
iteration = iteration+1;
endwhile
error = max(max(abs(T_prev - T)));
T_prev = T;
iteration_Implict_gs = iteration_Implict_gs+1
pcolor(T);
set(gca,'YDir','reverse')
shading flat;
colorbar
xlabel ("x-axis");
ylabel ("y-axis");
title (sprintf('the temperature profile on %d th iteration in Jacobi method',iteration_Implict_gs))
saveas(1,sprintf('the temperature profile on %d th iteration in Jacobi method.png',iteration_Implict_gs))
pause(0.01)
endwhile
endfunction
#SOR Method
function iteration_Implict_sor = Implict_Method_sor(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
SOR_Method = 3.3
del_T = 0.1;
alpha = 1;
CFL_x = k_1 = alpha * del_T/del_x^2;
CFL_y = k_2 = alpha * del_T/del_y^2;
term_1 = 1/(1+(2*k_1)+(2*k_2));
term_2 = k_1 * term_1;
term_3 = k_2 * term_1;
T_prev = T;
iteration_Implict = 0
T_gs = T;
iteration_sor = 0;
iteration_Implict_sor = 0;
while error>tol
while error>tol
for i=2:(nx-1)
for j = 2:(ny-1)
T_gs(i,j) = (term_1 * T_prev(i,j)) + (term_2*(T(i-1,j)+T_old(i+1,j))) + (term_3*(T(i,j-1)+T_old(i,j+1)));
endfor
endfor
T = ((1-alpha).*T_old)+(alpha.*T_gs);
error = max(max(abs(T_old - T)));
T_old = T;
iteration = iteration+1;
endwhile
error = max(max(abs(T_prev - T)));
T_prev = T;
iteration_Implict_sor = iteration_Implict_sor+1
pcolor(T);
set(gca,'YDir','reverse')
shading flat;
colorbar
xlabel ("x-axis");
ylabel ("y-axis");
title (sprintf('the temperature profile on %d th iteration in Jacobi method',iteration_Implict_sor))
saveas(1,sprintf('the temperature profile on %d th iteration in Jacobi method.png',iteration_Implict_sor))
pause(0.01)
endwhile
endfunction
iteration_Jocobi_steady_state = Jocobi_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
iteration_GS_steady_state = GS_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
iteration_sor_steady_state = SOR_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
iteration_explict_jacobi = explict_Jocobi_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
iteration_explict_gs = explict_gs_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
iteration_Explict_sor = Explict_sor_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
iteration_Implict_jacobi = Jocobi_Method_Method(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
iteration_Implict_gs = Jocobi_Method_gs(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
iteration_Implict_sor = Implict_Method_sor(T,nx,ny,k,del_x,del_y,error,tol,iteration,T_old)
x = [1, 2, 3, 4, 5, 6, 7, 8, 9];
y = [iteration_Jocobi_steady_state; iteration_GS_steady_state; iteration_sor_steady_state; iteration_explict_jacobi; iteration_explict_gs;iteration_Explict_sor; iteration_Implict_jacobi; iteration_Implict_gs; iteration_Implict_sor];
#Bar plot for convergence rate between various mathods
bar(x, y, 0.5, 'FaceColor', [0, 0.5, 1]);
labels = ['iteration Jocobi steady state'; 'iteration GS steady state'; 'iteration sor steady state'; 'iteration explict jacobi'; 'iteration explict gs';'iteration Explict sor'; 'iteration Implict jacobi'; 'iteration Implict gs'; 'iteration Implict sor'];
set(gca, 'XTickLabel', labels);
title('the convergence rate [Number of iterations] of the steady state and transient [explicit and implicit] simulations');
xlabel('Solver Method')
saveas(1,sprintf('the convergence rate [Number of iterations] of the steady state and transient [explicit and implicit] simulations.png'))
