13 #include "libmesh/utility.h" 30 _rho_molar_critical(15.508),
31 _rho_critical(1000.0 * _rho_molar_critical * _Mh2),
84 const Real logTstar = std::log(Tstar);
90 for (std::size_t i = 0; i <
_amu.size(); ++i)
94 0.021357 * std::sqrt(1000.0 *
_Mh2 *
temperature) / (0.297 * 0.297 * std::exp(sum));
98 for (std::size_t i = 0; i <
_bmu.size(); ++i)
106 _cmu[0] * rhor * rhor *
107 std::exp(
_cmu[1] * Tr +
_cmu[2] / Tr +
_cmu[3] * rhor * rhor / (
_cmu[4] + Tr) +
123 const Real logTstar = std::log(Tstar);
126 const Real drhor_drho = 1.0 / 90.5;
130 Real sum = 0.0, dsum_dT = 0.0;
131 for (std::size_t i = 0; i <
_amu.size(); ++i)
138 0.021357 * std::sqrt(1000.0 *
_Mh2 *
temperature) / (0.297 * 0.297 * std::exp(sum));
139 const Real dmu0_dT = 21.357 *
_Mh2 * (1.0 - 2.0 *
temperature * dsum_dT) * std::exp(-sum) /
144 for (std::size_t i = 0; i <
_bmu.size(); ++i)
149 MathUtils::pow(0.297, 3) * sumr * (dmu0_dT / Tstar - mu0 / (30.41 * Tstar * Tstar));
154 const Real dexponent_drho =
157 const Real dexponent_dT =
161 mu = (mu0 + mu1 *
density +
_cmu[0] * rhor * rhor * std::exp(exponent)) * 1.0e-6;
163 (mu1 +
_cmu[0] * rhor * std::exp(exponent) * (2.0 * drhor_drho + rhor * dexponent_drho)) *
166 (dmu0_dT +
density * dmu1_dT +
_cmu[0] * rhor * rhor * dexponent_dT * std::exp(exponent)) *
168 dmu_drho * ddensity_dT;
188 dmu_dp = dmu_drho * drho_dp;
214 dmu_dp = dmu_drho * drho_dp;
226 for (std::size_t i = 0; i <
_a1k.size(); ++i)
230 for (std::size_t i = 0; i <
_a2k.size(); ++i)
233 const Real lambda0 = sum1 / sum2;
237 for (std::size_t i = 0; i <
_b1k.size(); ++i)
241 const Real lambdac = 6.24e-4 / (-2.58e-7 + std::abs(Tr - 1.0)) *
245 return lambda0 + lambdah + lambdac;
273 return {-4.73284, 6.08954, 6.06066};
279 if (temperature < _T_triple || temperature >
_T_critical)
280 throw MooseException(
"Temperature is out of range in " +
name() +
": vaporPressure()");
283 const Real theta = 1.0 - Tr;
285 const Real logpressure = (-4.89789 * theta + 0.988588 *
std::pow(theta, 1.5) +
286 0.349689 * Utility::pow<2>(theta) + 0.499356 *
std::pow(theta, 2.85)) /
295 mooseError(
"vaporPressure() is not implemented");
302 Real alpha0 = std::log(
delta) + 1.5 * std::log(tau) - 1.4579856475 + 1.888076782 * tau;
304 for (std::size_t i = 0; i <
_a.size(); ++i)
305 alpha0 +=
_a[i] * std::log(1.0 - std::exp(
_b[i] * tau));
310 for (std::size_t i = 0; i <
_t1.size(); ++i)
313 for (std::size_t i = 0; i <
_t2.size(); ++i)
316 for (std::size_t i = 0; i <
_t3.size(); ++i)
322 return alpha0 + alphar;
334 for (std::size_t i = 0; i <
_t1.size(); ++i)
337 for (std::size_t i = 0; i <
_t2.size(); ++i)
341 for (std::size_t i = 0; i <
_t3.size(); ++i)
348 return dalpha0 + dalphar /
delta;
355 Real dalpha0 = 1.5 / tau + 1.888076782;
357 for (std::size_t i = 0; i <
_a.size(); ++i)
358 dalpha0 +=
_a[i] *
_b[i] * (1.0 - 1.0 / (1.0 - std::exp(
_b[i] * tau)));
363 for (std::size_t i = 0; i <
_t1.size(); ++i)
366 for (std::size_t i = 0; i <
_t2.size(); ++i)
370 for (std::size_t i = 0; i <
_t3.size(); ++i)
377 return dalpha0 + dalphar / tau;
389 for (std::size_t i = 0; i <
_t1.size(); ++i)
393 for (std::size_t i = 0; i <
_t2.size(); ++i)
397 for (std::size_t i = 0; i <
_t3.size(); ++i)
414 Real dalpha0 = -1.5 / tau / tau;
416 for (std::size_t i = 0; i <
_a.size(); ++i)
418 Real exptau = std::exp(
_b[i] * tau);
419 dalpha0 -=
_a[i] * (
_b[i] *
_b[i] * exptau / (1.0 - exptau) * (exptau / (1.0 - exptau) + 1.0));
425 for (std::size_t i = 0; i <
_t1.size(); ++i)
429 for (std::size_t i = 0; i <
_t2.size(); ++i)
433 for (std::size_t i = 0; i <
_t3.size(); ++i)
438 2.0 *
_beta3[i] * tau * tau *
443 return dalpha0 + dalphar / tau / tau;
452 for (std::size_t i = 0; i <
_t1.size(); ++i)
455 for (std::size_t i = 0; i <
_t2.size(); ++i)
459 for (std::size_t i = 0; i <
_t3.size(); ++i)
467 return dalphar /
delta / tau;
const std::array< Real, 2 > _N2
virtual Real dalpha_dtau(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt tau.
const std::array< Real, 6 > _cmu
const std::array< Real, 5 > _beta3
const std::array< Real, 5 > _t3
virtual Real d2alpha_ddelta2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta.
const std::array< Real, 5 > _b2k
virtual Real criticalTemperature() const override
Critical temperature.
const std::array< Real, 7 > _N1
Coefficients for residual component of the Helmholtz free energy.
const std::array< Real, 5 > _N3
const std::array< unsigned int, 7 > _d1
virtual Real mu_from_p_T(Real pressure, Real temperature) const override
const Real _T_triple
Triple point temperature (K)
virtual Real mu_from_rho_T(Real density, Real temperature) const override
HydrogenFluidProperties(const InputParameters ¶meters)
const std::array< Real, 7 > _t1
virtual Real dalpha_ddelta(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt delta.
virtual Real triplePointPressure() const override
Triple point pressure.
virtual Real k_from_p_T(Real pressure, Real temperature) const override
const std::array< Real, 4 > _a2k
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$.
const std::array< Real, 5 > _phi3
const std::array< Real, 5 > _b
const std::array< unsigned int, 2 > _d2
static const std::string temperature
const std::array< Real, 5 > _b1k
virtual const std::string & name() const
virtual std::vector< Real > henryCoefficients() const override
Henry's law coefficients for dissolution in water.
const std::array< Real, 5 > _D3
virtual std::string fluidName() const override
Fluid name.
const std::array< Real, 5 > _amu
Coefficients for viscosity.
const std::array< Real, 5 > _a
Coefficients for ideal gas component of the Helmholtz free energy.
virtual Real triplePointTemperature() const override
Triple point temperature.
virtual Real d2alpha_ddeltatau(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta and tau.
static InputParameters validParams()
const std::array< Real, 5 > _gamma3
const Real _rho_critical
Critical density (kg/m^3)
static const std::string mu
const Real _Mh2
Hydrogen molar mass (kg/mol)
Hydrogen (H2) fluid properties as a function of pressure (Pa) and temperature (K).
const std::array< Real, 7 > _a1k
Coefficients for thermal conductivity.
virtual Real k_from_rho_T(Real density, Real temperature) const override
virtual Real rho_from_p_T(Real pressure, Real temperature) const override
static InputParameters validParams()
virtual Real criticalDensity() const override
Critical density.
const Real _T_critical
Critical temperature (K)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual Real molarMass() const override
Molar mass [kg/mol].
virtual Real alpha(Real delta, Real tau) const override
Helmholtz free energy for H2 From Leachman et al (reference above)
static const std::string pressure
const Real _p_triple
Triple point pressure (Pa)
const std::array< Real, 2 > _t2
void mooseError(Args &&... args) const
const Real _p_critical
Critical pressure (Pa)
virtual void rho_mu_from_p_T(Real pressure, Real temperature, Real &rho, Real &mu) const override
Combined methods.
const std::array< unsigned int, 5 > _d3
registerMooseObject("FluidPropertiesApp", HydrogenFluidProperties)
virtual Real d2alpha_dtau2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt tau.
virtual Real criticalPressure() const override
Critical pressure.
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)
static const std::string k
virtual Real vaporPressure(Real temperature) const override
Vapor pressure.
const std::array< Real, 7 > _bmu