Challenge

Week 5.1 - Mid term project - Solving the steady and unsteady 2D heat conduction problem

AIM:

1. Steady state analysis & Transient State Analysis

Solve the 2D heat conduction equation by using the point iterative techniques that were taught in the class. The Boundary conditions for the problem are as follows;

Top Boundary = 600 K

Bottom Boundary = 900 K

Left Boundary = 400 K

Right Boundary = 800 K

You will implement the following methods for solving implicit equations.

1. Jacobi

2. Gauss-seidel

3. Successive over-relaxation

Your absolute error criteria is 1e-4

Make sure to use "INSERT CODE SAMPLE" option to paste the code here. Post screenshots of the plots and use the projects.skill-lync.com page to Publish your findings.

2. You will write code for both implicit and explicit schemes (This is for the Transient Analysis only)

3. Write a detailed explanation for your results, plots or codes without explanation 


Unsteady-State 2D Heat conduction

Inputs are defined into variables and the temperature array is created.
Boundary conditions are introduced into the temperature array, and at corners, boundary values are averaged.
Constants like alpha, omega, tolerance are defined to run the iteration.
Here a user must provide, one or two inputs.
The first input is to whether solve the problem using an explicit approach or an implicit approach.
If an implicit approach is selected, then the user must provide another input, to select the iterative technique.
The if-else loop is used to solve the equation using the selected(input from the user) approach and iterative technique.
For loop is used to run the iteration for a large number of times to reach steady-state conditions.
while loop is used to run the iterative technique till the required accuracy is achieved.
Two for loop is used to calculate the temperature values at every node at each iterative step.
Finally, a temperature distribution graph is obtained using 'conturf' command.

function code:


will awarded zero marks.function out = jacobi(t,told,i,j)
   out = 0.25*((told(i,j-1)+told(i,j+1)+told(i-1,j)+told(i+1,j)))
 end

function out = GS(t,told,i,j)
   out = 0.25*((t(i,j-1)+told(i,j+1)+t(i-1,j)+told(i+1,j)))
end



function out = sor(t,told,i,j,f)
  out = (1-f)*told(i,j) + f*(0.25*(t(i,j-1)+told(i,j+1)+t(i-1,j)+told(i+1,j)))
end
Main code

 Jacobi

clear all
close all
clc

% inputs
% number of grid points along x and y axis
nx= 10;
ny=10;
x=linspace(0,1,nx);
dx = x(2)-x(1);
y= linspace(0,1,ny);
z=fliplr(y);
f=1.1;
iter = 1;

t= 300*ones([nx,ny]);

% applying BC

t(1,:)=600;
t(end,:)=900;
t(:,1)=400;
t(:,end)=800;

% creating a copy
told=t;
r1=t;

error= 19;
tol = 1e-4;
for iterative_solver = 1:3;
    while(error>tol);
        for i=2:nx-1;
            for j=2:ny-1;
                if(iterative_solver==1);
                    t(i,j)= jacobi(t,told,i,j);
                elseif(iterative_solver==2)
                    t(i,j)=GS(t,told,i,j);
                elseif(iterative_solver==3)
                    t(i,j)= sor(t,told,i,j,f);
                end
            end
        end
        error = max(max(t-told));
        told = t;
        [u1,v1]=meshgrid(x,z);
        % plot
        
        if(iterative_solver==1);
            figure(1);
            contourf(u1,v1,t);
            [C,h]= contourf(u1,v1,t);
            colorbar;
            colormap(jet);
            clabel(C,h);
            xlabel('x-axis');
            ylabel('y-axis');
            title_text=sprintf('jacobi iterantion number=%d',iter);
            title(title_text);
            pause(0.003);
        elseif(iterative_solver==2);
            
            figure(2);
            contourf(u1,v1,t);
            [C,h]= contourf(u1,v1,t);
            colorbar;
            colormap(jet);
            clabel(C,h);
            xlabel('x-axis');
            ylabel('y-axis');
            title_text=sprintf('GS iterantion number=%d',iter);
            title(title_text);
            pause(0.003);
        else
            
            figure(3);
            [C,h]= contourf(u1,v1,t);
            colorbar;
            colormap(jet);
            clabel(C,h);
            xlabel('x-axis');
            ylabel('y-axis');
            title_text=sprintf('sor iterantion number=%d',iter);
            title(title_text);
            pause(0.003);
        end
        iter=iter+1;
    end
    error=19;
    iter=1;
    t=r1;
    told=t;
end
 Gauss-seidel

clear all
close all
clc

% inputs
% number of grid points along x and y axis
nx= 10;
ny=10;
x=linspace(0,1,nx);
dx = x(2)-x(1);
y= linspace(0,1,ny);
dy = y(2)-y(1);
f= 1.2;

t= ones(nx,ny)*298;
% applying BC

t(1,:)=600;
t(end,:)=900;
t(:,1)=400;
t(:,end)=800;

alpha= 1.4;
dt=0.001;

% defining k1 and k2
k1=alpha*(dt/dx^2);
k2=alpha*(dt/dy^2);

told=t;
t_initial=t;

for iterartive_solver = 1:3
    nt=1:1400;
    error=9e9;
    tol=1;
    tic;
    
    % iterartive_solver==1:3;
    iter=1;
    while error>tol
        for i=2:nx-1
            for j=2:ny-1
                term1= 1/(1+2*k1+2*k2);
                term2= k1*term1;
                term3= k2*term1;
                if iterartive_solver==1;
                    t(i,j)= ((told(i,j)*term1)+(term2*(t(i-1,j)+t(i+1,j))+(term3*(t(i,j-1)+t(i,j+1)))));
                elseif iterartive_solver==2;
                    t(i,j)= ((told(i,j)*term1)+(term2*(t(i-1,j)+told(i+1,j))+(term3*(t(i,j-1)+told(i,j+1)))));
                elseif iterartive_solver==3;
                    t(i,j)= (1-f)*told(i,j)+ f*(((told(i,j)*term1)+(term2*(t(i-1,j)+told(i+1,j))+(term3*(t(i,j-1)+told(i,j+1))))));
                end
            end
            error_n=max(abs(told-t));
            error=max(error_n);
            told=t;
            iter=iter+1;
            
        end
    end
    time=toc;
    
    %plot
    
    if iterartive_solver==1;
        figure(1)
        contourf(x,fliplr(y),t);
        [C,h]=contourf(x,fliplr(y),t);
        colorbar;
        colormap(jet);
        clabel(C,h);
        text = sprintf('JACOBI Method n iteration number = %d; t computational time: %0.4f',iter ,time);
        title(text);
        told=t_initial;
        t=t_initial;
    elseif iterartive_solver==2;
        
        figure(2)
        [c,h]=contourf(x,fliplr(y),t);
        colorbar;
        colormap(jet);
        clabel(c,h);
        title(sprintf('GS Method n iteration number = %d; t computational time: %0.4f',iter,time));
        told=t_initial;
        t=t_initial;
    else
        
        figure(3)
        [c,h]=contourf(x,fliplr(y),t);
        colorbar;
        colormap(jet);
        clabel(c,h);
        title(sprintf('SOR Method n iteration number = %d; t computational time: %0.4f',iter,time));
        told=t_initial;
        t=t_initial;
    end
end

 Successive over-relaxation

clear all
close all
clc

% inputs
% number of grid points along x and y axis
nx= 10;
ny=10;
x=linspace(0,1,nx);
dx = x(2)-x(1);
y= linspace(0,1,ny);
dy = y(2)-y(1);

c= 1;
% number of steps
nt=200;
% time steps
dt = 0.001;
% CFL number
k= (c*dt)/dx^2;

t= ones([nx,ny])*673;
% applying BC

t(1,:)=600;
t(end,:)=900;
t(:,1)=400;
t(:,end)=800;

told = t;

tic
iter=1
for p=1:nt
    for i= 2:nx-1
        for j=2:ny-1
            t(i,j)= k*(told(i-1,j)+told(i+1,j)+told(i,j+1)+told(i,j-1))+ (1-4*k)*told(i,j);
        end
    end
    error=max(abs(told-t));
    told=t;
    iter=iter+1;
end
    time = toc;
    figure(1)
    [c,h]=contourf(x,fliplr(y),t);
    colorbar;
    colormap(jet);
    clabel(c,h);
    title(sprintf('2D unsteady heat conduction (Explicit method) n iteration number=%d; t computational time :%0.4f',iter,time));
    xlabel('xx');
    ylabel('yy');

Result:

for jacobi method:

for GS method:

for SOR method:

2D Unstady heat conduction

Plots:

for Jacobi:

for GS:

for SOR:

Explanation:

While comparing both Explicit and Implicit methods results, the Explicit method is much quicker than the implicit method.

The Explicit method takes 201 iterations whereas the Implicit method takes 577, 577, 521 iterations.

Coming to the implicit method SOR is the fastest method while comparing it with Jacobi and GS. The SOR method took 521 iterations.

But the Implicit method is more accurate as it uses various iterative solvers.

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.