Challenge

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

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'))

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.