Introduction
AMReX-Hydro is set of routines that support the construction of convective terms for incompressible and low Mach number flow modeling in cartesian coordinates with (or without) embedded boundaries and R-Z coordinate systems. It is not a stand-alone code, but is used in several application codes, such as incflo (a variable density incompressible Navier-Stokes solver with adaptive mesh refinement (AMR)), IAMR (a variable density incompressible Navier-Stokes solver with time subcycling AMR), and MFIX-Exa (a multiphase computational fluid dynamics modeling tool).
In application codes, the general procedure for constructing convective terms from cell-centered data is as follows:
Construct values of the normal velocity at the centroid on each cell face using chosen advection scheme
MAC-project this face-based velocity field
Use MAC-projected velocities to help construct values on faces
Define fluxes on faces
Difference fluxes to create the convective term.
AMReX-Hydro provides routines to support all of these steps. Here we group the AMReX-Hydro routines into a few general categories and map them to the step(s) they address:
Advection schemes: the fundamental algorithm is either a Method-of-Lines (MOL) or Godunov approach (used in steps 1 and 3).
Projection Methods frameworks:
MAC Projection - enforces a divergence condition on an edge-based velocity field (used in step 2).
Nodal Projection - can be used to compute an approximate projection of a cell-centered velocity field, with pressure and velocity divergence defined on nodes (not generally used as part of computing the convective term, but used in application codes to define a cell-centered velocity update that approximately obeys a divergence constraint).
Redistribution:Redistribution schemes: to address the “small cell problem” associated with explicit cut cell algorithms (part of step 4 for problems with embedded boundaries).
Helper functions: to do things like compute slopes, create fluxes from face-centered values, and create the convective term from fluxes (used in all but step 2).