Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <array> 7 : #include <cstddef> 8 : #include <utility> 9 : 10 : #include "Domain/Structure/DirectionalIdMap.hpp" 11 : 12 : /// \cond 13 : class DataVector; 14 : template <typename TagsList> 15 : class Variables; 16 : namespace gsl { 17 : template <typename> 18 : class not_null; 19 : } // namespace gsl 20 : template <size_t Dim> 21 : class Direction; 22 : template <size_t Dim> 23 : class ElementId; 24 : template <size_t Dim> 25 : class Element; 26 : template <size_t Dim> 27 : class Mesh; 28 : namespace EquationsOfState { 29 : template <bool IsRelativistic, size_t ThermodynamicDim> 30 : class EquationOfState; 31 : } // namespace EquationsOfState 32 : namespace evolution::dg::subcell { 33 : class GhostData; 34 : } // namespace evolution::dg::subcell 35 : /// \endcond 36 : 37 : namespace NewtonianEuler::fd { 38 : /*! 39 : * \brief Reconstructs the mass density, velocity, and pressure, then computes 40 : * the specific internal energy and conserved variables. All results are written 41 : * into `vars_on_lower_face` and `vars_on_upper_face`. 42 : */ 43 : template <typename PrimsTags, typename TagsList, size_t Dim, typename F> 44 1 : void reconstruct_prims_work( 45 : gsl::not_null<std::array<Variables<TagsList>, Dim>*> vars_on_lower_face, 46 : gsl::not_null<std::array<Variables<TagsList>, Dim>*> vars_on_upper_face, 47 : const F& reconstruct, const Variables<PrimsTags>& volume_prims, 48 : const EquationsOfState::EquationOfState<false, 2>& eos, 49 : const Element<Dim>& element, 50 : const DirectionalIdMap<Dim, evolution::dg::subcell::GhostData>& ghost_data, 51 : const Mesh<Dim>& subcell_mesh, size_t ghost_zone_size); 52 : 53 : /*! 54 : * \brief Reconstructs the mass density, velocity, and pressure, then computes 55 : * the specific internal energy and conserved variables. All results are written 56 : * into `vars_on_face`. 57 : * 58 : * This is used on DG elements to reconstruct their subcell neighbors' solution 59 : * on the shared faces. 60 : */ 61 : template <typename TagsList, typename PrimsTags, size_t Dim, typename F0, 62 : typename F1> 63 1 : void reconstruct_fd_neighbor_work( 64 : gsl::not_null<Variables<TagsList>*> vars_on_face, 65 : const F0& reconstruct_lower_neighbor, const F1& reconstruct_upper_neighbor, 66 : const Variables<PrimsTags>& subcell_volume_prims, 67 : const EquationsOfState::EquationOfState<false, 2>& eos, 68 : const Element<Dim>& element, 69 : const DirectionalIdMap<Dim, evolution::dg::subcell::GhostData>& ghost_data, 70 : const Mesh<Dim>& subcell_mesh, 71 : const Direction<Dim>& direction_to_reconstruct, size_t ghost_zone_size); 72 : } // namespace NewtonianEuler::fd