CFD Online Discussion Forums

CFD Online Discussion Forums (
-   Main CFD Forum (
-   -   SIMPLE Algorithm & Conjugate Gradient Method (

Abhijit Tilak March 14, 2001 06:11

SIMPLE Algorithm & Conjugate Gradient Method
hi friends out there,

I am attempting to solve viscous incomp, driven cavity flow using SIMPLE algorithm, but instead of using gauus siedel/LSOR/ADI i wanna use Conjugate Gradient Method. I can pose that as minimization problem and solve it. My coeffficient matrix [A] will not be symmetric but it will be positive definate (for u,v, Temp ). What about Pressure Correction equation ? The matrix [A] for Pres corr'n cannot be reduced using CG method. Has anyone tried this? with what results. Is pre conditioning required for P' ? any references ?

Lemme know Thanks Abhijit Tilak

Doug March 14, 2001 10:05

Re: SIMPLE Algorithm & Conjugate Gradient Method
I can't answer you about the SIMPLE algorithm aspects, but I can relative to CG and linear systems. Several thoughts:

(1) CG is generally only valid for symmetric, positive definite matrices. If your matrix ends up being nonsymmetric, you may want to look at other gradient-based methods such as Conjugate Gradient Squared (CGS), GMRES, Bi-CGStab, or even Minimum Residual.

(2) Gradient methods usually only work well with preconditioning. You can use any standard iterative method as a preconditioner. Examples include Point or Line Jacobi, Point or Line SOR, or incomplete factorization. See the Solution of Linear Systems topic on the CFD Resources Online - Special Topics page for more info.

Sebastien Perron March 14, 2001 10:15

Re: SIMPLE Algorithm & Conjugate Gradient Method
1) By definition, a square matrix has to be symmetric in order to be positive definite. Your matrix for u,v,T is diagonally dominant.

2) Since your matrix for u,v and T is not symmetric positive definite, You can espect bad results from the CG method (I personnaly experienced this when advection was dominant). Better results can be obtained with GMRES or Orthomin2.

3) The matrix for the pressure correction equation is usually weakly diagonally dominant (0 eighenvalues can exist). It is very ill-conditionned. It can be solved with CG. But it takes many iterations (depending on the tolerance and the mesh, you can expect between 100 and 600 iterations to get an acceptable solution). A good and reliable conditionner for CG is the Jacobi conditionner. But it has to be applied on both sides (left and right) to keep the the matrix symmetric. Better conditionner can be used (incomplete Cholesky), but they are more difficult to implement. From my point of view, the best conditionners are multi-grid methods.

Here's a good reference:

@BOOK(greenbaum, AUTHOR = " A. Greenbaum", TITLE = " Iterative Methods for solving Linear Systems", YEAR = 1997, PUBLISHER = "SIAM" )

If you understand french, E-mail me, I good give you some other infos.

Good luck.

kalyan March 14, 2001 14:13

Re: SIMPLE Algorithm & Conjugate Gradient Method
My experience with the CG for the poisson equation has been similar. For many structured mesh problems, ADI preconditioner works far better than the jacobi and SOR/Gauss-Seidel preconditioners. However, this is not the case for the pressure poisson equation. So the main issue in using CG (or Bi-CGS) is preconditioning for the pressure. Multi-grid indeed works well although you may have to play with types of cycles. Most MG methods are demonstrated on Poisson type equations, so you should be able to identify which MG method works well in your case with (relatively) less work.

Abhijit, here is another suggestion about the pressure-velocity coupling. I am currently using a pressure correction type method and in cases where the density gradients and the CFL are high, a lot of outer iterations are required for convergence. This is because the pressure overpredicts the velocity/momentum correction and it is hard to guess the under-relaxation factor for the pressure. Within each outer iteration, a CG (or some other linear solver) is needed to compute the pressure thus making the solver very expensive.

As long as you are using a Bi-CG type solver, I suggest you solve for the vector x={u,v,T,p} simultaneously. The matrix A (with 4x4 blocks) depends on the type of discretization you use. This way the coupling between velocity and pressure is taken care of immediately. Since the system Ax=b (where x={u,v,T,p}) is obtained by linearization of a non-linear system you need to assemble A after each Bi-CGS iteration (before you do the matrix-vector multiply in Bi-CGS). This methods amounts to a Newton type iterations and likely to have quadratic convergence. The only problems is preconditioning since A has 4x4 blocks. You can use jacobi preconditioner for each variable or use block jacobi by inverting the 4x4 blocks if not singular (I haven't yet checked). Sequential computation of u,v,T,p is similar to Picard iterations which at best have superlinear convergence (the culprit being the slow velocity-pressure coupling). I welcome any thoughts you may have on this approach.

hong March 14, 2001 15:44

Re: SIMPLE Algorithm & Conjugate Gradient Method
HI, In most discretization methods, the coefficients for the velocity is not S.P.D., If you use Shur Complementation, the coeffcients for Pressure equation would be symmetric, PCG ( especially ICCG) should work well for the Pressure poission equations.

You can also view this problem from another angle, the pressure poission equation and velocity equation can be solved simutaneously. If so, you can make use of multigrid to get better convergence rate. In this case you have to make sure that your pressure poisson equation is numerically stable ( in some cases the pressure poisson eqution is unstable).

Good luck

Abhijit Tilak March 16, 2001 05:58

Re: SIMPLE Algorithm & Conjugate Gradient Method
hi sebastian,

thanks for ur suggestion. I don't understand french. But there could be english translations for those papers. I would be glad if u can pass them on to me. thnx abhijit

Sebastien Perron March 16, 2001 07:26

Re: SIMPLE Algorithm & Conjugate Gradient Method
The french reference is a chapter of my thesis. And there are no translation.

But If you can find the book from Greenbaum, it will help you out. This is a very good book.

There is some good documentation and source code available at this location:

Abhijit Tilak March 20, 2001 01:01

Re: SIMPLE Algorithm & Conjugate Gradient Method
hi kalyan,

well i was doing some background work before i could reply. Actually i am trying to implement SIMPLE on unstructured grids so ADI/LSOR are out of question. Gauss Siedel is painful slow. Regarding pressure-velocity coupling i am taking appropriate care of that (addition of third order P' terms , the modified form of Rhie & Chow, & Peric). Well in my case initially it's viscous incompressible flow.yeah ur right i am currently under-relaxing pressure quiet a bit (about 0.4), that's probably one of the causes for painful convergence. The suggestion for using block gauss siedel looks good , also the Jacobi Preconditioner. U will get quad. convergence if u start from good initial guess, which may be possible now(since i am currently solving parallel plates, backward facing step & so on) If i start from zero initial guess i think as u said i will get quasi-linear convergence. Thanks. I'll now give it a try.

abhijit tilak

All times are GMT -4. The time now is 15:20.