AMR - Adaptive Mesh Refinement Framework

Hierarchical Indexing of Quad Tree for AMR

Adaptive Mesh Refinement, AMR, is a technique used to efficiently solve partial differential equations and such applications for structured grids. Solutions without AMR are less efficient, because all the mesh is evenly refined, rather than refining only the most interesting parts as in AMR, thus wasting a lot of computer resources in the process. The nature of the problems for which AMR is used is such that the mesh is required to adapt at the runtime in the areas where most of the small scale phenomenon occur. Though the potential of savings is a lot in AMR, it is not as frequently used as it should be because of the complexity of implementation. Moreover, parallelizing the AMR application presents significant challenges to the engineering user. Thus the motivation for a parallel library which will abstract details from the user about the parallel data structures and gives them a cleaner interface to work with.

Typically an AMR application is composed of four integral parts:
  • Error Estimation Funcion to determine when to refine
  • Domain Decomposition to determine the size of the grids at each level
  • Parallel data structure + data distribution over processors
  • Data communication
This library tries to abstract away the latter two parts from the user, so they do not have to worry as to how to implement the parallel data structure to represent the mesh and deal with the refinements in the data structure. Also, because of the parallel implementation, load balancing becomes significant which the library deals with internally. The library also abstracts away how the data communication is taking place, hence the user's task is simplified. So the user is required to identify what needs to be communicated and then defer the actual details of communication to the library.

This library is written in Charm++ because it provides an arbitrarily indexed sparse array implementation, which can be dynamically load balanced using the techniques already implemented in the system. The library, at this time, supports 1D, 2D and 3D AMR meshes. The user code is comprised of implementing the user data structure class, which can have any arbitrary data structure until it implements all the functions required by the library.
An Optimal Distributed Load Balancing Algorithm for Homogeneous Work Units [ICS 2014]
Scalable Algorithms for Distributed-Memory Adaptive Mesh Refinement [SBAC-PAD 2012]
Scalable Algorithms for Distributed-Memory Adaptive Mesh Refinement [SBAC-PAD 2012]
Parallel Simulations of Dynamic Fracture Using Extrinsic Cohesive Elements [J. Sci. Comp. 2009]