Challenge

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

Aim: To solve the 2D heat conduction equation by using the point iterative techniques.

The given boundary condetion is as follows

Top Boundary=600K

Bottom Boundary=900k

Left Boundary=400K

Right Boundary=800K

Abosolute error criteria=1e-4

The method implemented to solve the following equation are

1)Jacobi

2)Gauss-seidel

3)Successive-over relaxation

Plots

Explanation

  • In Each plot, the domain is considered as square of side lengh 1m
  • In plot the title name, method type, and nymber of iteration is displyed
  • In plot, each color indicates specific temperature in kelvin

Conclusion

  • 2D heat conduction equation is solved by using jacobi,gauss-seidel,and SOR for both explicit and implicit scheme
  • The temperature distribution is plotted for each method
    clear all
    close all
    clc
    
    %input
    nx=10;
    ny=10;
    T=300*ones(nx,ny);
    
    % Boundary Condetion
    T(1,:)=600;
    T(end,:)=900;
    T(:,1)=400;
    T(:,end)=800;
    
    % Temperture at edges
    T(1,1)=(600+400)/2;
    T(1,end)=(600+800)/2;
    T(end,1)=(900+400)/2;
    T(end,end)=(900+800)/2;
    
    x=linspace(0,1,nx);
    dx=x(2)-x(1);
    y=linspace(0,1,ny);
    dy=y(2)-y(1);
    dt=1e-3;
    
    k=2*((1/dx^2)+(1/dy^2));
    alpha=1.4;
    k1=alpha*(dt/(dx^2));
    k2=alpha*(dt/(dy^2));
    cfl=k1+k2;
    
    for method=linspace(1,7,7)
        if method==1
            error_1=steady_jacobi(x,y,nx,ny,dx,dy,T,k);
            fprintf('Error using jacobimethod(steady state)=%d',error_1)
            
        elseif method==2
            error_2=steady_gs(x,y,nx,ny,dx,dy,T,k);
            fprintf('n Error using gauss seidel method(steady state)=%d',error_2)
            
        elseif method==3
            error_3=steady_sor(x,y,nx,ny,dx,dy,T,k);
            fprintf('n Error using SOR method(steady state)=%d',error_3)
            
        elseif method==4
            error_4=transient_explicit_jacobi(x,y,nx,ny,dx,dy,T,k1,k2);
            fprintf('n error using jacobi method(explicit transient state)=%d',error_4)
            
        elseif method==5
            error_5=transient_implicit_jacobi(x,y,nx,ny,dx,dy,T,k1,k2);
         fprintf('n error using jacobi method(implicit transient state)=%d',error_5)
        
         
          elseif method==6
            error_6=transient_implicit_gs(x,y,nx,ny,dx,dy,T,k1,k2);
         fprintf('n error using gauss siedal method(implicit transient state)=%d',error_6)
         
         elseif method==7
            error_7=transient_implicit_sor(x,y,nx,ny,T,k1,k2);
         fprintf('n error using SOR method(implicit transient state)=%d',error_7)
         
        end
        
    end
    
         
            
    
    %steady state gs
    function [error]=steady_gs(x,y,nx,ny,dx,dy,T,k)
    
    error=9e9;
    tol=1e-4;
    Told=T;
    gs_iter=1;
    
    while (error>tol)
        for i=2:nx-1
            for j=2:ny-1
            term1=(Told(i-1,j)+Told(i+1,j))/(k*(dx^2));
            term2=(Told(i,j-1)+Told(i,j+1))/(k*(dy^2));
            T(i,j)=term1+term2;
        end
    end
    
    error=max(max(abs(Told-T)));
    Told=T;
    gs_iter=gs_iter+1;
    end
    
    figure(2)
    meshgrid(x,y);
    [a, b]=contourf(x,y,T);
    clabel(a,b)
    colorbar
    colormap(jet)
    set(gca,'ydir','reverse')
    xlabel('X Domain Length')
    ylabel('Y Domain Length')
    title_text=sprintf('No of iterations(steady state gauss seidal)=%d',gs_iter);
    title(title_text)
    end
    
    %steady state jacobi
    function [error]=steady_jacobi(x,y,nx,ny,dx,dy,T,k)
    
    error=9e9;
    tol=1e-4;
    Told=T;
    jacobi_iter=1;
    
    while(error>tol)
        for i=2:nx-1
            for j=2:ny-1
            term1=(Told(i-1,j)+Told(i+1,j))/(k*(dx^2));
            term2=(Told(i,j-1)+Told(i,j+1))/(k*(dy^2));
            T(i,j)=term1+term2;
        end
    end
    
    error=max(max(abs(Told-T)));
    Told=T;
    jacobi_iter=jacobi_iter+1;
    end
    
    figure(1)
    meshgrid(x,y);
    [a, b]=contourf(x,y,T);
    clabel(a,b)
    colorbar
    colormap(jet)
    set(gca,'ydir','reverse')
    xlabel('X Domain Length')
    ylabel('Y Domain Length')
    title_text=sprintf('No of iterations(steady state jacobi)=%d',jacobi_iter);
    title(title_text)
    end
    
    %steady state sor
    function [error]=steady_sor(x,y,nx,ny,dx,dy,T,k)
    
    error=9e9;
    tol=1e-4;
    Told=T;
    sor_iter=1;
    omega=1.4;
    
    while (error>tol)
        for i=2:nx-1
            for j=2:ny-1
            term1=(T(i-1,j)+Told(i+1,j))/(k*(dx^2));
            term2=(T(i,j-1)+Told(i,j+1))/(k*(dy^2));
            T(i,j)=((Told(i,j))*(1-omega))+(omega*(term1+term2));
            end
        end
    error=max(max(abs(Told-T)));
    Told=T;
    sor_iter=sor_iter+1;
    end
    
    figure(3)
    meshgrid(x,y);
    [a, b]=contourf(x,y,T);
    clabel(a,b)
    colorbar
    colormap(jet)
    set(gca,'ydir','reverse')
    xlabel('X Domain Length')
    ylabel('Y Domain Length')
    title_text=sprintf('No of iterations(steady state SOR)=%d',sor_iter);
    title(title_text)
    end
    
    function [error]=transient_explicit_jacobi(x,y,nx,ny,dx,dy,T,k1,k2)
    Told=T;
    for nt=1:1400
        for i=2:nx-1
            for j=2:ny-1
                term1=(Told(i-1,j)+Told(i+1,j));
                term2=(Told(i,j-1)+Told(i,j+1));
                T(i,j)=(Told(i,j)*(1-(2*k1)-(2*k2)))+(k1*term1)+(k2*term2);
        end
        end
    error=max(max(abs(Told-T)));
    Told=T;
    end
    
    figure(4)
    [a, b]=contourf(x,y,T);
    clabel(a,b)
    colorbar
    colormap(jet)
    set(gca,'ydir','reverse')
    xlabel('X Domain Length')
    ylabel('Y Domain Length')
    title('Transient explicit scheme(jacobi)')
    end
    
    
    function [error]=transient_implicit_gs(x,y,nx,ny,dx,dy,T,k1,k2)
    Told=T;
    Tpre=T;
    gs_iter=1;
    for nt=1:1400
        error=9e-9
        tol=1e-4;
        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;
                H=(T(i-1,j)+Told(i+1,j));
                V=(T(i,j-1)+Told(i,j+1));
                T(i,j)=(Tpre(i,j)*term1)+(H*term2)+(V*term3);
        end
        end
    error=max(max(abs(Told-T)));
    Told=T;
    gs_iter=gs_iter+1;
        end
        Tpre=T;
    end
    
    figure(6)
    meshgrid(x,y)
    [a, b]=contourf(x,y,T);
    clabel(a,b)
    colorbar
    colormap(jet)
    set(gca,'ydir','reverse')
    xlabel('X Domain Length')
    ylabel('Y Domain Length')
    title_text=sprintf('no of iterations(transient implicit gauss seidal)=%d',gs_iter);
    title(title_text)
    end
    
    
    function [error]=transient_implicit_jacobi(x,y,nx,ny,dx,dy,T,k1,k2)
    Told=T;
    Tpre=T;
    jacobi_iter=1;
    for nt=1:1400
        error=9e9;
        tol=1e-4;
        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;
                H=(Told(i-1,j)+Told(i+1,j));
                V=(Told(i,j-1)+Told(i,j+1));
                T(i,j)=(Tpre(i,j)*term1)+(H*term2)+(V*term3);
        end
        end
    error=max(max(abs(Told-T)));
    Told=T;
    jacobi_iter=jacobi_iter+1;
    end
    Tpre=T;
    end
    figure(5)
    meshgrid(x,y)
    [a, b]=contourf(x,y,T);
    clabel(a,b)
    colorbar
    colormap(jet)
    set(gca,'ydir','reverse')
    xlabel('X Domain Length')
    ylabel('Y Domain Length')
    title_text=sprintf('no of iterations(transient implicit scheme(jacobi)=%d',jacobi_iter);
    title(title_text)
    end
    
    
    function [error]=transient_implicit_sor(x,y,nx,ny,T,k1,k2)
    Told=T;
    Tpre=T;
    sor_iter=1;
    omega=1.2;
    for nt=1:1400
        error=9e-9
        tol=1e-4;
        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;
                H=(T(i-1,j)+Told(i+1,j));
                V=(T(i,j-1)+Told(i,j+1));
                T(i,j)=(1-omega)*(Told(i,j))+(omega*((Tpre(i,j)*term1)+(H*term2)+(V*term3)));
        end
        end
    error=max(max(abs(Told-T)));
    Told=T;
    sor_iter=sor_iter+1;
        end
        Tpre=T;
    end
    
    figure(7)
    meshgrid(x,y)
    [a, b]=contourf(x,y,T);
    clabel(a,b)
    colorbar
    colormap(jet)
    set(gca,'ydir','reverse')
    xlabel('X Domain Length')
    ylabel('Y Domain Length')
    title_text=sprintf('no of iterations(Transient implicit SOR)=%d',sor_iter);
    title(title_text)
    end
    
    ​
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.

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.