On 6/6/11 4:31 PM, Jed Brown wrote: > On Mon, Jun 6, 2011 at 22:21, Boyce Griffith <griffith at cims.nyu.edu > <mailto:griffith at cims.nyu.edu>> wrote: > > Could calls to PetscObjectStateIncrease be added to SNES so that > they are not needed anywhere in wrapper/application code? > > > For the vector?
Yes. Well, ideally, everything --- Vec's, Mat's, PC's, ... :-) > The matrix has its state increased in MatAssemblyEnd(). The API is to > always call MatAssemblyBegin/End even if the specific format doesn't > "need" it. At least in my code, and I expect in Bobby's too, all Mat and PC objects are just shells. So the only non-PETSc objects are Vec wrapper objects. At least at some point in history, it was necessary to call PetscObjectStateIncrease on the "output" vectors in calls to MatVecMult / MatVecMultAdd / etc. Because screwed up norm caching can ruin your day, I use it pretty liberally. But because PetscObjectStateIncrease() doesn't appear to be intended to be used in user code, it can also be a source of headaches when changing PETSc versions. -- Boyce
