I'm also curious about what the matrix you use looks like. It must be
something like
A B
B^T C
What terms are in A,B,C?
Best
Wolfgang
> The task generally contain on the order of 50M to 100M DOFs and are transient DNS problems.
With this you are likely at a point where factorizations (even ILU)
not work very well. Even if you can afford a Block ILU, you likely run
on 100+ cores, which means the quality of the preconditioner will
deteriorate quite a lot just based on the number of processors. You
likely need something that puts more effort into the parallel aspect.
> Our solver : Either GMRES or BiCGStab. In our case it seems GMRES is a bit faster (around 20%) because the iterations are cheaper. I have tried all of the solvers in the TrilinosWrappers except FGMRES actually.
My general advice is to work on the preconditioner to have a method in
the 10-40 iterations range. Then, it doesn't really matter which
Krylov method you use. Just use FGMRES (if you need flexibility), CG
(for SPD), MINRES (for symmetric), or GMRES (for everything else).
Switching between different Krylov methods is unlikely to make a big
difference unless you are in the 100k+ core range or need too many
iterations.
> Our current preconditioner : ILU(0)
> Element order : Q2-Q2, Q3-Q3 or Q4-Q4.
Are you just applying ILU to the whole system? My general advice is to
exploit the block structure of your PDE first and then apply ILU or
AMG to individual blocks. Time dependent Navier-Stokes with small time
steps is a relatively easy case. Let me know if you want more details.
Dear Bruno,
Yes, I am applying ILU to the whole system, without anything else really. I think this is relatively traditional in GLS and VMS approaches (although I would not be able to say if that is a good or a bad thing).
If I understand correctly, you mean formulating the problem using a BlockMatrix and a BlockVector, then preconditioning each matrix of the block independently?I guess this would be best achieved using the linear operators within deal.II right?
Yes, you would apply block vectors and block matrices. Concerning the linear operators that would be one option, but it is not really a necessity. For example you can have a look at step-31 and the class BlockSchurPreconditioner in particular, see its implementation here: https://github.com/dealii/dealii/blob/2a6983945af78ee20b10757ab010040b9f2a2f89/examples/step-31/step-31.cc#L407-L417
What would be the added benefit of that? I would presume that since each block have more "coherent units", this would at least to a better conditioning of the final system, but is there anything else there?Is there any literature or elements on this?
The benefit is that you can tailor the components to the problem at hand. If you have a Navier-Stokes problem with small time steps, at some point you will need a Poisson-type operator in the pressure variable to reflect the incompressibility constraint. To resolve that global coupling, you need some form of multigrid (or other strong preconditioners). However, the effect is really only needed for the pressure, so it might be inefficient to also apply multigrid on the velocity components, and instead get around much more cheaply by doing an ILU there or even just the diagonal. For small time steps, the diagonal should be a good approximation, even though it might not be the most efficient choice.
Regarding literature: I would recommend the book by Elman, Silvester and Wathen, https://doi.org/10.1093/acprof:oso/9780199678792.001.0001 , or the review paper by Benzi, Golub and Liesen, https://dx.doi.org/10.1017/S0962492904000212
In my own experience, and ILU on the velocity block and a
Cahouet-Chabard approach for the pressure Schur complement works
well for medium scale simulations, i.e., polynomial degrees 2 and
3 and up to a few billion of unknowns and maybe 10k processor
cores, see also here: https://doi.org/10.1177/1094342016671790 .
For very large sizes, ILU is not really that good any more as Timo
said, so one can reduce cost by just using the mass matrix. And
geometric multigrid works better on that scale than algebraic
multigrid used in that paper. But if you want efficiency for large
scales and with higher Reynolds numbers, it is hard to beat
splitting-type solvers.
Best,
Martin