12#include "libmesh/utility.h"
27 _p_critical(4.5992e6),
29 _rho_critical(162.66),
83 if (temperature <= 200.0 || temperature >= 1000.0)
85 "Temperature ", temperature,
"K out of range (200K, 1000K) in ",
name(),
": mu_from_p_T()");
88 for (std::size_t i = 0; i <
_a.size(); ++i)
91 return viscosity * 1.e-6;
96 Real pressure, Real temperature, Real &
mu, Real & dmu_dp, Real & dmu_dT)
const
103 for (std::size_t i = 0; i <
_a.size(); ++i)
105 dmu_dT = dmudt * 1.e-6;
112 if (temperature <= 200.0 || temperature >= 1000.0)
114 "Temperature ", temperature,
"K out of range (200K, 1000K) in ",
name(),
": k()");
117 for (std::size_t i = 0; i <
_b.size(); ++i)
125 Real , Real temperature, Real & k, Real & dk_dp, Real & dk_dT)
const
128 if (temperature <= 200.0 || temperature >= 1000.0)
130 "Temperature ", temperature,
"K out of range (200K, 1000K) in ",
name(),
": k()");
132 Real kt = 0.0, dkt_dT = 0.0;
134 for (std::size_t i = 0; i <
_b.size(); ++i)
137 for (std::size_t i = 1; i <
_b.size(); ++i)
148 if (temperature < _T_triple || temperature >
_T_critical)
149 mooseException(
"Temperature is out of range in ",
name(),
": vaporPressure()");
152 const Real theta = 1.0 - Tr;
154 const Real logpressure = (-6.036219 * theta + 1.409353 * std::pow(theta, 1.5) -
155 0.4945199 * Utility::pow<2>(theta) - 1.443048 * std::pow(theta, 4.5)) /
164 mooseError(
"vaporPressure() is not implemented");
170 return {-10.44708, 4.66491, 12.12986};
176 if (temperature < _T_triple || temperature >
_T_critical)
178 "Temperature ", temperature,
" is out of range in ",
name(),
": saturatedLiquidDensity()");
181 const Real theta = 1.0 - Tr;
183 const Real logdensity = 1.9906389 * std::pow(theta, 0.354) - 0.78756197 * std::sqrt(theta) +
184 0.036976723 * std::pow(theta, 2.5);
192 if (temperature < _T_triple || temperature >
_T_critical)
194 "Temperature ", temperature,
" is out of range in ",
name(),
": saturatedVaporDensity()");
197 const Real theta = 1.0 - Tr;
199 const Real logdensity =
200 -1.880284 * std::pow(theta, 0.354) - 2.8526531 * std::pow(theta, 5.0 / 6.0) -
201 3.000648 * std::pow(theta, 1.5) - 5.251169 * std::pow(theta, 2.5) -
202 13.191859 * std::pow(theta, 25.0 / 6.0) - 37.553961 * std::pow(theta, 47.0 / 6.0);
211 Real alpha0 = std::log(delta) + 9.91243972 - 6.33270087 * tau + 3.0016 * std::log(tau);
213 for (std::size_t i = 0; i <
_a0.size(); ++i)
214 alpha0 +=
_a0[i] * std::log(1.0 - std::exp(-
_b0[i] * tau));
219 for (std::size_t i = 0; i <
_t1.size(); ++i)
222 for (std::size_t i = 0; i <
_t2.size(); ++i)
226 for (std::size_t i = 0; i <
_t3.size(); ++i)
228 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
232 return alpha0 + alphar;
239 Real dalpha0 = 1.0 / delta;
244 for (std::size_t i = 0; i <
_t1.size(); ++i)
247 for (std::size_t i = 0; i <
_t2.size(); ++i)
252 for (std::size_t i = 0; i <
_t3.size(); ++i)
254 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
259 return dalpha0 + dalphar / delta;
266 Real dalpha0 = -6.33270087 + 3.0016 / tau;
268 for (std::size_t i = 0; i <
_a0.size(); ++i)
269 dalpha0 +=
_a0[i] *
_b0[i] * (1.0 / (1.0 - std::exp(-
_b0[i] * tau)) - 1.0);
274 for (std::size_t i = 0; i <
_t1.size(); ++i)
277 for (std::size_t i = 0; i <
_t2.size(); ++i)
281 for (std::size_t i = 0; i <
_t3.size(); ++i)
283 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
288 return dalpha0 + dalphar / tau;
295 Real dalpha0 = -1.0 / delta / delta;
300 for (std::size_t i = 0; i <
_t1.size(); ++i)
304 for (std::size_t i = 0; i <
_t2.size(); ++i)
311 for (std::size_t i = 0; i <
_t3.size(); ++i)
312 dalphar +=
_N3[i] * std::pow(tau,
_t3[i]) *
313 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
322 return dalpha0 + dalphar / delta / delta;
329 Real dalpha0 = -3.0016 / tau / tau;
331 for (std::size_t i = 0; i <
_a0.size(); ++i)
333 Real exptau = std::exp(-
_b0[i] * tau);
334 dalpha0 -=
_a0[i] * (
_b0[i] *
_b0[i] * exptau / (1.0 - exptau) / (1.0 - exptau));
340 for (std::size_t i = 0; i <
_t1.size(); ++i)
344 for (std::size_t i = 0; i <
_t2.size(); ++i)
348 for (std::size_t i = 0; i <
_t3.size(); ++i)
350 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
356 return dalpha0 + dalphar / tau / tau;
365 for (std::size_t i = 0; i <
_t1.size(); ++i)
366 dalphar +=
_N1[i] *
_d1[i] *
_t1[i] * std::pow(delta,
_d1[i]) * std::pow(tau,
_t1[i]);
368 for (std::size_t i = 0; i <
_t2.size(); ++i)
369 dalphar +=
_N2[i] *
_t2[i] * std::pow(delta,
_d2[i]) * std::pow(tau,
_t2[i]) *
373 for (std::size_t i = 0; i <
_t3.size(); ++i)
374 dalphar +=
_N3[i] * std::pow(delta,
_d3[i]) * std::pow(tau,
_t3[i]) *
375 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
381 return dalphar / delta / tau;
registerMooseObject("FluidPropertiesApp", MethaneFluidProperties)
Base class equation of state for fluids that use a Helmholtz free energy alpha(delta,...
static InputParameters validParams()
Methane (CH4) fluid properties as a function of pressure (Pa) and temperature (K).
const std::array< Real, 5 > _b0
const std::array< Real, 4 > _beta3
const std::array< Real, 4 > _N3
const Real _T_critical
Critical temperature (K)
virtual Real triplePointTemperature() const override
Triple point temperature.
virtual Real d2alpha_dtau2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt tau.
const std::array< int, 4 > _d3
const std::array< unsigned int, 23 > _d2
const std::array< Real, 23 > _N2
virtual Real vaporPressure(Real temperature) const override
Vapor pressure.
virtual std::string fluidName() const override
Fluid name.
virtual Real criticalTemperature() const override
Critical temperature.
const std::array< unsigned int, 23 > _c2
const Real _rho_critical
Critical density (kg/m^3)
const std::array< Real, 4 > _D3
virtual Real triplePointPressure() const override
Triple point pressure.
const Real _T_triple
Triple point temperature (K)
const std::array< Real, 7 > _b
Coefficients for thermal conductivity.
virtual Real dalpha_ddelta(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt delta.
virtual Real alpha(Real delta, Real tau) const override
Helmholtz free energy.
static InputParameters validParams()
const std::array< unsigned int, 13 > _d1
const std::array< Real, 4 > _alpha3
virtual Real criticalPressure() const override
Critical pressure.
const Real _p_critical
Critical pressure (Pa)
virtual Real molarMass() const override
Molar mass [kg/mol].
const std::array< Real, 4 > _t3
Real saturatedVaporDensity(Real temperature) const
Saturated vapor density of CH4 Valid for temperatures between the triple point temperature and critic...
const std::array< Real, 6 > _a
Coefficients for viscosity.
virtual Real d2alpha_ddelta2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta.
const std::array< Real, 5 > _a0
Coefficients for ideal gas component of the Helmholtz free energy.
const std::array< Real, 4 > _gamma3
const std::array< Real, 13 > _N1
Coefficients for residual component of the Helmholtz free energy.
virtual ~MethaneFluidProperties()
MethaneFluidProperties(const InputParameters ¶meters)
virtual Real dalpha_dtau(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt tau.
const Real _Mch4
Methane molar mass (kg/mol)
const Real _p_triple
Triple point pressure (Pa)
virtual Real k_from_p_T(Real pressure, Real temperature) const override
virtual Real mu_from_p_T(Real pressure, Real temperature) const override
const std::array< Real, 23 > _t2
Real saturatedLiquidDensity(Real temperature) const
Saturated liquid density of CH4 Valid for temperatures between the triple point temperature and criti...
const std::array< Real, 13 > _t1
virtual Real criticalDensity() const override
Critical density.
virtual std::vector< Real > henryCoefficients() const override
Henry's law coefficients for dissolution in water.
virtual Real d2alpha_ddeltatau(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta and tau.
void mooseError(Args &&... args) const