71 this->add_parameter(
"gamma", gamma_,
"The ratio of specific heats");
80 "gas constant R", R_,
"The specific gas constant R");
82 cv_ = R_ / (gamma_ - 1.);
86 "covolume b", b_,
"The maximum compressibility constant");
89 this->add_parameter(
"reference specific internal energy",
91 "The reference specific internal energy");
95 "reference pressure", pinf_,
"The reference pressure p infinity");
98 this->add_parameter(
"reference specific entropy",
100 "The reference specific entropy");
107 this->add_parameter(
"barotropic reference density",
109 "The density rho_0 at which the barotropic speed "
110 "of sound is centered");
113 this->add_parameter(
"barotropic sound speed",
115 "The strength c_0 of the barotropic speed of "
119 this->add_parameter(
"barotropic bump width",
121 "The width epsilon of the barotropic bump");
124 this->add_parameter(
"barotropic reference specific internal energy",
126 "The (arbitrary) additive constant e_0 of the "
127 "barotropic specific internal energy");
140 ParameterAcceptor::parse_parameters_call_back.connect([
this] {
144 cv_ = R_ / (gamma_ - 1.);
156 const auto e_h = e - barotropic_specific_internal_energy(rho);
157 return hydrodynamic_pressure(rho, e_h) + barotropic_pressure(rho);
169 const auto p_h = p - barotropic_pressure(rho);
170 return hydrodynamic_specific_internal_energy(rho, p_h) +
171 barotropic_specific_internal_energy(rho);
183 const auto e_h = e - barotropic_specific_internal_energy(rho);
184 return hydrodynamic_temperature(rho, e_h);
197 return hydrodynamic_cold_curve_bound(rho) +
198 barotropic_specific_internal_energy(rho);
210 const auto e_h = e - barotropic_specific_internal_energy(rho);
211 return hydrodynamic_specific_entropy(rho, e_h);
224 const auto e_h = e - barotropic_specific_internal_energy(rho);
225 return std::sqrt(hydrodynamic_sound_speed_squared(rho, e_h) +
226 barotropic_sound_speed_squared(rho));
237 double barotropic_sound_speed_squared(
double rho)
const
239 const auto radicand = (rho - rho_0_) * (rho - rho_0_) + eps_;
240 return c_0_ * c_0_ / (radicand * std::sqrt(radicand));
252 double barotropic_pressure(
double rho)
const
254 const auto s = std::sqrt((rho - rho_0_) * (rho - rho_0_) + eps_);
255 const auto s_0 = std::sqrt(rho_0_ * rho_0_ + eps_);
256 return c_0_ * c_0_ / eps_ * ((rho - rho_0_) / s + rho_0_ / s_0);
276 double barotropic_specific_internal_energy(
double rho)
const
278 const auto s = std::sqrt((rho - rho_0_) * (rho - rho_0_) + eps_);
279 const auto s_0_squared = rho_0_ * rho_0_ + eps_;
280 const auto s_0 = std::sqrt(s_0_squared);
282 const auto first_term =
283 c_0_ * c_0_ * rho_0_ * (s - s_0) / (eps_ * s_0_squared * rho);
285 const auto argument =
286 (2. * rho * rho_0_ - s_0_squared) / ((rho + s) * s_0);
287 const auto second_term =
288 2. * c_0_ * c_0_ / (s_0_squared * s_0) * std::atanh(argument);
290 return first_term + second_term + e_0_;
301 double hydrodynamic_pressure(
double rho,
double e_h)
const
303 return (gamma_ - 1.) * rho * (e_h - q_) / (1. - b_ * rho) -
314 double hydrodynamic_specific_internal_energy(
double rho,
double p_h)
const
316 const auto numerator = (p_h + gamma_ * pinf_) * (1. - b_ * rho);
317 const auto denominator = rho * (gamma_ - 1.);
318 return q_ + numerator / denominator;
327 double hydrodynamic_temperature(
double rho,
double e_h)
const
329 return (e_h - q_ - pinf_ * (1. / rho - b_)) / cv_;
338 double hydrodynamic_cold_curve_bound(
double rho)
const
340 return q_ + pinf_ * (1. / rho - b_);
355 double hydrodynamic_specific_entropy(
double rho,
double e_h)
const
357 const auto covolume_term = 1. / rho - b_;
358 const auto p_plus_pinf = (gamma_ - 1.) *
359 ((e_h - q_) - pinf_ * covolume_term) /
361 const auto first_term = cv_ * std::log(p_plus_pinf);
362 const auto second_term =
363 cv_ * gamma_ * std::log((gamma_ - 1.) * cv_ / covolume_term);
364 return first_term - second_term + s0_;
376 double hydrodynamic_sound_speed_squared(
double rho,
double e_h)
const
378 const auto covolume = 1. - b_ * rho;
380 (rho * (e_h - q_) - pinf_ * covolume) / (covolume * covolume * rho);
381 result *= gamma_ * (gamma_ - 1.);