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