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/Tag.hpp"
9 : #include "DataStructures/Tensor/TypeAliases.hpp"
10 : #include "PointwiseFunctions/Hydro/TagsDeclarations.hpp"
11 : #include "Utilities/Gsl.hpp"
12 : #include "Utilities/TMPL.hpp"
13 :
14 : /// \cond
15 : namespace EquationsOfState {
16 : template <bool IsRelativistic, size_t ThermodynamicDim>
17 : class EquationOfState;
18 : } // namespace EquationsOfState
19 : /// \endcond
20 :
21 : namespace hydro {
22 : /// @{
23 : /*!
24 : * \ingroup EquationsOfStateGroup
25 : * \brief Computes the relativistic sound speed squared
26 : *
27 : * The relativistic sound speed squared is given by
28 : * \f$c_s^2 = \left(\chi + p\kappa / \rho^2\right)/h\f$, where
29 : * \f$p\f$ is the fluid pressure, \f$\rho\f$ is the rest mass density,
30 : * \f$h = 1 + \epsilon + p / \rho\f$ is the specific enthalpy
31 : * \f$\chi = (\partial p/\partial\rho)_\epsilon\f$ and
32 : * \f$\kappa = (\partial p/ \partial \epsilon)_\rho\f$, where
33 : * \f$\epsilon\f$ is the specific internal energy.
34 : */
35 : template <typename DataType, size_t ThermodynamicDim>
36 1 : void sound_speed_squared(
37 : gsl::not_null<Scalar<DataType>*> result,
38 : const Scalar<DataType>& rest_mass_density,
39 : const Scalar<DataType>& specific_internal_energy,
40 : const Scalar<DataType>& specific_enthalpy,
41 : const EquationsOfState::EquationOfState<true, ThermodynamicDim>&
42 : equation_of_state);
43 :
44 : template <typename DataType, size_t ThermodynamicDim>
45 1 : Scalar<DataType> sound_speed_squared(
46 : const Scalar<DataType>& rest_mass_density,
47 : const Scalar<DataType>& specific_internal_energy,
48 : const Scalar<DataType>& specific_enthalpy,
49 : const EquationsOfState::EquationOfState<true, ThermodynamicDim>&
50 : equation_of_state);
51 : /// @}
52 :
53 : namespace Tags {
54 : /// Compute item for the sound speed squared \f$c_s^2\f$.
55 : /// \see hydro::sound_speed_squared
56 : ///
57 : /// Can be retrieved using `hydro::Tags::SoundSpeedSquared`
58 : template <typename DataType, bool IsRelativistic, size_t ThermoDim>
59 1 : struct SoundSpeedSquaredCompute : SoundSpeedSquared<DataType>, db::ComputeTag {
60 0 : using argument_tags = typename tmpl::list<
61 : RestMassDensity<DataType>, SpecificInternalEnergy<DataType>,
62 : SpecificEnthalpy<DataType>,
63 : hydro::Tags::EquationOfState<IsRelativistic, ThermoDim>>;
64 :
65 0 : using return_type = Scalar<DataType>;
66 :
67 : template <typename EquationOfStateType>
68 0 : static void function(const gsl::not_null<Scalar<DataType>*> result,
69 : const Scalar<DataType>& rest_mass_density,
70 : const Scalar<DataType>& specific_internal_energy,
71 : const Scalar<DataType>& specific_enthalpy,
72 : const EquationOfStateType& equation_of_state) {
73 : sound_speed_squared(result, rest_mass_density, specific_internal_energy,
74 : specific_enthalpy, equation_of_state);
75 : }
76 :
77 0 : using base = SoundSpeedSquared<DataType>;
78 : };
79 : } // namespace Tags
80 : } // namespace hydro
|