21 #ifndef FUB_EQUATIONS_PERFECT_GAS_HPP 
   22 #define FUB_EQUATIONS_PERFECT_GAS_HPP 
   36 template <
int Rank> 
struct PerfectGas;
 
   40 template <
typename Density, 
typename Momentum, 
typename Energy>
 
   60   static constexpr 
auto names =
 
   61       std::make_tuple(
"Density", 
"Momentum", 
"Energy");
 
   63   static constexpr 
auto pointers_to_member =
 
   73 template <
typename Density, 
typename Velocity, 
typename Pressure>
 
   90   static constexpr 
auto names =
 
   91       std::make_tuple(
"Density", 
"Velocity", 
"Pressure");
 
   93   static constexpr 
auto pointers_to_member =
 
  103 template <
typename Minus, 
typename Zero, 
typename Plus>
 
  120   static constexpr 
auto names = std::make_tuple(
"Minus", 
"Zero", 
"Plus");
 
  122   static constexpr 
auto pointers_to_member =
 
  153   static constexpr 
auto names = std::make_tuple(
"Density", 
"Momentum", 
"Energy",
 
  154                                                 "Pressure", 
"SpeedOfSound");
 
  155   static constexpr 
auto pointers_to_member = std::make_tuple(
 
  175   static constexpr 
int Rank() noexcept { 
return N; }
 
  181             [[maybe_unused]] 
Direction dir) 
const noexcept;
 
  184             [[maybe_unused]] 
Direction dir) 
const noexcept;
 
  199                             double pressure) 
const noexcept;
 
  202                                  Array1d pressure) 
const noexcept;
 
  225   template <
typename Density, 
typename Momentum, 
typename Energy>
 
  229     if constexpr (std::is_same_v<double, Density>) {
 
  232       return Array1d::Constant(eq.gamma);
 
  236   template <
typename Density, 
typename Momentum, 
typename Energy>
 
  243   template <
typename Density, 
typename Momentum, 
typename Energy>
 
  250   template <
typename Density, 
typename Momentum, 
typename Energy>
 
  251   friend decltype(
auto)
 
  255     if constexpr (std::is_same_v<double, Density>) {
 
  256       return q.momentum[d];
 
  262   template <
typename Density, 
typename Momentum, 
typename Energy>
 
  266     return q.momentum / q.density;
 
  269   template <
typename Density, 
typename Momentum, 
typename Energy>
 
  274     if constexpr (std::is_same_v<double, Density>) {
 
  275       return q.momentum[d] / q.density;
 
  277       return q.row(d) / q.density;
 
  281   template <
typename Density, 
typename Momentum, 
typename Energy>
 
  303     return q.speed_of_sound;
 
  309 extern template struct PerfectGas<1>;
 
  310 extern template struct PerfectGas<2>;
 
  311 extern template struct PerfectGas<3>;
 
  325   prim.density = complete.density;
 
  326   prim.pressure = complete.pressure;
 
  327   prim.velocity = complete.momentum / complete.density;
 
  342   prim.density = complete.density;
 
  343   prim.pressure = complete.pressure;
 
  344   for (
int i = 0; i < Rank; ++i) {
 
  345     prim.velocity.row(i) = complete.momentum.row(i) / complete.density;
 
  356             const Eigen::Matrix<double, 2, 2>& rotation, 
const PerfectGas<2>&);
 
  360             const Eigen::Matrix<double, 2, 2>& rotation, 
const PerfectGas<2>&);
 
  364             const Eigen::Matrix<double, 3, 3>& rotation, 
const PerfectGas<3>&);
 
  368             const Eigen::Matrix<double, 3, 3>& rotation, 
const PerfectGas<3>&);
 
  373              const Eigen::Matrix<double, 1, 1>& normal,
 
  386              const Eigen::Matrix<double, 1, 1>& normal,
 
constexpr struct fub::euler::SpeedOfSoundFn SpeedOfSound
 
constexpr struct fub::euler::EnergyFn Energy
 
constexpr struct fub::euler::PressureFn Pressure
 
constexpr struct fub::euler::MomentumFn Momentum
 
constexpr struct fub::euler::DensityFn Density
 
constexpr struct fub::euler::VelocityFn Velocity
 
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
 
std::conditional_t< N==1||M==1, Eigen::Array< T, N, M >, Eigen::Array< T, N, M, Eigen::RowMajor > > Array
Definition: Eigen.hpp:50
 
Array< double, 1 > Array1d
Definition: Eigen.hpp:53
 
std::decay_t< decltype(T)> tag_t
Definition: type_traits.hpp:350
 
void Rotate(Conservative< IdealGasMix< 2 >> &rotated, const Conservative< IdealGasMix< 2 >> &state, const Eigen::Matrix< double, 2, 2 > &rotation, const IdealGasMix< 2 > &)
Defines how to rotate a given state of the euler equations.
 
void PrimFromComplete(const PerfectGas< Rank > &, Primitive< PerfectGas< Rank >> &prim, const Complete< PerfectGas< Rank >> &complete)
Definition: PerfectGas.hpp:322
 
void CompleteFromPrim(const PerfectGas< Rank > &equation, Complete< PerfectGas< Rank >> &complete, const Primitive< PerfectGas< Rank >> &prim)
Definition: PerfectGas.hpp:314
 
Direction
This is a type safe type to denote a dimensional split direction.
Definition: Direction.hpp:30
 
void Reflect(Complete< IdealGasMix< 1 >> &reflected, const Complete< IdealGasMix< 1 >> &state, const Eigen::Matrix< double, 1, 1 > &normal, const IdealGasMix< 1 > &gas)
 
Array< bool, 1 > MaskArray
Definition: Eigen.hpp:59
 
std::integral_constant< int, I > int_constant
Definition: type_traits.hpp:183
 
typename detail::ConservativeArrayBaseImpl< Eq, Width >::type ConservativeArrayBase
Definition: StateArray.hpp:132
 
boost::mp11::mp_transform< detail::DepthToStateValueType, typename Equation::ConservativeDepths > ConservativeBase
This type alias transforms state depths into a conservative state associated with a specified equatio...
Definition: State.hpp:247
 
Definition: StateArray.hpp:178
 
This type has a constructor which takes an equation and might allocate any dynamically sized member v...
Definition: State.hpp:335
 
Definition: StateArray.hpp:135
 
This type has a constructor which takes an equation and might allocate any dynamically sized member v...
Definition: State.hpp:251
 
Definition: PerfectGas.hpp:104
 
Minus minus
Definition: PerfectGas.hpp:105
 
Zero zero
Definition: PerfectGas.hpp:106
 
Plus plus
Definition: PerfectGas.hpp:107
 
Definition: PerfectGas.hpp:134
 
SpeedOfSound speed_of_sound
Definition: PerfectGas.hpp:136
 
Pressure pressure
Definition: PerfectGas.hpp:135
 
This is a template class for constructing conservative states for the perfect gas equations.
Definition: PerfectGas.hpp:41
 
Energy energy
Definition: PerfectGas.hpp:44
 
Momentum momentum
Definition: PerfectGas.hpp:43
 
Density density
Definition: PerfectGas.hpp:42
 
Definition: PerfectGas.hpp:74
 
Pressure pressure
Definition: PerfectGas.hpp:77
 
Velocity velocity
Definition: PerfectGas.hpp:76
 
Density density
Definition: PerfectGas.hpp:75
 
Array< double, N, 1 > Velocity(const Complete &q) const noexcept
 
Array1d gamma_array_
Definition: PerfectGas.hpp:221
 
double Machnumber(const Complete &q) const noexcept
 
CompleteArray CompleteFromPrim(Array1d density, const Array< double, N > &u, Array1d pressure) const noexcept
 
double Rspec
Definition: PerfectGas.hpp:216
 
friend auto tag_invoke(tag_t< euler::Velocity >, const PerfectGas &, const PerfectGasConservative< Density, Momentum, Energy > &q, int d) noexcept
Definition: PerfectGas.hpp:271
 
void Flux(ConservativeArray &flux, const CompleteArray &state, [[maybe_unused]] Direction dir) const noexcept
 
friend const Density & tag_invoke(tag_t< euler::Density >, const PerfectGas &, const PerfectGasConservative< Density, Momentum, Energy > &q) noexcept
Definition: PerfectGas.hpp:237
 
static constexpr int Rank() noexcept
Definition: PerfectGas.hpp:175
 
friend auto tag_invoke(tag_t< euler::Gamma >, const PerfectGas &eq, const PerfectGasConservative< Density, Momentum, Energy > &) noexcept
Definition: PerfectGas.hpp:226
 
void Flux(ConservativeArray &flux, const CompleteArray &state, MaskArray mask, [[maybe_unused]] Direction dir) const noexcept
 
friend const Pressure & tag_invoke(tag_t< euler::Pressure >, const PerfectGas &, const PerfectGasComplete< Density, Momentum, Energy, Pressure, SpeedOfSound > &q) noexcept
Definition: PerfectGas.hpp:291
 
void CompleteFromCons(Complete &complete, const ConservativeBase< PerfectGas > &cons) const noexcept
 
double gamma_minus_1_inv
Definition: PerfectGas.hpp:219
 
void Flux(Conservative &flux, const Complete &state, [[maybe_unused]] Direction dir=Direction::X) const noexcept
 
void CompleteFromCons(CompleteArray &complete, const ConservativeArrayBase< PerfectGas > &cons, MaskArray mask) const noexcept
 
void CompleteFromCons(CompleteArray &complete, const ConservativeArrayBase< PerfectGas > &cons) const noexcept
 
Complete CompleteFromPrim(double density, const Array< double, N, 1 > &u, double pressure) const noexcept
 
friend const SpeedOfSound & tag_invoke(tag_t< euler::SpeedOfSound >, const PerfectGas &, const PerfectGasComplete< Density, Momentum, Energy, Pressure, SpeedOfSound > &q) noexcept
Definition: PerfectGas.hpp:300
 
friend const Energy & tag_invoke(tag_t< euler::Energy >, const PerfectGas &, const PerfectGasConservative< Density, Momentum, Energy > &q) noexcept
Definition: PerfectGas.hpp:282
 
Array1d gamma_minus_1_inv_array_
Definition: PerfectGas.hpp:222
 
double Temperature(const Complete &q) const noexcept
 
double gamma
Definition: PerfectGas.hpp:218
 
Array< double, N > Velocity(const CompleteArray &q) const noexcept
 
friend const Momentum & tag_invoke(tag_t< euler::Momentum >, const PerfectGas &, const PerfectGasConservative< Density, Momentum, Energy > &q) noexcept
Definition: PerfectGas.hpp:244
 
CompleteArray CompleteFromPrim(Array1d density, const Array< double, N > &u, Array1d pressure, const MaskArray &mask) const noexcept
 
Array1d Temperature(const CompleteArray &q) const noexcept
 
friend Momentum tag_invoke(tag_t< euler::Velocity >, const PerfectGas &, const PerfectGasConservative< Density, Momentum, Energy > &q) noexcept
Definition: PerfectGas.hpp:263
 
Definition: StateArray.hpp:89
 
Definition: State.hpp:290
 
This type is used to tag scalar quantities.
Definition: State.hpp:109