On Fri, 30 Aug 2013 16:09:06 +0100 "Garth N. Wells" <[email protected]> wrote:
> 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. Vector is here only an example of some map defined on dof indices. > 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. I see your point, it's confusing. But the etymology of vertex_to_dof_map is that it turns some vertex map (map defined on vertex indices) into dof map (map defined on dof indices). I think that Johan is an author of original vertex_to_dof_map. Is he dyslexic? :-P Jan > > 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 _______________________________________________ fenics mailing list [email protected] http://fenicsproject.org/mailman/listinfo/fenics
