# Nonlinear solver configuration in dolfinx

**URL:** <https://fenicsproject.discourse.group/t/nonlinear-solver-configuration-in-dolfinx/9571>\
**Category:** dolfinx\
**Created:** [October 25, 2022, 10:12am UTC](https://fenicsproject.discourse.group/t/nonlinear-solver-configuration-in-dolfinx/9571 "2022-10-25T10:12:56Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![lclaire](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/lclaire/32/1615_2.png) [@lclaire](https://fenicsproject.discourse.group/u/lclaire)\
**Post date:** [October 25, 2022, 10:12am UTC](https://fenicsproject.discourse.group/t/nonlinear-solver-configuration-in-dolfinx/9571/1 "2022-10-25T10:12:56Z")

</div>

Hello,

I would like to configure the nonlinear solver in petxc, in the same spirit as what is done in the demo [Solver configuration — FEniCSx tutorial](https://jorgensd.github.io/dolfinx-tutorial/chapter4/solvers.html) for linear solvers. I tried the following command

```auto
problem = dolfinx.fem.petsc.NonlinearProblem(residual, u, bcs=[bc], petsc_options={"pc_type": "lu"})

```

but this yields an error:

```auto
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In [25], line 2
      1 # We use dolfinx newton solver
----> 2 problem = dolfinx.fem.petsc.NonlinearProblem(residual, u, bcs=[bc], petsc_options={"pc_type": "lu"})

TypeError: __init__ () got an unexpected keyword argument 'petsc_options'

```

thank you in advance for your help!

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [October 25, 2022, 11:32am UTC](https://fenicsproject.discourse.group/t/nonlinear-solver-configuration-in-dolfinx/9571/2 "2022-10-25T11:32:33Z")

</div>

See: [Implementation — FEniCSx tutorial](https://jorgensd.github.io/dolfinx-tutorial/chapter2/nonlinpoisson_code.html?highlight=newtonsolver#newtons-method)  
where you configure the `krylov_solver` directly, i.e.

```python
solver = nls.petsc.NewtonSolver(MPI.COMM_WORLD, problem)

ksp = solver.krylov_solver
opts = PETSc.Options()
option_prefix = ksp.getOptionsPrefix()
opts[f"{option_prefix}ksp_type"] = "cg"
opts[f"{option_prefix}pc_type"] = "gamg"
opts[f"{option_prefix}pc_factor_mat_solver_type"] = "mumps"
ksp.setFromOptions()

```

---

<div class="post-metadata">

**Author:** ![lclaire](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/lclaire/32/1615_2.png) [@lclaire](https://fenicsproject.discourse.group/u/lclaire)\
**Post date:** [October 25, 2022, 11:48am UTC](https://fenicsproject.discourse.group/t/nonlinear-solver-configuration-in-dolfinx/9571/3 "2022-10-25T11:48:08Z")

</div>

thanks! what if I want to configure options fot my nonlinear solver like

```auto
-snes_monitor

```

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [October 25, 2022, 1:07pm UTC](https://fenicsproject.discourse.group/t/nonlinear-solver-configuration-in-dolfinx/9571/4 "2022-10-25T13:07:36Z")

</div>

The `NonLinear` solver in DOLFINx does not use `SNES`, it uses the built-in Newton Solver.  
See: [dolfinx/test\_newton.py at f55eadde9bba6272d5a111aac97bcb4d7f2b5231 · FEniCS/dolfinx · GitHub](https://github.com/FEniCS/dolfinx/blob/f55eadde9bba6272d5a111aac97bcb4d7f2b5231/python/test/unit/nls/test_newton.py#L155-L196) for how to interface with SNES
