On 30 August 2013 22:50, Johan Hake <[email protected]> wrote:
> On Friday August 30 2013 15:47:28 Garth N. Wells 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?
>
> The map was introduced to help a user map vertex based data onto a Function.
>   from dolfin import *
>   import numpy as np
>
>   mesh = UnitSquareMesh(20,20)
>   V = VectorFunctionSpace(mesh, "CG", 1)
>   u = Function(V)
>   vertex_to_dof_map = V.dofmap().vertex_to_dof_map(mesh)
>
>   data = np.reshape(mesh.coordinates()[:], (mesh.num_vertices()*2))
>   u.vector()[:] = data[vertex_to_dof_map]
>   plot(u, interactive=True)
>
> The size of the data array should be:
>
>   mesh.num_vertices()*u.value_size()
>
> The documentation should be improved, and not least properly mapped from C++
> to Python.
>
> The name refer to the mapping that turn vertex based data to dof based and
> reads quite well when used as above. I can see that the word map can be
> missleading. It is not a "map" data structure. It is an index set that "maps
> values".
>
> Still confused?
>

I'm not confused. It's clear that the function names are
back-to-front. It doesn't matter what they were included for - they
are members of GenericDofMap and must make sense in that context.

Since reading from left to right is a well established convention, I
propose that (a) the function names be fixed by reversing them; and
(b) the doc strings be fixed.

Garth

> Johan
>
>
>>
>> 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

Reply via email to