Different mesh refinement behavior of ball and sphere if more than one global refinement is done

37 views
Skip to first unread message

Sebastian Stark

unread,
Nov 16, 2018, 1:41:52 PM11/16/18
to deal.II User Group
Dear all,

I have a problem/question, wich is broadly related to my other post (https://groups.google.com/forum/#!topic/dealii/AzHUdaDaifI). But as I think that the source of the problem is likely to be different, I think it's appropriate to discuss the issue separately.

As before, the context is that I want to solve problems which simultaneously involve unknowns in a three dimemsional domain as well as on interfaces and/or boundary portions (conceptionally I consider the boundary as a special case of an interface). So I need a triangulation of the domain and a triangulation of the interfaces/boundary portions, which is generated from the domain mesh in a way very similar to extract_boundary_mesh(). I do generally assume that the interface/boundary mesh is refined in exactly the same way as the underlying domain and that the vertex positions of interface/boundary mesh coincide with those of the underlying domain mesh.

As a first simple test case I have chosen a spherical domain and used hyper_ball() to generate the triangulation (coarse mesh). The corresponding boundary triangulation (coarse mesh) is generated in a way completely analogous to how hyper_sphere() does it. I.e., extract_boundary_mesh() is used for this purpose and a SphericalManifold object is assigned to the boundary mesh afterwards. After generation of the coarse meshes, I refine the domain meshes. In this context, I've made the following observation: If I refine both meshes once globally, all corresponding vertices of the domain mesh and the boundary mesh are, to within numerical accuracy, at the same location as I'd expect it. However, if I do two or more global refinements, this is no longer the case, which invalidates my original assumption of coinciding meshes. The differences in vertex positions are moderate (approx. 0.1% of the radius of the sphere), but way too large to be explainable in terms of numerical inaccuracies. So, here comes my question: Has anybody an idea, what the reason for these differences could be?

Here is what I have found out so far:
(1) The problem does not exist in 2 dimensions;
(2) After one global refinement, the function center(true) returns, to within numerical accuracy, exactly the same points for the boundary faces of the domain mesh and the corresponding cells of the boundary mesh (both, for line centers as well as for boundary cell/face centers). As I am assuming that the new vertices are placed according to the points returned by center(true) during refinement, it seems weird to me that the meshes do no longer coincide after another global refinement.

I have attached an example illustrating the problem.

Thanks in advance for your help.

Sebastian
extraction_boundary_mesh.cpp

Sebastian Stark

unread,
Nov 26, 2018, 4:53:28 AM11/26/18
to deal.II User Group
Hi all,

a brief update on this issue: I have now taken a closer look on how the refinement is exactly done within the different versions of the execute_refinement function. I think the reason for the behavior which I observe is the following: If a cell of a 3d codimension 1 mesh is refined, no transfinite interpolation is used to determine the cell center (which actually happens within the auxiliary function create_children). In contrast, for refinement of a boundary face of a volume mesh, transfinite interpolation is used to determine the face center. If non-flat manifolds are involved, this leads to a situation where the boundary mesh is refined in a different way than the boundary faces of the underlying volume mesh. I personally tend to consider this a bug as I think that a transfinite interpolation should not be applied for the determination of any new points lying on the boundary (i.e., transfinite interpolation should only be used in the context of refinement of boundary cells for generation of new points lying within the domain). What do you think?

It also seems to me that transfinite interpolation is generally not used for refinement of cells at the boundary of a 3d codimension 1 mesh. In my opinion, it would be reasonable to use it there, because somebody could have the idea to use different manifolds for the boundary curve and the domain. E.g., if one wants to model a thin elastic plate with a curved boundary, one could do that with a 3d codimension 1 mesh having attached a flat manifold to the interior and something else on the boundary (I think that's actually much more natural than the usual completely two dimensional view point).

Best,
Sebastian
Reply all
Reply to author
Forward
0 new messages