[petsc-dev] VecGetArrayRead vs. VecGetArrayPrivate

Barry Smith bsmith at mcs.anl.gov
Tue Nov 23 08:10:57 CST 2010

On Nov 23, 2010, at 8:07 AM, Jed Brown wrote:

> On Tue, Nov 23, 2010 at 04:57, Barry Smith <bsmith at mcs.anl.gov> wrote:
> I think if we removed ALL the increase state from the outer methods (like VecScale) we could remove the VecGetArrayPrivate() and always use VecGetArray() or write ones and VecGetArrayRead() for read ones inside the private methods.
> Why is it better for VecScale_Seq to call a private VecScaleUpdateCachedNorms

   You misunderstand. VecNorm() would still be calling the update cache business,. the only difference is it would get the cached values before the (*v->scale)(...) call and set them back into the Vec after the (*v->scale)(...)

   The VecScale_Seq() would be calling the VecGetArray() and (as a result) be the one increasing the state. But it wouldn't be messing with the cached norms.


> instead of letting the outer method handle it?  Seems like either unnecessarily duplicated code, or an extra function, with less obvious semantics when you approach the code from the public interface.  Having the inner method handle the caching logic is only clearer when you start in the depths of the implementation and work back towards the user.
> Jed

More information about the petsc-dev mailing list