Challenge

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

Aim :- Solving Steady State 2D heat conduction equation.

Driver script for program.

%Script for solving 2d steady state heat conduction equationclear allclose allclcnx= 50;ny = nx;x=linspace(0,1,nx);y=linspace(0,1,ny);dx= x(2)-x(1);dy= y(2)-y(1);u  = 400*ones(nx,ny);u(2:end-1,1)=400; u(1,2:end-1)=600; u(2:end-1,ny)=800;u(nx,2:end-1)=900;u(1,1) =  500;u(end,1) = 650;u(1,end)= 700;u(end,end)=850;tol = 1e-4;error = 9e9;iterative_solver = 1;k=(2*(dx^2+dy^2))/(dx^2*dy^2);if iterative_solver==1;u = jacobi_iter(u,x,y,nx,ny,dx,dy,tol,error,k);elseif iterative_solver==2;u = gauss_iter(u,x,y,nx,ny,dx,dy,tol,error,k);elseif iterative_solver==3;u = sor_iter(u,x,y,nx,ny,dx,dy,tol,error,k);end

Following are the functions for Jacobi, Gauss-Seidel, and SOR method.

    function u = jacobi_iter(u,x,y,nx,ny,dx,dy,tol,error,k)[X, Y] = meshgrid(x,y);uold=u;tic       jacobi_iterr = 1;            while(error>tol)            for i = 2:nx-1                for j = 2:ny-1      u_1 = (uold(i-1,j)+uold(i+1,j))/(k*(dx^2));    u_2 = (uold(i,j-1)+uold(i,j+1))/(k*(dy^2));    u(i,j) = u_1+u_2;                end                            end        error = max(max(abs(uold-u)));        uold = u;        jacobi_iterr = jacobi_iterr+1;         end       time_required=toc;figure(1)C = contourf(X,Y,u);set(gca,'YDIR','reverse');colormap(jet);clabel(C,'FontSize',14);title(sprintf('Plot for steady state heat conduction equation using Jacobi method \n No. of Iterations: %d',jacobi_iterr));xlabel('X')ylabel('Y')hold on;saveas(gca,'2D steady state heat conduction Jacobi method.png');fprintf('Number of iterations done are %d \n',jacobi_iterr);fprintf('Time taken for solving equation is %f \n',time_required);fprintf('The error obtained is %f\n',error);end
function u = gauss_iter(u,x,y,nx,ny,dx,dy,tol,error,k)    uold=u;        [X, Y] = meshgrid(x,y);       gs_iter = 1;            while(error>tol)            for i = 2:nx-1                for j = 2:ny-1      u_1 = (u(i-1,j)+u(i+1,j))/(k*(dx^2));    u_2 = (u(i,j-1)+u(i,j+1))/(k*(dy^2));    u(i,j) = u_1+u_2;                end            end        error =max(max(abs(uold-u)));        uold = u;        gs_iter = gs_iter+1;         end              solving_time=toc;figure(1)C = contourf(X,Y,u);set(gca,'YDIR','reverse');colormap(jet);clabel(C,'FontSize',14);title(sprintf('Plot for steady state heat conduction equation using Gauss Sidel method. \n No. of Iterations: %d',gs_iter));xlabel('X')ylabel('Y')hold on;saveas(gca,'2D steady state heat conduction Gauss Sidel method.png');fprintf('Number of iterations done are %d \n',gs_iter);fprintf('Time taken for solving equation is %f \n',solving_time);fprintf('The error obtained is %f\n',error);end
function u = sor_iter(u,x,y,nx,ny,dx,dy,tol,error,k) % relaxation factor calculationz=cos(pi/nx)+cos(pi/ny);omega = 4/(2+sqrt(4-z^2));uold = u;[X Y] = meshgrid(x,y);     sor_iter = 1;            while(error>tol)                for i = 2:nx-1                    for j = 2:ny-1                   u1 = (u(i-1,j)+uold(i+1,j))/(k*(dx^2));    u2 = (u(i,j-1)+uold(i,j+1))/(k*(dy^2));    u(i,j) = omega*(u1+u2)-(omega-1)*uold(i,j);                                  end                 end                                error = max(max(abs(uold-u)));        uold = u;        sor_iter = sor_iter+1;                                 end                  solving_time=toc;figure(1)C = contourf(X,Y,u);set(gca,'YDIR','reverse');colormap(jet);clabel(C,'FontSize',14);title(sprintf('Plot for steady state heat conduction equation using SOR method. \n No. of Iterations: %d\n',sor_iter));xlabel('X')ylabel('Y')hold on;saveas(gca,'2D steady state heat conduction SOR method.png');fprintf('Relaxation factor considered is %d \n',omega);fprintf('Number of iterations done are %d \n',sor_iter);fprintf('Time taken for solving equation is %f \n',solving_time);fprintf('The error obtained is %f\n',error);

Results Obtained are as follows.

Following observations were made.

Method No. of iterations Time required (seconds) Error value
Jacobi 4437 1.238763 0.000100
Gauss Seidel 2397 0.586370 0.000100
SOR 142 0.043705 0.000097

Conclusion :-

So we can conclude that SOR method gives fastest solution with minimum number of iterations and less error value as compared to others.

Solving Transient state heat conduction equation :-

Driver script for the program is as follows.

%Script for solving 2d transient state heat conduction equation by explicit%and implicit method.clear allclose allclcnx= 50;ny = nx;x=linspace(0,1,nx);y=linspace(0,1,ny);dx=x(2)-x(1);dy= y(2)-y(1);t_start = 0;dt = 1e-3;t_end =3;nt =[t_start:dt:t_end];u  = 400*ones(nx,ny);u(2:end-1,1)=400; u(1,2:end-1)=600; u(2:end-1,ny)=800;u(nx,2:end-1)=900;u(1,1) =  500;u(end,1) = 650;u(1,end)= 700;u(end,end)=850;tol = 1e-4;error = 9e9;alpha=0.05;  %assumedgk1=(alpha*dt)/(dx^2);k2=(alpha*dt)/(dy^2);uold = u;u_prev_dt = uold;iterative_solver = 1; % use 1,2,3 for explicit methods and 4,5,6 for implicit methods Jacobi, Gauss Sidel and SOR respectively.k=(2*(dx^2+dy^2))/(dx^2*dy^2);if iterative_solver==1;u = jacobi_iter_explicit(u,x,y,nx,ny,tol,error,k1,k2,nt);elseif iterative_solver==2;u = gauss_iter_explicit(u,x,y,nx,ny,tol,error,k1,k2,nt);ielseif iterative_solver==3;u = sor_iter_explicit(u,x,y,nx,ny,tol,error,k1,k2,nt);elseif iterative_solver==4;u = jacobi_2d_transient_implicit(u,x,y,nx,ny,tol,error,k1,k2,nt);elseif iterative_solver==5;u = gauss_2d_transient_implicit(u,x,y,nx,ny,tol,error,k1,k2,nt);elseif iterative_solver==6;u = sor_2d_transient_implicit(u,x,y,nx,ny,tol,error,k1,k2,nt);end

Following are the functions for Jacobi, Gauss Seidel and SOR method.

Solving explicitly

    function u = jacobi_iter_explicit(u,x,y,nx,ny,tol,error,k1,k2,nt)%jacobi method[X, Y] = meshgrid(x,y);uold=u;ticfor z=length(nt);       jacobi_iterr = 1;            while(error>tol)            for i = 2:nx-1                for j = 2:ny-1                  term1=uold(i,j);                term2=k1*(uold(i-1,j)-2*uold(i,j)+uold(i+1,j));                 term3=k2*(uold(i,j-1)-2*uold(i,j)+uold(i,j+1));                u(i,j)=term1+term2+term3;                                end                            end        error = max(max(abs(uold-u)));        uold = u;        jacobi_iterr = jacobi_iterr+1;         endend          %Saving the plot and printing the results     time_required=toc;figure(1)C = contourf(X,Y,u);set(gca,'YDIR','reverse');colormap(jet);clabel(C,'FontSize',14);title(sprintf('Plot for solving Transient state heat conduction equation explicitly\n using Jacobi method \n No. of Iterations: %d\n',jacobi_iterr));xlabel('X');ylabel('Y');hold on;saveas(gca,'2D Transient state heat conduction Jacobi method EXPLICITLY.png');fprintf('Number of iterations done are %d \n',jacobi_iterr);fprintf('Time taken for solving equation is %f \n',time_required);fprintf('The error obtained is %f\n',error);end
    function u = gauss_iter_explicit(u,x,y,nx,ny,tol,error,k1,k2,nt)%Gauss Sidel method[X, Y] = meshgrid(x,y);uold=u;ticfor z=length(nt);       gauss_iter = 1;            while(error>tol)            for i = 2:nx-1                for j = 2:ny-1                  term1=uold(i,j);                term2=k1*(u(i-1,j)-2*u(i,j)+u(i+1,j));                 term3=k2*(u(i,j-1)-2*u(i,j)+u(i,j+1));                u(i,j)=term1+term2+term3;                                end                            end        error = max(max(abs(uold-u)));        uold = u;        gauss_iter = gauss_iter+1;         endend          %Saving the plot and printing the results     time_required=toc;figure(1)C = contourf(X,Y,u);set(gca,'YDIR','reverse');colormap(jet);clabel(C,'FontSize',14);title(sprintf('Plot for solving Transient state heat conduction equation explicitly\n using Gauss Sidel method. \n No. of Iterations: %d\n',gauss_iter));xlabel('X')ylabel('Y')hold on;saveas(gca,'2D Transient state heat conduction Gauss Sidel method EXPLICITLY.png');fprintf('Number of iterations done are %d \n',gauss_iter);fprintf('Time taken for solving equation is %f \n',time_required);fprintf('The error obtained is %f\n',error);end
function u = sor_iter_explicit(u,x,y,nx,ny,tol,error,k1,k2,nt)%SOR method % relaxation factor calculationz=cos(pi/nx)+cos(pi/ny);omega = 4/(2+sqrt(4-z^2));uold = u;[X,Y] = meshgrid(x,y);ticfor z = length(nt);    sor_iter = 1;            while(error>tol)                for i = 2:nx-1;                    for j = 2:ny-1;                                term1=uold(i,j);                term2=k1*(u(i-1,j)-2*uold(i,j)+uold(i+1,j));                 term3=k2*(u(i,j-1)-2*uold(i,j)+uold(i,j+1));                u(i,j)=omega*(term1+term2+term3)-(omega-1)*term1;                              end                 end                                error = max(max(abs(uold-u)));        uold = u;        sor_iter = sor_iter+1;                                 end        end          %Saving the plot and printing the results. time_required=toc;figure(1)C = contourf(X,Y,u);set(gca,'YDIR','reverse');colormap(jet);clabel(C,'FontSize',14);title(sprintf('Plot for transient state heat conduction equation using SOR method. \n No. of Iterations: %d \n',sor_iter));xlabel('X')ylabel('Y')hold on;saveas(gca,'2D transient state heat conduction SOR method EXPLICITLY.png');fprintf('Relaxation factor considered is %d \n',omega);fprintf('Number of iterations done are %d \n',sor_iter);fprintf('Time taken for solving equation is %f \n',time_required);fprintf('The error obtained is %f\n',error);

Solving Implicitly

function u = jacobi_2_transient_implicit(u,x,y,nx,ny,tol,error,k1,k2,nt)uold = u;u_prev_dt = uold;term1=(1+(2*k1)+(2*k2))^-1;term2=k1*term1;term3=k2*term1;ticfor z = 1:length(nt) %Time loop      jacobi_iter = 1;                  error = 9e9;                while (error>tol)  % Convergence loop                                         % Nodal loop         for i = 2:nx-1                        for j = 2:ny-1                                                H=(uold(i-1,j)+uold(i+1,j));                V=(uold(i,j-1)+uold(i,j+1));                u(i,j) =((u_prev_dt(i,j)*term1)+(H*term2)+(V*term3));                end                      end                     error=max(max(abs(uold-u)));                        uold = u;                jacobi_iter = jacobi_iter+1;        end                                 u_prev_dt = uold;                     endtime_required=toc;figure(1)[X, Y] = meshgrid(x,y);C = contourf(X,Y,u);set(gca,'YDIR','reverse');colormap(jet);clabel(C,'FontSize',14);title(sprintf('Plot for solving Transient state heat conduction equation implicitly.\n using Jacobi method. \n No. of Iterations: %d\n',jacobi_iter));xlabel('X');ylabel('Y');hold on;saveas(gca,'2D Transient state heat conduction Jacobi method IMPLICITLY1.png');fprintf('Number of iterations done are %d \n',jacobi_iter);fprintf('Time taken for solving equation is %f \n',time_required);fprintf('The error obtained is %f\n',error);             
function u = gauss_2_transient_implicit(u,x,y,nx,ny,tol,error,k1,k2,nt)term1=(1+(2*k1)+(2*k2))^-1;term2=k1*term1;term3=k2*term1;uold=u;u_prev_dt = uold;ticfor z = 1:length(nt) %Time loop      gs_iter = 1;                  error = 9e9;                while (error>tol)  % Convergence loop                                         % Nodal loop         for i = 2:nx-1                        for j = 2:ny-1                                                H=(u(i-1,j)+u(i+1,j));                V=(u(i,j-1)+u(i,j+1));                u(i,j) =((u_prev_dt(i,j)*term1)+(H*term2)+(V*term3));                end                      end                     error=max(max(abs(uold-u)));                        uold = u;                gs_iter = gs_iter+1;        end                              u_prev_dt = uold;                     endtime_required=toc;figure(1)[X, Y] = meshgrid(x,y);C = contourf(X,Y,u);set(gca,'YDIR','reverse');colormap(jet);clabel(C,'FontSize',14);title(sprintf('Plot for solving Transient state heat conduction equation implicitly. By using gauss method. \n No. of Iterations: %d\n',gs_iter));xlabel('X');ylabel('Y');hold on;saveas(gca,'2D Transient state heat conduction Gauss sidel method IMPLICITLY.png');fprintf('Number of iterations done are %d \n',gs_iter);fprintf('Time taken for solving equation is %f \n',time_required);fprintf('The error obtained is %f\n',error);             
function u = sor_2_transient_implicit(u,x,y,nx,ny,tol,error,k1,k2,nt)uold = u;u_prev_dt = uold;z=cos(pi/nx)+cos(pi/ny);omega = 4/(2+sqrt(4-z^2));term1=(1+(2*k1)+(2*k2))^-1;term2=k1*term1;term3=k2*term1;ticfor z = 1:length(nt) %Time loop          sor_iter = 1;                   error = 9e9;                while (error>tol)  % Convergence loop                % Nodal loop         for i = 2:nx-1                        for j = 2:ny-1                                                H=(u(i-1,j)+u(i+1,j));                V=(u(i,j-1)+u(i,j+1));                u(i,j) =omega*((u_prev_dt(i,j)*term1)+(H*term2)+(V*term3))-(omega-1)*u_prev_dt(i,j);                end                      end                     error=max(max(abs(uold-u)));            uold = u;                sor_iter = sor_iter+1;        end                                 u_prev_dt = uold;                     end time_required=toc;           figure(1)[X, Y] = meshgrid(x,y);C = contourf(X,Y,u);set(gca,'YDIR','reverse');colormap(jet);clabel(C,'FontSize',14);title(sprintf('Plot for solving Transient state heat conduction implicitly using SOR method. \n No. of Iterations: %d\n',sor_iter));xlabel('X');ylabel('Y');hold on;saveas(gca,'2D Transient state heat conduction SOR method IMPLICITLY1.png');fprintf('Number of iterations done are %d \n',sor_iter);fprintf('Time taken for solving equation is %f \n',time_required);fprintf('The error obtained is %f\n',error);          

Following are the results obtained.

Following observations were made.

FOR EXPLICIT METHOD

Method No. of iterations Time required
(seconds)
Error value
Jacobi 8499 2.149332 0.000100
Gauss-Seidel 6681 1.689989 0.000100
SOR 2849 0.987259 0.000100

FOR IMPLICIT METHOD

Method No. of iterations Time required
(seconds)
Error value
Jacobi 7 6.523987 0.000055
Gauss-Seidel 6 4.775224 0.000026
SOR 2 6.207440 0.000083
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.