You mean -snes_type ksponly ?
Anyways the manual page says:
SNESKSPONLY - Nonlinear solver that only performs one Newton step and does
not compute any norms.
The main purpose of this solver is to solve linear problems using the
SNES interface, without
any additional overhead in the form of vector operations.
So I interprete it to mean that for each nonlinear solve it will evaluate
the Jacobian (otherwise it is not doing one Newton step) and from the code
ierr =
SNESComputeJacobian(snes,X,&snes->jacobian,&snes->jacobian_pre,&flg);CHKERRQ(ierr);
ierr =
KSPSetOperators(snes->ksp,snes->jacobian,snes->jacobian_pre,flg);CHKERRQ(ierr);
so clearly it wants to reevaluate the Jacobian for each solve.
Perhaps you also want SNESSetLagPreconditioner
- lag - -1 indicates NEVER rebuild, 1 means rebuild every time the Jacobian is
computed within a single nonlinear solve, 2 means every second time
the Jacobian is built etc. -2 indicates rebuild preconditioner at next
chance but then never rebuild after that
With this option it will (if coded correctly) reuse the same Jacobian and
preconditioner for every SNESSolve() you call (it will just get Jacobian once
the first time). I think this is what you want.
Barry
On Sep 1, 2013, at 5:54 PM, "Mark F. Adams" <[email protected]> wrote:
> I have a SNES solver that runs with a linear operator at times. I use
> -ksp_ksponly. The KSPSetOperator seems to get called every solve because the
> PC setup code gets called every solve. Should this be happening?
>
> Mark