On 30 August 2013 16:05, Jan Blechta <[email protected]> wrote:
> On Fri, 30 Aug 2013 16:57:42 +0200
> Jan Blechta <[email protected]> wrote:
>
>> On Fri, 30 Aug 2013 15:47:28 +0100
>> "Garth N. Wells" <[email protected]> wrote:
>>
>> > The functions GenericDofmap::vertex_to_dof_map and
>> > GenericDofMap::dof_to_vertex_map are not properly documented (the
>> > doc string is the same for both), and I think that they are back to
>> > front. The docstring in DofMap has inconsistencies. I would expect
>> > that
>> >
>> >     map0 =  GenericDofmap::vertex_to_dof_map(...)
>> >
>> > would mean a map from vertex to dof, i.e.
>> >
>> >     map0[vertex_index] -> dof index
>> >
>> > and  that
>> >
>> >     map1 =  GenericDofmap::dof_to_vertex_map(...)
>> >
>> > would mean a map from dof index to
>> >
>> >     map1[dof_index] -> vertex index
>> >
>> > Tests (see below code) and the return types also indicate that
>> > things are back to front. Can someone clarify the situation?
>>
>> If you have some map defined on dofs, i.e. it returns whatever from
>> dofs, for example Vector()[:], then composition with dof_to_vertex_map
>> makes it a map on vertices (modulo dofs per vertex).
>
> To make it clear
>
>     u = Function(V)
>     x = u.vector()
>     values_on_vertices = x[dof_to_vertex_map]
>
> for CG1 space values_on_vertices are x's values indexed by local vertex
> numbers. For other spaces (where the concept has a meaning - I'm not
> sure which are these) it should be indexed by
>
>     local_vertex_index*dofs_per_vertex + i
>
> for i = 0, ..., dofs_per_vertex-1
>

It's not clear and Functions and Vectors have nothing to do with it. I
was taught from a young age to read left-to-right, which means

   vertex_to_dof_map(...) == vertex to dof map.

Unfortunately, in this case, I'm not dyslexic, otherwise it would make sense.

Garth

> Jan
>
>>
>> vertex_to_dof_map is just an inversion of dof_to_vertex_map.
>>
>> Jan
>>
>> >
>> > Garth
>> >
>> >
>> >
>> > from dolfin import *
>> >
>> > mesh = UnitSquareMesh(4, 4)
>> > V = FunctionSpace(mesh, "Lagrange", 1)
>> >
>> > dof_to_vertex = V.dofmap().dof_to_vertex_map(mesh)
>> > vertex_to_dof = V.dofmap().vertex_to_dof_map(mesh)
>> >
>> > for c in cells(mesh):
>> >     print "Cell index:", c.index()
>> >
>> >     # Get cell dofs
>> >     dofs = V.dofmap().cell_dofs(c.index())
>> >     print "  Cell dofs:", dofs
>> >
>> >     # Get vertices from cell
>> >     cell_vertices0 = sorted([v.index() for v in vertices(c)])
>> >     print "  Cell vertex indices (from cell):", cell_vertices0
>> >
>> >     # Get vertices from dof_to_vertex
>> >     cell_vertices1 = sorted([dof_to_vertex[dof] for dof in dofs])
>> >     print "  Cell vertex indices (from dof_to_vertex_map):",
>> > cell_vertices1
>> >
>> >     # Get vertices from vertex_to_dof_map
>> >     cell_vertices2 = sorted([vertex_to_dof[dof] for dof in dofs])
>> >     print "  Cell vertex indices (from vertex_to_dof_map):",
>> > cell_vertices2 _______________________________________________
>> > fenics mailing list
>> > [email protected]
>> > http://fenicsproject.org/mailman/listinfo/fenics
>>
>> _______________________________________________
>> fenics mailing list
>> [email protected]
>> http://fenicsproject.org/mailman/listinfo/fenics
>
_______________________________________________
fenics mailing list
[email protected]
http://fenicsproject.org/mailman/listinfo/fenics

Reply via email to