Lucas,
> I'm trying to precondition my system which can be solved with GMRES
> (with increasing iteration number for increasing size) but the standard
> preconditioners are either increasing the number of iterations, or
> causing the solver not to converge.
Preconditioner design is difficult. This is why I recorded so many
lectures on it :-)
The best approach to solving block systems *efficiently* is to use block
preconditioners. They can have multiple levels of Schur complementing --
in each step, you reduce the size of the problem by one block row and
column. You can also call a 2x2 part of the matrix a block in itself --
for example, for your matrix you might consider splitting it as
[B X]
[Y A]
where
X = [C D]
Y = [L_psi, 0]^T
A = [M_chi, 0; L_chi M_phi]
Then you apply the Schur complementing, which should be relatively
straightforward because A is invertible. In fact, because A is block
triangular, it can easily be solved with by solving for two mass
matrices, each of which is cheap. Then you'd come up with a
preconditioner in the same way as discussed in the "Possibilities for
extensions" of step-22 that uses the fact that you can form a Schur
complement.
Whether that results in a good preconditioner is a separate question,
and one on which it is possible to spend a year or two. But it's
probably worth investigating.
Separately, there is of course also the possibility of using a direct
solver. If you're running in 2d, that would be my first choice -- up to
~200k DoFs, direct solvers are very competitive.
Best
W.
--
------------------------------------------------------------------------
Wolfgang Bangerth email:
bang...@colostate.edu
www:
http://www.math.colostate.edu/~bangerth/