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/GrMhd/ValenciaDivClean/FixConservatives.hpp" 10 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/PrimitiveFromConservativeOptions.hpp" 11 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/System.hpp" 12 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/Tags.hpp" 13 : #include "Evolution/VariableFixing/Tags.hpp" 14 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp" 15 : #include "PointwiseFunctions/Hydro/Tags.hpp" 16 : #include "Utilities/TMPL.hpp" 17 : 18 : /// \cond 19 : class DataVector; 20 : namespace EquationsOfState { 21 : template <bool IsRelativistic, size_t ThermodynamicDim> 22 : class EquationOfState; 23 : } // namespace EquationsOfState 24 : namespace gsl { 25 : template <typename T> 26 : class not_null; 27 : } // namespace gsl 28 : template <typename TagsList> 29 : class Variables; 30 : /// \endcond 31 : 32 : namespace grmhd::ValenciaDivClean::subcell { 33 : /*! 34 : * \brief Fix the conservative variables and compute the primitive variables. 35 : * 36 : * Sets `ValenciaDivClean::Tags::VariablesNeededFixing` to `true` if the 37 : * conservative variables needed fixing, otherwise sets the tag to `false`. 38 : */ 39 : template <typename OrderedListOfRecoverySchemes> 40 1 : struct FixConservativesAndComputePrims { 41 0 : using return_tags = tmpl::list<ValenciaDivClean::Tags::VariablesNeededFixing, 42 : typename System::variables_tag, 43 : typename System::primitive_variables_tag>; 44 0 : using argument_tags = tmpl::list< 45 : ::Tags::VariableFixer<grmhd::ValenciaDivClean::FixConservatives>, 46 : hydro::Tags::GrmhdEquationOfState, gr::Tags::SpatialMetric<DataVector, 3>, 47 : gr::Tags::InverseSpatialMetric<DataVector, 3>, 48 : gr::Tags::SqrtDetSpatialMetric<DataVector>, 49 : grmhd::ValenciaDivClean::Tags::PrimitiveFromConservativeOptions>; 50 : 51 0 : static void apply( 52 : gsl::not_null<bool*> needed_fixing, 53 : gsl::not_null<typename System::variables_tag::type*> conserved_vars_ptr, 54 : gsl::not_null<Variables<hydro::grmhd_tags<DataVector>>*> 55 : primitive_vars_ptr, 56 : const grmhd::ValenciaDivClean::FixConservatives& fix_conservatives, 57 : const EquationsOfState::EquationOfState<true, 3>& eos, 58 : const tnsr::ii<DataVector, 3, Frame::Inertial>& spatial_metric, 59 : const tnsr::II<DataVector, 3, Frame::Inertial>& inv_spatial_metric, 60 : const Scalar<DataVector>& sqrt_det_spatial_metric, 61 : const grmhd::ValenciaDivClean::PrimitiveFromConservativeOptions& 62 : primitive_from_conservative_options); 63 : }; 64 : } // namespace grmhd::ValenciaDivClean::subcell