On Thu, May 14, 2009 at 01:26:39PM +0200, Anders Logg wrote: > On Thu, May 14, 2009 at 10:54:27AM +0100, Garth N. Wells wrote: > > > > > > Anders Logg wrote: > > > On Thu, May 14, 2009 at 09:15:08AM +0100, Garth N. Wells wrote: > > >> > > >> Ola Skavhaug wrote: > > >>> On Thu, May 14, 2009 at 9:36 AM, Garth N. Wells <[email protected]> wrote: > > >>>> Something in the recent change sets has broken some demos, for example > > >>>> > > >>>> demo/pde/advection-diffusion/cpp > > >>>> > > >>>> Garth > > >>> OK, I think I know what's breaking it. The dofmap gets the wrong > > >>> global dimension, and we are changing some of the logic there. I will > > >>> need to dig a little deeper. > > >>> > > >> The problem is that the code > > >> > > >> // Initialize mesh entities used by dof map > > >> for (uint d = 0; d <= mesh.topology().dim(); d++) > > >> if (ufc_dof_map->needs_mesh_entities(d)) > > >> { > > >> mesh.init(d); > > >> if (d > 0 && parallel) > > >> MeshPartitioning::number_entities(const_cast<Mesh&>(mesh), d); > > >> } > > >> > > >> inside DofMap::init(const Mesh& mesh) has been commented out. Mesh > > >> entities which are required for the dof map are not being initialised. > > >> > > >> Can this code just be 'turned' back on? > > > > > > The plan is for this to happen in the constructor of FunctionSpace > > > instead. There are now two different constructors, one const and one > > > non-const. > > > > > > The non-const version should check which entities are needed and if they > > > are not there compute them. This means calling mesh.init(d) and if > > > running in parallel also number_entities which computes global indices > > > for all entities. The global indices are stored in MeshData with keys > > > "global entity indices 0", "global entity indices 1" etc. > > > > > > The const version should check which entities are needed and if they > > > are not there give an error message. > > > > > > This will require modifying the generated DOLFIN wrapper code (in > > > dolfin_utils) to generate both constructors. > > > > > > When this works, we can remove the const-casts for init() in Mesh. > > > > > > > When will it work? At the moment DOLFIN is broken. > > > > Garth > > I will try to look at it later tonight if not fixed before.
I've been struggling with moving FFC over to using dolfin_utils to generate the wrapper code (and rewriting parts of the code generation in FFC in the process) so I haven't had time to fix this. Fixing it properly depends on moving to the newly updated dolfin_utils. But try copying the initialization block from the non-const constructors to the const constructors. It should work since mesh.init() is still const. -- Anders
signature.asc
Description: Digital signature
_______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
