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 ScalarAdvection::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 :
36 1 : struct NeighborPackagedData {
37 : template <size_t Dim>
38 0 : static DirectionalIdMap<Dim, DataVector> apply(
39 : const db::Access& box,
40 : const std::vector<DirectionalId<Dim>>& mortars_to_reconstruct_to);
41 : };
42 : } // namespace ScalarAdvection::subcell
|