15 namespace EquationOfStateLibrary
39 "reference rho0", rho0_,
"The reference density at T=0 and P=0");
42 this->add_parameter(
"reference T0", T0_,
"The reference temperature");
45 this->add_parameter(
"Gamma", Gc_,
"The Gruneisen parameter");
48 this->add_parameter(
"A", capA_,
"The A constant");
52 this->add_parameter(
"B", capB_,
"The B constant");
56 this->add_parameter(
"cvInf", cvInf_,
"The Dulong-Petit limit of cv");
62 const auto update_values = [
this]() {
67 this->parse_parameters_call_back.connect(update_values);
79 double pressure(
double rho,
double e)
const final
81 const auto v = 1. / rho;
82 const auto ratio = v / v0_;
83 const auto p_cold = pressure_cold(v);
86 (std::pow(ratio, -capB_) + ratio * capB_ - (capB_ + 1.));
88 return p_cold + Gc_ * rho * (e - e_cold);
101 const auto v = 1. / rho;
102 const auto ratio = v / v0_;
103 const auto p_cold = pressure_cold(v);
106 (std::pow(ratio, -capB_) + ratio * capB_ - (capB_ + 1.));
108 return (p - p_cold) / (Gc_ * rho) + e_cold;
122 const auto v = 1. / rho;
123 const auto ratio = v / v0_;
126 (std::pow(ratio, -capB_) + ratio * capB_ - (capB_ + 1.));
127 const auto delta_e = e - e_cold;
128 const auto radicand =
129 delta_e * (delta_e + 4. * cvInf_ * T0_ * std::pow(ratio, -Gc_));
130 const auto numerator = delta_e + std::sqrt(radicand);
131 const auto denominator = 2. * cvInf_;
133 return numerator / denominator;
144 const auto v = 1. / rho;
145 const auto ratio = v / v0_;
146 auto e_cold = std::pow(ratio, -capB_) + ratio * capB_ - (capB_ + 1.);
147 e_cold *= capA_ * v0_;
161 const auto v = 1. / rho;
162 const auto ratio = v / v0_;
165 (std::pow(ratio, -capB_) + ratio * capB_ - (capB_ + 1.));
166 const auto delta_e = e - e_cold;
167 const auto radicand =
168 delta_e * (delta_e + 4. * cvInf_ * T0_ * std::pow(ratio, -Gc_));
169 const auto numerator = delta_e + std::sqrt(radicand);
170 const auto denominator = 2. * cvInf_;
171 const auto T = numerator / denominator;
172 const auto tau = T * std::pow(ratio, Gc_) / T0_;
174 return cvInf_ * (tau / (1. + tau) + std::log(1. + tau));
187 const auto v = 1. / rho;
188 const auto ratio = v / v0_;
192 (std::pow(ratio, -capB_) + ratio * capB_ - (capB_ + 1.));
196 capA_ * capB_ * v0_ * (capB_ + 1.) * std::pow(ratio, -capB_);
198 return std::sqrt(c_cold + Gc_ * (Gc_ + 1.) * (e - e_cold));
210 double pressure_cold(
const double v)
const
212 const auto ratio = v / v0_;
214 auto cold_curve = std::pow(ratio, -capB_ - 1.) - 1.;
215 cold_curve *= capA_ * capB_;
virtual double specific_internal_energy(double rho, double p) const =0
virtual double pressure(double rho, double e) const =0
virtual double speed_of_sound(double, double) const
virtual double temperature(double, double) const
double interpolation_pinfty_
double specific_entropy(double rho, double e) const final
double cold_curve_bound(double rho) const final
double speed_of_sound(double rho, double e) const final
SimpleMacaw(const std::string &subsection)
double pressure(double rho, double e) const final
double specific_internal_energy(double rho, double p) const final
double temperature(double rho, double e) const final