36 const std::string &subsection)
37 :
InitialState<Description, dim, Number>(
"noh", subsection)
38 , hyperbolic_system_(hyperbolic_system)
41 if constexpr (!View::have_gamma) {
42 this->add_parameter(
"gamma", gamma_,
"The ratio of specific heats");
47 "reference density", rho0_,
"The reference density");
54 this->add_parameter(
"reference velocity magnitude",
56 "The reference velocity magnitude");
61 "reference pressure", p0_,
"The reference pressure");
63 this->parse_parameters_call_back.connect([&]() {
64 if constexpr (View::have_gamma) {
65 const auto view = hyperbolic_system_.template view<dim, Number>();
66 gamma_ = view.gamma();
72 auto compute(
const dealii::Point<dim> &point, Number t)
75 const auto view = hyperbolic_system_.template view<dim, Number>();
77 const auto norm = point.norm();
78 const auto min = 10. * std::numeric_limits<Number>::min();
82 auto vel = -u0_ * point / (norm +
min);
86 const auto D = u0_ * (gamma_ - 1.) / 2.;
87 const bool in_interior = t == Number(0.) ? false : norm / t < D;
90 rho = rho0_ * std::pow((gamma_ + 1.) / (gamma_ - 1.), dim);
92 p = 0.5 * rho0_ * u0_ * u0_;
93 p *= std::pow(gamma_ + 1., dim) / std::pow(gamma_ - 1., dim - 1);
95 rho = rho0_ * std::pow(1. + t / (norm +
min), dim - 1);
101 result[1] = Number(vel[0]);
102 if constexpr (dim >= 2)
103 result[2] = Number(vel[1]);
104 if constexpr (dim >= 3)
105 result[3] = Number(vel[2]);
106 if constexpr (View::have_energy_equation)
109 return view.from_initial_state(result);