72 this->add_parameter(
"gamma", gamma_,
"The ratio of specific heats");
81 "gas constant R", R_,
"The specific gas constant R");
83 cv_ = R_ / (gamma_ - 1.);
87 "covolume b", b_,
"The maximum compressibility constant");
90 this->add_parameter(
"reference specific internal energy",
92 "The reference specific internal energy");
96 "reference pressure", pinf_,
"The reference pressure p infinity");
99 this->add_parameter(
"reference specific entropy",
101 "The reference specific entropy");
108 this->add_parameter(
"barotropic reference density",
110 "The density rho_0 at which the barotropic speed "
111 "of sound is centered");
114 this->add_parameter(
"barotropic sound speed",
116 "The strength c_0 of the barotropic speed of "
120 this->add_parameter(
"barotropic bump width",
122 "The width epsilon of the barotropic bump");
125 this->add_parameter(
"barotropic reference specific internal energy",
127 "The (arbitrary) additive constant e_0 of the "
128 "barotropic specific internal energy");
141 ParameterAcceptor::parse_parameters_call_back.connect([
this] {
145 cv_ = R_ / (gamma_ - 1.);
157 const auto e_h = e - barotropic_specific_internal_energy(rho);
158 return hydrodynamic_pressure(rho, e_h) + barotropic_pressure(rho);
170 const auto p_h = p - barotropic_pressure(rho);
171 return hydrodynamic_specific_internal_energy(rho, p_h) +
172 barotropic_specific_internal_energy(rho);
184 const auto e_h = e - barotropic_specific_internal_energy(rho);
185 return hydrodynamic_temperature(rho, e_h);
198 return hydrodynamic_cold_curve_bound(rho) +
199 barotropic_specific_internal_energy(rho);
211 const auto e_h = e - barotropic_specific_internal_energy(rho);
212 return hydrodynamic_specific_entropy(rho, e_h);
225 const auto e_h = e - barotropic_specific_internal_energy(rho);
226 return std::sqrt(hydrodynamic_sound_speed_squared(rho, e_h) +
227 barotropic_sound_speed_squared(rho));
238 double barotropic_sound_speed_squared(
double rho)
const
240 const auto radicand = (rho - rho_0_) * (rho - rho_0_) + eps_;
241 return c_0_ * c_0_ / (radicand * std::sqrt(radicand));
253 double barotropic_pressure(
double rho)
const
255 const auto s = std::sqrt((rho - rho_0_) * (rho - rho_0_) + eps_);
256 const auto s_0 = std::sqrt(rho_0_ * rho_0_ + eps_);
257 return c_0_ * c_0_ / eps_ * ((rho - rho_0_) / s + rho_0_ / s_0);
277 double barotropic_specific_internal_energy(
double rho)
const
279 const auto s = std::sqrt((rho - rho_0_) * (rho - rho_0_) + eps_);
280 const auto s_0_squared = rho_0_ * rho_0_ + eps_;
281 const auto s_0 = std::sqrt(s_0_squared);
283 const auto first_term =
284 c_0_ * c_0_ * rho_0_ * (s - s_0) / (eps_ * s_0_squared * rho);
286 const auto argument =
287 (2. * rho * rho_0_ - s_0_squared) / ((rho + s) * s_0);
288 const auto second_term =
289 2. * c_0_ * c_0_ / (s_0_squared * s_0) * std::atanh(argument);
291 return first_term + second_term + e_0_;
302 double hydrodynamic_pressure(
double rho,
double e_h)
const
304 return (gamma_ - 1.) * rho * (e_h - q_) / (1. - b_ * rho) -
315 double hydrodynamic_specific_internal_energy(
double rho,
double p_h)
const
317 const auto numerator = (p_h + gamma_ * pinf_) * (1. - b_ * rho);
318 const auto denominator = rho * (gamma_ - 1.);
319 return q_ + numerator / denominator;
328 double hydrodynamic_temperature(
double rho,
double e_h)
const
330 return (e_h - q_ - pinf_ * (1. / rho - b_)) / cv_;
339 double hydrodynamic_cold_curve_bound(
double rho)
const
341 return q_ + pinf_ * (1. / rho - b_);
356 double hydrodynamic_specific_entropy(
double rho,
double e_h)
const
358 const auto covolume_term = 1. / rho - b_;
359 const auto p_plus_pinf = (gamma_ - 1.) *
360 ((e_h - q_) - pinf_ * covolume_term) /
362 const auto first_term = cv_ * std::log(p_plus_pinf);
363 const auto second_term =
364 cv_ * gamma_ * std::log((gamma_ - 1.) * cv_ / covolume_term);
365 return first_term - second_term + s0_;
377 double hydrodynamic_sound_speed_squared(
double rho,
double e_h)
const
379 const auto covolume = 1. - b_ * rho;
381 (rho * (e_h - q_) - pinf_ * covolume) / (covolume * covolume * rho);
382 result *= gamma_ * (gamma_ - 1.);