Is this a typo: The default is 1 The preconditioner is ALWAYS built in the first iteration of a nonlinear solve unless lag is *-1* or SNESSetLagPreconditionerPersists <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESSetLagPreconditionerPersists.html#SNESSetLagPreconditionerPersists>() was called
Should it be -2 : https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESSetLagPreconditioner.html
