8#include <initial_state_library.h>
13 namespace EulerInitialStates
25 template <
typename Description,
int dim,
typename Number>
31 typename HyperbolicSystem::template View<dim, Number>;
32 using state_type =
typename HyperbolicSystemView::state_type;
35 const std::string subsection)
38 , hyperbolic_system_(hyperbolic_system)
41 if constexpr (!HyperbolicSystemView::have_gamma) {
42 this->add_parameter(
"gamma", gamma_,
"The ratio of specific heats");
47 "mach number", mach_number_,
"Mach number of isentropic vortex");
50 this->add_parameter(
"beta", beta_,
"vortex strength beta");
55 if constexpr (HyperbolicSystemView::have_gamma) {
56 gamma_ = hyperbolic_system_.gamma();
60 dealii::Point<2> point_bar;
61 point_bar[0] = point[0] - mach_number_ * t;
62 point_bar[1] = point[1];
64 const Number r_square = Number(point_bar.norm_square());
66 const Number factor = beta_ / Number(2. * M_PI) *
67 exp(Number(0.5) - Number(0.5) * r_square);
69 const Number T = Number(1.) - (gamma_ - Number(1.)) /
70 (Number(2.) * gamma_) * factor *
73 const Number u = mach_number_ - factor * Number(point_bar[1]);
74 const Number v = factor * Number(point_bar[0]);
76 const Number rho =
ryujin::pow(T, Number(1.) / (Number(gamma_ - 1.)));
79 p / (gamma_ - Number(1.)) + Number(0.5) * rho * (u * u + v * v);
81 if constexpr (dim == 2)
83 else if constexpr (dim == 3)
84 return state_type({rho, rho * u, rho * v, Number(0.), E});
86 AssertThrow(
false, dealii::ExcNotImplemented());
IsentropicVortex(const HyperbolicSystem &hyperbolic_system, const std::string subsection)
typename HyperbolicSystemView::state_type state_type
typename HyperbolicSystem::template View< dim, Number > HyperbolicSystemView
typename Description::HyperbolicSystem HyperbolicSystem
state_type compute(const dealii::Point< dim > &point, Number t) final
T pow(const T x, const T b)
Euler::HyperbolicSystem HyperbolicSystem