I am trying to solve a matrix system of the form

\left [\array{A & B\\ -B & A}\right ]\left \{ \array{u \\ v}\right \} = \left\{ \array{ 0 \\ b}\right \}

that comes from a discretization of the Helmholtz equation in 3 dimensions using curl-conforming (Nedelec) tetrahedral elements. The matrix block A is symmetric, indefinite from discretising the equation

\nabla\times\nabla\times\mathbf{E} - k_0^2 \mathbf{E} = 0

subject to an impedance/excitation boundary condition

\mathbf{n}\times\nabla\times\mathbf{E} = -jk_0\eta_0(2\mathbf{n}\times\mathbf{H}^{source})-jk_0(\mathbf{n}\times\mathbf{n}\times\mathbf{E})

which forms the sparse block matrix B.

The MUMPS direct solver produces the correct solution for a number of geometries, as long as the number of DoFs is not too large to exhaust the memory capacity of my computer. I have tried to implement the GMRES solver to solve the same problems, but without success. The solver runs without error, but never converges. The iteration error stagnates. I tried the ILU, SOR, Jacobi, Hypre-amg, etc. preconditioners, but no luck.

I have two questions:

- Is there a preconditioner that I can import into the solver that will speed convergence of this type of problem?
- Or, can I use a coarse solution (from a coarser mesh, lower order interpolation, solved using direct method) as a preconditioner for a finer solution (using GMRES or another suitable iterative solver)? Is there an example of this I could use as a template?