After wasting a bunch of Shri's time with my stupidity I realized it would be
great if we could somehow mark PETSc objects to PETSc methods as "const" in
either the source code and/or the manual pages. Or better yet, "not const".
For example the first Vec argument to MatMult() is const but not the second.
A more difficult example is that the Jacobian matrix argument to SNES is const
(in some sense) but it is not to TS (since TS "adjusts" it before passing to
SNES). I wasted Shri's time because the Jacobian in SNES for VI problems isn't
const.
Note that "const" here may not have the strict C meaning of not changing
anything in the object. For example VecNorm() is const on the vector elements
but caches the computed norm so does change the data inside the object.
Comments, suggestions, more knowledge than I have on the whole const business?
Thanks
Barry
Note: The use of const for arguments to VecGetArrayRead() is slighly related to
the Vec in the method being "const" but we've done a pretty good job of fixing
most of them and this email isn't directly related to that.