13 #include "libmesh/utility.h" 28 _p_critical(3.3958e6),
30 _rho_molar_critical(11.1839),
89 for (std::size_t i = 0; i <
_bmu.size(); ++i)
97 for (std::size_t i = 0; i <
_Nmu.size(); ++i)
102 return (mu0 + mur) * 1.0e-6;
119 Real logOmega = 0.0, dlogOmega_dT = 0.0;
120 for (std::size_t i = 0; i <
_bmu.size(); ++i)
129 std::exp(-logOmega) /
133 Real mur = 0.0, dmur_drho = 0.0, dmur_dT = 0.0;
135 for (std::size_t i = 0; i <
_Nmu.size(); ++i)
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;
168 dmu_dp = dmu_drho * drho_dp;
194 dmu_dp = dmu_drho * drho_dp;
210 for (std::size_t i = 0; i <
_Nk.size(); ++i)
215 return (lambda0 + lambdar) * 1.0e-3;
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;
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) -
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;
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) -
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) -
470 return dalphar /
delta / tau;
const std::array< Real, 6 > _tk
const std::array< Real, 5 > _gammamu
const std::array< Real, 5 > _Nmu
const std::array< Real, 4 > _gamma3
const Real _T_triple
Triple point temperature (K)
virtual Real d2alpha_ddeltatau(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta and tau.
virtual Real alpha(Real delta, Real tau) const override
Helmholtz free energy.
const std::array< unsigned int, 4 > _j3
virtual Real criticalTemperature() const override
Critical temperature.
const std::array< Real, 6 > _gammak
virtual Real d2alpha_dtau2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt tau.
const std::array< Real, 6 > _Nk
Coefficients for thermal conductivity.
const std::array< unsigned int, 26 > _i2
virtual Real criticalPressure() const override
Critical pressure.
const std::array< Real, 4 > _phi3
const std::array< Real, 26 > _j2
Real saturatedVaporDensity(Real temperature) const
Saturated vapor density of N2 Valid for temperatures between the triple point temperature and critica...
const std::array< Real, 5 > _bmu
Coefficients for viscosity.
static const std::string density
int delta(unsigned int i, unsigned int j)
Delta function, which returns zero if $i j$ and unity if $i=j$.
virtual Real d2alpha_ddelta2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta.
virtual Real vaporPressure(Real temperature) const override
Vapor pressure.
virtual std::string fluidName() const override
static const std::string temperature
ADRealEigenVector< T, D, asd > sqrt(const ADRealEigenVector< T, D, asd > &)
virtual const std::string & name() const
virtual Real criticalDensity() const override
Critical density.
const Real _rho_molar_critical
Critical molar density (mol/l)
const std::array< Real, 8 > _a
Coefficients for ideal gas component of the Helmholtz free energy.
const std::array< unsigned int, 6 > _i1
virtual Real mu_from_rho_T(Real density, Real temperature) const override
const std::array< Real, 26 > _N2
Real saturatedLiquidDensity(Real temperature) const
Saturated liquid density of N2 Valid for temperatures between the triple point temperature and critic...
const std::array< unsigned int, 6 > _dk
static const std::string mu
virtual Real mu_from_p_T(Real pressure, Real temperature) const override
Nitrogen (N2) fluid properties as a function of pressure (Pa) and temperature (K).
virtual Real rho_from_p_T(Real pressure, Real temperature) const override
const std::array< unsigned int, 4 > _i3
const std::array< Real, 6 > _j1
const std::array< Real, 5 > _tmu
const std::array< Real, 5 > _dmu
const Real _rho_critical
Critical density (kg/m^3)
static InputParameters validParams()
const std::array< Real, 5 > _lmu
const std::array< unsigned int, 26 > _l2
NitrogenFluidProperties(const InputParameters ¶meters)
const std::array< Real, 6 > _N1
Coefficients for residual component of the Helmholtz free energy.
const std::array< unsigned int, 6 > _lk
const Real _T_critical
Critical temperature (K)
registerMooseObject("FluidPropertiesApp", NitrogenFluidProperties)
const Real _p_critical
Critical pressure (Pa)
virtual Real triplePointTemperature() const override
Triple point temperature.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static InputParameters validParams()
virtual Real k_from_p_T(Real pressure, Real temperature) const override
const std::array< Real, 4 > _N3
virtual Real k_from_rho_T(Real density, Real temperature) const override
const Real _Mn2
Nitrogen molar mass (kg/mol)
virtual void rho_mu_from_p_T(Real pressure, Real temperature, Real &rho, Real &mu) const override
Combined methods.
const std::array< Real, 4 > _beta3
static const std::string pressure
const Real _p_triple
Triple point pressure (Pa)
void mooseError(Args &&... args) const
virtual Real triplePointPressure() const override
Triple point pressure.
virtual Real molarMass() const override
Fluid name.
virtual Real dalpha_ddelta(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt delta.
Base class equation of state for fluids that use a Helmholtz free energy alpha(delta, tau), where delta is a scaled density and tau is a scaled temperature.
MooseUnits pow(const MooseUnits &, int)
virtual Real dalpha_dtau(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt tau.
static const std::string k
virtual std::vector< Real > henryCoefficients() const override
Henry's law coefficients for dissolution in water.