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 "DataStructures/VariablesTag.hpp"
10 : #include "Domain/Tags.hpp"
11 : #include "Evolution/DgSubcell/Tags/DidRollback.hpp"
12 : #include "Evolution/DgSubcell/Tags/Mesh.hpp"
13 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/PrimitiveFromConservativeOptions.hpp"
14 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/Tags.hpp"
15 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
16 : #include "PointwiseFunctions/Hydro/Tags.hpp"
17 : #include "Utilities/TMPL.hpp"
18 :
19 : /// \cond
20 : class DataVector;
21 : namespace EquationsOfState {
22 : template <bool IsRelativistic, size_t ThermodynamicDim>
23 : class EquationOfState;
24 : } // namespace EquationsOfState
25 : template <size_t Dim>
26 : class Mesh;
27 : namespace gsl {
28 : template <typename T>
29 : class not_null;
30 : } // namespace gsl
31 : /// \endcond
32 :
33 : namespace grmhd::GhValenciaDivClean::subcell {
34 : /*!
35 : * \brief Mutator that resizes the primitive variables to the subcell mesh and
36 : * computes the primitives, but only if
37 : * `evolution::dg::subcell::Tags::DidRollback` is `true`.
38 : *
39 : * In the DG-subcell `step_actions` list this will normally be called using the
40 : * `::Actions::MutateApply` action in the following way in the action list:
41 : * - `Actions::Label<Labels::BeginSubcellAfterDgRollback>`
42 : * - `Actions::MutateApply<PrimsAfterRollback<primitive_recovery_schemes>>`
43 : */
44 : template <typename OrderedListOfRecoverySchemes>
45 1 : struct PrimsAfterRollback {
46 0 : using return_tags =
47 : tmpl::list<::Tags::Variables<hydro::grmhd_tags<DataVector>>>;
48 0 : using argument_tags = tmpl::list<
49 : evolution::dg::subcell::Tags::DidRollback, domain::Tags::Mesh<3>,
50 : evolution::dg::subcell::Tags::Mesh<3>,
51 : grmhd::ValenciaDivClean::Tags::TildeD,
52 : grmhd::ValenciaDivClean::Tags::TildeYe,
53 : grmhd::ValenciaDivClean::Tags::TildeTau,
54 : grmhd::ValenciaDivClean::Tags::TildeS<>,
55 : grmhd::ValenciaDivClean::Tags::TildeB<>,
56 : grmhd::ValenciaDivClean::Tags::TildePhi,
57 : gr::Tags::SpacetimeMetric<DataVector, 3>,
58 : hydro::Tags::GrmhdEquationOfState,
59 : grmhd::ValenciaDivClean::Tags::PrimitiveFromConservativeOptions>;
60 :
61 0 : static void apply(
62 : gsl::not_null<Variables<hydro::grmhd_tags<DataVector>>*> prim_vars,
63 : bool did_rollback, const Mesh<3>& dg_mesh, const Mesh<3>& subcell_mesh,
64 : const Scalar<DataVector>& tilde_d, const Scalar<DataVector>& tilde_ye,
65 : const Scalar<DataVector>& tilde_tau,
66 : const tnsr::i<DataVector, 3, Frame::Inertial>& tilde_s,
67 : const tnsr::I<DataVector, 3, Frame::Inertial>& tilde_b,
68 : const Scalar<DataVector>& tilde_phi,
69 : const tnsr::aa<DataVector, 3, Frame::Inertial>& spacetime_metric,
70 : const EquationsOfState::EquationOfState<true, 3>& eos,
71 : const grmhd::ValenciaDivClean::PrimitiveFromConservativeOptions&
72 : primitive_from_conservative_options);
73 : };
74 : } // namespace grmhd::GhValenciaDivClean::subcell
|