Amr Source Code
The source code in amrex/Src/Amr
contains a number of classes, most notably
Amr
, AmrLevel
, and LevelBld
.
These classes provide a more well developed set of tools for writing AMR codes
than the classes created for the Advection_AmrCore tutorial.
The
Amr
class is derived fromAmrCore
, and manages data across the entire AMR hierarchy of grids.The
AmrLevel
class is a pure virtual class for managing data at a single level of refinement.The
LevelBld
class is a pure virtual class for defining variable types and attributes.
Many of our mature, public application codes contain derived classes that
inherit directly from AmrLevel
. These include:
The
Castro
class in our compressible astrophysics code, CASTRO, (available in the AMReX-Astro/Castro github repository)The
Nyx
class in our computational cosmology code, Nyx (available in the AMReX-Astro/Nyx github repository).Our incompressible Navier-Stokes code, IAMR (available in the AMReX-codes/IAMR github repository) has a pure virtual class called
NavierStokesBase
that inherits fromAmrLevel
, and an additional derived classNavierStokes
.Our low Mach number combustion code PeleLM (available in the AMReX-Combustion/PeleLM github repository) contains a derived class
PeleLM
that also inherits fromNavierStokesBase
(but does not useNavierStokes
).
The tutorial code in amrex-tutorials/ExampleCodes/Amr/Advection_AmrLevel
gives a simple
example of a class derived from AmrLevel
that can be used to solve the
advection equation on a subcycling-in-time AMR hierarchy. Note that example is
essentially the same as the Advection AmrCore tutorial and
documentation in the chapter on AmrCore Source Code, except now we use the
provided libraries in amrex/Src/Amr
.
The tutorial code also contains a LevelBldAdv
class (derived from
LevelBld
in the Source/Amr directory). This class is used to define
variable types (how many, nodality, interlevel interpolation stencils, etc.).