Go to the documentation of this file.
11 #include "MathUtils.h"
12 #include "libmesh/utility.h"
21 params.addClassDescription(
"Fluid properties for methane (CH4)");
28 _p_critical(4.5992e6),
30 _rho_critical(162.66),
84 if (temperature <= 200.0 || temperature >= 1000.0)
86 "Temperature ",
temperature,
"K out of range (200K, 1000K) in ",
name(),
": mu_from_p_T()");
89 for (std::size_t i = 0; i <
_a.size(); ++i)
92 return viscosity * 1.e-6;
104 for (std::size_t i = 0; i <
_a.size(); ++i)
106 dmu_dT = dmudt * 1.e-6;
113 if (temperature <= 200.0 || temperature >= 1000.0)
115 "Temperature ",
temperature,
"K out of range (200K, 1000K) in ",
name(),
": k()");
118 for (std::size_t i = 0; i <
_b.size(); ++i)
126 Real , Real
temperature, Real & k, Real & dk_dp, Real & dk_dT)
const
129 if (temperature <= 200.0 || temperature >= 1000.0)
131 "Temperature ",
temperature,
"K out of range (200K, 1000K) in ",
name(),
": k()");
133 Real kt = 0.0, dkt_dT = 0.0;
135 for (std::size_t i = 0; i <
_b.size(); ++i)
138 for (std::size_t i = 1; i <
_b.size(); ++i)
149 if (temperature < _T_triple || temperature >
_T_critical)
150 mooseException(
"Temperature is out of range in ",
name(),
": vaporPressure()");
153 const Real theta = 1.0 - Tr;
155 const Real logpressure = (-6.036219 * theta + 1.409353 *
std::pow(theta, 1.5) -
156 0.4945199 * Utility::pow<2>(theta) - 1.443048 *
std::pow(theta, 4.5)) /
165 mooseError(
name(),
": vaporPressure() is not implemented");
171 return {-10.44708, 4.66491, 12.12986};
177 if (temperature < _T_triple || temperature >
_T_critical)
179 "Temperature ",
temperature,
" is out of range in ",
name(),
": saturatedLiquidDensity()");
182 const Real theta = 1.0 - Tr;
184 const Real logdensity = 1.9906389 *
std::pow(theta, 0.354) - 0.78756197 * std::sqrt(theta) +
193 if (temperature < _T_triple || temperature >
_T_critical)
195 "Temperature ",
temperature,
" is out of range in ",
name(),
": saturatedVaporDensity()");
198 const Real theta = 1.0 - Tr;
200 const Real logdensity =
201 -1.880284 *
std::pow(theta, 0.354) - 2.8526531 *
std::pow(theta, 5.0 / 6.0) -
203 13.191859 *
std::pow(theta, 25.0 / 6.0) - 37.553961 *
std::pow(theta, 47.0 / 6.0);
212 Real alpha0 = std::log(delta) + 9.91243972 - 6.33270087 * tau + 3.0016 * std::log(tau);
214 for (std::size_t i = 0; i <
_a0.size(); ++i)
215 alpha0 +=
_a0[i] * std::log(1.0 - std::exp(-
_b0[i] * tau));
220 for (std::size_t i = 0; i <
_t1.size(); ++i)
223 for (std::size_t i = 0; i <
_t2.size(); ++i)
227 for (std::size_t i = 0; i <
_t3.size(); ++i)
229 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
233 return alpha0 + alphar;
240 Real dalpha0 = 1.0 / delta;
245 for (std::size_t i = 0; i <
_t1.size(); ++i)
248 for (std::size_t i = 0; i <
_t2.size(); ++i)
253 for (std::size_t i = 0; i <
_t3.size(); ++i)
255 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
260 return dalpha0 + dalphar / delta;
267 Real dalpha0 = -6.33270087 + 3.0016 / tau;
269 for (std::size_t i = 0; i <
_a0.size(); ++i)
270 dalpha0 +=
_a0[i] *
_b0[i] * (1.0 / (1.0 - std::exp(-
_b0[i] * tau)) - 1.0);
275 for (std::size_t i = 0; i <
_t1.size(); ++i)
278 for (std::size_t i = 0; i <
_t2.size(); ++i)
282 for (std::size_t i = 0; i <
_t3.size(); ++i)
284 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
289 return dalpha0 + dalphar / tau;
296 Real dalpha0 = -1.0 / delta / delta;
301 for (std::size_t i = 0; i <
_t1.size(); ++i)
305 for (std::size_t i = 0; i <
_t2.size(); ++i)
312 for (std::size_t i = 0; i <
_t3.size(); ++i)
314 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
323 return dalpha0 + dalphar / delta / delta;
330 Real dalpha0 = -3.0016 / tau / tau;
332 for (std::size_t i = 0; i <
_a0.size(); ++i)
334 Real exptau = std::exp(-
_b0[i] * tau);
335 dalpha0 -=
_a0[i] * (
_b0[i] *
_b0[i] * exptau / (1.0 - exptau) / (1.0 - exptau));
341 for (std::size_t i = 0; i <
_t1.size(); ++i)
345 for (std::size_t i = 0; i <
_t2.size(); ++i)
349 for (std::size_t i = 0; i <
_t3.size(); ++i)
351 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
357 return dalpha0 + dalphar / tau / tau;
366 for (std::size_t i = 0; i <
_t1.size(); ++i)
369 for (std::size_t i = 0; i <
_t2.size(); ++i)
374 for (std::size_t i = 0; i <
_t3.size(); ++i)
376 std::exp(-
_alpha3[i] * Utility::pow<2>(delta -
_D3[i]) -
382 return dalphar / delta / tau;
const std::array< Real, 4 > _beta3
virtual Real k_from_p_T(Real pressure, Real temperature) const override
const std::array< unsigned int, 23 > _d2
const std::array< Real, 4 > _N3
Methane (CH4) fluid properties as a function of pressure (Pa) and temperature (K).
const Real _p_critical
Critical pressure (Pa)
const std::array< Real, 4 > _alpha3
const std::array< int, 4 > _d3
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
const std::array< Real, 6 > _a
Coefficients for viscosity.
InputParameters validParams< MethaneFluidProperties >()
InputParameters validParams< HelmholtzFluidProperties >()
virtual std::string fluidName() const override
virtual std::vector< Real > henryCoefficients() const override
Henry's law coefficients for dissolution in water.
virtual Real criticalDensity() const override
Critical density.
virtual ~MethaneFluidProperties()
const Real _T_critical
Critical temperature (K)
virtual Real criticalPressure() const override
Critical pressure.
const Real _T_triple
Triple point temperature (K)
Real saturatedVaporDensity(Real temperature) const
Saturated vapor density of CH4 Valid for temperatures between the triple point temperature and critic...
const std::array< unsigned int, 23 > _c2
const std::array< unsigned int, 13 > _d1
const Real _p_triple
Triple point pressure (Pa)
virtual Real triplePointTemperature() const override
Triple point temperature.
const Real _rho_critical
Critical density (kg/m^3)
const std::array< Real, 5 > _a0
Coefficients for ideal gas component of the Helmholtz free energy.
virtual Real alpha(Real delta, Real tau) const override
Helmholtz free energy.
virtual Real triplePointPressure() const override
Triple point pressure.
const std::array< Real, 4 > _t3
virtual Real vaporPressure(Real temperature) const override
Vapor pressure.
virtual Real criticalTemperature() const override
Critical temperature.
virtual Real d2alpha_ddeltatau(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta and tau.
const std::array< Real, 23 > _N2
virtual Real dalpha_dtau(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt tau.
const std::array< Real, 13 > _N1
Coefficients for residual component of the Helmholtz free energy.
Base class equation of state for fluids that use a Helmholtz free energy alpha(delta,...
Real saturatedLiquidDensity(Real temperature) const
Saturated liquid density of CH4 Valid for temperatures between the triple point temperature and criti...
virtual Real mu_from_p_T(Real pressure, Real temperature) const override
virtual Real molarMass() const override
Fluid name.
MethaneFluidProperties(const InputParameters ¶meters)
const std::string temperature
virtual Real dalpha_ddelta(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt delta.
const std::array< Real, 13 > _t1
const std::array< Real, 5 > _b0
const std::array< Real, 4 > _D3
registerMooseObject("FluidPropertiesApp", MethaneFluidProperties)
const std::array< Real, 7 > _b
Coefficients for thermal conductivity.
virtual Real d2alpha_ddelta2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta.
const Real _Mch4
Methane molar mass (kg/mol)
const std::array< Real, 4 > _gamma3
const std::array< Real, 23 > _t2
virtual Real d2alpha_dtau2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt tau.
const std::string pressure