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