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
|