> I'm going to solve a Schur complement in my preconditioner for SUPG
> stabilized fluid solver and will be using ILU(0) decomposition.
That's generally not a good preconditioner -- it will lead to large
numbers of iterations in your linear solver if the problem becomes
large. But that's tangential to your point...
> Since the BlockJacobi does not turn out to work well, I wrote a wrapper
> for Pilut, which is a package for ILUT decomposition in Hypre
> and wrapped by PETSc. I tested my Pilut preconditioner with tutorial
> step-17 (the MPI elastic problem) and everything looks ok.
Interesting. Would you be willing to contribute this wrapper?
> However, when I apply it to my own code, running with 2 ranks takes more
> time than 1, specifically on solving the Schur complement
> where my Pilut is applied.
> I tried to output the total iteration number of the solver, but with
> more ranks, actually less iterations are used. I don't understand why
> less iterations take more time. Is there any potential reason for that?
It often comes down to how much communication you do. If your problem is
small, then there is not very much work to do for each process, and much
time is spent on communication between processes. A typical rule of
thumb is that your problem needs to have at least 50,000 to 100,000
unknowns per process for computations to offset communication.
> Something that came up to my mind, but I'm not sure: my Schur complement
> is actually not a matrix, but a derived class that only has
> definition for vmult. For that reason, my solver is a dealii:solverGMRES
> instead of PETScWrappers::solverGMRES.
> However, my results in testing with step-17 did not show significant
> differences between these two.
I don't think that is the problem -- the two GMRES implementations are
comparable in performance.
Best
W.
--
------------------------------------------------------------------------
Wolfgang Bangerth email:
bang...@colostate.edu
www:
http://www.math.colostate.edu/~bangerth/