This is a read only copy of the old FEniCS QA forum. Please visit the new QA forum to ask questions

Preconditioner for curl-curl

+9 votes

I'm solving a problem of the form

curl(curl(A)) + A = rhs

which is classically hard to deal with. I know that ML has a preconditioner for this, see chapter 7 of http://trilinos.sandia.gov/packages/ml/mlguide31.pdf. Is it possible to use this from Dolfin? What are other possibilities?

asked Jul 2, 2013 by nschloe FEniCS User (7,120 points)

Could you please tell me how to impliment the boundary condition, which if the problem's boundary condition is A in H0(curl)?

I can do Dirichlet boundary condition, Neumann boundary condition, Robin boundary condition, but not H0(curl).

I will appreciate your any help. Thanks!!!

2 Answers

+2 votes
 
Best answer

DOLFIN does not have support for the curl-curl preconditioner in ML.

We could add a function to access the underlying ML object, or allow a user to initialise a preconditioner with an ML object.

answered Jul 3, 2013 by Garth N. Wells FEniCS Expert (35,930 points)
selected Jul 4, 2013 by nschloe
+2 votes

CBC.Block in fenics applications has the ability to set Trilinos (and in particular, ML) preconditioners for their Krylov solvers. In theory (according to past conversations with an ML developer), PyTrilinos' ML expose the Maxwell preconditioner. Perhaps you could use cbc.block (without the block matrix features, in your case) to make this happen. This is speculative, but it might work.

Two starting points would be:
1.) The cbc.block demos, which show how to use a standard ML preconditioner with a Krylov solver.
2.) PyTrilinos' or ML's documentation might show you how to get the curl-curl preconditioner instantiated from Python, whence (if successful), you might be able to suitably modify the cbc.block demos for your own purposes.

answered Jul 12, 2013 by rckirby FEniCS Novice (620 points)

It might be possible (and easier if it works) to bypass cbc.block, let dolfin assemble the matrices into Epetra format, and then set up the Trilinos directly with PyTrilinos (see, e.g. http://trilinos.sandia.gov/packages/pytrilinos/development/ML.html). The possible snag would be incompatibility between dolfin and PyTrilinos wrapped Epetra matrices.

...