12#include "libmesh/utility.h"
32 Real lower_density = 1.0e-2;
33 Real upper_density = 100.0;
36 auto pressure_diff = [&pressure, &temperature,
this](Real
x)
47 Real pressure, Real temperature, Real &
rho, Real & drho_dp, Real & drho_dT)
const
57 drho_dp =
molarMass() / (
_R * temperature * delta * (2.0 * da_dd + delta * d2a_dd2));
59 (2.0 * da_dd + delta * d2a_dd2);
66 const Real density =
rho_from_p_T(pressure, temperature);
76 Real pressure, Real temperature, Real & e, Real & de_dp, Real & de_dT)
const
81 const Real density =
rho_from_p_T(pressure, temperature);
90 de_dp = tau * d2a_ddt / (density * (2.0 * da_dd + delta * d2a_dd2));
92 (delta * tau * d2a_ddt * (da_dd - tau * d2a_ddt) / (2.0 * da_dd + delta * d2a_dd2) +
101 const Real density =
rho_from_p_T(pressure, temperature);
108 Real w = 2.0 * delta * da_dd + delta * delta *
d2alpha_ddelta2(delta, tau);
109 w -= Utility::pow<2>(delta * da_dd - delta * tau *
d2alpha_ddeltatau(delta, tau)) /
112 return std::sqrt(
_R * temperature * w /
molarMass());
119 const Real density =
rho_from_p_T(pressure, temperature);
139 const Real density =
rho_from_p_T(pressure, temperature);
151 const Real density =
rho_from_p_T(pressure, temperature);
161 Real pressure, Real temperature, Real & s, Real & ds_dp, Real & ds_dT)
const
166 const Real density =
rho_from_p_T(pressure, temperature);
177 ds_dp = tau * (d2a_ddt - da_dd) / (density * temperature * (2.0 * da_dd + delta * d2a_dd2));
178 ds_dT = -
_R * tau * (da_dt -
alpha(delta, tau) + tau * (d2a_dt2 - da_dt)) /
186 const Real density =
rho_from_p_T(pressure, temperature);
197 Real pressure, Real temperature, Real & h, Real & dh_dp, Real & dh_dT)
const
202 const Real density =
rho_from_p_T(pressure, temperature);
211 dh_dp = (da_dd + delta * d2a_dd2 + tau * d2a_ddt) / (density * (2.0 * da_dd + delta * d2a_dd2));
213 (delta * da_dd * (1.0 - tau * d2a_ddt / da_dd) * (1.0 - tau * d2a_ddt / da_dd) /
214 (2.0 + delta * d2a_dd2 / da_dd) -
222 auto lambda = [&](Real pressure, Real current_T, Real & new_h, Real & dh_dp, Real & dh_dT)
223 {
h_from_p_T(pressure, current_T, new_h, dh_dp, dh_dT); };
231 ") and pressure (p = ",
233 ") to temperature failed to converge.");
const std::vector< double > x
static const Real _R
Universal gas constant (J/mol/K)
virtual Real d2alpha_ddelta2(Real delta, Real tau) const =0
Second derivative of Helmholtz free energy wrt delta.
virtual Real c_from_p_T(Real pressure, Real temperature) const override
HelmholtzFluidProperties(const InputParameters ¶meters)
static InputParameters validParams()
virtual Real dalpha_dtau(Real delta, Real tau) const =0
Derivative of Helmholtz free energy wrt tau.
virtual Real d2alpha_ddeltatau(Real delta, Real tau) const =0
Second derivative of Helmholtz free energy wrt delta and tau.
virtual Real e_from_p_T(Real pressure, Real temperature) const override
virtual Real d2alpha_dtau2(Real delta, Real tau) const =0
Second derivative of Helmholtz free energy wrt tau.
virtual Real s_from_p_T(Real pressure, Real temperature) const override
virtual Real cp_from_p_T(Real pressure, Real temperature) const override
virtual Real dalpha_ddelta(Real delta, Real tau) const =0
Derivative of Helmholtz free energy wrt delta.
virtual Real rho_from_p_T(Real pressure, Real temperature) const override
virtual Real T_from_p_h(Real pressure, Real enthalpy) const override
virtual Real cv_from_p_T(Real pressure, Real temperature) const override
virtual Real p_from_rho_T(Real rho, Real T) const
Pressure as a function of density and temperature.
virtual Real alpha(Real delta, Real tau) const =0
Helmholtz free energy.
virtual Real h_from_p_T(Real pressure, Real temperature) const override
const std::string & name() const
void mooseError(Args &&... args) const
Common class for single phase fluid properties.
const Real _T_initial_guess
Initial guess for temperature (or temperature used to compute the initial guess)
static InputParameters validParams()
e e e e s T T T T T rho T
const Real _tolerance
Newton's method may be used to convert between variable sets.
virtual Real criticalDensity() const
Critical density.
virtual Real molarMass() const
Molar mass [kg/mol].
e e e e s T T T T T rho v v T e h
virtual Real criticalTemperature() const
Critical temperature.
Real root(std::function< Real(Real)> const &f, Real x1, Real x2, Real tol=1.0e-12)
Finds the root of a function using Brent's method.
void bracket(std::function< Real(Real)> const &f, Real &x1, Real &x2)
Function to bracket a root of a given function.
std::pair< T, T > NewtonSolve(const T &x, const T &y, const Real z_initial_guess, const Real tolerance, const Functor &y_from_x_z, const std::string &caller_name, const unsigned int max_its=100, const bool verbose=false)
NewtonSolve does a 1D Newton Solve to solve the equation y = f(x, z) for variable z.