I implemented a Navier Stokes based on FEM discretization and PETSc for solving the linear system of equations. To create an efficient solution procedure, I follow the paper Efficient preconditioning of the linearized Navier-Stokes equations for incompressible flow (Silvester et al.), which propose a Schur complement approach. It works quite fine in the sense that I have a nearly constant number of iterations independently of mesh size and timestep for the simple benchmarks that are also presented in this paper (2D driven cavity flow and backward facing step). But at the moment, I solve the upper velocity block with a parallel direct solver (MUMPS). The pressure Schur block is solved with inexact solvers as proposed in the paper. In the paper, the authors propose to run in each outer iteration a single multigrid V-cycle and using a point Gauss-Seidel smoother to approximate the inverse of this discrete convection-diffusion operator. As I cannot easily use a geometric multigrid method, I thought to replace the direct solver by one algebraic multigrid V-cycle (boomeramg from the hypre package). But than I loose the constant number of iteratons while making the mesh finer.Does any of you has an idea how to create a spectrally equivalent and efficient preconditioner for the inverse of the velocity matrices based on algebraic multigrid? Is there something inherent which does not allow to make use of algebraic multigrid in this case? If not, what could be the source of loosing the constant iteration scaling?Edit:I added some benchmarks for different solvers of the velocity block. The problem is solved is the standard 2D driven cavity flow, discretization with Taylor-Hood and a uniform refinement of the unit boxExakt solver (MUMPS)$h = \frac{1}{32}$: 25 iter$h = \frac{1}{64}$: 25 iter$h = \frac{1}{128}$: 25 iter$h = \frac{1}{256}$: 22 iterone V-AMG (algebraic, boomeramg)$h = \frac{1}{32}$: 30 iter$h = \frac{1}{64}$: 30 iter$h = \frac{1}{128}$: 39 iter$h = \frac{1}{256}$: 48 iterFGMRES with preconditioner V-AMG (algebraic, boomeramg), rtol: $10^{-6}$$h = \frac{1}{32}$: 30 iter$h = \frac{1}{64}$: 29 iter$h = \frac{1}{128}$: 30 iter$h = \frac{1}{256}$: 47 iterFGMRES with preconditioner V-AMG (algebraic, boomeramg), atol: $10^{-8}$$h = \frac{1}{32}$: 27 iter$h = \frac{1}{64}$: 27 iter$h = \frac{1}{128}$: 28 iter$h = \frac{1}{256}$: 26 iter
Using algebraic multigrid for preconditioning convection-diffusion operators
finite element;petsc;linear solver;preconditioning
What you did is to replace the exact (direct) solver on the top left by one where you only do a single V-cycle. The way to go is to solve the top left block in your preconditioner using an iterative solver (e.g. GMRES) using the V-cycle AMG as a preconditioner to this inner solver. Experience shows that if you use F-GMRES as the outer solver, then the inner GMRES solver does not need to be terribly accurate. Just accurate enough to allow for it to yield an almost constant number of outer iterations.