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/VariablesTag.hpp"
9 : #include "Evolution/Systems/NewtonianEuler/BoundaryConditions/BoundaryCondition.hpp"
10 : #include "Evolution/Systems/NewtonianEuler/Characteristics.hpp"
11 : #include "Evolution/Systems/NewtonianEuler/ConservativeFromPrimitive.hpp"
12 : #include "Evolution/Systems/NewtonianEuler/PrimitiveFromConservative.hpp"
13 : #include "Evolution/Systems/NewtonianEuler/Tags.hpp"
14 : #include "Evolution/Systems/NewtonianEuler/TimeDerivativeTerms.hpp"
15 : #include "PointwiseFunctions/Hydro/Tags.hpp"
16 : #include "Utilities/TMPL.hpp"
17 :
18 : /// \ingroup EvolutionSystemsGroup
19 : /// \brief Items related to evolving the Newtonian Euler system
20 : namespace NewtonianEuler {
21 :
22 : template <size_t Dim>
23 0 : struct System {
24 0 : static std::string name() { return "NewtonianEuler"; }
25 :
26 0 : static constexpr bool is_in_flux_conservative_form = true;
27 0 : static constexpr bool has_primitive_and_conservative_vars = true;
28 0 : static constexpr size_t volume_dim = Dim;
29 :
30 0 : using boundary_conditions_base = BoundaryConditions::BoundaryCondition<Dim>;
31 :
32 0 : using variables_tag = ::Tags::Variables<tmpl::list<
33 : Tags::MassDensityCons, Tags::MomentumDensity<Dim>, Tags::EnergyDensity>>;
34 0 : using flux_variables =
35 : tmpl::list<Tags::MassDensityCons, Tags::MomentumDensity<Dim>,
36 : Tags::EnergyDensity>;
37 0 : using non_conservative_variables = tmpl::list<>;
38 0 : using gradient_variables = tmpl::list<>;
39 : // Compute item for pressure not currently implemented in SpECTRE,
40 : // so its simple tag is passed along with the primitive variables.
41 0 : using primitive_variables_tag = ::Tags::Variables<
42 : tmpl::list<hydro::Tags::RestMassDensity<DataVector>,
43 : hydro::Tags::SpatialVelocity<DataVector, Dim>,
44 : hydro::Tags::SpecificInternalEnergy<DataVector>,
45 : hydro::Tags::Pressure<DataVector>>>;
46 :
47 0 : using compute_volume_time_derivative_terms = TimeDerivativeTerms<Dim>;
48 :
49 0 : using conservative_from_primitive = ConservativeFromPrimitive<Dim>;
50 0 : using primitive_from_conservative = PrimitiveFromConservative<Dim>;
51 :
52 0 : using compute_largest_characteristic_speed =
53 : Tags::ComputeLargestCharacteristicSpeed<Dim>;
54 : };
55 :
56 : } // namespace NewtonianEuler
|