Week 5 - Mid term project - Solving the steady and unsteady 2D heat conduction problem
%% Steady state Jacobian iterative technique
clear all
close all
clc
% inputs
L=1 % Length of domain (square);
%nx,ny= no of grid points;
nx=10;
ny=nx;
x=linspace(0,L,nx);
y=linspace(0,L,ny);
dx=x(2)-x(1);
dy=y(2)-y(1);
error = 9e9;
tol = 1e-4;
T=300*ones(nx,ny);
% Define boundary conditions
T_t =600;
T_b =900;
T_l =400;
T_r =800;
%Edge refinement
T(1,:)=T_t
T(end,:)=T_b
T(:,1)=T_l
T(:,end)=T_r
Told=T;
iter = 0;
% Jacobi method
##Tp=(T1+Tr/dx^2*k)+(Tt+Tb/dx^2*k);
%Convergence loop
while error>tol
% space loop
for i=2:nx-1
for j=2:ny-1
T1 = Told(i-1,j)+Told(i+1,j);
T2 = Told(i,j-1)+Told(i,j+1);
T(i,j)= 0.25*(T1+T2);
end
end
error=max(max(abs(Told-T)));
Told=T;
iter = iter+1;
end
figure(1)
contourf(x,fliplr(y),T,'ShowText','ON');
colorbar;
colormap(jet)
disp(iter);
%% Steady state Gauss siedel iterative technique
clear all
close all
clc
% inputs
L=1 % Length of domain (square);
%nx,ny= no of grid points;
nx=10;
ny=nx;
x=linspace(0,L,nx);
y=linspace(0,L,ny);
dx=x(2)-x(1);
dy=y(2)-y(1);
error = 9e9;
tol = 1e-4;
T=300*ones(nx,ny);
% Define boundary conditions
T_t =600;
T_b =900;
T_l =400;
T_r =800;
%Edge refinement
T(1,:)=T_t
T(end,:)=T_b
T(:,1)=T_l
T(:,end)=T_r
Told=T;
Tintial=T
iter = 0;
% Gauss seisel
%Convergence loop
while error>tol
% space loop
for i=2:nx-1
for j=2:ny-1
T1 = T(i-1,j)+Told(i+1,j);
T2 = T(i,j-1)+Told(i,j+1);
T(i,j)= 0.25*(T1+T2);
end
end
error=max(max(abs(Told-T)));
Told=T;
iter = iter+1;
end
figure(1)
contourf(x,fliplr(y),T,'ShowText','ON');
colorbar;
colormap(jet)
disp(iter);
## Steady state s.o.r method ##
clear all
close all
clc
% inputs
L=1 % Length of domain (square);
%nx,ny= no of grid points;
nx=10;
ny=nx;
x=linspace(0,L,nx);
y=linspace(0,L,ny);
dx=x(2)-x(1);
dy=y(2)-y(1);
error = 9e9;
tol = 1e-4;
T=300*ones(nx,ny);
% Define boundary conditions
T_t =600;
T_b =900;
T_l =400;
T_r =800
%Edge refinement
T(1,:)= T_t
T(end,:)= T_b
T(:,1)= T_l
T(:,end)= T_r
% Relaxation factor
rf=0.1;
% S.O.r
Told = T;
Tintial=Told;
iter=0;
%Convergence loop
while error>tol
% space loop
for i=2:nx-1
for j=2:ny-1
T1 = Told(i-1,j)+Told(i+1,j);
T2 = Told(i,j-1)+Told(i,j+1);
T(i,j)= ((1-rf)*Told(i,j)+(rf*0.25*(T1+T2)));
end
end
error=max(max(abs(Told-T)));
Told=T;
iter=iter+1;
end
figure(1)
contourf(x,fliplr(y),T,'ShowText','ON');
colorbar;
colormap(jet)
disp(iter);
%%Unsteady Explicit
clear all
close all
clc
% inputs
L=1 % Length of domain (square);
%nx,ny= no of grid points;
nx=10;
ny=nx;
x=linspace(0,L,nx);
y=linspace(0,L,ny);
dx=x(2)-x(1);
dy=y(2)-y(1);
error = 9e9;
tol = 1e-4;
alpha=1.4;
dt=1e-3;
T=300*ones(nx,ny);
% Define boundary conditions
T_t =600;
T_b =900;
T_l =400;
T_r =800;
%Edge refinement
T(1,:)=T_t
T(end,:)=T_b
T(:,1)=T_l
T(:,end)=T_r
Tprev=T;
iter=0;
% constants
K1=(alpha*dt)/(dx^2);
K2=(alpha*dt)/(dy^2);
cfl = K1+K2;
%time loop
while error>tol
% space loop
for i=2:nx-1
for j=2:ny-1
term2 = K1*((Tprev(i-1,j))+Tprev(i+1,j));
term3 = K2*(Tprev(i,j-1)+Tprev(i,j+1));
T(i,j)= Tprev(i,j)*(1-2*K1-2*K2)+term2+term3;
end
end
iter=iter+1;
error=max(max(abs(Tprev-T)));
Tprev=T;
end
figure(1)
contourf(x,fliplr(y),T,'ShowText','ON');
colorbar;
colormap(jet)
disp(iter);
%% unsteady implicit jacobian
clear all
close all
clc
% inputs
% unsteady 2D heat conduction
% by implicit method
L=1 % Length of domain (square);
nx=10;
ny=nx;
rf=1.5;
dt=0.1;
x=linspace(0,L,nx);
y=linspace(0,L,ny);
dx=x(2)-x(1);
dy=y(2)-y(1);
error = 9e9;
tol = 1e-4;
alpha=1.4;
nt=1000;
% Define boundary conditions
T=300*ones(nx,ny);
T_t =600;
T_b =900;
T_l =400;
T_r =800;
%Edge refinement
T(1,:)=T_t
T(end,:)=T_b
T(:,1)=T_l
T(:,end)=T_r
Told=T;
Tprev=Told;
titer=0;
siter = titer;
% constants
K1=(alpha*dt)/(dx^2);
K2=(alpha*dt)/(dy^2);
cfl = K1+K2;
% Jacobian
%Time loop
for k=1:nt
%Convergence loop
error = 9e9;
while error>tol
% space loop
for i=2:nx-1
for j=2:ny -1
term2 = K1*(Told(i-1,j)+Told(i+1,j));
term3 = K2*(Told(i,j-1)+Told(i,j+1));
T(i,j)= (Tprev(i,j)+term2+term3)/(1+2*(K1+K2));
end
end
error=max(max(abs(Told-T)));
Told=T;
siter=siter+1;
end
conv = max(max(abs(Tprev-T)));
if conv<tol
break;
end
Tprev=T;
titer=titer+1;
end
figure(1)
contourf(x,fliplr(y),T,'ShowText','ON');
colorbar;
colormap(jet)
pause(0.3);
disp(siter);
disp(titer);
%% Unsteady implicit Gauss seidel
clear all
close all
clc
% inputs
% unsteady 2D heat conduction
% by implicit method
L=1 % Length of domain (square);
nx=10;
ny=nx;
rf=0.1;
dt=0.1;
x=linspace(0,L,nx);
y=linspace(0,L,ny);
dx=x(2)-x(1);
dy=y(2)-y(1);
error = 9e9;
tol = 1e-4;
alpha=1.4;
nt=1000;
% Define boundary conditions
T=300*ones(nx,ny);
T_t =600;
T_b =900;
T_l =400;
T_r =800;
%Edge refinement
T(1,:)=T_t
T(end,:)=T_b
T(:,1)=T_l
T(:,end)=T_r
Told=T
Tprev=T
titer=0;
siter = titer;
% constants
K1=(alpha*dt)/(dx^2);
K2=(alpha*dt)/(dy^2);
cfl = K1+K2;
% Gauss seidel
%Convergence loop
for k=1:nt
error = 9e9;
while error>tol
% space loop
for i=2:nx-1
for j=2:ny-1
term2 = K1*((Told(i-1,j))+(T(i+1,j)));
term3 = K2*((Told(i,j-1))+(T(i,j+1)));
T(i,j)= (Tprev(i,j)+term2+term3)/(1+2*(K1+K2));
end
end
error=max(max(abs(Told-T)));
Told=T;
siter=siter+1;
end
conv = max(max(abs(Tprev-T)));
if conv<tol
break;
end
Tprev=T;
titer=titer+1;
end
figure(1)
contourf(x,fliplr(y),T,'ShowText','ON');
colorbar;
colormap(jet)
pause(0.3);
disp(titer);
disp(siter);
%% Unsteady implicit S.O.R
clear all
close all
clc
% inputs
% unsteady 2D heat conduction
% by implicit method
L=1 % Length of domain (square);
nx=10;
ny=nx;
rf=0.1;
dt=0.1;
x=linspace(0,L,nx);
y=linspace(0,L,ny);
dx=x(2)-x(1);
dy=y(2)-y(1);
error = 9e9;
tol = 1e-4;
alpha=1.4;
nt=1000;
% Define boundary conditions
T=300*ones(nx,ny);
T_t =600;
T_b =900;
T_l =400;
T_r =800;
%Edge refinement
T(1,:)=T_t
T(end,:)=T_b
T(:,1)=T_l
T(:,end)=T_r
Tprev=T;
Told=T;
titer=0;
siter = titer;
% constants
K1=(alpha*dt)/(dx^2);
K2=(alpha*dt)/(dy^2);
cfl = K1+K2;
% S.O.I
%time loop
for k=1:nt
%Convergence loop
error = 9e9;
while error>tol
% space loop
for i=2:nx-1
for j=2:ny-1
term2 = K1*((Told(i-1,j))+(Told(i+1,j)));
term3 = K2*((Told(i,j-1))+(Told(i,j+1)));
T(i,j)= ((1-rf)* Told(i,j))+rf*((Tprev(i,j)+term2+term3)/(1+2*(K1+K2)));
end
end
error=max(max(abs(Told-T)));
Told=T;
siter=siter+1;
end
conv = max(max(abs(Tprev-T)));
if conv<tol
break;
end
Tprev=T;
titer=titer+1;
end
figure(1)
contourf(x,fliplr(y),T,'ShowText','ON');
colorbar;
colormap(jet)
pause(0.3);
disp(siter);
disp(titer);
##Explination
Steady state analysis
1)Change in properties with respect to time remain constant known as Steady state analysis
2) 2D steady state equation `(d^2t)/(dx^2) + (d^2t)/(dx^2) =0`
3)Assumed it as square domain (nx=ny)
4) Temperature at point given by (Tp)=`1/k((Tl+Tr) / (dx^2)) +1/k((Tt+Tb) / (dy^2))`
5) convergeloop-spaceloop-Update Told
6)converge loop (while error>tolerence=run) else break or end loop
Iterative techniques
1)Jacobian
2)Gauss seidel
3) suceesive over relaxation
1)Jacobian:
1)Temperature at a point(T(i,j))=`1/k((Tl(old)+Tr(old)) / (dx^2)) +1/k((Tt (old)+Tb (old)) / (dy^2))`
2)since Tl= T(i-1,j) :Tr = T(I+1,j) : Tt = T(j+1,i) : Tb = T(j-1,i)
3)Update Told values
4) error in jacobian= 0.000094868
5) No of iterations = 207
2)Gauss seidel:
1)Temperature at a point(T(i,j))=`1/k((Tl+Tr(old)) / (dx^2)) +1/k((Tt +Tb (old)) / (dy^2))`
2)since Tl= T(i-1,j) :Tr = T(I+1,j) : Tt = T(j+1,i) : Tb = T(j-1,i)
3)Update Told values
4) error in Gauss seidel= 0.000095865
5) No of iterations = 111
3)Steady S.O.R:
1)Temperature at a point(T(i,j))=`(1-omega)*Told+omega*(Jacobian or gauss seidel)
2)since Tl= T(i-1,j) :Tr = T(I+1,j) : Tt = T(j+1,i) : Tb = T(j-1,i)
3) where omega is relaxation factor omega<1 (under relaxation) omega>1 (over relaxation)
4)Update Told values
5) error in Gauss seidel= 0.000099972
6) No of iterations depends on omega values
| No of iterations | omega |
| 1730 |
0.1 |
|
920 |
0.2 |
| 634 | 0.3 |
| 487 | 0.4 |
| 396 | 0.5 |
| 334 | 0.6 |
| 289 | 0.7 |
| 255 | 0.8 |
| 228 | 0.9 |
| 207 | 1.0 |
Un-steady/Transiant state analysis :
1)Change in properties with respect to time are not constant/varying known as Unsteady state analysis
2) 2D Transiant state equation `α*((d^2t)/(dx^2) + (d^2t)/(dx^2)) =((dt)/(dτ))
4) Temperature at point given by `((Tp^(n+1)-Tp^n)/(dt)) = α*((Tl-2*(Tp)+Tr)/(dx^2) + (Tt-2*(Tp)+Tb)/(dy^2))^((n)or(n+1))`
5)Time loop- convergeloop-spaceloop-Update Told, Tprev
6)converge loop (while error>tolerence=run) else break or end loop
7)
Steady state analysis:
##Explination
Steady state analysis
7) EXplicit solution(n) is independent of other variables but implicit solution(n+1) is dependant on variable`
1)Unsteady explicit:
1)unsteady explicitT(i,j) given by
(Tp^(n+1)-Tp^n)/(dt)) = α*((Tl-2*(Tp)+Tr)/(dx^2) + (Tt-2*(Tp)+Tb)/(dy^2))^((n)
`Tp^(n+1)=Tp^n+K1*(Tl-2*Tp+Tr)^n+K1*(Tt-2*Tp+Tb)^n`
`Where K1=α*dt/dx^2` `K2=α*dt/dx^2`
Explict refers to diffusion problem given by CFL number
`CFl<=;=0.5 Stable CFl>=0.5 unstable & CFlx+CFly<=0.5`
2) since Tl= T(i-1,j) :Tr = T(I+1,j) : Tt = T(j+1,i) : Tb = T(j-1,i)
3)Update Told values
4) error in unsteady explicit= 0.000098836
5) No of iterations = 433
Implicit:
Expression for implicit
1)((Tp^(n+1)-Tp^n)/(dt)) = α*((Tl-2*(Tp)+Tr)/(dx^2) + (Tt-2*(Tp)+Tb)/(dy^2))^(n+1)
`Tp^(n+1) = 1/(1+2k1+2k2) [Tp^n+K1(Tl+Tr)^(n+1) +K2 (Tt+Tb)^(n+1)`
`K1=(α*dt)/(dx^2) K2=(α*dt)/(dy^2)`
`term1=1/(1+2k1+2k2`
Term2=K1*term1
Term3=K2*Term1
`Tp^(n+1)=Term1*Tp^n+Term2*(Tl+Tr)^(n+1)+Term3*(Tt+Tb)^n+1`
1)Jacobian:
1)Terem2=K1*( Tl(old)+Tr(old)))
2) Term3 = K2*(Tt (old)+Tb (old))
2)since Tl= T(i-1,j) :Tr = T(I+1,j) : Tt = T(j+1,i) : Tb = T(j-1,i)
T(i,j)=(Tprev(i,j)+term2+term3)/(1+2*(K1+K2))
3)Update Told,Tprev values
4) error in jacobian= 0.000094406
5) No of iterations = 840
2)Gauss seidel:
`Terem2=K1*( Tl(old)+Tr`
`Term3 = K2*(Tt +Tb (old)`
2)since Tl= T(i-1,j) :Tr = T(I+1,j) : Tt = T(j+1,i) : Tb = T(j-1,i)
T(i,j)=(Tprev(i,j)+term2+term3)/(1+2*(K1+K2))
3)Update Told ,Tprev values
4) error in Gauss seidel= 0.000094406
5) No of iterations = 840
3)Steady S.O.R:
1)term2 = K1*((Told(i-1,j))+(Told(i+1,j)))
2)term3 = K2*((Told(i,j-1))+(Told(i,j+1)))
3)Temperature at a point(T(i,j))=`(1-omega)*Told+omega*(Jacobian or gauss seidel)
4)since Tl= T(i-1,j) :Tr = T(I+1,j) : Tt = T(j+1,i) : Tb = T(j-1,i)
5)T(i,j)= ((1-rf)* Told(i,j))+rf*((Tprev(i,j)+term2+term3)/(1+2*(K1+K2)));
3) where omega is relaxation factor omega<1 (under relaxation) omega>1 (over relaxation)
4)Update Told,Tprev values
5) error in Gauss seidel= 0.000099287 (at rf=0.1)
6) No of iterations depends on omega values
No of iterations omega
| iterations | Rf |
| 5935 |
0.1 |
| 3332 | 0.2 |
| 2369 | 0.3 |
| 1855 | 0.4 |
| 1531 | 0.5 |
| 1310 | 0.6 |
| 1147 | 0.7 |
| 1021 | 0.8 |
| 921 | 0.9 |
| 840 | 1.0 |