On Sun, Oct 7, 2012 at 3:52 PM, Anders Logg <l...@simula.no> wrote: > On Sat, Oct 06, 2012 at 09:51:24PM +0100, Garth N. Wells wrote: >> What does the mesh connectivity (d, d) really mean? This is related >> to the bug >> >> https://bugs.launchpad.net/dolfin/+bug/1063013 >> >> The code >> >> #include <dolfin.h> >> int main() >> { >> // Create mesh >> UnitSquare mesh(1, 1); >> mesh.init(2, 2); >> Cell cell(mesh2, 0); >> for (CellIterator c(cell); !c.end(); ++c) >> cout << "In cell loop" << endl; >> } >> >> prints >> >> In cell loop >> In cell loop >> In cell loop >> In cell loop >> In cell loop >> In cell loop > > Connectivity d --> d means sharing a vertex for d > 0 and sharing a > cell for d = 0. > > 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 > -- > 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