Go to the documentation of this file.
11 #include "Conversion.h"
12 #include "MathUtils.h"
13 #include "libmesh/utility.h"
22 params.addClassDescription(
"Fluid properties for Hydrogen (H2)");
31 _rho_molar_critical(15.508),
32 _rho_critical(1000.0 * _rho_molar_critical * _Mh2),
85 const Real logTstar = std::log(Tstar);
87 const Real rhor =
density / 90.5;
91 for (std::size_t i = 0; i <
_amu.size(); ++i)
95 0.021357 * std::sqrt(1000.0 *
_Mh2 *
temperature) / (0.297 * 0.297 * std::exp(sum));
99 for (std::size_t i = 0; i <
_bmu.size(); ++i)
107 _cmu[0] * rhor * rhor *
108 std::exp(
_cmu[1] * Tr +
_cmu[2] / Tr +
_cmu[3] * rhor * rhor / (
_cmu[4] + Tr) +
124 const Real logTstar = std::log(Tstar);
126 const Real rhor =
density / 90.5;
127 const Real drhor_drho = 1.0 / 90.5;
131 Real sum = 0.0, dsum_dT = 0.0;
132 for (std::size_t i = 0; i <
_amu.size(); ++i)
139 0.021357 * std::sqrt(1000.0 *
_Mh2 *
temperature) / (0.297 * 0.297 * std::exp(sum));
140 const Real dmu0_dT = 21.357 *
_Mh2 * (1.0 - 2.0 *
temperature * dsum_dT) * std::exp(-sum) /
145 for (std::size_t i = 0; i <
_bmu.size(); ++i)
150 MathUtils::pow(0.297, 3) * sumr * (dmu0_dT / Tstar - mu0 / (30.41 * Tstar * Tstar));
153 const Real exponent =
_cmu[1] * Tr +
_cmu[2] / Tr +
_cmu[3] * rhor * rhor / (
_cmu[4] + Tr) +
155 const Real dexponent_drho =
158 const Real dexponent_dT =
162 mu = (mu0 + mu1 *
density +
_cmu[0] * rhor * rhor * std::exp(exponent)) * 1.0e-6;
164 (mu1 +
_cmu[0] * rhor * std::exp(exponent) * (2.0 * drhor_drho + rhor * dexponent_drho)) *
167 (dmu0_dT +
density * dmu1_dT +
_cmu[0] * rhor * rhor * dexponent_dT * std::exp(exponent)) *
169 dmu_drho * ddensity_dT;
184 Real
rho, drho_dp, drho_dT;
189 dmu_dp = dmu_drho * drho_dp;
215 dmu_dp = dmu_drho * drho_dp;
223 const Real rhor =
density / 31.262;
227 for (std::size_t i = 0; i <
_a1k.size(); ++i)
231 for (std::size_t i = 0; i <
_a2k.size(); ++i)
234 const Real lambda0 = sum1 / sum2;
238 for (std::size_t i = 0; i <
_b1k.size(); ++i)
242 const Real lambdac = 6.24e-4 / (-2.58e-7 + std::abs(Tr - 1.0)) *
246 return lambda0 + lambdah + lambdac;
263 const Real eps = 1.0e-6;
274 return {-4.73284, 6.08954, 6.06066};
280 if (temperature < _T_triple || temperature >
_T_critical)
281 throw MooseException(
"Temperature is out of range in " +
name() +
": vaporPressure()");
284 const Real theta = 1.0 - Tr;
286 const Real logpressure = (-4.89789 * theta + 0.988588 *
std::pow(theta, 1.5) +
287 0.349689 * Utility::pow<2>(theta) + 0.499356 *
std::pow(theta, 2.85)) /
296 mooseError(
name(),
": vaporPressure() is not implemented");
303 Real alpha0 = std::log(delta) + 1.5 * std::log(tau) - 1.4579856475 + 1.888076782 * tau;
305 for (std::size_t i = 0; i <
_a.size(); ++i)
306 alpha0 +=
_a[i] * std::log(1.0 - std::exp(
_b[i] * tau));
311 for (std::size_t i = 0; i <
_t1.size(); ++i)
314 for (std::size_t i = 0; i <
_t2.size(); ++i)
317 for (std::size_t i = 0; i <
_t3.size(); ++i)
319 std::exp(
_phi3[i] * Utility::pow<2>(delta -
_D3[i]) +
323 return alpha0 + alphar;
330 Real dalpha0 = 1.0 / delta;
335 for (std::size_t i = 0; i <
_t1.size(); ++i)
338 for (std::size_t i = 0; i <
_t2.size(); ++i)
342 for (std::size_t i = 0; i <
_t3.size(); ++i)
344 std::exp(
_phi3[i] * Utility::pow<2>(delta -
_D3[i]) +
346 (
_d3[i] + delta * (2.0 *
_phi3[i] * (delta -
_D3[i])));
349 return dalpha0 + dalphar / delta;
356 Real dalpha0 = 1.5 / tau + 1.888076782;
358 for (std::size_t i = 0; i <
_a.size(); ++i)
359 dalpha0 +=
_a[i] *
_b[i] * (1.0 - 1.0 / (1.0 - std::exp(
_b[i] * tau)));
364 for (std::size_t i = 0; i <
_t1.size(); ++i)
367 for (std::size_t i = 0; i <
_t2.size(); ++i)
371 for (std::size_t i = 0; i <
_t3.size(); ++i)
373 std::exp(
_phi3[i] * Utility::pow<2>(delta -
_D3[i]) +
378 return dalpha0 + dalphar / tau;
385 Real dalpha0 = -1.0 / delta / delta;
390 for (std::size_t i = 0; i <
_t1.size(); ++i)
394 for (std::size_t i = 0; i <
_t2.size(); ++i)
396 (delta * delta - 2.0 *
_d2[i] * delta +
_d2[i] * (
_d2[i] - 1.0));
398 for (std::size_t i = 0; i <
_t3.size(); ++i)
400 std::exp(
_phi3[i] * Utility::pow<2>(delta -
_D3[i]) +
403 2.0 * delta * delta *
_phi3[i] *
404 (1.0 + 2.0 *
_phi3[i] * (
_D3[i] - delta) * (
_D3[i] - delta)) +
405 _d3[i] * (4.0 * delta *
_phi3[i] * (delta -
_D3[i]) - 1.0));
408 return dalpha0 + dalphar / delta / delta;
415 Real dalpha0 = -1.5 / tau / tau;
417 for (std::size_t i = 0; i <
_a.size(); ++i)
419 Real exptau = std::exp(
_b[i] * tau);
420 dalpha0 -=
_a[i] * (
_b[i] *
_b[i] * exptau / (1.0 - exptau) * (exptau / (1.0 - exptau) + 1.0));
426 for (std::size_t i = 0; i <
_t1.size(); ++i)
430 for (std::size_t i = 0; i <
_t2.size(); ++i)
434 for (std::size_t i = 0; i <
_t3.size(); ++i)
436 std::exp(
_phi3[i] * Utility::pow<2>(delta -
_D3[i]) +
439 2.0 *
_beta3[i] * tau * tau *
444 return dalpha0 + dalphar / tau / tau;
453 for (std::size_t i = 0; i <
_t1.size(); ++i)
456 for (std::size_t i = 0; i <
_t2.size(); ++i)
458 std::exp(-delta) * (
_d2[i] - delta);
460 for (std::size_t i = 0; i <
_t3.size(); ++i)
462 std::exp(
_phi3[i] * Utility::pow<2>(delta -
_D3[i]) +
464 (
_d3[i] + delta * (2.0 *
_phi3[i] * (delta -
_D3[i]))) *
468 return dalphar / delta / tau;
const std::array< Real, 7 > _t1
virtual Real criticalTemperature() const override
Critical temperature.
const std::array< unsigned int, 5 > _d3
Hydrogen (H2) 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< Real, 2 > _N2
virtual Real k_from_p_T(Real pressure, Real temperature) const override
virtual Real d2alpha_dtau2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt tau.
const std::array< Real, 4 > _a2k
const std::array< Real, 5 > _beta3
virtual Real mu_from_rho_T(Real density, Real temperature) const override
const std::array< Real, 7 > _bmu
const std::array< Real, 5 > _N3
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
virtual Real mu_from_p_T(Real pressure, Real temperature) const override
virtual std::vector< Real > henryCoefficients() const override
Henry's law coefficients for dissolution in water.
const std::array< Real, 5 > _b2k
virtual Real dalpha_ddelta(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt delta.
const std::array< Real, 5 > _b
InputParameters validParams< HelmholtzFluidProperties >()
virtual Real triplePointPressure() const override
Triple point pressure.
const std::array< unsigned int, 2 > _d2
const std::array< Real, 5 > _phi3
HydrogenFluidProperties(const InputParameters ¶meters)
virtual Real triplePointTemperature() const override
Triple point temperature.
const std::array< Real, 5 > _gamma3
const std::array< Real, 5 > _D3
virtual std::string fluidName() const override
const Real _rho_critical
Critical density (kg/m^3)
const std::array< Real, 5 > _amu
Coefficients for viscosity.
virtual Real criticalDensity() const override
Critical density.
virtual Real d2alpha_ddeltatau(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta and tau.
InputParameters validParams< HydrogenFluidProperties >()
const Real _T_critical
Critical temperature (K)
const std::string density
const std::array< Real, 5 > _b1k
const std::array< Real, 7 > _a1k
Coefficients for thermal conductivity.
virtual Real molarMass() const override
Fluid name.
const std::array< Real, 5 > _a
Coefficients for ideal gas component of the Helmholtz free energy.
const Real _p_triple
Triple point pressure (Pa)
Base class equation of state for fluids that use a Helmholtz free energy alpha(delta,...
const Real _Mh2
Hydrogen molar mass (kg/mol)
virtual Real k_from_rho_T(Real density, Real temperature) const override
const std::string temperature
virtual Real alpha(Real delta, Real tau) const override
Helmholtz free energy for H2 From Leachman et al (reference above)
virtual Real vaporPressure(Real temperature) const override
Vapor pressure.
virtual Real criticalPressure() const override
Critical pressure.
const std::array< Real, 2 > _t2
const Real _p_critical
Critical pressure (Pa)
virtual Real d2alpha_ddelta2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta.
registerMooseObject("FluidPropertiesApp", HydrogenFluidProperties)
const std::array< Real, 7 > _N1
Coefficients for residual component of the Helmholtz free energy.
const std::array< Real, 6 > _cmu
const std::array< unsigned int, 7 > _d1
virtual Real dalpha_dtau(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt tau.
const std::string pressure
const std::array< Real, 5 > _t3
virtual void rho_mu_from_p_T(Real pressure, Real temperature, Real &rho, Real &mu) const override
Combined methods.
const Real _T_triple
Triple point temperature (K)