27 #ifndef OPM_PENG_ROBINSON_MIXTURE_HPP 28 #define OPM_PENG_ROBINSON_MIXTURE_HPP 41 template <
class Scalar,
class StaticParameters>
44 enum { numComponents = StaticParameters::numComponents };
51 static const Scalar R;
54 static const Scalar u;
55 static const Scalar w;
64 template <
class MutableParams,
class Flu
idState>
66 const MutableParams& params,
70 return PengRobinson::computeMolarVolumes(Vm, params, phaseIdx, fs);
90 template <
class Flu
idState,
class Params,
class LhsEval =
typename Flu
idState::Scalar>
99 LhsEval Vm = params.molarVolume(phaseIdx);
102 LhsEval bi_b = params.bPure(phaseIdx, compIdx) / params.b(phaseIdx);
105 LhsEval RT = R*fs.temperature(phaseIdx);
106 LhsEval p = fs.pressure(phaseIdx);
110 LhsEval Astar = params.a(phaseIdx)*p/(RT*RT);
111 LhsEval Bstar = params.b(phaseIdx)*p/(RT);
114 LhsEval sumMoleFractions = 0.0;
115 for (
unsigned compJIdx = 0; compJIdx < numComponents; ++compJIdx)
116 sumMoleFractions += fs.moleFraction(phaseIdx, compJIdx);
117 LhsEval deltai = 2*Opm::sqrt(params.aPure(phaseIdx, compIdx))/params.a(phaseIdx);
119 for (
unsigned compJIdx = 0; compJIdx < numComponents; ++compJIdx) {
121 fs.moleFraction(phaseIdx, compJIdx)
123 * Opm::sqrt(params.aPure(phaseIdx, compJIdx))
124 * (1.0 - StaticParameters::interactionCoefficient(compIdx, compJIdx));
129 (2*Z + Bstar*(u + std::sqrt(u*u - 4*w))) /
130 (2*Z + Bstar*(u - std::sqrt(u*u - 4*w)));
131 LhsEval expo = Astar/(Bstar*std::sqrt(u*u - 4*w))*(bi_b - deltai);
134 Opm::exp(bi_b*(Z - 1))/Opm::max(1e-9, Z - Bstar) *
135 Opm::pow(base, expo);
143 fugCoeff = Opm::min(1e10, fugCoeff);
148 fugCoeff = Opm::max(1e-10, fugCoeff);
156 template <
class Scalar,
class StaticParameters>
158 template<
class Scalar,
class StaticParameters>
159 const Scalar PengRobinsonMixture<Scalar, StaticParameters>::u = 2.0;
160 template<
class Scalar,
class StaticParameters>
161 const Scalar PengRobinsonMixture<Scalar, StaticParameters>::w = -1.0;
Implements the Peng-Robinson equation of state for liquids and gases.
Definition: PengRobinson.hpp:56
static int computeMolarVolumes(Scalar *Vm, const MutableParams ¶ms, unsigned phaseIdx, const FluidState &fs)
Computes molar volumes where the Peng-Robinson EOS is true.
Definition: PengRobinsonMixture.hpp:65
Definition: Air_Mesitylene.hpp:33
Implements the Peng-Robinson equation of state for liquids and gases.
A central place for various physical constants occuring in some equations.
Definition: Constants.hpp:40
Implements the Peng-Robinson equation of state for a mixture.
Definition: PengRobinsonMixture.hpp:42
A central place for various physical constants occuring in some equations.
static LhsEval computeFugacityCoefficient(const FluidState &fs, const Params ¶ms, unsigned phaseIdx, unsigned compIdx)
Returns the fugacity coefficient of an individual component in the phase.
Definition: PengRobinsonMixture.hpp:91