pytherm.activity.unifac module

This module contains a class UNIFAC for performing activity coefficient calculations with the UNIFAC model.

UNIFAC Class

class pytherm.activity.unifac.UNIFAC(dataset: ParametersUNIFAC, substances: SubstancesUNIFAC)[source]

UNIFAC model for activity coefficients calculation

UNIFAC type (classic or modified) depends on ParametersUNIFAC For classic mode UNIFAC use get_comb_classic(), for modified get_comb_mod()

Parameters:
  • dataset (ParametersUNIFAC) – ParametersUNIFAC object with interaction parameters

  • substances (SubstancesUNIFAC) – Substances UNIFAC object with substance’s group representation

Examples

>>> import pytherm.activity.unifac as uf
>>> subs = {
...    "n-hexane": "2*CH3 4*CH2",
...    "butanone-2": "1*CH3 1*CH2 1*CH3CO",
... }
>>> x = [0.5, 0.5]
>>> substances = uf.datasets.SubstancesUNIFAC()
>>> substances.get_from_dict(subs)
>>> am = uf.UNIFAC(dataset=uf.datasets.DOR, substances=substances)
>>> am.get_y(x=x, T=298)
{'n-hexane': 1.514766775270851, 'butanone-2': 1.4331647782163541}

Methods

get_y(conc[, T])

Calculate activity coefficients for conc array

get_y_array(conc[, T])

Calculate activity coefficients for conc matrix

get_y(conc: ndarray, T=298.0) ndarray[source]

Calculate activity coefficients for conc array

Concentrations must be in molar fractions

\[\gamma_i = \exp\left(\ln \gamma_i^c + \ln \gamma_i^r \right)\]
Parameters:
  • conc (np.ndarray) – Input concentration array, [molar fraction]

  • T (float, optional) – Temperature, [K], by default 298.0

Returns:

Activity coefficients

Return type:

np.ndarray

Examples

>>> UNIFAC.get_y([0.5, 0.5], T=298)
get_y_array(conc: ndarray[any, any], T=298) ndarray[any, any][source]

Calculate activity coefficients for conc matrix

\[\gamma_i = \exp\left(\ln \gamma_i^c + \ln \gamma_i^r \right)\]
Parameters:
  • conc (np.ndarray) – Input concentration matrix, [molar fraction]

  • T (float, optional) – Temperature, [K], by default 298.0

Returns:

Activity coefficients

Return type:

np.ndarray[(np.any, np.any,)]

Examples

>>> UNIFAC.get_y([[0.5, 0.5], [[0.6, 0.4]]])

UNIFAC_W Class

class pytherm.activity.unifac.UNIFAC_W(dataset: ParametersUNIFAC, substances: SubstancesUNIFAC, molar_weight)[source]

UNIFAC model for activity coefficients calculation in weight fractions.

Override UNIFAC methods to calculate properties in weight fractions

Parameters:
  • dataset (ParametersUNIFAC) – ParametersUNIFAC object with interaction parameters

  • substances (SubstancesUNIFAC) – Substances UNIFAC object with substance’s group representation

  • molar_weight (numpy.ndarray) – array of molar weighs

Methods

get_y(conc[, T])

Calculate activity coefficients for conc array

get_y(conc: ndarray, T=298.0) ndarray[source]

Calculate activity coefficients for conc array

Concentrations must be in weight fractions

\[\gamma_i = \exp\left(\ln \gamma_i^c + \ln \gamma_i^r \right)\]
Parameters:
  • conc (np.ndarray) – Input concentration array, [weight fraction]

  • T (float, optional) – Temperature, [K], by default 298.0

Returns:

Activity coefficients

Return type:

np.ndarray

Examples

Functions

pytherm.activity.unifac.get_res(conc: ndarray, n_gr: int, group_comp: ndarray[any, any], group_Q: ndarray, gr_id_local: ndarray, n_comp: int, psi: ndarray[any, any], ln_gamma_pure: ndarray[any, any]) ndarray[source]

Calculate residual component \(\ln\gamma_i^r\) using original equation

\[\ln \gamma_i^r = \sum_{k}^n \nu_k^{(i)} \left[ \ln \Gamma_k - \ln \Gamma_k^{(i)} \right]\]
\[\ln \Gamma_k = Q_k \left[1 - \ln \sum_m \Theta_m \Psi_{mk} - \sum_m \frac{\Theta_m \Psi_{km}}{\sum_n \Theta_n \Psi_{nm}}\right]\]
\[\Theta_m = \frac{Q_m X_m}{\sum_{n} Q_n X_n}\]
\[X_m = \frac{ \sum_j \nu^j_m x_j}{\sum_j \sum_n \nu_n^j x_j}\]
\[\Psi_{mn} = \exp\left(\frac{-a_{mn} - b_{mn}T - c_{mn}T^2}{T}\right)\]
pytherm.activity.unifac.get_comb_classic(conc: ndarray, comp_r: ndarray, comp_q: ndarray) ndarray[source]

Calculate combinatorial component \(\ln\gamma_i^c\) using classic equation

\[\ln \gamma_i^c = 1 - {V}_i + \ln({V}_i) - 5q_i \left(1 - \frac{V_i}{F_i}+ \ln\left(\frac{V_i}{F_i}\right)\right)\]
\[V_i = \frac{r_i}{\sum_j r_j x_j}\]
\[F_i = \frac{q_i}{\sum_j q_j x_j}\]
pytherm.activity.unifac.get_comb_mod(conc: ndarray, comp_r: ndarray, comp_q: ndarray) ndarray[source]

Calculate combinatorial component \(\ln\gamma_i^c\) using modified equation

\[\ln \gamma_i^c = 1 - {V'}_i + \ln({V'}_i) - 5q_i \left(1 - \frac{V_i}{F_i}+ \ln\left(\frac{V_i}{F_i}\right)\right)\]
\[V'_i = \frac{r_i^{3/4}}{\sum_j r_j^{3/4}x_j}\]
\[V_i = \frac{r_i}{\sum_j r_j x_j}\]
\[F_i = \frac{q_i}{\sum_j q_j x_j}\]

UNIFAC substances

Substances must be a special SubstancesUNIFAC object

UNIFAC parameters

Parameters must be a special ParametersUNIFAC object

There are some ready to use ParametersUNIFAC objects in unifac.datasets:

  • Classic UNIFAC:
    • unifac.datasets.VLE (db.unifac.parameters.vle.VLE) [1]

    • unifac.datasets.LLE (db.unifac.parameters.vle.LLE) [2]

    • unifac.datasets.INF (db.unifac.parameters.vle.INF) [3]

    • unifac.datasets.BIO2016_1 (db.unifac.parameters.vle.BIO2016_1) [6]

    • unifac.datasets.BIO2016_2 (db.unifac.parameters.vle.BIO2016_2) [6]

  • Modified UNIFAC:
    • unifac.datasets.DOR (db.unifac.parameters.vle.DOR) [4]

    • unifac.datasets.NIST2015 (db.unifac.parameters.vle.NIST2015) [5]

References