8#include <compile_time_options.h>
14 namespace EulerInitialStates
27 template <
typename Description,
int dim,
typename Number>
37 const std::string &subsection)
39 , hyperbolic_system_(hyperbolic_system)
42 if constexpr (!View::have_gamma) {
43 this->add_parameter(
"gamma", gamma_,
"The ratio of specific heats");
48 "reference density", rho0_,
"The reference density");
55 this->add_parameter(
"reference velocity magnitude",
57 "The reference velocity magnitude");
62 "reference pressure", p0_,
"The reference pressure");
64 this->parse_parameters_call_back.connect([&]() {
65 if constexpr (View::have_gamma) {
66 const auto view = hyperbolic_system_.template view<dim, Number>();
67 gamma_ = view.gamma();
73 auto compute(
const dealii::Point<dim> &point, Number t)
76 const auto view = hyperbolic_system_.template view<dim, Number>();
78 const auto norm = point.norm();
79 const auto min = 10. * std::numeric_limits<Number>::min();
83 auto vel = -u0_ * point / (norm +
min);
87 const auto D = u0_ * (gamma_ - 1.) / 2.;
88 const bool in_interior = t == Number(0.) ? false : norm / t < D;
91 rho = rho0_ *
std::pow((gamma_ + 1.) / (gamma_ - 1.), dim);
93 p = 0.5 * rho0_ * u0_ * u0_;
96 rho = rho0_ *
std::pow(1. + t / (norm +
min), dim - 1);
100 if constexpr (dim == 1)
101 return view.from_initial_state(
state_type{{rho, Number(vel[0]), p}});
102 else if constexpr (dim == 2)
103 return view.from_initial_state(
104 state_type{{rho, Number(vel[0]), Number(vel[1]), p}});
106 return view.from_initial_state(state_type{
107 {rho, Number(vel[0]), Number(vel[1]), Number(vel[2]), p}});
Noh(const HyperbolicSystem &hyperbolic_system, const std::string &subsection)
typename View::state_type state_type
typename Description::template HyperbolicSystemView< dim, Number > View
auto compute(const dealii::Point< dim > &point, Number t) -> state_type final
typename Description::HyperbolicSystem HyperbolicSystem
T pow(const T x, const T b)
Euler::HyperbolicSystem HyperbolicSystem
Euler::HyperbolicSystem HyperbolicSystem