8#include <ryujin/base/compile_time_options.h>
13 namespace EquationsOfState
35 this->add_parameter(
"A", capA,
"The A constant");
38 this->add_parameter(
"B", capB,
"The B constant");
41 this->add_parameter(
"R1", R1,
"The R1 constant");
44 this->add_parameter(
"R2", R2,
"The R2 constant");
47 this->add_parameter(
"omega", omega,
"The Gruneisen coefficient");
50 this->add_parameter(
"rho_0", rho_0,
"The reference density");
53 this->add_parameter(
"q_0", q_0,
"The specific internal energy offset");
57 "c_v", cv_,
"The specific heat capacity at constant volume");
60 this->add_parameter(
"T_0", T_0,
"The reference temperature");
63 this->add_parameter(
"s_0", s_0,
"The reference specific entropy");
74 double pressure(
double rho,
double e)
const final
77 const auto ratio = rho / rho_0;
79 const auto first_term =
80 capA * (1. - omega / R1 * ratio) * std::exp(-R1 * 1. / ratio);
81 const auto second_term =
82 capB * (1. - omega / R2 * ratio) * std::exp(-R2 * 1. / ratio);
84 return first_term + second_term + omega * rho * (e + q_0);
97 const auto ratio = rho / rho_0;
99 const auto first_term =
100 capA * (1. - omega / R1 * ratio) * std::exp(-R1 * 1. / ratio);
101 const auto second_term =
102 capB * (1. - omega / R2 * ratio) * std::exp(-R2 * 1. / ratio);
104 return (p - first_term - second_term) / (rho * omega) - q_0;
117 const auto ratio = rho / rho_0;
119 const auto first_term = capA / R1 * std::exp(-R1 * 1. / ratio);
120 const auto second_term = capB / R2 * std::exp(-R2 * 1. / ratio);
122 return (e + q_0 - 1. / rho_0 * (first_term + second_term)) / cv_;
135 const auto ratio = rho / rho_0;
136 const auto v_0 = 1. / rho_0;
137 auto e_cold = capA / R1 * std::exp(-R1 / ratio) +
138 capB / R2 * std::exp(-R2 / ratio);
153 const auto ratio = rho / rho_0;
154 const auto first_term = capA / R1 * std::exp(-R1 * 1. / ratio);
155 const auto second_term = capB / R2 * std::exp(-R2 * 1. / ratio);
157 (e + q_0 - 1. / rho_0 * (first_term + second_term)) / cv_;
158 auto s = std::log(
temperature / T_0) + omega * std::log(1. / ratio);
177 const auto t1 = omega * rho / (R1 * rho_0);
178 const auto factor1 = omega * (1. - t1) * (1. + 1. / t1) - t1;
179 const auto first_term =
180 capA / rho * factor1 * std::exp(-1. / (t1 / omega));
182 const auto t2 = omega * rho / (R2 * rho_0);
183 const auto factor2 = omega * (1. - t2) * (1. + 1. / t2) - t2;
184 const auto second_term =
185 capB / rho * factor2 * std::exp(-1. / (t2 / omega));
187 const auto third_term = omega * (omega + 1.) * (e + q_0);
189 return std::sqrt(first_term + second_term + third_term);
virtual double pressure(double rho, double e) const =0
virtual double temperature(double, double) const
virtual double speed_of_sound(double, double) const
virtual double specific_internal_energy(double rho, double p) const =0
double cold_curve_bound(double rho) const final
double speed_of_sound(double rho, double e) const final
JonesWilkinsLee(const std::string &subsection)
double specific_entropy(double rho, double e) const final
double specific_internal_energy(double rho, double p) const final
double pressure(double rho, double e) const final
double temperature(double rho, double e) const final