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 ForceFree::subcell {
21 :
22 : /*!
23 : * \brief On elements using DG, reconstructs the interface data from a
24 : * neighboring element doing subcell.
25 : *
26 : * The neighbor's packaged data needed by the boundary correction is computed
27 : * and returned so that it can be used for solving the Riemann problem on the
28 : * interfaces.
29 : *
30 : * Note that for strict conservation the Riemann solve should be done on the
31 : * subcells, with the correction being projected back to the DG interface.
32 : * However, in practice such strict conservation doesn't seem to be necessary
33 : * and can be explained by that we only need strict conservation at shocks, and
34 : * if one element is doing DG, then we aren't at a shock.
35 : */
36 1 : struct NeighborPackagedData {
37 0 : static DirectionalIdMap<3, DataVector> apply(
38 : const db::Access& box,
39 : const std::vector<DirectionalId<3>>& mortars_to_reconstruct_to);
40 : };
41 :
42 : } // namespace ForceFree::subcell
|