thermo.eos_mix module

class thermo.eos_mix.GCEOSMIX[source]

Bases: thermo.eos.GCEOS

Class for solving a generic pressure-explicit three-parameter cubic equation of state for a mixture. Does not implement any parameters itself; must be subclassed by a mixture equation of state class which subclasses it. No routines for partial molar properties for a generic cubic equation of state have yet been implemented, although that would be desireable. The only partial molar property which is currently used is fugacity, which must be implemented in each mixture EOS that subclasses this.

\[P=\frac{RT}{V-b}-\frac{a\alpha(T)}{V^2 + \delta V + \epsilon}\]

Main methods are fugacities, solve_T, and a_alpha_and_derivatives.

fugacities is a helper method intended as a common interface for setting fugacities of each species in each phase; it calls fugacity_coefficients to actually calculate them, but that is not implemented here. This should be used when performing flash calculations, where fugacities are needed repeatedly. The fugacities change as a function of liquid/gas phase composition, but the entire EOS need not be solved to recalculate them.

solve_T is a wrapper around GCEOS‘s solve_T; the only difference is to use half the average mixture’s critical temperature as the initial guess.

a_alpha_and_derivatives implements the Van der Waals mixing rules for a mixture. It calls a_alpha_and_derivatives from the pure-component EOS for each species via multiple inheritance.

Methods

Hvap(T) Method to calculate enthalpy of vaporization for a pure fluid from an equation of state, without iteration.
Psat(T[, polish]) Generic method to calculate vapor pressure for a specified T.
TDP_Michelsen(Zz, Zy, zs, ys)
TPD(Zz, Zy, zs, ys)
V_g_sat(T) Method to calculate molar volume of the vapor phase along the saturation line.
V_l_sat(T) Method to calculate molar volume of the liquid phase along the saturation line.
a_alpha_and_derivatives(T[, full, quick]) Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules.
check_sufficient_inputs() Method to an exception if none of the pairs (T, P), (T, V), or (P, V) are given.
dPsat_dT(T) Generic method to calculate the temperature derivative of vapor pressure for a specified T.
d_TPD_dy(Zz, Zy, zs, ys)
derivatives_and_departures(T, P, V, b, ...)
fugacities([xs, ys]) Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.
fugacities_partial_derivatives([xs, ys])
fugacities_partial_derivatives_2([xs, ys])
main_derivatives_and_departures(T, P, V, b, ...)
set_from_PT(Vs) Counts the number of real volumes in Vs, and determines what to do.
set_properties_from_solution(T, P, V, b, ...) Sets all interesting properties which can be calculated from an EOS alone.
solve() First EOS-generic method; should be called by all specific EOSs.
solve_T(P, V[, quick]) Generic method to calculate T from a specified P and V.
to_TP(T, P)
to_TP_zs(T, P, zs)
volume_solutions(T, P, b, delta, epsilon, ...) Solution of this form of the cubic EOS in terms of volumes.
TDP_Michelsen(Zz, Zy, zs, ys)[source]
TPD(Zz, Zy, zs, ys)[source]
a_alpha_and_derivatives(T, full=True, quick=True)[source]

Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules. Uses the parent class’s interface to compute pure component values. Returns a_alpha, da_alpha_dT, and d2a_alpha_dT2. Calls setup_a_alpha_and_derivatives before calling a_alpha_and_derivatives for each species, which typically sets a and Tc. Calls cleanup_a_alpha_and_derivatives to remove the set properties after the calls are done.

For use in solve_T this returns only a_alpha if full is False.

\[ \begin{align}\begin{aligned}a \alpha = \sum_i \sum_j z_i z_j {(a\alpha)}_{ij}\\(a\alpha)_{ij} = (1-k_{ij})\sqrt{(a\alpha)_{i}(a\alpha)_{j}}\end{aligned}\end{align} \]
Parameters:

T : float

Temperature, [K]

full : bool, optional

If False, calculates and returns only a_alpha

quick : bool, optional

Only the quick variant is implemented; it is little faster anyhow

Returns:

a_alpha : float

Coefficient calculated by EOS-specific method, [J^2/mol^2/Pa]

da_alpha_dT : float

Temperature derivative of coefficient calculated by EOS-specific method, [J^2/mol^2/Pa/K]

d2a_alpha_dT2 : float

Second temperature derivative of coefficient calculated by EOS-specific method, [J^2/mol^2/Pa/K**2]

Notes

The exact expressions can be obtained with the following SymPy expression below, commented out for brevity.

>>> from sympy import *
>>> a_alpha_i, a_alpha_j, kij, T = symbols('a_alpha_i, a_alpha_j, kij, T')
>>> a_alpha_ij = (1-kij)*sqrt(a_alpha_i(T)*a_alpha_j(T))
>>> #diff(a_alpha_ij, T)
>>> #diff(a_alpha_ij, T, T)
d_TPD_dy(Zz, Zy, zs, ys)[source]
fugacities(xs=None, ys=None)[source]

Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.

Requires fugacity_coefficients to be implemented by each subclassing EOS.

In addition to setting fugacities_l and/or fugacities_g, this also sets the fugacity coefficients phis_l and/or phis_g.

\[ \begin{align}\begin{aligned}\hat \phi_i^g = \frac{\hat f_i^g}{x_i P}\\\hat \phi_i^l = \frac{\hat f_i^l}{x_i P}\end{aligned}\end{align} \]
Parameters:

xs : list[float], optional

Liquid-phase mole fractions of each species, [-]

ys : list[float], optional

Vapor-phase mole fractions of each species, [-]

Notes

It is helpful to check that fugacity_coefficients has been implemented correctly using the following expression, from [R593616632].

\[\ln \hat \phi_i = \left[\frac{\partial (n\log \phi)}{\partial n_i}\right]_{T,P,n_j,V_t}\]

For reference, several expressions for fugacity of a component are as follows, shown in [R593616632] and [R594616632].

\[ \begin{align}\begin{aligned}\ln \hat \phi_i = \int_{0}^P\left(\frac{\hat V_i} {RT} - \frac{1}{P}\right)dP\\\ln \hat \phi_i = \int_V^\infty \left[ \frac{1}{RT}\frac{\partial P}{ \partial n_i} - \frac{1}{V}\right] d V - \ln Z\end{aligned}\end{align} \]

References

[R593616632](1, 2, 3) Hu, Jiawen, Rong Wang, and Shide Mao. “Some Useful Expressions for Deriving Component Fugacity Coefficients from Mixture Fugacity Coefficient.” Fluid Phase Equilibria 268, no. 1-2 (June 25, 2008): 7-13. doi:10.1016/j.fluid.2008.03.007.
[R594616632](1, 2) Walas, Stanley M. Phase Equilibria in Chemical Engineering. Butterworth-Heinemann, 1985.
fugacities_partial_derivatives(xs=None, ys=None)[source]
fugacities_partial_derivatives_2(xs=None, ys=None)[source]
solve_T(P, V, quick=True)[source]

Generic method to calculate T from a specified P and V. Provides SciPy’s newton solver, and iterates to solve the general equation for P, recalculating a_alpha as a function of temperature using a_alpha_and_derivatives each iteration.

Parameters:

P : float

Pressure, [Pa]

V : float

Molar volume, [m^3/mol]

quick : bool, optional

Unimplemented, although it may be possible to derive explicit expressions as done for many pure-component EOS

Returns:

T : float

Temperature, [K]

to_TP_zs(T, P, zs)[source]
class thermo.eos_mix.PRMIX(Tcs, Pcs, omegas, zs, kijs=None, T=None, P=None, V=None)[source]

Bases: thermo.eos_mix.GCEOSMIX, thermo.eos.PR

Class for solving the Peng-Robinson cubic equation of state for a mixture of any number of compounds. Subclasses PR. Solves the EOS on initialization and calculates fugacities for all components in all phases.

The implemented method here is fugacity_coefficients, which implements the formula for fugacity coefficients in a mixture as given in [R595634]. Two of T, P, and V are needed to solve the EOS.

\[ \begin{align}\begin{aligned}P = \frac{RT}{v-b}-\frac{a\alpha(T)}{v(v+b)+b(v-b)}\\a \alpha = \sum_i \sum_j z_i z_j {(a\alpha)}_{ij}\\(a\alpha)_{ij} = (1-k_{ij})\sqrt{(a\alpha)_{i}(a\alpha)_{j}}\\b = \sum_i z_i b_i\\a_i=0.45724\frac{R^2T_{c,i}^2}{P_{c,i}}\\ b_i=0.07780\frac{RT_{c,i}}{P_{c,i}}\\\alpha(T)_i=[1+\kappa_i(1-\sqrt{T_{r,i}})]^2\\\kappa_i=0.37464+1.54226\omega_i-0.26992\omega^2_i\end{aligned}\end{align} \]
Parameters:

Tcs : float

Critical temperatures of all compounds, [K]

Pcs : float

Critical pressures of all compounds, [Pa]

omegas : float

Acentric factors of all compounds, [-]

zs : float

Overall mole fractions of all species, [-]

kijs : list[list[float]], optional

n*n size list of lists with binary interaction parameters for the Van der Waals mixing rules, default all 0 [-]

T : float, optional

Temperature, [K]

P : float, optional

Pressure, [Pa]

V : float, optional

Molar volume, [m^3/mol]

Notes

For P-V initializations, SciPy’s newton solver is used to find T.

References

[R595634](1, 2) Peng, Ding-Yu, and Donald B. Robinson. “A New Two-Constant Equation of State.” Industrial & Engineering Chemistry Fundamentals 15, no. 1 (February 1, 1976): 59-64. doi:10.1021/i160057a011.
[R596634]Robinson, Donald B., Ding-Yu Peng, and Samuel Y-K Chung. “The Development of the Peng - Robinson Equation and Its Application to Phase Equilibrium in a System Containing Methanol.” Fluid Phase Equilibria 24, no. 1 (January 1, 1985): 25-41. doi:10.1016/0378-3812(85)87035-7.

Examples

T-P initialization, nitrogen-methane at 115 K and 1 MPa:

>>> eos = PRMIX(T=115, P=1E6, Tcs=[126.1, 190.6], Pcs=[33.94E5, 46.04E5], omegas=[0.04, 0.011], zs=[0.5, 0.5], kijs=[[0,0],[0,0]])
>>> eos.V_l, eos.V_g
(3.625735065042031e-05, 0.0007006656856469095)
>>> eos.fugacities_l, eos.fugacities_g
([793860.8382114634, 73468.55225303846], [436530.9247009119, 358114.63827532396])

Methods

Hvap(T) Method to calculate enthalpy of vaporization for a pure fluid from an equation of state, without iteration.
Psat(T[, polish]) Generic method to calculate vapor pressure for a specified T.
TDP_Michelsen(Zz, Zy, zs, ys)
TPD(Zz, Zy, zs, ys)
V_g_sat(T) Method to calculate molar volume of the vapor phase along the saturation line.
V_l_sat(T) Method to calculate molar volume of the liquid phase along the saturation line.
a_alpha_and_derivatives(T[, full, quick]) Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules.
check_sufficient_inputs() Method to an exception if none of the pairs (T, P), (T, V), or (P, V) are given.
cleanup_a_alpha_and_derivatives() Removes properties set by setup_a_alpha_and_derivatives; run by
dPsat_dT(T) Generic method to calculate the temperature derivative of vapor pressure for a specified T.
d_TPD_dy(Zz, Zy, zs, ys)
derivatives_and_departures(T, P, V, b, ...)
fugacities([xs, ys]) Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.
fugacities_partial_derivatives([xs, ys])
fugacities_partial_derivatives_2([xs, ys])
fugacity_coefficients(Z, zs) Literature formula for calculating fugacity coefficients for each species in a mixture.
main_derivatives_and_departures(T, P, V, b, ...)
set_from_PT(Vs) Counts the number of real volumes in Vs, and determines what to do.
set_properties_from_solution(T, P, V, b, ...) Sets all interesting properties which can be calculated from an EOS alone.
setup_a_alpha_and_derivatives(i[, T]) Sets a, kappa, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called.
solve() First EOS-generic method; should be called by all specific EOSs.
solve_T(P, V[, quick]) Generic method to calculate T from a specified P and V.
to_TP(T, P)
to_TP_zs(T, P, zs)
volume_solutions(T, P, b, delta, epsilon, ...) Solution of this form of the cubic EOS in terms of volumes.
a_alpha_mro = -4
cleanup_a_alpha_and_derivatives()[source]

Removes properties set by setup_a_alpha_and_derivatives; run by GCEOSMIX.a_alpha_and_derivatives after a_alpha is calculated for every component

fugacity_coefficients(Z, zs)[source]

Literature formula for calculating fugacity coefficients for each species in a mixture. Verified numerically. Applicable to most derivatives of the Peng-Robinson equation of state as well. Called by fugacities on initialization, or by a solver routine which is performing a flash calculation.

\[ \begin{align}\begin{aligned}\ln \hat \phi_i = \frac{B_i}{B}(Z-1)-\ln(Z-B) + \frac{A}{2\sqrt{2}B} \left[\frac{B_i}{B} - \frac{2}{a\alpha}\sum_i y_i(a\alpha)_{ij}\right] \log\left[\frac{Z + (1+\sqrt{2})B}{Z-(\sqrt{2}-1)B}\right]\\A = \frac{(a\alpha)P}{R^2 T^2}\\B = \frac{b P}{RT}\end{aligned}\end{align} \]
Parameters:

Z : float

Compressibility of the mixture for a desired phase, [-]

zs : list[float], optional

List of mole factions, either overall or in a specific phase, [-]

Returns:

phis : float

Fugacity coefficient for each species, [-]

References

[R597634656]Peng, Ding-Yu, and Donald B. Robinson. “A New Two-Constant Equation of State.” Industrial & Engineering Chemistry Fundamentals 15, no. 1 (February 1, 1976): 59-64. doi:10.1021/i160057a011.
[R598634656]Walas, Stanley M. Phase Equilibria in Chemical Engineering. Butterworth-Heinemann, 1985.
setup_a_alpha_and_derivatives(i, T=None)[source]

Sets a, kappa, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called. Both are called by GCEOSMIX.a_alpha_and_derivatives for every component.

class thermo.eos_mix.SRKMIX(Tcs, Pcs, omegas, zs, kijs=None, T=None, P=None, V=None)[source]

Bases: thermo.eos_mix.GCEOSMIX, thermo.eos.SRK

Class for solving the Soave-Redlich-Kwong cubic equation of state for a mixture of any number of compounds. Subclasses SRK. Solves the EOS on initialization and calculates fugacities for all components in all phases.

The implemented method here is fugacity_coefficients, which implements the formula for fugacity coefficients in a mixture as given in [R599658]. Two of T, P, and V are needed to solve the EOS.

\[ \begin{align}\begin{aligned}P = \frac{RT}{V-b} - \frac{a\alpha(T)}{V(V+b)}\\a \alpha = \sum_i \sum_j z_i z_j {(a\alpha)}_{ij}\\(a\alpha)_{ij} = (1-k_{ij})\sqrt{(a\alpha)_{i}(a\alpha)_{j}}\\b = \sum_i z_i b_i\\a_i =\left(\frac{R^2(T_{c,i})^{2}}{9(\sqrt[3]{2}-1)P_{c,i}} \right) =\frac{0.42748\cdot R^2(T_{c,i})^{2}}{P_{c,i}}\\b_i =\left( \frac{(\sqrt[3]{2}-1)}{3}\right)\frac{RT_{c,i}}{P_{c,i}} =\frac{0.08664\cdot R T_{c,i}}{P_{c,i}}\\\alpha(T)_i = \left[1 + m_i\left(1 - \sqrt{\frac{T}{T_{c,i}}}\right)\right]^2\\m_i = 0.480 + 1.574\omega_i - 0.176\omega_i^2\end{aligned}\end{align} \]
Parameters:

Tcs : float

Critical temperatures of all compounds, [K]

Pcs : float

Critical pressures of all compounds, [Pa]

omegas : float

Acentric factors of all compounds, [-]

zs : float

Overall mole fractions of all species, [-]

kijs : list[list[float]], optional

n*n size list of lists with binary interaction parameters for the Van der Waals mixing rules, default all 0 [-]

T : float, optional

Temperature, [K]

P : float, optional

Pressure, [Pa]

V : float, optional

Molar volume, [m^3/mol]

Notes

For P-V initializations, SciPy’s newton solver is used to find T.

References

[R599658](1, 2) Soave, Giorgio. “Equilibrium Constants from a Modified Redlich-Kwong Equation of State.” Chemical Engineering Science 27, no. 6 (June 1972): 1197-1203. doi:10.1016/0009-2509(72)80096-4.
[R600658]Poling, Bruce E. The Properties of Gases and Liquids. 5th edition. New York: McGraw-Hill Professional, 2000.
[R601658]Walas, Stanley M. Phase Equilibria in Chemical Engineering. Butterworth-Heinemann, 1985.

Examples

T-P initialization, nitrogen-methane at 115 K and 1 MPa:

>>> SRK_mix = SRKMIX(T=115, P=1E6, Tcs=[126.1, 190.6], Pcs=[33.94E5, 46.04E5], omegas=[0.04, 0.011], zs=[0.5, 0.5], kijs=[[0,0],[0,0]])
>>> SRK_mix.V_l, SRK_mix.V_g
(4.104755570185169e-05, 0.0007110155639819185)
>>> SRK_mix.fugacities_l, SRK_mix.fugacities_g
([817841.6430546861, 72382.81925202614], [442137.12801246037, 361820.79211909405])

Methods

Hvap(T) Method to calculate enthalpy of vaporization for a pure fluid from an equation of state, without iteration.
Psat(T[, polish]) Generic method to calculate vapor pressure for a specified T.
TDP_Michelsen(Zz, Zy, zs, ys)
TPD(Zz, Zy, zs, ys)
V_g_sat(T) Method to calculate molar volume of the vapor phase along the saturation line.
V_l_sat(T) Method to calculate molar volume of the liquid phase along the saturation line.
a_alpha_and_derivatives(T[, full, quick]) Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules.
check_sufficient_inputs() Method to an exception if none of the pairs (T, P), (T, V), or (P, V) are given.
cleanup_a_alpha_and_derivatives() Removes properties set by setup_a_alpha_and_derivatives; run by
dPsat_dT(T) Generic method to calculate the temperature derivative of vapor pressure for a specified T.
d_TPD_dy(Zz, Zy, zs, ys)
derivatives_and_departures(T, P, V, b, ...)
fugacities([xs, ys]) Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.
fugacities_partial_derivatives([xs, ys])
fugacities_partial_derivatives_2([xs, ys])
fugacity_coefficients(Z, zs) Literature formula for calculating fugacity coefficients for each species in a mixture.
main_derivatives_and_departures(T, P, V, b, ...)
set_from_PT(Vs) Counts the number of real volumes in Vs, and determines what to do.
set_properties_from_solution(T, P, V, b, ...) Sets all interesting properties which can be calculated from an EOS alone.
setup_a_alpha_and_derivatives(i[, T]) Sets a, m, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called.
solve() First EOS-generic method; should be called by all specific EOSs.
solve_T(P, V[, quick]) Generic method to calculate T from a specified P and V.
to_TP(T, P)
to_TP_zs(T, P, zs)
volume_solutions(T, P, b, delta, epsilon, ...) Solution of this form of the cubic EOS in terms of volumes.
a_alpha_mro = -4
cleanup_a_alpha_and_derivatives()[source]

Removes properties set by setup_a_alpha_and_derivatives; run by GCEOSMIX.a_alpha_and_derivatives after a_alpha is calculated for every component

fugacity_coefficients(Z, zs)[source]

Literature formula for calculating fugacity coefficients for each species in a mixture. Verified numerically. Applicable to most derivatives of the SRK equation of state as well. Called by fugacities on initialization, or by a solver routine which is performing a flash calculation.

\[ \begin{align}\begin{aligned}\ln \hat \phi_i = \frac{B_i}{B}(Z-1) - \ln(Z-B) + \frac{A}{B} \left[\frac{B_i}{B} - \frac{2}{a \alpha}\sum_i y_i(a\alpha)_{ij} \right]\ln\left(1+\frac{B}{Z}\right)\\A=\frac{a\alpha P}{R^2T^2}\\B = \frac{bP}{RT}\end{aligned}\end{align} \]
Parameters:

Z : float

Compressibility of the mixture for a desired phase, [-]

zs : list[float], optional

List of mole factions, either overall or in a specific phase, [-]

Returns:

phis : float

Fugacity coefficient for each species, [-]

References

[R602658681]Soave, Giorgio. “Equilibrium Constants from a Modified Redlich-Kwong Equation of State.” Chemical Engineering Science 27, no. 6 (June 1972): 1197-1203. doi:10.1016/0009-2509(72)80096-4.
[R603658681]Walas, Stanley M. Phase Equilibria in Chemical Engineering. Butterworth-Heinemann, 1985.
setup_a_alpha_and_derivatives(i, T=None)[source]

Sets a, m, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called. Both are called by GCEOSMIX.a_alpha_and_derivatives for every component.

class thermo.eos_mix.PR78MIX(Tcs, Pcs, omegas, zs, kijs=None, T=None, P=None, V=None)[source]

Bases: thermo.eos_mix.PRMIX

Class for solving the Peng-Robinson cubic equation of state for a mixture of any number of compounds according to the 1978 variant. Subclasses PR. Solves the EOS on initialization and calculates fugacities for all components in all phases.

Two of T, P, and V are needed to solve the EOS.

\[ \begin{align}\begin{aligned}P = \frac{RT}{v-b}-\frac{a\alpha(T)}{v(v+b)+b(v-b)}\\a \alpha = \sum_i \sum_j z_i z_j {(a\alpha)}_{ij}\\(a\alpha)_{ij} = (1-k_{ij})\sqrt{(a\alpha)_{i}(a\alpha)_{j}}\\b = \sum_i z_i b_i\\a_i=0.45724\frac{R^2T_{c,i}^2}{P_{c,i}}\\ b_i=0.07780\frac{RT_{c,i}}{P_{c,i}}\\\alpha(T)_i=[1+\kappa_i(1-\sqrt{T_{r,i}})]^2\\\kappa_i = 0.37464+1.54226\omega_i-0.26992\omega_i^2 \text{ if } \omega_i \le 0.491\\\kappa_i = 0.379642 + 1.48503 \omega_i - 0.164423\omega_i^2 + 0.016666 \omega_i^3 \text{ if } \omega_i > 0.491\end{aligned}\end{align} \]
Parameters:

Tcs : float

Critical temperatures of all compounds, [K]

Pcs : float

Critical pressures of all compounds, [Pa]

omegas : float

Acentric factors of all compounds, [-]

zs : float

Overall mole fractions of all species, [-]

kijs : list[list[float]], optional

n*n size list of lists with binary interaction parameters for the Van der Waals mixing rules, default all 0 [-]

T : float, optional

Temperature, [K]

P : float, optional

Pressure, [Pa]

V : float, optional

Molar volume, [m^3/mol]

Notes

This variant is recommended over the original.

References

[R604683]Peng, Ding-Yu, and Donald B. Robinson. “A New Two-Constant Equation of State.” Industrial & Engineering Chemistry Fundamentals 15, no. 1 (February 1, 1976): 59-64. doi:10.1021/i160057a011.
[R605683]Robinson, Donald B., Ding-Yu Peng, and Samuel Y-K Chung. “The Development of the Peng - Robinson Equation and Its Application to Phase Equilibrium in a System Containing Methanol.” Fluid Phase Equilibria 24, no. 1 (January 1, 1985): 25-41. doi:10.1016/0378-3812(85)87035-7.

Examples

T-P initialization, nitrogen-methane at 115 K and 1 MPa, with modified acentric factors to show the difference between PRMIX

>>> eos = PR78MIX(T=115, P=1E6, Tcs=[126.1, 190.6], Pcs=[33.94E5, 46.04E5], omegas=[0.6, 0.7], zs=[0.5, 0.5], kijs=[[0,0],[0,0]])
>>> eos.V_l, eos.V_g
(3.239642793468725e-05, 0.0005043378493002219)
>>> eos.fugacities_l, eos.fugacities_g
([833048.4511980312, 6160.908815331656], [460717.2776793945, 279598.90103207604])

Methods

Hvap(T) Method to calculate enthalpy of vaporization for a pure fluid from an equation of state, without iteration.
Psat(T[, polish]) Generic method to calculate vapor pressure for a specified T.
TDP_Michelsen(Zz, Zy, zs, ys)
TPD(Zz, Zy, zs, ys)
V_g_sat(T) Method to calculate molar volume of the vapor phase along the saturation line.
V_l_sat(T) Method to calculate molar volume of the liquid phase along the saturation line.
a_alpha_and_derivatives(T[, full, quick]) Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules.
check_sufficient_inputs() Method to an exception if none of the pairs (T, P), (T, V), or (P, V) are given.
cleanup_a_alpha_and_derivatives() Removes properties set by setup_a_alpha_and_derivatives; run by
dPsat_dT(T) Generic method to calculate the temperature derivative of vapor pressure for a specified T.
d_TPD_dy(Zz, Zy, zs, ys)
derivatives_and_departures(T, P, V, b, ...)
fugacities([xs, ys]) Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.
fugacities_partial_derivatives([xs, ys])
fugacities_partial_derivatives_2([xs, ys])
fugacity_coefficients(Z, zs) Literature formula for calculating fugacity coefficients for each species in a mixture.
main_derivatives_and_departures(T, P, V, b, ...)
set_from_PT(Vs) Counts the number of real volumes in Vs, and determines what to do.
set_properties_from_solution(T, P, V, b, ...) Sets all interesting properties which can be calculated from an EOS alone.
setup_a_alpha_and_derivatives(i[, T]) Sets a, kappa, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called.
solve() First EOS-generic method; should be called by all specific EOSs.
solve_T(P, V[, quick]) Generic method to calculate T from a specified P and V.
to_TP(T, P)
to_TP_zs(T, P, zs)
volume_solutions(T, P, b, delta, epsilon, ...) Solution of this form of the cubic EOS in terms of volumes.
a_alpha_mro = -4
class thermo.eos_mix.VDWMIX(Tcs, Pcs, zs, kijs=None, T=None, P=None, V=None)[source]

Bases: thermo.eos_mix.GCEOSMIX, thermo.eos.VDW

Class for solving the Van der Waals cubic equation of state for a mixture of any number of compounds. Subclasses VDW. Solves the EOS on initialization and calculates fugacities for all components in all phases.

The implemented method here is fugacity_coefficients, which implements the formula for fugacity coefficients in a mixture as given in [R606703]. Two of T, P, and V are needed to solve the EOS.

\[ \begin{align}\begin{aligned}P=\frac{RT}{V-b}-\frac{a}{V^2}\\a = \sum_i \sum_j z_i z_j {a}_{ij}\\b = \sum_i z_i b_i\\a_{ij} = (1-k_{ij})\sqrt{a_{i}a_{j}}\\a_i=\frac{27}{64}\frac{(RT_{c,i})^2}{P_{c,i}}\\b_i=\frac{RT_{c,i}}{8P_{c,i}}\end{aligned}\end{align} \]
Parameters:

Tcs : float

Critical temperatures of all compounds, [K]

Pcs : float

Critical pressures of all compounds, [Pa]

zs : float

Overall mole fractions of all species, [-]

kijs : list[list[float]], optional

n*n size list of lists with binary interaction parameters for the Van der Waals mixing rules, default all 0 [-]

T : float, optional

Temperature, [K]

P : float, optional

Pressure, [Pa]

V : float, optional

Molar volume, [m^3/mol]

Notes

For P-V initializations, SciPy’s newton solver is used to find T.

References

[R606703](1, 2) Walas, Stanley M. Phase Equilibria in Chemical Engineering. Butterworth-Heinemann, 1985.
[R607703]Poling, Bruce E. The Properties of Gases and Liquids. 5th edition. New York: McGraw-Hill Professional, 2000.

Examples

T-P initialization, nitrogen-methane at 115 K and 1 MPa:

>>> eos = VDWMIX(T=115, P=1E6, Tcs=[126.1, 190.6], Pcs=[33.94E5, 46.04E5], zs=[0.5, 0.5], kijs=[[0,0],[0,0]])
>>> eos.V_l, eos.V_g
(5.881367851416652e-05, 0.0007770869741895236)
>>> eos.fugacities_l, eos.fugacities_g
([854533.2669205057, 207126.84972762014], [448470.7363380735, 397826.543999929])

Attributes

omega  

Methods

Hvap(T) Method to calculate enthalpy of vaporization for a pure fluid from an equation of state, without iteration.
Psat(T[, polish]) Generic method to calculate vapor pressure for a specified T.
TDP_Michelsen(Zz, Zy, zs, ys)
TPD(Zz, Zy, zs, ys)
V_g_sat(T) Method to calculate molar volume of the vapor phase along the saturation line.
V_l_sat(T) Method to calculate molar volume of the liquid phase along the saturation line.
a_alpha_and_derivatives(T[, full, quick]) Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules.
check_sufficient_inputs() Method to an exception if none of the pairs (T, P), (T, V), or (P, V) are given.
cleanup_a_alpha_and_derivatives() Removes properties set by setup_a_alpha_and_derivatives; run by
dPsat_dT(T) Generic method to calculate the temperature derivative of vapor pressure for a specified T.
d_TPD_dy(Zz, Zy, zs, ys)
derivatives_and_departures(T, P, V, b, ...)
fugacities([xs, ys]) Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.
fugacities_partial_derivatives([xs, ys])
fugacities_partial_derivatives_2([xs, ys])
fugacity_coefficients(Z, zs) Literature formula for calculating fugacity coefficients for each species in a mixture.
main_derivatives_and_departures(T, P, V, b, ...) Re-implementation of derivatives and excess property calculations, as ZeroDivisionError errors occur with the general solution.
set_from_PT(Vs) Counts the number of real volumes in Vs, and determines what to do.
set_properties_from_solution(T, P, V, b, ...) Sets all interesting properties which can be calculated from an EOS alone.
setup_a_alpha_and_derivatives(i[, T]) Sets a for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called.
solve() First EOS-generic method; should be called by all specific EOSs.
solve_T(P, V[, quick]) Generic method to calculate T from a specified P and V.
to_TP(T, P)
to_TP_zs(T, P, zs)
volume_solutions(T, P, b, delta, epsilon, ...) Solution of this form of the cubic EOS in terms of volumes.
a_alpha_mro = -4
cleanup_a_alpha_and_derivatives()[source]

Removes properties set by setup_a_alpha_and_derivatives; run by GCEOSMIX.a_alpha_and_derivatives after a_alpha is calculated for every component

fugacity_coefficients(Z, zs)[source]

Literature formula for calculating fugacity coefficients for each species in a mixture. Verified numerically. Called by fugacities on initialization, or by a solver routine which is performing a flash calculation.

\[\ln \hat \phi_i = \frac{b_i}{V-b} - \ln\left[Z\left(1 - \frac{b}{V}\right)\right] - \frac{2\sqrt{aa_i}}{RTV}\]
Parameters:

Z : float

Compressibility of the mixture for a desired phase, [-]

zs : list[float], optional

List of mole factions, either overall or in a specific phase, [-]

Returns:

phis : float

Fugacity coefficient for each species, [-]

References

[R608703722]Walas, Stanley M. Phase Equilibria in Chemical Engineering. Butterworth-Heinemann, 1985.
setup_a_alpha_and_derivatives(i, T=None)[source]

Sets a for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called. Both are called by GCEOSMIX.a_alpha_and_derivatives for every component.

class thermo.eos_mix.PRSVMIX(Tcs, Pcs, omegas, zs, kijs=None, T=None, P=None, V=None, kappa1s=None)[source]

Bases: thermo.eos_mix.PRMIX, thermo.eos.PRSV

Class for solving the Peng-Robinson-Stryjek-Vera equations of state for a mixture as given in [R609723]. Subclasses PRMIX and PRSV. Solves the EOS on initialization and calculates fugacities for all components in all phases.

Inherits the method of calculating fugacity coefficients from PRMIX. Two of T, P, and V are needed to solve the EOS.

\[ \begin{align}\begin{aligned}P = \frac{RT}{v-b}-\frac{a\alpha(T)}{v(v+b)+b(v-b)}\\a \alpha = \sum_i \sum_j z_i z_j {(a\alpha)}_{ij}\\(a\alpha)_{ij} = (1-k_{ij})\sqrt{(a\alpha)_{i}(a\alpha)_{j}}\\b = \sum_i z_i b_i\\a_i=0.45724\frac{R^2T_{c,i}^2}{P_{c,i}}\\ b_i=0.07780\frac{RT_{c,i}}{P_{c,i}}\\\alpha(T)_i=[1+\kappa_i(1-\sqrt{T_{r,i}})]^2\\\kappa_i = \kappa_{0,i} + \kappa_{1,i}(1 + T_{r,i}^{0.5})(0.7 - T_{r,i})\\\kappa_{0,i} = 0.378893 + 1.4897153\omega_i - 0.17131848\omega_i^2 + 0.0196554\omega_i^3\end{aligned}\end{align} \]
Parameters:

Tcs : float

Critical temperatures of all compounds, [K]

Pcs : float

Critical pressures of all compounds, [Pa]

omegas : float

Acentric factors of all compounds, [-]

zs : float

Overall mole fractions of all species, [-]

kijs : list[list[float]], optional

n*n size list of lists with binary interaction parameters for the Van der Waals mixing rules, default all 0 [-]

T : float, optional

Temperature, [K]

P : float, optional

Pressure, [Pa]

V : float, optional

Molar volume, [m^3/mol]

kappa1s : list[float], optional

Fit parameter; available in [R609723] for over 90 compounds, [-]

Notes

[R609723] recommends that kappa1 be set to 0 for Tr > 0.7. This is not done by default; the class boolean kappa1_Tr_limit may be set to True and the problem re-solved with that specified if desired. kappa1_Tr_limit is not supported for P-V inputs.

For P-V initializations, SciPy’s newton solver is used to find T.

[R610723] and [R611723] are two more resources documenting the PRSV EOS. [R612723] lists kappa values for 69 additional compounds. See also PRSV2. Note that tabulated kappa values should be used with the critical parameters used in their fits. Both [R609723] and [R612723] only considered vapor pressure in fitting the parameter.

References

[R609723](1, 2, 3, 4, 5) Stryjek, R., and J. H. Vera. “PRSV: An Improved Peng-Robinson Equation of State for Pure Compounds and Mixtures.” The Canadian Journal of Chemical Engineering 64, no. 2 (April 1, 1986): 323-33. doi:10.1002/cjce.5450640224.
[R610723](1, 2) Stryjek, R., and J. H. Vera. “PRSV - An Improved Peng-Robinson Equation of State with New Mixing Rules for Strongly Nonideal Mixtures.” The Canadian Journal of Chemical Engineering 64, no. 2 (April 1, 1986): 334-40. doi:10.1002/cjce.5450640225.
[R611723](1, 2) Stryjek, R., and J. H. Vera. “Vapor-liquid Equilibrium of Hydrochloric Acid Solutions with the PRSV Equation of State.” Fluid Phase Equilibria 25, no. 3 (January 1, 1986): 279-90. doi:10.1016/0378-3812(86)80004-8.
[R612723](1, 2, 3) Proust, P., and J. H. Vera. “PRSV: The Stryjek-Vera Modification of the Peng-Robinson Equation of State. Parameters for Other Pure Compounds of Industrial Interest.” The Canadian Journal of Chemical Engineering 67, no. 1 (February 1, 1989): 170-73. doi:10.1002/cjce.5450670125.

Examples

P-T initialization, two-phase, nitrogen and methane

>>> eos = PRSVMIX(T=115, P=1E6, Tcs=[126.1, 190.6], Pcs=[33.94E5, 46.04E5], omegas=[0.04, 0.011], zs=[0.5, 0.5], kijs=[[0,0],[0,0]])
>>> eos.phase, eos.V_l, eos.H_dep_l, eos.S_dep_l
('l/g', 3.6235523883756384e-05, -6349.003406339954, -49.12403359687132)

Methods

Hvap(T) Method to calculate enthalpy of vaporization for a pure fluid from an equation of state, without iteration.
Psat(T[, polish]) Generic method to calculate vapor pressure for a specified T.
TDP_Michelsen(Zz, Zy, zs, ys)
TPD(Zz, Zy, zs, ys)
V_g_sat(T) Method to calculate molar volume of the vapor phase along the saturation line.
V_l_sat(T) Method to calculate molar volume of the liquid phase along the saturation line.
a_alpha_and_derivatives(T[, full, quick]) Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules.
check_sufficient_inputs() Method to an exception if none of the pairs (T, P), (T, V), or (P, V) are given.
cleanup_a_alpha_and_derivatives() Removes properties set by setup_a_alpha_and_derivatives; run by
dPsat_dT(T) Generic method to calculate the temperature derivative of vapor pressure for a specified T.
d_TPD_dy(Zz, Zy, zs, ys)
derivatives_and_departures(T, P, V, b, ...)
fugacities([xs, ys]) Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.
fugacities_partial_derivatives([xs, ys])
fugacities_partial_derivatives_2([xs, ys])
fugacity_coefficients(Z, zs) Literature formula for calculating fugacity coefficients for each species in a mixture.
main_derivatives_and_departures(T, P, V, b, ...)
set_from_PT(Vs) Counts the number of real volumes in Vs, and determines what to do.
set_properties_from_solution(T, P, V, b, ...) Sets all interesting properties which can be calculated from an EOS alone.
setup_a_alpha_and_derivatives(i[, T]) Sets a, kappa0, kappa1, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called.
solve() First EOS-generic method; should be called by all specific EOSs.
solve_T(P, V[, quick]) Generic method to calculate T from a specified P and V.
to_TP(T, P)
to_TP_zs(T, P, zs)
volume_solutions(T, P, b, delta, epsilon, ...) Solution of this form of the cubic EOS in terms of volumes.
a_alpha_mro = -5
cleanup_a_alpha_and_derivatives()[source]

Removes properties set by setup_a_alpha_and_derivatives; run by GCEOSMIX.a_alpha_and_derivatives after a_alpha is calculated for every component

setup_a_alpha_and_derivatives(i, T=None)[source]

Sets a, kappa0, kappa1, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called. Both are called by GCEOSMIX.a_alpha_and_derivatives for every component.

class thermo.eos_mix.PRSV2MIX(Tcs, Pcs, omegas, zs, kijs=None, T=None, P=None, V=None, kappa1s=None, kappa2s=None, kappa3s=None)[source]

Bases: thermo.eos_mix.PRMIX, thermo.eos.PRSV2

Class for solving the Peng-Robinson-Stryjek-Vera 2 equations of state for a Mixture as given in [R613745]. Subclasses PRMIX and PRSV2. Solves the EOS on initialization and calculates fugacities for all components in all phases.

Inherits the method of calculating fugacity coefficients from PRMIX. Two of T, P, and V are needed to solve the EOS.

\[ \begin{align}\begin{aligned}P = \frac{RT}{v-b}-\frac{a\alpha(T)}{v(v+b)+b(v-b)}\\a \alpha = \sum_i \sum_j z_i z_j {(a\alpha)}_{ij}\\(a\alpha)_{ij} = (1-k_{ij})\sqrt{(a\alpha)_{i}(a\alpha)_{j}}\\b = \sum_i z_i b_i\\a_i=0.45724\frac{R^2T_{c,i}^2}{P_{c,i}}\\ b_i=0.07780\frac{RT_{c,i}}{P_{c,i}}\\\alpha(T)_i=[1+\kappa_i(1-\sqrt{T_{r,i}})]^2\\\kappa_i = \kappa_{0,i} + [\kappa_{1,i} + \kappa_{2,i}(\kappa_{3,i} - T_{r,i})(1-T_{r,i}^{0.5})] (1 + T_{r,i}^{0.5})(0.7 - T_{r,i})\\\kappa_{0,i} = 0.378893 + 1.4897153\omega_i - 0.17131848\omega_i^2 + 0.0196554\omega_i^3\end{aligned}\end{align} \]
Parameters:

Tcs : float

Critical temperatures of all compounds, [K]

Pcs : float

Critical pressures of all compounds, [Pa]

omegas : float

Acentric factors of all compounds, [-]

zs : float

Overall mole fractions of all species, [-]

kijs : list[list[float]], optional

n*n size list of lists with binary interaction parameters for the Van der Waals mixing rules, default all 0 [-]

T : float, optional

Temperature, [K]

P : float, optional

Pressure, [Pa]

V : float, optional

Molar volume, [m^3/mol]

kappa1s : list[float], optional

Fit parameter; available in [R613745] for over 90 compounds, [-]

kappa2s : list[float], optional

Fit parameter; available in [R613745] for over 90 compounds, [-]

kappa3s : list[float], optional

Fit parameter; available in [R613745] for over 90 compounds, [-]

Notes

For P-V initializations, SciPy’s newton solver is used to find T.

Note that tabulated kappa values should be used with the critical parameters used in their fits. [R613745] considered only vapor pressure in fitting the parameter.

References

[R613745](1, 2, 3, 4, 5, 6) Stryjek, R., and J. H. Vera. “PRSV2: A Cubic Equation of State for Accurate Vapor-liquid Equilibria Calculations.” The Canadian Journal of Chemical Engineering 64, no. 5 (October 1, 1986): 820-26. doi:10.1002/cjce.5450640516.

Examples

T-P initialization, nitrogen-methane at 115 K and 1 MPa:

>>> eos = PRSV2MIX(T=115, P=1E6, Tcs=[126.1, 190.6], Pcs=[33.94E5, 46.04E5], omegas=[0.04, 0.011], zs=[0.5, 0.5], kijs=[[0,0],[0,0]])
>>> eos.V_l, eos.V_g
(3.6235523883756384e-05, 0.0007002421492037558)
>>> eos.fugacities_l, eos.fugacities_g
([794057.5831840535, 72851.22327178411], [436553.65618350444, 357878.1106688994])

Methods

Hvap(T) Method to calculate enthalpy of vaporization for a pure fluid from an equation of state, without iteration.
Psat(T[, polish]) Generic method to calculate vapor pressure for a specified T.
TDP_Michelsen(Zz, Zy, zs, ys)
TPD(Zz, Zy, zs, ys)
V_g_sat(T) Method to calculate molar volume of the vapor phase along the saturation line.
V_l_sat(T) Method to calculate molar volume of the liquid phase along the saturation line.
a_alpha_and_derivatives(T[, full, quick]) Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules.
check_sufficient_inputs() Method to an exception if none of the pairs (T, P), (T, V), or (P, V) are given.
cleanup_a_alpha_and_derivatives() Removes properties set by setup_a_alpha_and_derivatives; run by
dPsat_dT(T) Generic method to calculate the temperature derivative of vapor pressure for a specified T.
d_TPD_dy(Zz, Zy, zs, ys)
derivatives_and_departures(T, P, V, b, ...)
fugacities([xs, ys]) Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.
fugacities_partial_derivatives([xs, ys])
fugacities_partial_derivatives_2([xs, ys])
fugacity_coefficients(Z, zs) Literature formula for calculating fugacity coefficients for each species in a mixture.
main_derivatives_and_departures(T, P, V, b, ...)
set_from_PT(Vs) Counts the number of real volumes in Vs, and determines what to do.
set_properties_from_solution(T, P, V, b, ...) Sets all interesting properties which can be calculated from an EOS alone.
setup_a_alpha_and_derivatives(i[, T]) Sets a, kappa, kappa0, kappa1, kappa2, kappa3 and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called.
solve() First EOS-generic method; should be called by all specific EOSs.
solve_T(P, V[, quick]) Generic method to calculate T from a specified P and V.
to_TP(T, P)
to_TP_zs(T, P, zs)
volume_solutions(T, P, b, delta, epsilon, ...) Solution of this form of the cubic EOS in terms of volumes.
a_alpha_mro = -5
cleanup_a_alpha_and_derivatives()[source]

Removes properties set by setup_a_alpha_and_derivatives; run by GCEOSMIX.a_alpha_and_derivatives after a_alpha is calculated for every component

setup_a_alpha_and_derivatives(i, T=None)[source]

Sets a, kappa, kappa0, kappa1, kappa2, kappa3 and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called. Both are called by GCEOSMIX.a_alpha_and_derivatives for every component.

class thermo.eos_mix.TWUPRMIX(Tcs, Pcs, omegas, zs, kijs=None, T=None, P=None, V=None)[source]

Bases: thermo.eos_mix.PRMIX, thermo.eos.TWUPR

Class for solving the Twu [R614764] variant of the Peng-Robinson cubic equation of state for a mixture. Subclasses TWUPR. Solves the EOS on initialization and calculates fugacities for all components in all phases.

Two of T, P, and V are needed to solve the EOS.

\[ \begin{align}\begin{aligned}P = \frac{RT}{v-b}-\frac{a\alpha(T)}{v(v+b)+b(v-b)}\\ a \alpha = \sum_i \sum_j z_i z_j {(a\alpha)}_{ij}\\ (a\alpha)_{ij} = (1-k_{ij})\sqrt{(a\alpha)_{i}(a\alpha)_{j}}\\ b = \sum_i z_i b_i\\ a_i=0.45724\frac{R^2T_{c,i}^2}{P_{c,i}}\\ b_i=0.07780\frac{RT_{c,i}}{P_{c,i}}\\\alpha_i = \alpha_i^{(0)} + \omega_i(\alpha_i^{(1)}-\alpha_i^{(0)})\\\alpha^{(\text{0 or 1})} = T_{r,i}^{N(M-1)}\exp[L(1-T_{r,i}^{NM})]\end{aligned}\end{align} \]

For sub-critical conditions:

L0, M0, N0 = 0.125283, 0.911807, 1.948150;

L1, M1, N1 = 0.511614, 0.784054, 2.812520

For supercritical conditions:

L0, M0, N0 = 0.401219, 4.963070, -0.2;

L1, M1, N1 = 0.024955, 1.248089, -8.

Parameters:

Tcs : float

Critical temperatures of all compounds, [K]

Pcs : float

Critical pressures of all compounds, [Pa]

omegas : float

Acentric factors of all compounds, [-]

zs : float

Overall mole fractions of all species, [-]

kijs : list[list[float]], optional

n*n size list of lists with binary interaction parameters for the Van der Waals mixing rules, default all 0 [-]

T : float, optional

Temperature, [K]

P : float, optional

Pressure, [Pa]

V : float, optional

Molar volume, [m^3/mol]

Notes

For P-V initializations, SciPy’s newton solver is used to find T. Claimed to be more accurate than the PR, PR78 and PRSV equations.

References

[R614764](1, 2) Twu, Chorng H., John E. Coon, and John R. Cunningham. “A New Generalized Alpha Function for a Cubic Equation of State Part 1. Peng-Robinson Equation.” Fluid Phase Equilibria 105, no. 1 (March 15, 1995): 49-59. doi:10.1016/0378-3812(94)02601-V.

Examples

T-P initialization, nitrogen-methane at 115 K and 1 MPa:

>>> eos = TWUPRMIX(T=115, P=1E6, Tcs=[126.1, 190.6], Pcs=[33.94E5, 46.04E5], omegas=[0.04, 0.011], zs=[0.5, 0.5], kijs=[[0,0],[0,0]])
>>> eos.V_l, eos.V_g
(3.624569813157017e-05, 0.0007004398944116553)
>>> eos.fugacities_l, eos.fugacities_g
([792155.022163319, 73305.88829726777], [436468.9677642441, 358049.24955730926])

Methods

Hvap(T) Method to calculate enthalpy of vaporization for a pure fluid from an equation of state, without iteration.
Psat(T[, polish]) Generic method to calculate vapor pressure for a specified T.
TDP_Michelsen(Zz, Zy, zs, ys)
TPD(Zz, Zy, zs, ys)
V_g_sat(T) Method to calculate molar volume of the vapor phase along the saturation line.
V_l_sat(T) Method to calculate molar volume of the liquid phase along the saturation line.
a_alpha_and_derivatives(T[, full, quick]) Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules.
check_sufficient_inputs() Method to an exception if none of the pairs (T, P), (T, V), or (P, V) are given.
cleanup_a_alpha_and_derivatives() Removes properties set by setup_a_alpha_and_derivatives; run by
dPsat_dT(T) Generic method to calculate the temperature derivative of vapor pressure for a specified T.
d_TPD_dy(Zz, Zy, zs, ys)
derivatives_and_departures(T, P, V, b, ...)
fugacities([xs, ys]) Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.
fugacities_partial_derivatives([xs, ys])
fugacities_partial_derivatives_2([xs, ys])
fugacity_coefficients(Z, zs) Literature formula for calculating fugacity coefficients for each species in a mixture.
main_derivatives_and_departures(T, P, V, b, ...)
set_from_PT(Vs) Counts the number of real volumes in Vs, and determines what to do.
set_properties_from_solution(T, P, V, b, ...) Sets all interesting properties which can be calculated from an EOS alone.
setup_a_alpha_and_derivatives(i[, T]) Sets a, omega, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called.
solve() First EOS-generic method; should be called by all specific EOSs.
solve_T(P, V[, quick]) Generic method to calculate T from a specified P and V.
to_TP(T, P)
to_TP_zs(T, P, zs)
volume_solutions(T, P, b, delta, epsilon, ...) Solution of this form of the cubic EOS in terms of volumes.
a_alpha_mro = -5
cleanup_a_alpha_and_derivatives()[source]

Removes properties set by setup_a_alpha_and_derivatives; run by GCEOSMIX.a_alpha_and_derivatives after a_alpha is calculated for every component

setup_a_alpha_and_derivatives(i, T=None)[source]

Sets a, omega, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called. Both are called by GCEOSMIX.a_alpha_and_derivatives for every component.

class thermo.eos_mix.TWUSRKMIX(Tcs, Pcs, omegas, zs, kijs=None, T=None, P=None, V=None)[source]

Bases: thermo.eos_mix.SRKMIX, thermo.eos.TWUSRK

Class for solving the Twu variant of the Soave-Redlich-Kwong cubic equation of state for a mixture. Subclasses TWUSRK. Solves the EOS on initialization and calculates fugacities for all components in all phases.

Two of T, P, and V are needed to solve the EOS.

\[ \begin{align}\begin{aligned}P = \frac{RT}{V-b} - \frac{a\alpha(T)}{V(V+b)}\\a_i =\left(\frac{R^2(T_{c,i})^{2}}{9(\sqrt[3]{2}-1)P_{c,i}} \right) =\frac{0.42748\cdot R^2(T_{c,i})^{2}}{P_{c,i}}\\b_i =\left( \frac{(\sqrt[3]{2}-1)}{3}\right)\frac{RT_{c,i}}{P_{c,i}} =\frac{0.08664\cdot R T_{c,i}}{P_{c,i}}\\a \alpha = \sum_i \sum_j z_i z_j {(a\alpha)}_{ij}\\(a\alpha)_{ij} = (1-k_{ij})\sqrt{(a\alpha)_{i}(a\alpha)_{j}}\\b = \sum_i z_i b_i\\\alpha_i = \alpha^{(0,i)} + \omega_i(\alpha^{(1,i)}-\alpha^{(0,i)})\\\alpha^{(\text{0 or 1, i})} = T_{r,i}^{N(M-1)}\exp[L(1-T_{r,i}^{NM})]\end{aligned}\end{align} \]

For sub-critical conditions:

L0, M0, N0 = 0.141599, 0.919422, 2.496441

L1, M1, N1 = 0.500315, 0.799457, 3.291790

For supercritical conditions:

L0, M0, N0 = 0.441411, 6.500018, -0.20

L1, M1, N1 = 0.032580, 1.289098, -8.0

Parameters:

Tcs : float

Critical temperatures of all compounds, [K]

Pcs : float

Critical pressures of all compounds, [Pa]

omegas : float

Acentric factors of all compounds, [-]

zs : float

Overall mole fractions of all species, [-]

kijs : list[list[float]], optional

n*n size list of lists with binary interaction parameters for the Van der Waals mixing rules, default all 0 [-]

T : float, optional

Temperature, [K]

P : float, optional

Pressure, [Pa]

V : float, optional

Molar volume, [m^3/mol]

Notes

For P-V initializations, SciPy’s newton solver is used to find T. Claimed to be more accurate than the SRK equation.

References

[R615783]Twu, Chorng H., John E. Coon, and John R. Cunningham. “A New Generalized Alpha Function for a Cubic Equation of State Part 2. Redlich-Kwong Equation.” Fluid Phase Equilibria 105, no. 1 (March 15, 1995): 61-69. doi:10.1016/0378-3812(94)02602-W.

Examples

T-P initialization, nitrogen-methane at 115 K and 1 MPa:

>>> eos = TWUSRKMIX(T=115, P=1E6, Tcs=[126.1, 190.6], Pcs=[33.94E5, 46.04E5], omegas=[0.04, 0.011], zs=[0.5, 0.5], kijs=[[0,0],[0,0]])
>>> eos.V_l, eos.V_g
(4.1087913616390855e-05, 0.000711707084027679)
>>> eos.fugacities_l, eos.fugacities_g
([809692.8308266959, 74093.63881572774], [441783.43148985505, 362470.31741077645])

Methods

Hvap(T) Method to calculate enthalpy of vaporization for a pure fluid from an equation of state, without iteration.
Psat(T[, polish]) Generic method to calculate vapor pressure for a specified T.
TDP_Michelsen(Zz, Zy, zs, ys)
TPD(Zz, Zy, zs, ys)
V_g_sat(T) Method to calculate molar volume of the vapor phase along the saturation line.
V_l_sat(T) Method to calculate molar volume of the liquid phase along the saturation line.
a_alpha_and_derivatives(T[, full, quick]) Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules.
check_sufficient_inputs() Method to an exception if none of the pairs (T, P), (T, V), or (P, V) are given.
cleanup_a_alpha_and_derivatives() Removes properties set by setup_a_alpha_and_derivatives; run by
dPsat_dT(T) Generic method to calculate the temperature derivative of vapor pressure for a specified T.
d_TPD_dy(Zz, Zy, zs, ys)
derivatives_and_departures(T, P, V, b, ...)
fugacities([xs, ys]) Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.
fugacities_partial_derivatives([xs, ys])
fugacities_partial_derivatives_2([xs, ys])
fugacity_coefficients(Z, zs) Literature formula for calculating fugacity coefficients for each species in a mixture.
main_derivatives_and_departures(T, P, V, b, ...)
set_from_PT(Vs) Counts the number of real volumes in Vs, and determines what to do.
set_properties_from_solution(T, P, V, b, ...) Sets all interesting properties which can be calculated from an EOS alone.
setup_a_alpha_and_derivatives(i[, T]) Sets a, omega, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called.
solve() First EOS-generic method; should be called by all specific EOSs.
solve_T(P, V[, quick]) Generic method to calculate T from a specified P and V.
to_TP(T, P)
to_TP_zs(T, P, zs)
volume_solutions(T, P, b, delta, epsilon, ...) Solution of this form of the cubic EOS in terms of volumes.
a_alpha_mro = -5
cleanup_a_alpha_and_derivatives()[source]

Removes properties set by setup_a_alpha_and_derivatives; run by GCEOSMIX.a_alpha_and_derivatives after a_alpha is calculated for every component

setup_a_alpha_and_derivatives(i, T=None)[source]

Sets a, omega, and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called. Both are called by GCEOSMIX.a_alpha_and_derivatives for every component.

class thermo.eos_mix.APISRKMIX(Tcs, Pcs, zs, omegas=None, kijs=None, T=None, P=None, V=None, S1s=None, S2s=None)[source]

Bases: thermo.eos_mix.SRKMIX, thermo.eos.APISRK

Class for solving the Refinery Soave-Redlich-Kwong cubic equation of state for a mixture of any number of compounds, as shown in the API Databook [R616802]. Subclasses APISRK. Solves the EOS on initialization and calculates fugacities for all components in all phases.

Two of T, P, and V are needed to solve the EOS.

\[ \begin{align}\begin{aligned}P = \frac{RT}{V-b} - \frac{a\alpha(T)}{V(V+b)}\\a \alpha = \sum_i \sum_j z_i z_j {(a\alpha)}_{ij}\\(a\alpha)_{ij} = (1-k_{ij})\sqrt{(a\alpha)_{i}(a\alpha)_{j}}\\b = \sum_i z_i b_i\\a_i =\left(\frac{R^2(T_{c,i})^{2}}{9(\sqrt[3]{2}-1)P_{c,i}} \right) =\frac{0.42748\cdot R^2(T_{c,i})^{2}}{P_{c,i}}\\b_i =\left( \frac{(\sqrt[3]{2}-1)}{3}\right)\frac{RT_{c,i}}{P_{c,i}} =\frac{0.08664\cdot R T_{c,i}}{P_{c,i}}\\\alpha(T)_i = \left[1 + S_{1,i}\left(1-\sqrt{T_{r,i}}\right) + S_{2,i} \frac{1- \sqrt{T_{r,i}}}{\sqrt{T_{r,i}}}\right]^2\\S_{1,i} = 0.48508 + 1.55171\omega_i - 0.15613\omega_i^2 \text{ if S1 is not tabulated }\end{aligned}\end{align} \]
Parameters:

Tcs : float

Critical temperatures of all compounds, [K]

Pcs : float

Critical pressures of all compounds, [Pa]

omegas : float

Acentric factors of all compounds, [-]

zs : float

Overall mole fractions of all species, [-]

kijs : list[list[float]], optional

n*n size list of lists with binary interaction parameters for the Van der Waals mixing rules, default all 0 [-]

T : float, optional

Temperature, [K]

P : float, optional

Pressure, [Pa]

V : float, optional

Molar volume, [m^3/mol]

S1s : float, optional

Fit constant or estimated from acentric factor if not provided [-]

S2s : float, optional

Fit constant or 0 if not provided [-]

Notes

For P-V initializations, SciPy’s newton solver is used to find T.

References

[R616802](1, 2) API Technical Data Book: General Properties & Characterization. American Petroleum Institute, 7E, 2005.

Examples

T-P initialization, nitrogen-methane at 115 K and 1 MPa:

>>> eos = APISRKMIX(T=115, P=1E6, Tcs=[126.1, 190.6], Pcs=[33.94E5, 46.04E5], omegas=[0.04, 0.011], zs=[0.5, 0.5], kijs=[[0,0],[0,0]])
>>> eos.V_l, eos.V_g
(4.1015909205567394e-05, 0.0007104685894929316)
>>> eos.fugacities_l, eos.fugacities_g
([817882.3033490371, 71620.48238123357], [442158.29113191745, 361519.7987757053])

Methods

Hvap(T) Method to calculate enthalpy of vaporization for a pure fluid from an equation of state, without iteration.
Psat(T[, polish]) Generic method to calculate vapor pressure for a specified T.
TDP_Michelsen(Zz, Zy, zs, ys)
TPD(Zz, Zy, zs, ys)
V_g_sat(T) Method to calculate molar volume of the vapor phase along the saturation line.
V_l_sat(T) Method to calculate molar volume of the liquid phase along the saturation line.
a_alpha_and_derivatives(T[, full, quick]) Method to calculate a_alpha and its first and second derivatives for an EOS with the Van der Waals mixing rules.
check_sufficient_inputs() Method to an exception if none of the pairs (T, P), (T, V), or (P, V) are given.
cleanup_a_alpha_and_derivatives() Removes properties set by setup_a_alpha_and_derivatives; run by
dPsat_dT(T) Generic method to calculate the temperature derivative of vapor pressure for a specified T.
d_TPD_dy(Zz, Zy, zs, ys)
derivatives_and_departures(T, P, V, b, ...)
fugacities([xs, ys]) Helper method for calculating fugacity coefficients for any phases present, using either the overall mole fractions for both phases or using specified mole fractions for each phase.
fugacities_partial_derivatives([xs, ys])
fugacities_partial_derivatives_2([xs, ys])
fugacity_coefficients(Z, zs) Literature formula for calculating fugacity coefficients for each species in a mixture.
main_derivatives_and_departures(T, P, V, b, ...)
set_from_PT(Vs) Counts the number of real volumes in Vs, and determines what to do.
set_properties_from_solution(T, P, V, b, ...) Sets all interesting properties which can be calculated from an EOS alone.
setup_a_alpha_and_derivatives(i[, T]) Sets a, S1, S2 and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called.
solve() First EOS-generic method; should be called by all specific EOSs.
solve_T(P, V[, quick]) Generic method to calculate T from a specified P and V.
to_TP(T, P)
to_TP_zs(T, P, zs)
volume_solutions(T, P, b, delta, epsilon, ...) Solution of this form of the cubic EOS in terms of volumes.
a_alpha_mro = -5
cleanup_a_alpha_and_derivatives()[source]

Removes properties set by setup_a_alpha_and_derivatives; run by GCEOSMIX.a_alpha_and_derivatives after a_alpha is calculated for every component

setup_a_alpha_and_derivatives(i, T=None)[source]

Sets a, S1, S2 and Tc for a specific component before the pure-species EOS’s a_alpha_and_derivatives method is called. Both are called by GCEOSMIX.a_alpha_and_derivatives for every component.