Johan Hake wrote:
> On Monday 17 August 2009 14:03:55 Garth N. Wells wrote:
>> Johan Hake wrote:
>>> On Monday 17 August 2009 13:33:21 Garth N. Wells wrote:
>>>> Please send any comments on how a SubFunction should work as I'm going
>>>> to work on it soon (the Cahn-Hilliard demo runs in parallel(!) ;) with
>>>> the exception of the extraction of sub-Functions for output). I'm
>>>> inlined to change a sub function such that for
>>>>
>>>>    Function u0 = u[0]
>>>>
>>>> the Function u0 will only point the vector belonging to u rather than
>>>> creating a new vector. The advantages are:
>>>>
>>>> - No need to copy a vector
>>>> - DofMap will not require 'is_view'
>>>> - Possible to do things like
>>>>     u0  = 0.0;
>>>>     u1  += v;
>>>>     u0.interpolate();
>>> What would Function::vector() for a SubFunction then return? The original
>>> full Vector?
>> Yes.
> 
> Ok.
> 
>>> It would be cool to add a view of the original Vector that only
>>> represents the values of the dofs in the SubFunction, without coping
>>> data. I fiddled around with this when adding slicing for the PyDOLFIN la
>>> interface, but realized that it would be too difficult.
>> This is more or less what I plan to do, although internally. A user
>> wouldn't see the vector, but operations like interpolate would only
>> involve part of the vector.
> 
> I see. Other direct Vector operations would then operate directly on the 
> shared Vector, like get, set, aso.
> 
>> We could add a class like
>>
>>    VectorView(GenericVector& x, DofMap& dof),
>>
>> which could derive from GenericVector, to provide views. It isn't a
>> priority for me though.
> 
> Yes, I also thought along these lines, however I did not think of doing it 
> using a DofMap, which really is the natural thing. I will also not have 
> possibility to priorities it for now.
>

On second thought,

   VectorView(GenericVector& x, std::vector<uint> map& map)

would be better. The DofMap could produce the map,

   std::vector<uint> map = dofmap.view();

Garth


> Johan
> 
>> Garth
>>
>>> Johan
>>>
>>>> Disadvantages are:
>>>>
>>>> - It may be unclear that u0 and u share data.
>>>> - If u goes out of scope, u0 is will keep the vector belonging to u
>>>> alive (only an issue if the vector is very large compared to that
>>>> required by u0).
>>>>
>>>> Garth
>>>> _______________________________________________
>>>> DOLFIN-dev mailing list
>>>> [email protected]
>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev


_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to