12 #include "PointwiseFunctions/AnalyticSolutions/AnalyticSolution.hpp"
13 #include "PointwiseFunctions/Hydro/EquationsOfState/IdealFluid.hpp"
14 #include "PointwiseFunctions/Hydro/TagsDeclarations.hpp"
17 #include "Utilities/TaggedTuple.hpp"
51 template <
size_t Dim,
bool IsRelativistic>
52 class SmoothFlow :
virtual public MarkAsAnalyticSolution {
61 explicit SmoothFlow(CkMigrateMessage* ) noexcept;
64 void pup(PUP::er& ) noexcept;
78 static constexpr
Options::String help = {
"The wave vector of the profile."};
85 "The constant pressure throughout the fluid."};
86 static type lower_bound() noexcept {
return 0.0; }
93 "The adiabatic index for the ideal fluid."};
94 static type lower_bound() noexcept {
return 1.0; }
101 "The perturbation size of the rest mass density."};
102 static type lower_bound() noexcept {
return -1.0; }
103 static type upper_bound() noexcept {
return 1.0; }
111 double adiabatic_index,
double perturbation_size) noexcept;
115 template <
typename DataType>
116 auto variables(
const tnsr::I<DataType, Dim>& x,
double t,
119 -> tuples::TaggedTuple<
hydro::Tags::RestMassDensity<DataType>>;
121 template <typename DataType>
123 const
tnsr::I<DataType, Dim>& x,
double t,
124 tmpl::list<
hydro::Tags::SpecificInternalEnergy<DataType>> )
126 -> tuples::TaggedTuple<
hydro::Tags::SpecificInternalEnergy<DataType>>;
128 template <typename DataType>
131 const noexcept -> tuples::TaggedTuple<
hydro::Tags::
Pressure<DataType>>;
133 template <typename DataType>
135 const
tnsr::I<DataType, Dim>& x,
double ,
136 tmpl::list<
hydro::Tags::SpatialVelocity<DataType, Dim>> )
138 -> tuples::TaggedTuple<
hydro::Tags::SpatialVelocity<DataType, Dim>>;
140 template <typename DataType,
bool LocalIsRelativistic = IsRelativistic,
141 Requires<IsRelativistic and IsRelativistic == LocalIsRelativistic> =
144 const
tnsr::I<DataType, Dim>& x,
double ,
145 tmpl::list<
hydro::Tags::LorentzFactor<DataType>> ) const noexcept
146 -> tuples::TaggedTuple<
hydro::Tags::LorentzFactor<DataType>>;
148 template <typename DataType>
150 tmpl::list<
hydro::Tags::SpecificEnthalpy<DataType>> )
152 -> tuples::TaggedTuple<
hydro::Tags::SpecificEnthalpy<DataType>>;
157 return equation_of_state_;
161 template <
size_t LocalDim,
bool LocalIsRelativistic>
168 template <
typename DataType>
169 DataType k_dot_x_minus_vt(
const tnsr::I<DataType, Dim>& x,
170 double t)
const noexcept;
184 template <
size_t Dim,
bool IsRelativistic>
185 bool operator!=(
const SmoothFlow<Dim, IsRelativistic>& lhs,
186 const SmoothFlow<Dim, IsRelativistic>& rhs) noexcept;