On Nov 22, 2010, at 10:09 PM, Dmitry Karpeev wrote:
> This sounds good to me. While at it, why not make
> VecGet/RestoreArrayRead take a const PetscScalar ** second argument?
It does.
> Somewhat unrelated: should VecGet/RestoreArray(Read) be renamed
> VecGet/RestoreLocalArray(Read)?
> This would conform to the IS usage. I guess that last change would
> have a significant impact on the user code, though.
> Dmitry.
>
> On Mon, Nov 22, 2010 at 9:57 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>>
>> Hg pull; hg update before reading this.
>>
>> VecGet/RestoreArrayRead() is suppose to be read only.
>> VecGet/RestoreArray() is read/write and increases the state of the vector.
>> These are the standard public methods.
>>
>>
>> VecGetArrayPrivate() is read/write but DOES NOT increase the state of the
>> vector directly, this is used by Vector operations that manage the change in
>> state themselves. For example VecGetArrayPrivate() is used in, for example
>> VecScale_Seq() because the VecScale() outer method manages increasing the
>> state and preserving the norm value if it was set. If we used
>> VecGetArrayRead() in that location (and did not have VecGetArrayPrivate() it
>> would be very confusing since in VecScale_Seq() it does change the values so
>> read is not appropriate but VecGetArray() would result in a double increase
>> in the state and hence lose the VecNorm cached.
>>
>> In looking at the code now I make the following observation. The state
>> increase operation being given inside the outer method (for example
>> VecScale) comes from the days when the individual implementations (like
>> VecScale_Seq) did not call VecGetArray....() but just accessed the array
>> inside the structure directly. We then went to the model where NO method
>> (like VecScale_Seq) was ever suppose to directly access the array and always
>> when through a VecGetArray....(), I had to introduce the
>> VecGetArrayPrivate() to avoid double increasing the state of the vector (and
>> thus losing some cached VecNorms). 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. This has to be
>> done with care, if all agree I'll do it.
>>
>>
>> Barry
>>
>>
>> On Nov 22, 2010, at 8:54 PM, Matthew Knepley wrote:
>>
>>> Why would you use Private, since Read jsut seems to call it?
>>>
>>> Thanks,
>>>
>>> Matt
>>>
>>> --
>>> What most experimenters take for granted before they begin their
>>> experiments is infinitely more interesting than any results to which their
>>> experiments lead.
>>> -- Norbert Wiener
>>
>>