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
