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/Tags.hpp"
11 : #include "PointwiseFunctions/Hydro/TagsDeclarations.hpp"
12 : #include "Utilities/Gsl.hpp"
13 : #include "Utilities/TMPL.hpp"
14 :
15 : /// \cond
16 : namespace EquationsOfState {
17 : template <bool IsRelativistic, size_t ThermodynamicDim>
18 : class EquationOfState;
19 : } // namespace EquationsOfState
20 : /// \endcond
21 :
22 : namespace hydro {
23 : /// @{
24 : /*!
25 : * \ingroup EquationsOfStateGroup
26 : * \brief Computes the specific entropy
27 : */
28 : template <typename DataType, size_t ThermodynamicDim>
29 1 : void specific_entropy(
30 : gsl::not_null<Scalar<DataType>*> result,
31 : const Scalar<DataType>& rest_mass_density,
32 : const Scalar<DataType>& temperature,
33 : const Scalar<DataType>& electron_fraction,
34 : const EquationsOfState::EquationOfState<true, ThermodynamicDim>&
35 : equation_of_state);
36 :
37 : template <typename DataType, size_t ThermodynamicDim>
38 1 : Scalar<DataType> specific_entropy(
39 : const Scalar<DataType>& rest_mass_density,
40 : const Scalar<DataType>& temperature,
41 : const Scalar<DataType>& electron_fraction,
42 : const EquationsOfState::EquationOfState<true, ThermodynamicDim>&
43 : equation_of_state);
44 : /// @}
45 :
46 : namespace Tags {
47 : /// Compute item for the specific entropy \f$s\f$.
48 : /// \see hydro::specific_entropy
49 : ///
50 : /// Can be retrieved using `hydro::Tags::SpecificEntropy`
51 : template <typename DataType>
52 1 : struct SpecificEntropyCompute : SpecificEntropy<DataType>, db::ComputeTag {
53 0 : using argument_tags =
54 : typename tmpl::list<RestMassDensity<DataType>, Temperature<DataType>,
55 : ElectronFraction<DataType>,
56 : hydro::Tags::GrmhdEquationOfState>;
57 :
58 0 : using return_type = Scalar<DataType>;
59 :
60 : template <typename EquationOfStateType>
61 0 : static void function(const gsl::not_null<Scalar<DataType>*> result,
62 : const Scalar<DataType>& rest_mass_density,
63 : const Scalar<DataType>& temperature,
64 : const Scalar<DataType>& electron_fraction,
65 : const EquationOfStateType& equation_of_state) {
66 : specific_entropy(result, rest_mass_density, temperature, electron_fraction,
67 : equation_of_state);
68 : }
69 :
70 0 : using base = SpecificEntropy<DataType>;
71 : };
72 : } // namespace Tags
73 : } // namespace hydro
|