SAMRAI: Structured Adaptive Mesh Refinement Application Infrastructure


What advantages does the SAMRAI framework provide?

SAMRAI decouples the mesh management, parallel communication, and inter-level data management aspects of AMR from the application’s numerical kernels.  It is a user extensible framework.  SAMRAI is able to interoperate with user defined simulation data and algorithms without having to modify the library.  The library has been demonstrated to be scalable to very large (>105) numbers of processors.  The library is very general and flexible.  For example SAMRAI is dimension independent; it supports arbitrary integer refinement ratios, multiblock grids, and periodic domains.

Is there an introductory document that explains the design of and concepts surrounding SAMRAI?

Yes.  In the user documentation included with the source code there is a fairly extensive discussion of these topics in SAMRAI Concepts and Software Design (pdf)

What is the best way to learn how to use SAMRAI?

The best first introduction is the SAMRAI-Concepts_SoftwareDesign document included in the source code distribution.  In addition, a large number of example problems are included in source/test in the distribution.

I want to use my application’s own data types.  Does SAMRAI need to own the application’s data?

No, SAMRAI does not need to own the application’s data.  We have included a collection of simulation data classes in the library.  However, this does not imply that an application making use of SAMRAI must use them.  These classes exist for 4 reasons–so that the library has a reasonably complete set of data classes that it may use to form tests and examples, to provide application developers examples that will help them to develop their own data classes, for internal use by the library, and because they are general enough that an application may want to use them.  The abstract base class hier::PatchData exists so that applications may develop their own implementations derived from PatchData as wrappers around their own data structures.

Does SAMRAI take control of running my application?

No, SAMRAI does not take control of your application at all.  The library provides some control classes such as time integrators and level integrators.  However, there is no requirement that an application must make use of them.  They exist to complete implementations of SAMRAI abstract base classes so that the library may create complete tests and examples and to provide application developers with examples from which they may pattern their own implementations.  If they suit your application’s needs then these classes may be used directly.  If they don’t suit your needs you may develop whatever control logic your application requires.

Are there any references that I can quote?

The SAMRAI concepts and design document previously mentioned contains a list of references relating to both SAMRAI specifically and SAMR in general.

How widely used is SAMRAI?

SAMRAI has an active community of users.  It is particularly widely used in the IBAMR community.  Someone downloads the code almost daily.  In addition, the library is an integral component of applications here at LLNL.

How can I contact the SAMRAI team?

You may send your questions to