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/DataBox/Prefixes.hpp"
9 : #include "DataStructures/Tensor/TypeAliases.hpp" // IWYU pragma: keep
10 : #include "Evolution/Systems/RelativisticEuler/Valencia/TagsDeclarations.hpp"
11 : #include "PointwiseFunctions/GeneralRelativity/TagsDeclarations.hpp"
12 : #include "PointwiseFunctions/Hydro/TagsDeclarations.hpp"
13 : #include "Utilities/TMPL.hpp"
14 :
15 : /// \cond
16 : namespace gsl {
17 : template <typename T>
18 : class not_null;
19 : } // namespace gsl
20 :
21 : class DataVector;
22 : /// \endcond
23 :
24 : // IWYU pragma: no_forward_declare Tensor
25 :
26 : namespace RelativisticEuler {
27 : namespace Valencia {
28 :
29 : /*!
30 : * \brief The fluxes of the conservative variables
31 : *
32 : * \f{align*}
33 : * F^i({\tilde D}) = &~ {\tilde D} v^i_{tr} \\
34 : * F^i({\tilde S}_j) = &~ {\tilde S}_j v^i_{tr} + \sqrt{\gamma} \alpha p
35 : * \delta^i_j \\
36 : * F^i({\tilde \tau}) = &~ {\tilde \tau} v^i_{tr} + \sqrt{\gamma} \alpha p v^i
37 : * \f}
38 : * where the conservative variables \f${\tilde D}\f$, \f${\tilde S}_i\f$, and
39 : * \f${\tilde \tau}\f$ are a generalized mass-energy density, momentum density,
40 : * and specific internal energy density as measured by an Eulerian observer,
41 : * \f$v^i_{tr} = \alpha v^i - \beta^i\f$ is the transport velocity, \f$\alpha\f$
42 : * is the lapse, \f$\beta^i\f$ is the shift, \f$v^i\f$ is the spatial velocity,
43 : * \f$\gamma\f$ is the determinant of the spatial metric, and \f$p\f$ is the
44 : * pressure.
45 : */
46 : template <size_t Dim>
47 1 : struct ComputeFluxes {
48 0 : using return_tags =
49 : tmpl::list<::Tags::Flux<RelativisticEuler::Valencia::Tags::TildeD,
50 : tmpl::size_t<Dim>, Frame::Inertial>,
51 : ::Tags::Flux<RelativisticEuler::Valencia::Tags::TildeTau,
52 : tmpl::size_t<Dim>, Frame::Inertial>,
53 : ::Tags::Flux<RelativisticEuler::Valencia::Tags::TildeS<Dim>,
54 : tmpl::size_t<Dim>, Frame::Inertial>>;
55 :
56 0 : using argument_tags =
57 : tmpl::list<RelativisticEuler::Valencia::Tags::TildeD,
58 : RelativisticEuler::Valencia::Tags::TildeTau,
59 : RelativisticEuler::Valencia::Tags::TildeS<Dim>,
60 : gr::Tags::Lapse<DataVector>, gr::Tags::Shift<DataVector, Dim>,
61 : gr::Tags::SqrtDetSpatialMetric<DataVector>,
62 : hydro::Tags::Pressure<DataVector>,
63 : hydro::Tags::SpatialVelocity<DataVector, Dim>>;
64 :
65 0 : static void apply(
66 : gsl::not_null<tnsr::I<DataVector, Dim, Frame::Inertial>*> tilde_d_flux,
67 : gsl::not_null<tnsr::I<DataVector, Dim, Frame::Inertial>*> tilde_tau_flux,
68 : gsl::not_null<tnsr::Ij<DataVector, Dim, Frame::Inertial>*> tilde_s_flux,
69 : const Scalar<DataVector>& tilde_d, const Scalar<DataVector>& tilde_tau,
70 : const tnsr::i<DataVector, Dim, Frame::Inertial>& tilde_s,
71 : const Scalar<DataVector>& lapse,
72 : const tnsr::I<DataVector, Dim, Frame::Inertial>& shift,
73 : const Scalar<DataVector>& sqrt_det_spatial_metric,
74 : const Scalar<DataVector>& pressure,
75 : const tnsr::I<DataVector, Dim, Frame::Inertial>& spatial_velocity);
76 : };
77 : } // namespace Valencia
78 : } // namespace RelativisticEuler
|