I am working at the french "Alternative Energies and Atomic Energy Commission" on a quite generic library which deals with finite-elements/finite-volumes/discontinuous-galerkin/... in a large field of applications in a HPC framework.
In this library, we use external libraries to deal with distributed meshes, and we already have 2 "mesh backends'' (based on moab (
https://sigma.mcs.anl.gov/moab-library/) and pumi (
https://scorec.rpi.edu/pumi/)). We would like to enable non-conrforming AMR functionalities, but none of these 2 backends handle non-conforming meshes... So we are thinking about using the "Triangulation" module of dealii as a new mesh backend which handles non-corforming mesh refinement.
A rather important aspect of our software design is that we can "migrate" cells between processes, either deleting the cells on the source process (for load balancing for instance), or letting them on the source process and importing them as "ghost cells" on the destination process (even if they are not located "near" the boundary of the destination subdomain).
But after a first insight, I feel that it may be not straightforward to add/remove some cells or vertices (on the coarse mesh) "one by one" with dealii's "Triangulations". We mainly use these functionalities within our "migration" processes. I assume that there is an equivalent migration process within dealii to deal with load balancing, and maybe we could use them out of the box. But our "migration as ghosts" process, in which a subdomain can import any cell from the other process as a ghost cell, seems to be less common...
Will it be possible with dealii's "Triangulation" module to:
- either add/remove some cells "one by one",
- or doing such a "migration as ghost" out of the box ?
Thank for helping,
Best regards,
Olivier Jamond