In many problems in partial differential equations, one is confronted with problems having multiple length scales and strong spatial localizations. Examples include nonlinear systems of hyperbolic partial differential equations containing complex combinations of discontinuities and smooth flow. Also included are combustion problems in which, at any given instant, burning is taking place in a small subset of the problem domain and problems with complex geometries in which localized geometric features can generate strong, localized solution gradients. Finite difference calculation using block-structured adaptive mesh refinement (AMR) is a powerful tool for computing solutions to partial differential equations involving such multiple scales. In this approach, the underlying problem domain is discretized using a rectangular grid and a solution is computed on that grid. Regions requiring additional resolution are identified by computing some local measure of the original error and covered by a disjoint union of rectangles in the domain, which are then refined by some integer factor. The solution is then computed on the composite grid. This process may be applied recursively, and for time-dependent problems, the error estimation and regridding can be integrated with the time evolution and refinement applied in time as well as in space.
Advantages and disadvantages of block-structured AMR
- In a solution space where there are widely varying spatial and temporal scales one can
- Put more grid where the solution is more interesting.
- Leave the solution coarse where the solution is not interesting.
- Can save an order of magnitude in memory.
- Can save an order of magnitude in run time.
- Numerical accuracy improves with more grid where gradients are strongest.
- Being block-structured allows Fortran to be used for array operations.
- Overhead involved involved in coarse-fine interactions can be amortized over larger array calculations.
- Numerical accuracy is improved if the coarse-fine interface is kept to a codimension smaller than the solution.
- Communication patterns between levels can be complex.
- Algorithm complexity can be substantial.