Whenever we have neighboring elements sharing lots of background faces we enumerate all of them and store this information.
Consequentlely, if we have two neighboring cells that are sharing many facets we call reinit(polytope, f) for every face index f, which implies many calls. In practice, that means we create and reinit an object of type FEImmersedSurfaceValues (plus the related quadratures and normals needed by ImmersedSurfaceQuadrature) for every (background) face.
On the other hand, the basis functions evaluated on these faces are always the same so it makes more sense to uniquely identify all of the faces sharing the same neighboring polygon as one single face.
Consider the following mesh made by two elements, and assume that K1 shares with K2 many straight little faces. With the latter approach:
K1 has two faces: one shared with K2 and its boundary (composed of three lines),
Whenever we have neighboring elements sharing lots of background faces we enumerate all of them and store this information.
reinit(polytope, f)
for every face indexf
, which implies many calls. In practice, that means we create and reinit an object of typeFEImmersedSurfaceValues
(plus the related quadratures and normals needed byImmersedSurfaceQuadrature)
for every (background) face. On the other hand, the basis functions evaluated on these faces are always the same so it makes more sense to uniquely identify all of the faces sharing the same neighboring polygon as one single face.Consider the following mesh made by two elements, and assume that K1 shares with K2 many straight little faces. With the latter approach:
Many tests will fail due to diffs in the golden output.
This suggests that it's better to group together these faces, since the
cell
we have now is conceptually just one polygonal cell.