These html pages are based on the PhD thesis "Cluster-Based Parallelization of Simulations on Dynamically Adaptive Grids and Dynamic Resource Management" by Martin Schreiber.

There is also more information and a PDF version available.

There is also more information and a PDF version available.

With DG simulations and their higher-order spatial discretization, the time-stepping method should
be of a similar (higher-)order. To determine the framework requirements, we selected the explicit
Runge-Kutta (RK) method. Considering the demands and algorithms shown in Section 2.14, RK
methods require storing conserved quantities at particular points in time to V _{i} and their
corresponding derivative D_{i}. Computing RK time step updates can then be achieved by additional
stacks S^{V 0} for V _{0} and S^{Di} for D_{i} computed in each stage [BBSV10]. For an explicit RKn method
assuring accuracy up to n-th order with V _{1} := V _{0} due to a_{k,k} = 0, we compute each stage i ∈{1,…,n}
with the following algorithm:

Algorithm: RK time stepping

Before iterating over the RK stages, the cell data S_{f}^{simCellData} at the current time step is copied
to S^{V 0}.

For i in (1,…,n) do:

- (a)
- Compute D
_{i}:= R(V_{i}):

The simulation cell data stack S_{f}^{simCellData}is assumed to be set to V_{i}(see next step), the conserved quantities computed within the current RK stage. The time step-typical computations including edge communications are executed for S_{f}^{simCellData}. However, instead of updating the conserved quantities, only the change of the conserved quantities over time is stored to S_{f}^{simCellData}, yielding D_{i}. - (b)
- Compute V
_{i}:= V_{0}+ Δt∑_{j=1}^{n}a_{i,j}D_{j}:

After the grid traversal, D_{i}is copied to S_{f}^{Di}. Then V_{i}is computed and stored to S_{f}^{simCellData}by iterating over all elements of the stacks associated to V_{0}and D_{j}and applying equation (2.29).

Finally the time step is computed with

Since we use pointers to mark the beginning of the stack for both push and pop operations, it is
not necessary to copy stack data when assigning e.g. V _{0} := U. Instead of copying the entire stack, we
can efficiently swap the stack pointers.