Mixed-dimensional branch: SubMesh() based on geometric multigrid

Dear all,

recently I found a very attrative feature in the mixed-dimensional branch, which enable the MixedFunctionSpace defined with various submeshes, see Replacement of MixedFunctionSpace. It seems that this new feature aims at solving problem with different topology dimensions. While my interset is another way of “mixed-dimension”, which is the the multi-dimension grid size meshes on the same domain, namely, geometric multigrid.

In order to do so, it is required first to create a SubMesh() on the same domain but with different resolution. I searched for a while but found that the SubMesh() in the current version is based on cell (or edge for BoundaryMesh). I’m looking for a way to walk around and create a SubMesh() based on some kind of macro cell (groupd few cells to make the resolution coarser) or the parent of the refined mesh (with built-in refine() function) or geometric multigrid. Please help me if you have any idea of possible ways.

Thank you!

P.S. I found there is a built-in cpp MeshHierarchy() function in the source code, in firedrake it is avaible but the python interface in FEniCS seems not provided yet. I was thinking if this interface can be added and then if the SubMesh() could build upon this MeshHierarchy()? This might be interesting in general.

Anyone have some idea? Or if I would like to implement this feature, assembling the matrix for a mixed function space with variables (u,p for Stokes flow) defined on different resolution, how should I start myself? Any suggestion or tips would be really appreciated.

Hello,

The submeshes in the mixed-dimensional branch are handled using a new MeshView feature embedding a parent-child mapping for the cells and the vertices. These submeshes are built from a subset of marked entities (cells, facets, edges) in the parent mesh.
Like for Submesh, I don’t think this is appropriate for multi resolution submeshes.

Regarding MeshHierarchy, I don’t know much about it but if you manage to build a submesh from this feature, you would need appropriate mappings if you want to use the assembly algorithm implemented in the mixed-dimensional branch. You can find more details about the implementation here