On Sun, Oct 07, 2012 at 08:16:33PM +0100, Garth N. Wells wrote: > Is this consistent?
I'm not sure, it's just a choice we needed to make. It makes sense that being connected means sharing a common vertex, but this obviously fails for the case (0, 0) so then I thought it made sense for two vertices to be neighbors if they share a cell. For simplices it's the same as sharing an edge, so when quads are now being added we might need to rethink this. > I have a feeling that it's not because I'm having to write a bunch > of special cases to make BoundaryMesh and the mesh partitioning work > in 1D because facets and vertices are of the same topological > dimension. > > Would it work if > > CellIterator c(cell) > > yielded *c == cell? (and likewise for other topological dimensions) You mean a cell is only neighbor to itself? I think that would break quite a few algorithms currently in DOLFIN that rely on looking at neighboring cells. Did you fix the 1D boundary mesh bug? What was the fix? -- Anders > Garth > > >> In the above case, each cell will be connected to itself and the other > >> cell, so the loop should print only this: > >> > >> In cell loop > >> In cell loop > >> > >> Why do you get 6? I tried this (in Python) and get only 2. > >> > > > > Sorry, try > > > > UnitSquare mesh(2, 2); > > > > I used mesh(1, 1) in testing, and indeed in only prints twice. > > > >>> In what sense are entities of the same dimension 'connected'? The > >>> present behaviour is causing a problem when computing a BoundaryMesh > >>> in 1D because it picks up the end vertices, but then iterates along > >>> the lines of > >>> > >>> for (VertexIterator v(vertex); !v.end(); ++v) > >>> { > >>> > >>> } > >>> > >>> which then yields the vertex that is one place in from the boundary. > >> > >> The algorithm for BoundaryMesh is to iterate over all facets of the > >> mesh, in this case all vertices, and then check for each one if it is > >> connected to exactly one entity of dimension D (cells) which in this > >> case is edges (intervals). So something clearly goes wrong in > >> TopologyComputation in 1D. > >> > >> I'll look at it later. > >> > > > > The problem is what I describe above with the iterators over the (d, > > d) connectivity with d=0. The BoundaryMesh code finds a facet on the > > boiundary (vertex in the case of 1D), and then iterates over the > > vertices of the facet: > > > > for (VertexIterator v(facet); !v.end(); ++v) > > { > > > > } > > > > When facet is not a vertex, this computes all the vertices that lie on > > the boundary. When facet is a vertex, the above returns vertices that > > share the cell with facet, but which do not lie on the boundary. > > > > > > Garth > > _______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : dolfin@lists.launchpad.net Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp