# Adaptive Mesh Refinement

The research areas span a wide array of topics in computer science and applied mathematics with applications to scientific problems.

Due to the large size of many application problems, it is infeasible to solve the entire problem on a uniform grid that is fine enough to achieve the desired accuracy. For this reason, the code incorporates the ability to perform adaptive mesh refinement (AMR). Specifically, it uses what we will call “Tile-based AMR”, which will be explained in more detail below. In addition, the code also incorporates the ability to coarsen, which is critical in hydrodynamics shock problems in order to coarsen a portion of the grid once the shock has passed.

### Tile-based AMR

The Tile-based AMR being used is similar to the work being done at The University of Michigan (which they refer to as adaptive block AMR). “Block-based AMR” is fairly common terminology that appears to apply to most forms of AMR and is often intermixed with “Patch-based AMR” in the literature. The refinement used is distinct from patch-based AMR introduced by Berger, so, in order to avoid any confusion, we use the term “Tile-based AMR”.

Tile-based AMR is a type of AMR where the entire grid is represented as the combination of numerous, non-overlapping, fixed-size tiles. In this form of AMR, an entire tile is refined; individual cells are never solely refined. When a tile is refined, 4 new tiles are created (2D) or 8 new tiles are created (3D). Each tile stores “ghost cells” containing the necessary values from its neighbors that it needs in order to perform the computations required by the solver

### AMR Strategies

Numerous strategies to determine whether to refine or coarsen a given patch are available in the code. These are based off a variety of problem values.

One set of strategies determines whether to refine/coarsen/neither based on the norm of the gradients of either density or pressure. This is used as a high gradient will occur in an area where a shock occurs, where ideally the computed solution should have fine resolution. The maximum value for any cell in a given tile determines whether or not the tile should be refined. This can be compared to either strict tolerance levels or some tolerances determined by preset fractions of the maximum value for any tile. Each has its merits: the strict tolerance levels must be set initially, but are purely local whereas the fraction of the maximum value is easier to set initially, but requires global knowledge.

The second strategy is based on the finite element error estimator introduced by Lohner(1987) and used by FLASH. It gives an approximation of the error in a given cell based off normalizing finite difference approximations to the 2^{nd} derivatives by averages of the gradients in the cell with an added filter to prevent refining in regions of small ripples. The error for the tile is taken to be the maximum error of any of the cells in the tile. This error estimator has the advantage that it is purely local. It also has the advantage that it is bounded between 0 and 1, making it easier to specify the tolerances.

### Multi-time Stepping

Adaptive mesh refinement can be, and is often, run with a single uniform time step. However, this does not fully exploit the maximum reduction in computation as the time step required for stability is typically driven by most refined level. Typically, however, the tiles with larger cell sizes could take much larger time steps than the tiles containing smaller cells. Therefore, in order to fully exploit the adaptive mesh refinement, we plan to also implement adaptive mesh refinement with multi-time stepping.

Initial Grid

Refined Grid

(around shock after a few time steps)