35 const std::string &subsection)
36 :
InitialState<Description, dim, Number>(
"noh", subsection)
37 , hyperbolic_system_(hyperbolic_system)
40 if constexpr (!View::have_gamma) {
41 this->add_parameter(
"gamma", gamma_,
"The ratio of specific heats");
46 "reference density", rho0_,
"The reference density");
53 this->add_parameter(
"reference velocity magnitude",
55 "The reference velocity magnitude");
60 "reference pressure", p0_,
"The reference pressure");
62 this->parse_parameters_call_back.connect([&]() {
63 if constexpr (View::have_gamma) {
64 const auto view = hyperbolic_system_.template view<dim, Number>();
65 gamma_ = view.gamma();
71 auto compute(
const dealii::Point<dim> &point, Number t)
74 const auto view = hyperbolic_system_.template view<dim, Number>();
76 const auto norm = point.norm();
77 const auto min = 10. * std::numeric_limits<Number>::min();
81 auto vel = -u0_ * point / (norm +
min);
85 const auto D = u0_ * (gamma_ - 1.) / 2.;
86 const bool in_interior = t == Number(0.) ? false : norm / t < D;
89 rho = rho0_ * std::pow((gamma_ + 1.) / (gamma_ - 1.), dim);
91 p = 0.5 * rho0_ * u0_ * u0_;
92 p *= std::pow(gamma_ + 1., dim) / std::pow(gamma_ - 1., dim - 1);
94 rho = rho0_ * std::pow(1. + t / (norm +
min), dim - 1);
100 result[1] = Number(vel[0]);
101 if constexpr (dim >= 2)
102 result[2] = Number(vel[1]);
103 if constexpr (dim >= 3)
104 result[3] = Number(vel[2]);
105 if constexpr (View::have_energy_equation)
108 return view.from_initial_state(result);