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? 

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