Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <cstddef>
7 : #include <vector>
8 :
9 : /// \cond
10 : namespace db {
11 : class Access;
12 : } // namespace db
13 : class DataVector;
14 : template <size_t VolumeDim>
15 : struct DirectionalId;
16 : template <size_t Dim, typename T>
17 : class DirectionalIdMap;
18 : /// \endcond
19 :
20 : namespace grmhd::ValenciaDivClean::subcell {
21 : /*!
22 : * \brief On elements using DG, reconstructs the interface data from a
23 : * neighboring element doing subcell.
24 : *
25 : * The neighbor's packaged data needed by the boundary correction is computed
26 : * and returned so that it can be used for solving the Riemann problem on the
27 : * interfaces.
28 : *
29 : * Note that for strict conservation the Riemann solve should be done on the
30 : * subcells, with the correction being projected back to the DG interface.
31 : * However, in practice such strict conservation doesn't seem to be necessary
32 : * and can be explained by that we only need strict conservation at shocks, and
33 : * if one element is doing DG, then we aren't at a shock.
34 : */
35 1 : struct NeighborPackagedData {
36 0 : static DirectionalIdMap<3, DataVector> apply(
37 : const db::Access& box,
38 : const std::vector<DirectionalId<3>>& mortars_to_reconstruct_to);
39 : };
40 : } // namespace grmhd::ValenciaDivClean::subcell
|