8#include <ryujin/base/compile_time_options.h>
13 namespace EquationsOfState
32 this->add_parameter(
"gamma", gamma_,
"The ratio of specific heats");
35 this->add_parameter(
"vdw a", a_,
"The vdw a constant");
39 "covolume b", b_,
"The maximum compressibility constant");
48 "gas constant R", R_,
"The specific gas constant R");
50 cv_ = R_ / (gamma_ - 1.);
55 ParameterAcceptor::parse_parameters_call_back.connect([
this] {
57 cv_ = R_ / (gamma_ - 1.);
72 double pressure(
double rho,
double e)
const final
74 const auto intermolecular = a_ * rho * rho;
75 const auto numerator = rho * e + intermolecular;
76 const auto covolume = 1. - b_ * rho;
77 return (gamma_ - 1.) * numerator / covolume - intermolecular;
88 const auto intermolecular = a_ * rho * rho;
89 const auto covolume = 1. - b_ * rho;
90 const auto numerator = (p + intermolecular) * covolume;
91 const auto denominator = rho * (gamma_ - 1.);
92 return numerator / denominator - a_ * rho;
103 return (e + a_ * rho) / cv_;
125 const auto first_term = cv_ * std::log((e + a_ * rho) / cv_);
126 const auto second_term = R_ * std::log(1. / rho - b_);
127 return first_term + second_term;
139 const auto covolume = 1. - b_ * rho;
140 const auto numerator = gamma_ * (gamma_ - 1.) * (e + a_ * rho);
141 return std::sqrt(numerator / (covolume * covolume) - 2. * a_ * rho);
virtual double pressure(double rho, double e) const =0
virtual double temperature(double, double) const
double covolume_constant_
virtual double speed_of_sound(double, double) const
virtual double specific_internal_energy(double rho, double p) const =0
double pressure(double rho, double e) const final
double cold_curve_bound(double rho) const final
double specific_entropy(double rho, double e) const final
double specific_internal_energy(double rho, double p) const final
double speed_of_sound(double rho, double e) const final
VanDerWaals(const std::string &subsection)
double temperature(double rho, double e) const final