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