Why Block-Structured AMR?
Block-structured AMR provides a way to exploit varying resolution requirements
in space and time by focusing computational resources in spatiotemporal
regions of interest. Note that there is no parent-child relationship between
coarser grids and finer grids as the grid structure dynamically evolves
over time.
Depicted above is a Kelvin-Helmholtz instability using 3 total levels of
refinement generated
by the publicly available
IAMR code
(available
HERE)
for solving the variable-density incompressible Navier-Stokes equations.
AMReX provides data structures and iterators for performing
data-parallel particle simulations. Our approach is particularly
suited to particles that interact with data defined on a
(possibly adaptive) block-structured hierarchy of meshes. Example
applications include Particle-in-Cell (PIC) simulations, Lagrangian
tracers, or particles that exert drag forces onto a fluid, such as
in multi-phase flow calculations.
Depicted above is granular material color coded according
to their speed, falling into a bucket. This simulation was performed
with the
MFiX-Exa code developed by NETL, LBNL, and University
of Colorado.
For computations with complex geometries, AMReX provides data structures
and algorithms to employ an embedded boundary (EB) approach to PDE
discretizations. In this approach, the underlying computational mesh
is uniform and block-structured, but the boundary of the irregular-shaped
computational domain conceptually cuts through this mesh.
Depicted above is a compressible high speed swirling jet conducted
using the
PeleC simulation code created by NREL & LBNL with
the support of the Exascale Computing Project. Isosurface shows
velocity magnitude.
AMReX-based application codes can be instrumented using AMReX-specific performance profiling tools that take into account the hierarchical nature of the mesh in most AMReX-based applications. These codes can be instrumented for varying levels of profiling detail.
Depicted above is a sample output of the
ProfParser tool, a
command line application that can create performance summaries,
plotfiles showing point to point communication and timelines,
HTML call trees, communication call statistics, function timing
graphs, and other data products. Read more in the
Documentation.