dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #25981
Re: Mesh topology question
On Sun, Oct 7, 2012 at 3:52 PM, Anders Logg <logg@xxxxxxxxx> 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
Follow ups
References