13#include "libmesh/utility.h"
28 _p_critical(3.3958e6),
30 _rho_molar_critical(11.1839),
85 const Real logTstar = std::log(temperature / 98.94);
89 for (std::size_t i = 0; i <
_bmu.size(); ++i)
93 0.0266958 * std::sqrt(1000.0 *
_Mn2 * temperature) / (0.3656 * 0.3656 * std::exp(logOmega));
97 for (std::size_t i = 0; i <
_Nmu.size(); ++i)
102 return (mu0 + mur) * 1.0e-6;
116 const Real logTstar = std::log(temperature / 98.94);
119 Real logOmega = 0.0, dlogOmega_dT = 0.0;
120 for (std::size_t i = 0; i <
_bmu.size(); ++i)
127 0.0266958 * std::sqrt(1000.0 *
_Mn2 * temperature) / (0.3656 * 0.3656 * std::exp(logOmega));
128 const Real dmu0_dT = 26.6958 *
_Mn2 * (1.0 - 2.0 * temperature * dlogOmega_dT) *
129 std::exp(-logOmega) /
130 (2.0 * std::sqrt(1000.0 *
_Mn2 * temperature) * 0.3656 * 0.3656);
133 Real mur = 0.0, dmur_drho = 0.0, dmur_dT = 0.0;
135 for (std::size_t i = 0; i <
_Nmu.size(); ++i)
142 dmur_dT += -
_tmu[i] * term / temperature;
146 mu = (mu0 + mur) * 1.0e-6;
147 dmu_drho = dmur_drho * 1.0e-6;
148 dmu_dT = (dmu0_dT + dmur_dT) * 1.0e-6 + dmu_drho * ddensity_dT;
155 const Real density =
rho_from_p_T(pressure, temperature);
161 Real pressure, Real temperature, Real &
mu, Real & dmu_dp, Real & dmu_dT)
const
163 Real
rho, drho_dp, drho_dT;
168 dmu_dp = dmu_drho * drho_dp;
194 dmu_dp = dmu_drho * drho_dp;
206 1.511 *
mu_from_rho_T(0.0, temperature) * 1.0e6 + 2.117 / tau - 3.332 * std::pow(tau, -0.7);
210 for (std::size_t i = 0; i <
_Nk.size(); ++i)
215 return (lambda0 + lambdar) * 1.0e-3;
222 const Real density =
rho_from_p_T(pressure, temperature);
228 Real pressure, Real temperature, Real & k, Real & dk_dp, Real & dk_dT)
const
232 const Real
eps = 1.0e-6;
233 const Real peps = pressure *
eps;
234 const Real Teps = temperature *
eps;
236 dk_dp = (this->
k_from_p_T(pressure + peps, temperature) - k) / peps;
237 dk_dT = (this->
k_from_p_T(pressure, temperature + Teps) - k) / Teps;
243 return {-9.67578, 4.72162, 11.70585};
249 if (temperature < _T_triple || temperature >
_T_critical)
250 throw MooseException(
"Temperature is out of range in " +
name() +
": vaporPressure()");
253 const Real theta = 1.0 - Tr;
255 const Real logpressure =
256 (-6.12445284 * theta + 1.2632722 * std::pow(theta, 1.5) - 0.765910082 * std::pow(theta, 2.5) -
257 1.77570564 * Utility::pow<5>(theta)) /
266 mooseError(
"vaporPressure() is not implemented");
272 if (temperature < _T_triple || temperature >
_T_critical)
273 throw MooseException(
"Temperature is out of range in " +
name() +
": vaporPressure()");
276 const Real theta = 1.0 - Tr;
278 const Real logpressure =
279 1.48654237 * std::pow(theta, 0.3294) - 0.280476066 * std::pow(theta, 2.0 / 3.0) +
280 0.0894143085 * std::pow(theta, 8.0 / 3.0) - 0.119879866 * std::pow(theta, 35.0 / 6.0);
288 if (temperature < _T_triple || temperature >
_T_critical)
289 throw MooseException(
"Temperature is out of range in " +
name() +
": vaporPressure()");
292 const Real theta = 1.0 - Tr;
294 const Real logpressure =
295 (-1.70127164 * std::pow(theta, 0.34) - 3.70402649 * std::pow(theta, 5.0 / 6.0) +
296 1.29859383 * std::pow(theta, 7.0 / 6.0) - 0.561424977 * std::pow(theta, 13.0 / 6.0) -
297 2.68505381 * std::pow(theta, 14.0 / 3.0)) /
307 const Real alpha0 = std::log(delta) +
_a[0] * std::log(tau) +
_a[1] +
_a[2] * tau +
_a[3] / tau +
308 _a[4] / Utility::pow<2>(tau) +
_a[5] / Utility::pow<3>(tau) +
309 _a[6] * std::log(1.0 - std::exp(-
_a[7] * tau));
314 for (std::size_t i = 0; i <
_N1.size(); ++i)
317 for (std::size_t i = 0; i <
_N2.size(); ++i)
321 for (std::size_t i = 0; i <
_N3.size(); ++i)
323 std::exp(-
_phi3[i] * Utility::pow<2>(delta - 1.0) -
327 return alpha0 + alphar;
334 const Real dalpha0 = 1.0 / delta;
339 for (std::size_t i = 0; i <
_N1.size(); ++i)
342 for (std::size_t i = 0; i <
_N2.size(); ++i)
347 for (std::size_t i = 0; i <
_N3.size(); ++i)
349 std::exp(-
_phi3[i] * Utility::pow<2>(delta - 1.0) -
351 (
_i3[i] - 2.0 * delta *
_phi3[i] * (delta - 1.0));
354 return dalpha0 + dalphar / delta;
361 const Real dalpha0 =
_a[0] +
_a[2] * tau -
_a[3] / tau - 2.0 *
_a[4] / Utility::pow<2>(tau) -
362 3.0 *
_a[5] / Utility::pow<3>(tau) +
363 _a[6] *
_a[7] * tau / (std::exp(
_a[7] * tau) - 1.0);
368 for (std::size_t i = 0; i <
_N1.size(); ++i)
371 for (std::size_t i = 0; i <
_N2.size(); ++i)
375 for (std::size_t i = 0; i <
_N3.size(); ++i)
377 std::exp(-
_phi3[i] * Utility::pow<2>(delta - 1.0) -
382 return (dalpha0 + dalphar) / tau;
389 const Real dalpha0 = -1.0 / delta / delta;
394 for (std::size_t i = 0; i <
_N1.size(); ++i)
398 for (std::size_t i = 0; i <
_N2.size(); ++i)
405 for (std::size_t i = 0; i <
_N3.size(); ++i)
407 std::exp(-
_phi3[i] * Utility::pow<2>(delta - 1.0) -
409 (Utility::pow<2>(
_i3[i] - 2.0 * delta *
_phi3[i] * (delta - 1.0)) -
_i3[i] -
410 2.0 * delta * delta *
_phi3[i]);
413 return dalpha0 + dalphar / delta / delta;
420 const Real dalpha0 = -
_a[0] + 2.0 *
_a[3] / tau + 6.0 *
_a[4] / Utility::pow<2>(tau) +
421 12.0 *
_a[5] / Utility::pow<3>(tau) -
422 _a[6] *
_a[7] *
_a[7] * tau * tau * std::exp(
_a[7] * tau) /
423 Utility::pow<2>(std::exp(
_a[7] * tau) - 1.0);
428 for (std::size_t i = 0; i <
_N1.size(); ++i)
432 for (std::size_t i = 0; i <
_N2.size(); ++i)
436 for (std::size_t i = 0; i <
_N3.size(); ++i)
438 std::exp(-
_phi3[i] * Utility::pow<2>(delta - 1.0) -
441 2.0 * tau * tau *
_beta3[i]);
444 return (dalpha0 + dalphar) / tau / tau;
454 for (std::size_t i = 0; i <
_N1.size(); ++i)
457 for (std::size_t i = 0; i <
_N2.size(); ++i)
462 for (std::size_t i = 0; i <
_N3.size(); ++i)
464 std::exp(-
_phi3[i] * Utility::pow<2>(delta - 1.0) -
466 (
_i3[i] - 2.0 * delta *
_phi3[i] * (delta - 1.0)) *
470 return dalphar / delta / tau;
registerMooseObject("FluidPropertiesApp", NitrogenFluidProperties)
Base class equation of state for fluids that use a Helmholtz free energy alpha(delta,...
static InputParameters validParams()
virtual Real rho_from_p_T(Real pressure, Real temperature) const override
void mooseError(Args &&... args) const
Nitrogen (N2) fluid properties as a function of pressure (Pa) and temperature (K).
const std::array< Real, 26 > _j2
const std::array< unsigned int, 4 > _i3
const Real _T_critical
Critical temperature (K)
const std::array< Real, 26 > _N2
NitrogenFluidProperties(const InputParameters ¶meters)
virtual Real dalpha_dtau(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt tau.
const std::array< unsigned int, 26 > _l2
virtual Real alpha(Real delta, Real tau) const override
Helmholtz free energy.
const std::array< Real, 4 > _gamma3
const std::array< unsigned int, 4 > _j3
virtual Real k_from_rho_T(Real density, Real temperature) const override
const std::array< Real, 6 > _tk
const std::array< unsigned int, 26 > _i2
const std::array< Real, 4 > _beta3
virtual Real dalpha_ddelta(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt delta.
const std::array< Real, 5 > _dmu
const std::array< Real, 5 > _tmu
const Real _p_critical
Critical pressure (Pa)
const std::array< unsigned int, 6 > _dk
const std::array< Real, 5 > _Nmu
virtual Real criticalDensity() const override
Critical density.
virtual std::string fluidName() const override
Fluid name.
const std::array< Real, 4 > _N3
const std::array< Real, 5 > _bmu
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, 6 > _j1
virtual Real d2alpha_ddeltatau(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta and tau.
virtual Real triplePointPressure() const override
Triple point pressure.
const std::array< Real, 6 > _gammak
const std::array< Real, 8 > _a
Coefficients for ideal gas component of the Helmholtz free energy.
const std::array< Real, 5 > _lmu
const std::array< unsigned int, 6 > _i1
const Real _rho_molar_critical
Critical molar density (mol/l)
Real saturatedVaporDensity(Real temperature) const
Saturated vapor density of N2 Valid for temperatures between the triple point temperature and critica...
virtual Real vaporPressure(Real temperature) const override
Vapor pressure.
virtual Real criticalPressure() const override
Critical pressure.
virtual Real molarMass() const override
Molar mass [kg/mol].
virtual Real criticalTemperature() const override
Critical temperature.
const Real _p_triple
Triple point pressure (Pa)
Real saturatedLiquidDensity(Real temperature) const
Saturated liquid density of N2 Valid for temperatures between the triple point temperature and critic...
virtual Real triplePointTemperature() const override
Triple point temperature.
const std::array< Real, 6 > _N1
Coefficients for residual component of the Helmholtz free energy.
virtual Real d2alpha_dtau2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt tau.
const std::array< Real, 4 > _phi3
static InputParameters validParams()
const std::array< Real, 5 > _gammamu
virtual Real k_from_p_T(Real pressure, Real temperature) const override
const Real _rho_critical
Critical density (kg/m^3)
const Real _Mn2
Nitrogen molar mass (kg/mol)
const std::array< Real, 6 > _Nk
Coefficients for thermal conductivity.
virtual std::vector< Real > henryCoefficients() const override
Henry's law coefficients for dissolution in water.
const Real _T_triple
Triple point temperature (K)
const std::array< unsigned int, 6 > _lk
virtual Real mu_from_rho_T(Real density, Real temperature) const override
virtual Real mu_from_p_T(Real pressure, Real temperature) const override
virtual void rho_mu_from_p_T(Real pressure, Real temperature, Real &rho, Real &mu) const override
Combined methods.