Welcome to AMReX's Technical Reference
This document provide searchable low-level information useful for developers and experienced users.
Overview
AMReX is a software framework containing all the functionality to write massively parallel, block-structured adaptive mesh refinement (AMR) applications. AMReX is freely available on Github at AMReX-Codes/amrex.
AMReX is a project of the High Performance Software Foundation (HPSF), which is part of the nonprofit Linux Foundation.
Development
All of AMReX’s development is done in the github repository under the development branch; anyone can see the latest updates. A monthly release is tagged at the beginning of each month.
Contribute
We are always happy to have users contribute to the AMReX source code. To contribute, issue a pull request against the development branch (details here). Any level of changes are welcomed: documentation, bug fixes, new test problems, new solvers, etc. To obtain help, simply post a discussion or an issue on the AMReX GitHub webpage.
Tutorials for New Users
There are small stand-alone example codes that demonstrate how to use different parts of the AMReX functionality. The source code for these tutorials can be found at AMReX Tutorials. Accompanying documentation for these tutorial codes is at Tutorials Documentation.
AMReX Explained
For users who are starting out on their own development, additional documentation is provided at AMReX Source Documentation. In these docs you will find a thorough introduction and discussion of AMReX features.
- Note
- AMReX supports one-, two-, and three-dimensional applications. This technical reference is generated with
AMREX_SPACEDIM = 3, and therefore for dimension-dependent types only three-dimensional instantiations are shown.
API Topics
Below is a list of major API topics:
- Arithmetic Types This topic covers fundamental scalar arithmetic types used throughout AMReX, including amrex::Real, amrex::Long, and amrex::GpuComplex.
- Integer Index Space This topic covers integer index space types, including amrex::IndexType, amrex::IntVect and amrex::Box, as well as operations such as amrex::refine and amrex::coarsen.
- Real Space This topic covers real space coordinate types and operations, including amrex::RealVect, amrex::RealBox, amrex::Geometry.
- Domain Decomposition This topic covers domain decomposition and distribution, including amrex::BoxArray and amrex::DistributionMapping.
- Memory Arenas and Allocators This topic covers memory arenas and allocatros in AMReX.
- Data Containers This topic covers AMReX data containers, from linear containers such as amrex::Vector to box-based and distributed field data containers such as amrex::MultiFab.
- Execution and Kernel Launch This topic covers performance-portable execution and kernel launch interfaces including various amrex::ParallelFor functions.
- Reductions and Scans This topic covers performance-portable reductions and scans, including amrex::Reduce::Sum and amrex::Scan::PrefixSum.
- MPI Communication This topic covers MPI based communication capabilities in AMReX.
- Adaptive Mesh Refinement This topic covers adaptive mesh refinement (AMR) interfaces, including both AmrCore-based AMR and AmrLevel-based AMR approaches.
- Linear System Solvers This topic covers linear system solver interfaces in AMReX, including amrex::MLMG and amrex::GMRES.
- Particles This topic covers particle data structures in AMReX.
- Embedded Boundary This topic covers the embedded boundary capabilities in AMReX, including geometry generation, EB data structures and solvers
- Fast Fourier Transform (FFT) This topic covers parallel Fast Fourier Transform (FFT) interfaces in AMReX, including FFT operations and FFT-based solvers.
- Input/Output This topic covers I/O interfaces in AMReX.
- Utilities This topic covers utility interfaces, including runtime parameters (amrex::ParmParse), math expression parsing (amrex::Parser), and random number generation (amrex::Random).