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" <mfad...@lbl.gov> 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

Reply via email to