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 :
8 : #include "DataStructures/VariablesTag.hpp"
9 : #include "PointwiseFunctions/Hydro/Tags.hpp"
10 : #include "Utilities/TMPL.hpp"
11 :
12 : /// \cond
13 : template <typename TagsList>
14 : class Variables;
15 : /// \endcond
16 :
17 : namespace NewtonianEuler::subcell {
18 : /*!
19 : * \brief Computes the mass density, velocity, and pressure on the subcells so
20 : * they can be sent to the neighbors for their reconstructions.
21 : *
22 : * The computation just copies the data from the primitive variables tag to a
23 : * new Variables (the copy is subcell grid to subcell grid). In the future we
24 : * will likely want to elide this copy but that requires support from the
25 : * actions.
26 : *
27 : * This mutator is passed to
28 : * `evolution::dg::subcell::Actions::SendDataForReconstruction`.
29 : */
30 : template <size_t Dim>
31 1 : class PrimitiveGhostVariables {
32 : private:
33 0 : using MassDensity = hydro::Tags::RestMassDensity<DataVector>;
34 0 : using Velocity = hydro::Tags::SpatialVelocity<DataVector, Dim>;
35 0 : using SpecificInternalEnergy =
36 : hydro::Tags::SpecificInternalEnergy<DataVector>;
37 0 : using Pressure = hydro::Tags::Pressure<DataVector>;
38 :
39 0 : using prim_tags =
40 : tmpl::list<MassDensity, Velocity, SpecificInternalEnergy, Pressure>;
41 0 : using prims_to_reconstruct_tags = tmpl::list<MassDensity, Velocity, Pressure>;
42 :
43 : public:
44 0 : using ghost_variables_tag_list = prims_to_reconstruct_tags;
45 0 : using return_tags = tmpl::list<>;
46 0 : using argument_tags = tmpl::list<::Tags::Variables<prim_tags>>;
47 :
48 0 : static DataVector apply(const Variables<prim_tags>& prims, size_t rdmp_size);
49 : };
50 : } // namespace NewtonianEuler::subcell
|