### Passing PETSc options to standard solve()

196

views

1

How to pass PETSc options to the standard solve() in FEniCS? First solve (standard) doesn't see the options, whereas the PETScKrylovSolver does.

```
from dolfin import *
PETScOptions().set("ksp_monitor_true_residual", "")
PETScOptions().set("ksp_monitor_singular_value", "")
mesh = UnitSquareMesh(10,10)
V = FunctionSpace(mesh, 'CG', 1)
u = TrialFunction(V)
v = TestFunction(V)
a = inner(grad(u), grad(v))*dx + u*v*dx
f = Constant(5.0)
L = f*v*dx
u_sol = Function(V)
solve(a==L, u_sol, solver_parameters={"linear_solver":"cg"})
A = assemble(a)
b = assemble(L)
solver = PETScKrylovSolver()
solver.ksp().setFromOptions()
solver.set_operator(A)
solver.solve(u_sol.vector(), b)
```

Community: FEniCS Project

1

I feel like the generic solve method is just there to let people who don't want to care about the details to just "solve". Is there a problem with using the more explicit wrapper functions to make you want to use "solve" instead?

written
8 months ago by
pf4d

yeah, dolfin-adjoint generates the adjoint using the regular solve.

written
8 months ago by
Miguel

That is a valid reason. I have used dolfin-adjoint for quite a few things, and it's great software, but it can't do everything. I feel like unless you are using the checkpointing, it is better to solve the adjoint manually.

written
8 months ago by
pf4d

Yeah, it seems that in the new generation dolfin-adjoint, pyadjoint https://bitbucket.org/dolfin-adjoint/pyadjoint/src the task of implementing your own linear solver is easier.

written
8 months ago by
Miguel

Please login to add an answer/comment or follow this question.