This sounds good to me.  While at it, why not make
VecGet/RestoreArrayRead take a const PetscScalar ** second argument?
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
>
>

Reply via email to