← Back to team overview

dolfin team mailing list archive

Re: DofMap.tabulate_vertex_map

 

On 28 January 2013 22:27, Anders Logg <logg@xxxxxxxxx> wrote:
> On Mon, Jan 28, 2013 at 11:19:13PM +0100, Johan Hake wrote:
>> On 01/28/2013 11:08 PM, Anders Logg wrote:
>> > On Mon, Jan 28, 2013 at 10:37:46PM +0100, Johan Hake wrote:
>> >> On 01/28/2013 10:22 PM, Anders Logg wrote:
>> >>> On Mon, Jan 28, 2013 at 10:10:40PM +0100, Johan Hake wrote:
>> >>>> Hello!
>> >>>>
>> >>>> I have now added a method to DofMap, which tabulate a map between
>> >>>> vertices and dofs. It will only work for DofMaps with dofs on vertices.
>> >>>> So basically for any CG 1 FunctionSpaces and will raise error else wise.
>> >>>>
>> >>>> Usage:
>> >>>>
>> >>>>   from dolfin import *
>> >>>>   import numpy as np
>> >>>>   mesh = UnitSquareMesh(10,10)
>> >>>>   V = VectorFunctionSpace(mesh, "CG", 1)
>> >>>>   u = Function(V)
>> >>>>   u.interpolate(Constant((1,2)))
>> >>>>   vert_values = np.zeros(mesh.num_vertices()*2)
>> >>>>   vert_values[V.dofmap().tabulate_vertex_map(mesh)] = \
>> >>>>   u.vector().array()
>> >>>>   print vert_values
>> >>>>
>> >>>> In parallel the map will follow the local dofs. This means that some
>> >>>> values in vert_values above will still be 0. The 0 values will then
>> >>>> correspond to vertex values which are owned by another process.
>> >>>>
>> >>>> In C++ the method returns a std::vector<std::size_t>.
>> >>>>
>> >>>> Questions:
>> >>>> Does the name "tabulate_vertex_map" work?
>> >>>
>> >>> Sounds ok.
>> >>>
>> >>>> Should a version of this method exist in other classes. FunctionSpace,
>> >>>> Function (without the mesh argument of course)?
>> >>>
>> >>> Yes, would be good to have for convenience.
>> >>>
>> >>> What is the relation to Function::compute_vertex_values?
>> >>
>> >> compute_vertex_values works on any GenericFunction. However, for all
>> >> Functions from CG 1 families I guess one could use this map to just
>> >> tabulate the entries.
>> >
>> > What does the tabulate_vertex_map method do which
>> > compute_vertex_values doesn't? Enable writing to dofs?
>>
>> RTFC! ;)
>>
>> tabulate_vertex_map only computes a map based on the prior knowledge of
>> the dofs coinciding with the vertices. compute_vertex_values are much
>> more general and used
>>
>>   element.interpolate_vertex_values
>>
>> to do the heavy lifting.
>
> Yes, so why is tabulate_vertex_map needed, if compute_vertex_values
> already computes the vertex values and is much more general?
>
>> I see tabulate_vertex_map as a convenience mapping for users who want
>> their data on a vertex based format, or users who want data which
>> resides on vertices into dolfin la structures.
>
> What is the use case? If it is for plotting or postprocessing, then
> compute_vertex_values should be enough.
>
> Or is the intention to use it for modifying values of CG1 functions
> from the outside?
>

I don't think that it's required, but I guess Johan is adding it by
popular demand.

Garth

> --
> Anders
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help   : https://help.launchpad.net/ListHelp


Follow ups

References