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