I am trying to solve a nonlinear diffusion-type problem using the finite element method which has the following terms:

$-\nabla\cdot k_1\nabla u - \nabla\cdot k_2\nabla\mathrm{ln}(u) = 0$ in $\Omega$

Which can be rewritten as

$-\nabla\cdot(k_1 + \frac{k_2}{u})\nabla u = 0 $ in $\Omega$

If $k_2$ is sufficiently large enough (i.e., the $\mathrm{ln}(u)$ dominates), standard multi-grid packages like HYPRE with out-of-box parameters won't be able to solve it. I suspect it is the $k_2/u$ term that's causing the issues. What is the best preconditioner/solve for these type of equations?

FWIW, I am using FEniCS to solve this thus I can easily use pre-existing solvers/pcs from PETSc, HYPRE, etc. I am wondering if I should explicitly provide a matrix for this type of equation.

Sure, there is the issue of this model blowing up if u approaches 0, but that is not a concern at the moment. It's the fact that with the right parameters and initial guess, the above can be solve with any direct solver, which leads me to believe that this is a solvable problem with the right preconditioner.

  • The problem in the case of $k$ large and $u$ small is not your preconditioner -- it is the fact that the whole model is ill-conditioned or ill-posed in that case. The fact that you can't seem to precondition it efficiently is simply a consequence. – Wolfgang Bangerth Nov 7 at 21:18
  • Can you state what your boundary conditions are? Can you guarantee that $u$ remains bounded away from zero? – Wolfgang Bangerth Nov 7 at 21:18

Your Answer


By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Browse other questions tagged or ask your own question.