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 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.
const std::string & name() const
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
void mooseError(Args &&... args) const
virtual Real d2alpha_dtau2(Real delta, Real tau) const override
Second derivative of Helmholtz free energy wrt tau.
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()