On 30 August 2013 23:37, Johan Hake <[email protected]> wrote: > On Friday August 30 2013 23:19:09 Garth N. Wells wrote: >> 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. > > Agree on (b). I am not fully convinced by (a). > > I am not sure what your example tries to show. You are not using the mapping > the intended way and I am therefore confused about the whole back-to-front, > front-to-back discussion.
Just read the function names aloud from left to right - 'vertex_to_dof_map' should be a 'vertex to dof map', i.e. a map from a vertex *to* a dof. Garth > > Johan > >> 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
