9 #include "DataStructures/DataBox/Tag.hpp"
11 #include "Evolution/Systems/NewtonianEuler/TagsDeclarations.hpp"
33 gsl::not_null<tnsr::I<DataVector, Dim>*> mass_density_cons_flux,
34 gsl::not_null<tnsr::IJ<DataVector, Dim>*> momentum_density_flux,
37 const tnsr::I<DataVector, Dim>& momentum_density,
39 const tnsr::I<DataVector, Dim>& velocity,
47 template <
size_t Dim,
typename InitialDataType>
54 using SourceTerm =
typename InitialDataType::source_term_type;
55 using argument_tags_flux =
60 using temporary_tags = tmpl::list<EnthalpyDensity>;
61 using argument_tags = tmpl::append<
63 tmpl::conditional_t<std::is_same_v<SourceTerm, Sources::NoSource>,
68 template <
typename... SourceTermArgs>
74 non_flux_terms_dt_momentum_density,
79 const gsl::not_null<tnsr::I<DataVector, Dim>*> mass_density_cons_flux,
80 const gsl::not_null<tnsr::IJ<DataVector, Dim>*> momentum_density_flux,
81 const gsl::not_null<tnsr::I<DataVector, Dim>*> energy_density_flux,
87 const tnsr::I<DataVector, Dim>& momentum_density,
89 const tnsr::I<DataVector, Dim>& velocity,
91 const SourceTermArgs&... source_term_args) noexcept {
92 detail::fluxes_impl(mass_density_cons_flux, momentum_density_flux,
93 energy_density_flux, enthalpy_density, momentum_density,
94 energy_density, velocity, pressure);
95 if constexpr (not std::is_same_v<SourceTerm, Sources::NoSource>) {
97 std::make_tuple(non_flux_terms_dt_mass_density,
98 non_flux_terms_dt_momentum_density,
99 non_flux_terms_dt_energy_density),
100 typename InitialDataType::source_term_type::sourced_variables{},
101 source, source_term_args...);
112 tnsr::I<DataVector, Dim>*> ,
118 const gsl::not_null<tnsr::I<DataVector, Dim>*> mass_density_cons_flux,
119 const gsl::not_null<tnsr::IJ<DataVector, Dim>*> momentum_density_flux,
120 const gsl::not_null<tnsr::I<DataVector, Dim>*> energy_density_flux,
126 const tnsr::I<DataVector, Dim>& momentum_density,
128 const tnsr::I<DataVector, Dim>& velocity,
130 detail::fluxes_impl(mass_density_cons_flux, momentum_density_flux,
131 energy_density_flux, enthalpy_density, momentum_density,
132 energy_density, velocity, pressure);
136 using non_flux_terms_dt_vars_list =
137 tmpl::list<Tags::MassDensityCons, Tags::MomentumDensity<Dim>,
140 template <
typename... SourceTermArgs,
typename... SourcedVars>
144 non_flux_terms_dt_vars,
145 tmpl::list<SourcedVars...> ,
146 const SourceTerm& source,
147 const SourceTermArgs&... source_term_args) noexcept {
150 tmpl::index_of<non_flux_terms_dt_vars_list, SourcedVars>::value>(
151 non_flux_terms_dt_vars)...,
152 source_term_args...);