CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   Main CFD Forum (https://www.cfd-online.com/Forums/main/)
-   -   solving a heat diffusion problem, using Crank-Nicolson AND gauss-Seidel method (https://www.cfd-online.com/Forums/main/102888-solving-heat-diffusion-problem-using-crank-nicolson-gauss-seidel-method.html)

vagelis Karvounis June 5, 2012 13:36

solving a heat diffusion problem, using Crank-Nicolson AND gauss-Seidel method
 
Hello everyone!

First of all i 'm not sure if i am posting on the right forum! May someone advise me about that!

Here is what i am dealing with. A heat diffusion problem on an aluminum plate. The plate is represented by a grid of points. Crank-Nicolson method gives me an equation to calculate each point's temperature by using the temperatures of the surrounding points.

T(i,j)=A*((a*dt/2)*(T'(i-1,j)-2*T'(i,j)+T'(i+1,j)+T(i-1,j)+T(i+1,j))/dx^2 +(a*dt/2)*(T'(i,j-1)-2*T'(i,j)+T'(i,j+1)+T(i,j-1)+T(i,j+1))/dy^2+ T'(i,j))

where T' is the temperature of a point at the previous time point, dt is the time between two time points and a is a heat diffusion constant of aluminum. dx,dy is the spatial division for the grid in x and y axis respectively

also A=1/(1+dt*a*(1/dx^2)+dt*a*(1/dy^2))

T'(i,j) must be given, as also some boundary conditions must be given too.
But the equation uses T(i-1,j),T(i+1,j),T(i,j-1),T(i,j+1) which are unknown.
At this point Gauss-Seidel method is useful. I can use an arbitrary value for these unknown T values and by iterating the calculations for each point, T(i,j) are converging to the right values! Of course after that, T values are placed on T' and the process is repeated to calculate temperatures for the next time point.

I am writing a code on matlab for this problem. The code is very slow.Trying to deal with making it faster, i found, that the shorter is the time step(dt) the less are the iterations i need to succeed a convergence on Gauss-Seidel. For my code, i use a 101X301 points grid and if dt=0.01sec it takes about 15 iterations to succeed convergence, more than 50 iterations if dt=0.1sec and more than 500 if dt=1sec.

Could someone guide me to find out how the convergence process is being affected by dt or anything else?

Thank you very much!

FMDenaro June 5, 2012 14:00

when you reduce the time step is absolutely normal and sound phjysical that the number of iterations decreases ... you simply have a physical state at the new time step that is closer to the old one....
Try using a SOR method, is faster than GS.

Prudhvi March 25, 2015 01:30

Hey vagelis,

I am trying to solve 2D heat equation using Crank Nicolson implementing gauss siedel method. my grid size is 128*128. time step dt=0.1. code is very slow in matlab. I am not able to get results quickly. please let me know if i can do anything to increase my execution time.

beer March 25, 2015 08:44

You could try using a different linear solver. Matlab has an implementation of the bi-conjugated gradient method (bicgstab) included.
http://de.mathworks.com/help/matlab/ref/bicgstab.html
The link explaines how to use it. The conjugate gradient methods are heaps faster than the gauss-seidel, jacobi etc solvers.


All times are GMT -4. The time now is 17:38.