On 28 January 2013 22:27, Anders Logg <l...@simula.no> wrote: > 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? >
I don't think that it's required, but I guess Johan is adding it by popular demand. Garth > -- > Anders > > _______________________________________________ > Mailing list: https://launchpad.net/~dolfin > Post to : dolfin@lists.launchpad.net > Unsubscribe : https://launchpad.net/~dolfin > More help : https://help.launchpad.net/ListHelp _______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : dolfin@lists.launchpad.net Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp