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
|