The hierarchical data structures used in AMROC have been derived from the DAGH package by M. Parashar and J.C. Browne. The basic design idea is to represent the hierarchical structure of the adapted mesh within a unique GridHierarchy as a list of rectangles in BBoxList. Utilizing GridUnitList and an implementation of a generalized space-filling curve in PeanoHilbert, the hierarchy is distributed under the paradigm of strict data locality, which means that only partitioning in entities of the root level are permitted. The partioning result is stored in GridBoxList and communicated to all processors. Data is then allocted patch-wise following those GridBoxLists in the GridFunction class that is templatized over the data type and the dimension to enable maximal flexibility in algorithm implementation.
AMROC's hierarchical data structures implement GridFunction and GridHierarchy classes that are much more general and allow a more efficient adoption than those of the original DAGH package. This generality required a complete rewriting of parts of the codes, particular GridFunction, GridDataBlock and GridHierarchy. Various useful features like different refinement factors on each level, multiple periodic boundary conditions, a restart from memory for automatic time-step algorithms based on the CFL-condition and a restart feature for a different number of computing nodes have been added additionally.
Further, deprecated coding solutions, like the utilization of preprocessor commands instead of C++ partial templatization or the avoidance of the Standard Template library for dynamic list handling, have been eliminated completely. A a consequence, the only dimension-specific code is now in the specialized GridData< Type, 1 >, GridData< Type, 2 >, GridData< Type, 3 > classes. A Vector class is provided to allow vector-valued GridFunctions with cache-coherent storage of the entire vector of state that is particular advantageous for explicit methods.