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/Tensor/TypeAliases.hpp"
9 : #include "Evolution/Systems/ForceFree/Tags.hpp"
10 : #include "Utilities/TMPL.hpp"
11 :
12 : /// \cond
13 : template <typename T>
14 : class Variables;
15 : namespace Tags {
16 : template <typename TagsList>
17 : struct Variables;
18 : } // namespace Tags
19 : /// \endcond
20 :
21 : namespace ForceFree::subcell {
22 : /*!
23 : * \brief Returns \f$\tilde{J}^i\f$, \f$\tilde{E}^i\f$, \f$\tilde{B}^i\f$,
24 : * \f$\tilde{\psi}\f$, \f$\tilde{\phi}\f$ and \f$\tilde{q}\f$ for FD
25 : * reconstruction.
26 : *
27 : * This mutator is passed to
28 : * `evolution::dg::subcell::Actions::SendDataForReconstruction`.
29 : */
30 1 : class GhostVariables {
31 : private:
32 0 : using evolved_vars =
33 : tmpl::list<ForceFree::Tags::TildeE, ForceFree::Tags::TildeB,
34 : ForceFree::Tags::TildePsi, ForceFree::Tags::TildePhi,
35 : ForceFree::Tags::TildeQ>;
36 :
37 : public:
38 : // TildeJ is prepended to evolved_vars in the packed DataVector (see .cpp)
39 0 : using ghost_variables_tag_list =
40 : tmpl::push_front<evolved_vars, ForceFree::Tags::TildeJ>;
41 0 : using return_tags = tmpl::list<>;
42 0 : using argument_tags =
43 : tmpl::list<::Tags::Variables<evolved_vars>, ForceFree::Tags::TildeJ>;
44 :
45 0 : static DataVector apply(
46 : const Variables<evolved_vars>& vars,
47 : const tnsr::I<DataVector, 3, Frame::Inertial>& tilde_j, size_t rdmp_size);
48 : };
49 : } // namespace ForceFree::subcell
|