Anders Logg wrote: > On Thu, Aug 14, 2008 at 03:26:07PM +0200, Niclas Jansson wrote: >> The code could be fetched from >> >> http://www.csc.kth.se/~njansson/dolfin-2008-08-14.tar.bz2 >> >> Requires PETSc and parmetis, (customLinkFlags = '-lmetis -lparmetis') >> >> DofMap::build don't construct a global dofmap. It reorders the map in >> order to minimize communication during assembly. >> The global dofmap is obtained from the ordinary tabulate_dofs call. >> >> Niclas > > I think it looks good. > > As far as I understand, you build a global numbering of all mesh > entities (which may be different from the local numbering on each > processor), and then the (global parallel) local-to-global mapping > follows from tabulate_dofs just as usual. > > So, the difference is that you build a global numbering of the mesh > entities, and we wanted to build a global numbering of the dofs. The > only advantage I can see with our approach is that it may use less > memory, since we don't need to store an extra numbering scheme for all > mesh entities but this not a big deal. > > A few questions: > > 1. Is the above interpretation correct? > > 2. Is there a simple example that I can run to test. The code built > fine but I didn't find any demo. > > 3. Does the partitioning require that one processor reads the entire mesh > and then sends it to ParMetis? > > 4. Is the extra storage dynamic? If only vertices are needed (for P1 > elements), then we only need to store extra vertex numbers. > > 5. MeshRenumber seems specific to triangles and tets. Can it be done > without reference to specific entities with special cases put in > CellType? > > 6. Does it work for assembly over interior facets (like in DG > methods)? > > 7. Is it possible to make it work with SCOTCH (in addition to > ParMetis)? > > Then some suggestions: > > 1. I'd like to move the implementation of DofMap::build() to > DofMapBuilder (to simplify DofMap.cpp). > > 2. Function names should be fooBar(), not foo_bar(). > > 3. There needs to be some #ifdef HAS_PARMETIS so it may be built > without Parmetis. > > 4. I'd like to add a new class GlobalNumbering (to replace > MeshDistributedData) that holds the global numbering scheme. > > The Mesh class can have a pointer to a GlobalNumbering object which is > 0 by default so no extra data (or at least not more than 4 bytes) is > stored when not running in parallel. > > Then we can add a function MeshEntity::number() which returns the same > as index() if GlobalNumbering is 0. Otherwise, it returns what is > stored in GlobalNumbering. > > GlobalNumbering can have an array of MeshFunctions, one for each > topological dimension, that maps the local entity indices to their > global numbers. > > Thus, a MeshEntity will have two functions index() and number(). > These will return the same value in sequential and possibly different > values in parallel. > > Let's await some more comments and then get started. It would be nice > to get it in small patches to give us an opportunity to comment/edit. > Adding GlobalNumbering and MeshEntity::number() would be a good start. >
Sounds good. I agree that it's good to get started with small patches/extensions. Garth > > > ------------------------------------------------------------------------ > > _______________________________________________ > DOLFIN-dev mailing list > [email protected] > http://www.fenics.org/mailman/listinfo/dolfin-dev _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
