 Preconditioner for indefinite linear system

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:

1. Is there a preconditioner that I can import into the solver that will speed convergence of this type of problem?
2. 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?

As far as I’m aware, domain decomposition is used to some success for the time harmonic Maxwell system. And, as you’ve observed, typically used “black box” methods do not converge.

You could also look into the AMS preconditioner in PETSc/HYPRE but I doubt this will help you for your formulation. DOLFIN demo here.

In terms of literature, check out the works by Ralf Hiptmair and Jinchao Xu.

Thanks for references. I had a look and it looks like a very challenging problem. The usual variational approach gives rise to a saddle-point problem that is difficult to solve using iterative methods.

I am taking a look at least-squares formulation of Maxwell’s equations that produce symmetric-positive definite discrete operators at the expense of doubling the number of unknowns. The usual preconditioned CG solver should work in this case. I’ll let you know how it goes.