12 #include "libmesh/utility.h" 27 _p_critical(4.5992e6),
29 _rho_critical(162.66),
83 if (temperature <= 200.0 || temperature >= 1000.0)
85 "Temperature ",
temperature,
"K out of range (200K, 1000K) in ",
name(),
": mu_from_p_T()");
88 for (std::size_t i = 0; i <
_a.size(); ++i)
91 return viscosity * 1.e-6;
103 for (std::size_t i = 0; i <
_a.size(); ++i)
105 dmu_dT = dmudt * 1.e-6;
112 if (temperature <= 200.0 || temperature >= 1000.0)
114 "Temperature ",
temperature,
"K out of range (200K, 1000K) in ",
name(),
": k()");
117 for (std::size_t i = 0; i <
_b.size(); ++i)
125 Real , Real
temperature, Real &
k, Real & dk_dp, Real & dk_dT)
const 128 if (temperature <= 200.0 || temperature >= 1000.0)
130 "Temperature ",
temperature,
"K out of range (200K, 1000K) in ",
name(),
": k()");
132 Real kt = 0.0, dkt_dT = 0.0;
134 for (std::size_t i = 0; i <
_b.size(); ++i)
137 for (std::size_t i = 1; i <
_b.size(); ++i)
148 if (temperature < _T_triple || temperature >
_T_critical)
149 mooseException(
"Temperature is out of range in ",
name(),
": vaporPressure()");
152 const Real theta = 1.0 - Tr;
154 const Real logpressure = (-6.036219 * theta + 1.409353 *
std::pow(theta, 1.5) -
155 0.4945199 * Utility::pow<2>(theta) - 1.443048 *
std::pow(theta, 4.5)) /
164 mooseError(
"vaporPressure() is not implemented");
170 return {-10.44708, 4.66491, 12.12986};
176 if (temperature < _T_triple || temperature >
_T_critical)
178 "Temperature ",
temperature,
" is out of range in ",
name(),
": saturatedLiquidDensity()");
181 const Real theta = 1.0 - Tr;
183 const Real logdensity = 1.9906389 *
std::pow(theta, 0.354) - 0.78756197 * std::sqrt(theta) +
192 if (temperature < _T_triple || temperature >
_T_critical)
194 "Temperature ",
temperature,
" is out of range in ",
name(),
": saturatedVaporDensity()");
197 const Real theta = 1.0 - Tr;
199 const Real logdensity =
200 -1.880284 *
std::pow(theta, 0.354) - 2.8526531 *
std::pow(theta, 5.0 / 6.0) -
202 13.191859 *
std::pow(theta, 25.0 / 6.0) - 37.553961 *
std::pow(theta, 47.0 / 6.0);
211 Real alpha0 = std::log(
delta) + 9.91243972 - 6.33270087 * tau + 3.0016 * std::log(tau);
213 for (std::size_t i = 0; i <
_a0.size(); ++i)
214 alpha0 +=
_a0[i] * std::log(1.0 - std::exp(-
_b0[i] * tau));
219 for (std::size_t i = 0; i <
_t1.size(); ++i)
222 for (std::size_t i = 0; i <
_t2.size(); ++i)
226 for (std::size_t i = 0; i <
_t3.size(); ++i)
232 return alpha0 + alphar;
244 for (std::size_t i = 0; i <
_t1.size(); ++i)
247 for (std::size_t i = 0; i <
_t2.size(); ++i)
252 for (std::size_t i = 0; i <
_t3.size(); ++i)
259 return dalpha0 + dalphar /
delta;
266 Real dalpha0 = -6.33270087 + 3.0016 / tau;
268 for (std::size_t i = 0; i <
_a0.size(); ++i)
269 dalpha0 +=
_a0[i] *
_b0[i] * (1.0 / (1.0 - std::exp(-
_b0[i] * tau)) - 1.0);
274 for (std::size_t i = 0; i <
_t1.size(); ++i)
277 for (std::size_t i = 0; i <
_t2.size(); ++i)
281 for (std::size_t i = 0; i <
_t3.size(); ++i)
288 return dalpha0 + dalphar / tau;
300 for (std::size_t i = 0; i <
_t1.size(); ++i)
304 for (std::size_t i = 0; i <
_t2.size(); ++i)
311 for (std::size_t i = 0; i <
_t3.size(); ++i)
329 Real dalpha0 = -3.0016 / tau / tau;
331 for (std::size_t i = 0; i <
_a0.size(); ++i)
333 Real exptau = std::exp(-
_b0[i] * tau);
334 dalpha0 -=
_a0[i] * (
_b0[i] *
_b0[i] * exptau / (1.0 - exptau) / (1.0 - exptau));
340 for (std::size_t i = 0; i <
_t1.size(); ++i)
344 for (std::size_t i = 0; i <
_t2.size(); ++i)
348 for (std::size_t i = 0; i <
_t3.size(); ++i)
356 return dalpha0 + dalphar / tau / tau;
365 for (std::size_t i = 0; i <
_t1.size(); ++i)
368 for (std::size_t i = 0; i <
_t2.size(); ++i)
373 for (std::size_t i = 0; i <
_t3.size(); ++i)
381 return dalphar /
delta / tau;
const Real _T_triple
Triple point temperature (K)
const std::array< Real, 4 > _t3
virtual Real criticalPressure() const override
Critical pressure.
const std::array< Real, 5 > _a0
Coefficients for ideal gas component of the Helmholtz free energy.
virtual Real mu_from_p_T(Real pressure, Real temperature) const override
virtual Real alpha(Real delta, Real tau) const override
Helmholtz free energy.
const std::array< Real, 5 > _b0
const std::array< Real, 4 > _D3
virtual Real vaporPressure(Real temperature) const override
Vapor pressure.
Real saturatedLiquidDensity(Real temperature) const
Saturated liquid density of CH4 Valid for temperatures between the triple point temperature and criti...
const Real _p_triple
Triple point pressure (Pa)
const std::array< unsigned int, 23 > _d2
const std::array< Real, 4 > _beta3
int delta(unsigned int i, unsigned int j)
Delta function, which returns zero if $i j$ and unity if $i=j$.
virtual Real dalpha_ddelta(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt delta.
const std::array< Real, 13 > _t1
static const std::string temperature
virtual const std::string & name() const
virtual Real dalpha_dtau(Real delta, Real tau) const override
Derivative of Helmholtz free energy wrt tau.
virtual std::string fluidName() const override
Fluid name.
const std::array< Real, 7 > _b
Coefficients for thermal conductivity.
virtual Real d2alpha_ddeltatau(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta and tau.
virtual std::vector< Real > henryCoefficients() const override
Henry's law coefficients for dissolution in water.
virtual Real d2alpha_ddelta2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt delta.
const std::array< Real, 4 > _N3
const std::array< Real, 13 > _N1
Coefficients for residual component of the Helmholtz free energy.
MethaneFluidProperties(const InputParameters ¶meters)
static const std::string mu
Real saturatedVaporDensity(Real temperature) const
Saturated vapor density of CH4 Valid for temperatures between the triple point temperature and critic...
const std::array< Real, 4 > _gamma3
virtual Real molarMass() const override
Molar mass [kg/mol].
const std::array< unsigned int, 23 > _c2
const std::array< Real, 23 > _t2
static InputParameters validParams()
static InputParameters validParams()
Methane (CH4) fluid properties as a function of pressure (Pa) and temperature (K).
const std::array< int, 4 > _d3
const std::array< Real, 4 > _alpha3
virtual Real k_from_p_T(Real pressure, Real temperature) const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Real _rho_critical
Critical density (kg/m^3)
const std::array< unsigned int, 13 > _d1
const Real _T_critical
Critical temperature (K)
const Real _Mch4
Methane molar mass (kg/mol)
const std::array< Real, 23 > _N2
static const std::string pressure
virtual Real d2alpha_dtau2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt tau.
void mooseError(Args &&... args) const
virtual Real criticalTemperature() const override
Critical temperature.
virtual Real triplePointPressure() const override
Triple point pressure.
registerMooseObject("FluidPropertiesApp", MethaneFluidProperties)
const Real _p_critical
Critical pressure (Pa)
const std::array< Real, 6 > _a
Coefficients for viscosity.
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 triplePointTemperature() const override
Triple point temperature.
virtual Real criticalDensity() const override
Critical density.
virtual ~MethaneFluidProperties()