On Mon, Jan 28, 2013 at 11:19:13PM +0100, Johan Hake wrote: > On 01/28/2013 11:08 PM, Anders Logg wrote: > > On Mon, Jan 28, 2013 at 10:37:46PM +0100, Johan Hake wrote: > >> On 01/28/2013 10:22 PM, Anders Logg wrote: > >>> On Mon, Jan 28, 2013 at 10:10:40PM +0100, Johan Hake wrote: > >>>> Hello! > >>>> > >>>> I have now added a method to DofMap, which tabulate a map between > >>>> vertices and dofs. It will only work for DofMaps with dofs on vertices. > >>>> So basically for any CG 1 FunctionSpaces and will raise error else wise. > >>>> > >>>> Usage: > >>>> > >>>> from dolfin import * > >>>> import numpy as np > >>>> mesh = UnitSquareMesh(10,10) > >>>> V = VectorFunctionSpace(mesh, "CG", 1) > >>>> u = Function(V) > >>>> u.interpolate(Constant((1,2))) > >>>> vert_values = np.zeros(mesh.num_vertices()*2) > >>>> vert_values[V.dofmap().tabulate_vertex_map(mesh)] = \ > >>>> u.vector().array() > >>>> print vert_values > >>>> > >>>> In parallel the map will follow the local dofs. This means that some > >>>> values in vert_values above will still be 0. The 0 values will then > >>>> correspond to vertex values which are owned by another process. > >>>> > >>>> In C++ the method returns a std::vector<std::size_t>. > >>>> > >>>> Questions: > >>>> Does the name "tabulate_vertex_map" work? > >>> > >>> Sounds ok. > >>> > >>>> Should a version of this method exist in other classes. FunctionSpace, > >>>> Function (without the mesh argument of course)? > >>> > >>> Yes, would be good to have for convenience. > >>> > >>> What is the relation to Function::compute_vertex_values? > >> > >> compute_vertex_values works on any GenericFunction. However, for all > >> Functions from CG 1 families I guess one could use this map to just > >> tabulate the entries. > > > > What does the tabulate_vertex_map method do which > > compute_vertex_values doesn't? Enable writing to dofs? > > RTFC! ;) > > tabulate_vertex_map only computes a map based on the prior knowledge of > the dofs coinciding with the vertices. compute_vertex_values are much > more general and used > > element.interpolate_vertex_values > > to do the heavy lifting.
Yes, so why is tabulate_vertex_map needed, if compute_vertex_values already computes the vertex values and is much more general? > I see tabulate_vertex_map as a convenience mapping for users who want > their data on a vertex based format, or users who want data which > resides on vertices into dolfin la structures. What is the use case? If it is for plotting or postprocessing, then compute_vertex_values should be enough. Or is the intention to use it for modifying values of CG1 functions from the outside? -- Anders _______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : [email protected] Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp

