tabulate_vertex_map is now named dofs_to_vertex_map and is backported to 1.1.x.
Johan On 01/29/2013 11:14 PM, Johan Hake wrote: > On 01/29/2013 10:00 PM, Pietro Maximoff wrote: >> Hi >> >> Johan, thanks for adding this. >> >> This function is particularly important for me as currently, all my code >> is broken in Fenics 1.1. >> >> I need to be able to associate each component of a 'solution' vector >> with a coordinate value, carry out some processing and store data back >> in exactly the same order in the 'same' or similar solution vector. >> compute_vertex_values() doesn't give this functionality but >> tabulate_vertex_map() does this!?! > > Yes. I will soon rename the method to vertex_to_dof_map, however. Then > it will be: > > vertex_to_dof = V.dofmap().vertex_to_dof_map(mesh) > > # Use num coordinates to work in parallel > data = np.zero(len(mesh.num_coordinates())) > data[vertex_to_dof] = u.vector().array() > > # Do stuff on data > > # Put data back > u.vector().set_local(data[vertex_to_dof]) > >> How can I get my hands on it? Do I just use dorsal with stable_build set >> to false? > > I guess so. Once I have changed the name I will back port it to 1.1. It > might be safer to work with that instead of trunk right now, as trunk is > undergoing heavy development. > > I am not sure how to install the latest revision of the lp:dolfin/1.1.x > branch using dorsal. You can get the latest 1.1.x code by: > > bzr branch lp:dolfin/1.1.x dolfin-1.1.x > > It might be just to copy the dorsal_configure and dorsal_build scripts > to the dolfin-1.1.x dir and run them, as they should contain all > information required to build and configure dolfin. > > Johan > >> Pietro >> >> ------------------------------------------------------------------------ >> *From:* Johan Hake <hake....@gmail.com> >> *To:* Anders Logg <l...@simula.no> >> *Cc:* dolfin-dev <dolfin@lists.launchpad.net> >> *Sent:* Monday, January 28, 2013 10:52 PM >> *Subject:* Re: [Dolfin] DofMap.tabulate_vertex_map >> >> On 01/28/2013 11:36 PM, Anders Logg wrote: >>> On Mon, Jan 28, 2013 at 10:33:15PM +0000, Garth N. Wells wrote: >>>> On 28 January 2013 22:27, Anders Logg <l...@simula.no >> <mailto: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. >> >> ;) >> >> Well I have a similar mapping in my own tools, and instead of giving >> that code away all the freaking time I pushed it to DOLFIN. My code was >> also Python only and recently we got some C++ request. >> >>> I'm not objecting to it. I just came to think about the >>> compute_vertex_values function and it should be enough to cover most >>> of the use cases that are the background for the popular demand: users >>> of Hans Petter's tutorial who want to get the vertex values on a >>> regular grid for postprocessing in external software like MATLAB. >> >> I think the compute_vertex_values could fill the purpose of most use >> cases, but I think having the mapping available could be nice and >> convenient. >> >> Even if we discourage indexing into vectors, people tend to ignore it, >> because it is often just the natural way to do stuff. Especially for >> Functions in CG1 family spaces. By forcing a user to use local process >> data for all things numpy, we can be useful for both numpy and HPC folks. >> >> Johan >> >>> -- >>> Anders >>> >> >> >> _______________________________________________ >> Mailing list: https://launchpad.net/~dolfin >> Post to : dolfin@lists.launchpad.net <mailto: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