Solving the steady and unsteady 2D heat conduction problem
REPORT – SOLVING THE STEADY AND UNSTEADY 2D HEAT CONDUCTION PROBLEM
AIM
Steady-State Analysis and Transient State Analysis
OBJECTIVE
- Solve the 2D heat conduction equation by using the point iterative techniques.
- Implement the following methods for solving implicit equations;
- Jacobi
- Gauss – seidel
- Successive over-relaxation
- Write the transient analysis code for both implicit and explicit schemes.
GIVEN
The Boundary conditions for the problem are as follows;
- Top Boundary = 600 k
- Bottom Boundary = 900k
- Left Boundary = 400 k
- Right Boundary = 800 k
- Absolute error criteria = 1e - 4
SOLUTION
Thermal Conduction
Heat is transferred by conduction when adjacent atoms or molecules collide, or as several electrons move backwards and forwards from atom to atom in a diagnosed way so as not to form a macroscopic electric current, or as photons collide and scatter. Conduction is the most significant means of heat transfer within a solid or between solid objects in thermal contact.
The 2D temperature heat equation is a partial differential equation.
`(dT)/dt – alpha* ( (partial^2T)/(partialx^2) + ( partialT^2)/(partialy^2)) = 0`
Here, alpha is a positive coefficient called the thermal diffusivity of the medium.
Steady-State Conduction
Steady-state conduction is the form of conduction that happens when the temperature difference driving the conduction is constant so that the spatial distribution of temperatures in the conducting object does not change any further. Thus, all partial derivatives of temperature concerning space may either be zero or have nonzero values, but all derivatives of temperature at any point concerning time are uniformly zero. In steady-state conduction, the amount of heat entering any region of an object is equal to the amount of heat coming out, i.e.
`( partial^2T)/(partialx^2) + (partialT^2)/(partialy^2) = 0`
Transient Conduction
During any period in which temperatures change in time at any place within an object, the mode of thermal energy flow is termed transient conduction. Another term is "non-steady-state" conduction, referring to the time-dependence of temperature fields in an object. Non-steady-state situations appear after an imposed change in temperature at a boundary of an object. The formula for the 2D transient heat conduction equation is:
`(partialT)/(partialt) = (alpha)*((partial^2T)/(partialx^2) + (partial^2T)/(partialy^2))`
EXPLICIT AND IMPLICIT METHODS are approaches used in numerical analysis for obtaining numerical approximations to the solutions of time-dependent ordinary and partial differential equations, as is required in computer simulations of physical processes.
|
Explicit Method |
Implicit Method |
|
· Explicit method calculates the state of a system at a later time from the state of the system at the current time. · Explicit methods require small time steps to keep the error in the result bounded. · With the decrease in time step the number of computations increases and hence the computational time required for the solution to converge is less and the accuracy of the solution is high. · This method is considered conditionally stable because if the time step is too large, there will be a significant numerical error. |
· Implicit method finds a solution by solving an equation involving both the current state of the system and the later state. · In the implicit method, general equilibrium is achieved by iteration at first, followed by evaluation of local element variables. · This method considers simultaneous equations and uses guess values as the initial values to find the approximated values. If the guess values are closer to the desired value the computation time will be less. · Relative to the explicit method, the computational time required for the solution to converge is high and the accuracy of the solution is less. · For the implicit method, there is no stability criteria requirement so more significant time steps can be used. · Implicit methods require an extra computation since the matrix coefficients should recalculate with different time steps. |
Iterative Method
In computational mathematics, an iterative method is a mathematical procedure that uses an initial value to generate a sequence of improving approximate solutions for a class of problems, in which the n-th approximation is derived from the previous ones. A specific implementation of an iterative method, including the termination criteria, is an algorithm of the iterative method. An iterative method is called convergent if the corresponding sequence converges for given initial approximations.
Iterative Solver
- Jacobi iterative solver
The Jacobi method is an iterative algorithm for determining the solutions of a strictly diagonally dominant system of linear equations. Each diagonal element is solved for, and an approximate value is plugged in. The process is then iterated until it converges.
- Gauss-Seidel iterative solver
The Gauss-seidel method, or the method of successive displacement, is an iterative method used to solve a system of linear equations similar to the Jacobi method. The temperature at n+1 iterations uses values of n+1 iterations that have already been computed. In this path, old approximated values are overwritten with new approximate values for the iterations performed. Unlike Jacobi, Gauss-Seidel requires one storage vector which can be overwritten with each computation. This helps the solution to converge faster than the Jacobi method.
- Successive over-relaxation iterative solver
SOR is a variant of the Gauss-Seidel method for solving a linear system of equations, resulting in faster convergence. This exploration takes the form of a weighted average between the previous iterate and the computed Gauss-Seidel iterate successively for each component.
Formula: Tn+1 = Tn . (1-w) + w. T(GS)n+1 or T(Jacobi)n+1
Here, w is the relaxation factor.
Range: 0 < w < 2
- 0 < w < 1 (Under-Relaxed state)
This condition is used when the temperature gradient is high and due to this condition, the time step does not overshoot and helps to converge at a faster rate.
- 1 < w < 2 (Over-Relaxed state)
This condition is used when the temperature gradient is low and due to this condition more significant time steps are used to obtain the steady-state, i.e. for the values to converge at a faster rate.
Nomenclature

- TP = Ti, j
- TL = Ti-1, j (Left boundary)
- TR = Ti+1, j (Right boundary)
- TT = Ti, j+1 (Top boundary)
- TB = Ti, j-1 (Bottom boundary)
Equations used
- 2D heat conduction equation:
`(dT)/dt – alpha* ( (partial^2T)/(partialx^2) + ( partialT^2)/(partialy^2)) = 0`
- In discrete form:

Here,
- n represents the current time step and n+1 represents the next time step.
- i, i+1 are the neighbouring points in the x-direction.
- j, j+1 are the neighbouring points in the y-direction.
- `/_x` is grid spacing in the x-direction.
- `/_y` is grid spacing in the y-direction.
The time derivative term is hyperbolic in nature which is to be discretised using a forward differencing scheme and the space derivatives are elliptical in nature which is to be discretised using a central differencing scheme.
- Steady State 2D Heat Conduction Equation
`( partial^2T)/(partialx^2) + (partialT^2)/(partialy^2) = 0`
- Steady State Discretization
(TL – 2.TP + TR)/ `/_x^2` + (TT – 2.TP + TB)/ `/_y^2` = 0;

- Therefore,
TP = K1 (TT + TR) + K2 (TT + TB)
Where,
K1 = `(/_y^2)/(2.(/_x^2 + /_y^2))` and K2 = `(/_x^2)/(2.(/_x^2 + /_y^2))`
- Using iterative solvers for solving the conduction equation steady state:
Jacobi iterative solver
(TP)n+1 = K1 (TL + TR)n + K2 (TT + TB)n
Gauss-Seidel iterative solver
(TP)n+1 = K1 (TL + TR)n+1 + K2 (TT + TB)n+1
Successive over relaxation iterative solver
(TP)n+1 = (TP)n.(1-w) + w.( K1(TL +TR)n+1 + K2(TT + TB)n+1)
- Transient State
`(partialT)/(partialt) = alpha*((partial^2T)/(partialx^2) + (partial^2T)/(partialy^2))`
- Unsteady-State Discretization

- Solving Explicitly
(TP)n+1 = (1 - 2.K1 – 2.K2).(TP)n + K1(TL + TR)n + K2(TT + TB)n
Here,
K1 = `alpha . (/_t)/(/_x^2)`
K2 = `alpha . (/_t)/(/_y^2)`
- Stability Criteria
K1 + K2 `<=` 0.5
- Solving Implicitly
(1 - 2.K1 – 2.K2).(TP)n+1 = (TP)n + K1 (TL + TR)n+1 + K2 (TT + TB)n+1
Here,
K1 = `alpha . (/_t)/(/_x^2)`
K2 = `alpha . (/_t)/(/_y^2)`
Jacobi iterative solver
(TP)n+1 = ((TP)n + K1 ((TL)n + (TR)n) + K2 ((TT)n + (TB)n) / (1 - 2.K1 – 2.K2)
Gauss-Seidel iterative solver
(TP)n+1 = ((TP)n + K1 ((TL)n+1 + (TR)n) + K2 ((TT)n + (TB)n+1) / (1 - 2.K1 – 2.K2)
Successive over-relaxation iterative solver
(TP)n+1 = (TP)n . (1 - w) + w. [((TP)n + K1 ((TL)n+1 + (TR)n) + K2 ((TT)n + (TB)n+1) / (1 - 2.K1 – 2.K2)]
ASSUMPTIONS
- Consider computation area as a square.
- nx = ny; i.e., the number of nodes in the x-direction is equal to the number of nodes in the y-direction.
- nx = ny = 10
- Apart from the boundary conditions, the inner nodes have an initial temperature value of 300K.
Boundary Conditions
- Top Boundary = 600 k
- Bottom Boundary = 900k
- Left Boundary = 400 k
- Right Boundary = 800 k
CODE
Code to study the behaviour of STEADY and UNSTEADY states for 2D heat conduction equation:
MAIN CODE
clear all
close all
clc
% Defining domain
nx = 10;
ny = 10;
x = linspace(0,1,nx);
y = linspace(0,1,ny);
% Grid size
dx = x(2)-x(1);
dy = y(2)-y(1);
% Defining temperature
T = 300*ones(nx,ny);
% Boundary Conditions
T(1,1:end) = 600;
T(end,1:end) = 900;
T(1:end,1) = 400;
T(1:end,end) = 800;
% Temperature at edges
T(1,1) = (T(1,2)+T(2,1))/2;
T(end,1) = (T(end-1,1)+T(end,2))/2;
T(1,end) = (T(1,end-1)+T(2,end))/2;
T(end,end) = (T(end-1,end)+T(end,end-1))/2;
% Absolute error criteria
tol = 1e-4;
% Initial temperature
Told = T;
% Some constants
k = 2*(dx^2+dy^2)/(dx^2*dy^2);
% Relaxation Factor
w = 1.045 ;
% alpha
% Thermal diffusivity of the medium
A = 1.4;
% time interval
dt = 1/(2*((A/dx^2)+(A/dy^2)));
% constants
k1 = dt*A/dx^2;
k2 = dt*A/dy^2;
T_initial = T;
% Relaxation factor for unsteady state
W = 1.15;
% Function for respective solution
[error_j,iter1] = jacobi_steady_function(nx,ny,T,Told,dx,dy,x,y,k,tol);
[error_g,iter2] = gauss_seidel_function(tol,nx,ny,T,Told,dx,dy,x,y,k);
[error_s,iter3] = successive_over_relaxation_function(tol,nx,ny,T,Told,dx,dy,x,y,k,w);
[error,iter] = unsteady_explicit_function(nx,ny,k1,k2,Told,T,tol);
[error_ja,iter_ja] = unsteady_jacobi_function(nx,ny,k1,k2,T,Told,tol,T_initial)
[error_gs,iter_gs] = unsteady_gauss_seidel_function(nx,ny,k1,k2,T,Told,tol,T_initial)
[error_sor,iter_sor] = unsteady_successive_over_relaxation_function(nx,ny,k1,k2,T,Told,tol,T_initial,W)
FUNCTION CODE
- Jacobi iteration method for steady-state
function [error_j,iter1] = jacobi_steady_function(nx,ny,T,Told,dx,dy,x,y,k,tol)
% dummy error value
error_j = 9e9;
% Definig iteration variable to calculate no of iterations
iter1 = 0;
% convergence loop
while (error_j > tol)
% iteration loop
for i = 2:nx-1
for j = 2:ny-1
% Formula to calculate the temprature at each grid point
T(i,j) = (1/k)*(((Told((i-1),j)+Told((i+1),j))/dx^2)+((Told(i,(j-1))+Told(i,(j+1)))/dy^2));
end
end
% error for each iteration
error_j = max(max(abs(Told-T)));
% updating the temperature values for the next iteration
Told = T;
% Counting the no of iterations
iter1 = iter1 + 1;
end
% Plotting
figure(1)
contourf(x,y,T);
clabel(contourf(x,y,T));
colorbar
colormap("jet")
set(gca,'ydir','reverse')
title(sprintf('No. of Iterations = %d',iter1));
end
OUTPUT

- Gauss-Seidel iterative method for steady-state
function [error_g,iter2] = gauss_seidel_function(tol,nx,ny,T,Told,dx,dy,x,y,k)
% Definig iteration variable to calculate no of iterations
iter2 = 0;
% dummy error value
error_g = 9e9;
% convergence loop
while (error_g > tol)
% iteration loop
for i = 2:(nx-1)
for j = 2:(ny-1)
% Formula to calculate the temprature at each grid point
T(i,j) = (1/k)*(((T((i-1),j)+T((i+1),j))/dx^2)+((T(i,(j-1))+T(i,(j+1)))/dy^2));
end
end
% error for each iteration
error_g = max(max(abs(Told-T)));
% updating the temperature values for the next iteration
Told = T;
% Counting the no of iterations
iter2 = iter2 + 1;
end
% Plotting
figure(2)
contourf(x,y,T);
clabel(contourf(x,y,T));
colorbar
colormap("jet")
set(gca,'ydir','reverse')
title(sprintf('No. of Iterations = %d',iter2));
end
OUTPUT

- Successive over-relaxation method for steady-state
function [error_s,iter3] = successive_over_relaxation_function(tol,nx,ny,T,Told,dx,dy,x,y,k,w)
% Definig iteration variable to calculate no of iterations
iter3 = 0;
% dummy error value
error_s = 9e9;
% convergence loop
while (error_s > tol)
% iteration loop
for i = 2:(nx-1)
for j = 2:(ny-1)
% Formula to calculate the temprature at each grid point
T(i,j) = Told(i,j)*(1-w)+w*((1/k)*(((Told((i-1),j)+Told((i+1),j))/dx^2)+((Told(i,(j-1))+Told(i,(j+1)))/dy^2)));
end
end
% error for each iteration
error_s = max(max(abs(Told-T)));
% updating the temperature values for the next iteration
Told = T;
% Counting the no of iterations
iter3 = iter3 + 1;
end
% Plotting
figure(3)
contourf(x,y,T);
clabel(contourf(x,y,T));
colorbar
colormap("jet")
set(gca,'ydir','reverse')
title(sprintf('No. of Iterations = %d',iter3));
end
OUTPUT

- Solving for unsteady-state explicitly
function [error,iter] = unsteady_explicit_function(nx,ny,k1,k2,Told,T,tol)
% Dummy Error
error = 9e9;
% Iteration Value
iter = 0;
% Convergence loop
while (error > tol)
for i = 2:nx-1
for j = 2:ny-1
X = Told(i-1,j) - 2*Told(i,j) + Told(i+1,j);
Y = Told(i,j-1) - 2*Told(i,j) + Told(i,j+1);
T(i,j) = Told(i,j) + k1*X + k2*Y;
end
end
% Max Error for the iteration
error = max(max(abs(Told - T)));
% Updating Temperature Value
Told =T;
% No. of iteration
iter = iter + 1;
end
% Plotting
figure(4)
[C,H] = contourf(T);
clabel(C,H);
axis ij
title(sprintf('no. of iterations = %d', iter));
end
OUTPUT

- Unsteady state using Jacobi iteration
function [error_ja,iter_ja] = unsteady_jacobi_function(nx,ny,k1,k2,T,Told,tol,T_initial)
% Dummy Error
error_ja = 9e9;
error_t = 9e9;
% Iteration Value
iter_ja = 0;
% Time loop
while (error_t > tol)
% Convergence loop
while (error_ja > tol)
% Space loop
for i = 2:nx-1
for j = 2:ny-1
term1 = (1+(2*k1)+(2*k2))^-1;
H = Told(i-1,j) + Told(i+1,j);
V = Told(i,j-1) + Told(i,j+1);
T(i,j) = (T_initial(i,j)*term1) + (term1*k1*H) + (term1*k2*V);
end
end
% error for convergence loop
error_ja = max(abs(Told-T));
% Temperature value
Told = T;
% Calculating no. of iteration
iter_ja = iter_ja + 1;
end
% error for time loop
error_t = max(max(abs(T_initial - T)));
% Assigning value
T_initial = T;
error_ja = 9e9;
end
% Plotting
figure(5)
contourf(T);
clabel(contourf(T))
axis ij
title(sprintf('No. of iterations = %d',iter_ja))
end
OUTPUT

- Unsteady state using Gauss-Seidel iteration
function [error_gs,iter_gs] = unsteady_gauss_seidel_function(nx,ny,k1,k2,T,Told,tol,T_initial)
% Dummy Error
error_gs = 9e9;
error_t = 9e9;
% iteration value
iter_gs = 0;
% time loop
while (error_t > tol)
% convergence loop
while (error_gs > tol)
% space loop
for i = 2:nx-1
for j = 2:ny-1
term1 = (1+(2*k1)+(2*k2))^-1;
H = T(i-1,j) + T(i+1,j);
V = T(i,j-1) + T(i,j+1);
T(i,j) = (T_initial(i,j)*term1) + (term1*k1*H) + (term1*k2*V);
end
end
% max error
error_gs = max(abs(Told-T));
% temperature value
Told = T;
% no. of iterations
iter_gs = iter_gs + 1;
end
% max error for time loop
error_t = max(max(abs(T_initial - T)));
T_initial = T;
error_gs = 9e9;
end
% Plotting
figure(6)
contourf(T);
clabel(contourf(T))
axis ij
title(sprintf('No. of iterations = %d',iter_gs))
end
OUTPUT

- Unsteady state using Successive over relaxation iteration
function [error_sor,iter_sor] = unsteady_successive_over_relaxation_function(nx,ny,k1,k2,T,Told,tol,T_initial,W)
% Dummy Error
error_sor = 9e9;
error_t = 9e9;
% iteration
iter_sor = 0;
% time loop
while (error_t > tol)
% convergence loop
while (error_sor > tol)
% space loop
for i = 2:nx-1
for j = 2:ny-1
term1 = (1+(2*k1)+(2*k2))^-1;
H = T(i-1,j) + T(i+1,j);
V = T(i,j-1) + T(i,j+1);
T(i,j) = (T_initial(i,j)*term1) + (term1*k1*H) + (term1*k2*V);
T(i,j) = (Told(i,j))*(1-W) + W*T(i,j);
end
end
% max error
error_sor = max(abs(Told-T));
% temperature
Told = T;
% no. of iterations
iter_sor = iter_sor + 1;
end
error_t = max(max(abs(T_initial - T)));
T_initial = T;
error_sor = 9e9;
end
% Plotting
figure(7)
contourf(T);
clabel(contourf(T))
axis ij
title(sprintf('No. of iterations = %d',iter_sor))
end
OUTPUT
