pytherm.activity.unifac_old module

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

UNIFAC Class

class pytherm.activity.unifac_old.UNIFAC(dataset: ParametersUNIFAC, substances: SubstancesUNIFAC, dict_mode=False)[source]

Bases: ActivityModel

UNIFAC model for activity coefficients calculation

UNIFAC type (classic or modified) depends on ParametersUNIFAC

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

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

Raises:

Warning – Raises if unifac_mode is unknown (not classic or modified)

Examples

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

Methods

get_comb_mod(inp)

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

get_comb_original(inp)

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

get_res(inp, T)

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

get_y(system[, T])

Calculate activity coefficietns for system dict

get_y(system, T=298)[source]

Calculate activity coefficietns for system dict

\[\gamma_i = \exp\left(\ln \gamma_i^c + \ln \gamma_i^r \right)\]
Parameters:
  • system – Input dictionary {“Substance name”: concentration}

  • T (int, optional) – Temperature, [K], by default 298

Returns:

Activity coefficients

Return type:

dict[str, float]

get_comb_original(inp: SubstancesUNIFAC) dict[str, float][source]

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

\[\ln \gamma_i^c = \ln \frac{\phi_i}{x_i} + \frac{z}{2} q_i \ln\frac{\theta_i}{\phi_i} + L_i - \frac{\phi_i}{x_i} \sum_{j=1}^{n} x_j L_j\]
\[\theta_i = \frac{x_i q_i}{\sum_{j=1}^{n} x_j q_j}\]
\[\phi_i = \frac{x_i r_i}{\sum_{j=1}^{n} x_j r_j}\]
\[L_i = 5(r_i - q_i)-(r_i-1)\]
Parameters:
  • inp (SubstancesUNIFAC) – SubstancesUNIFAC object with defined concentrations

  • z (int, optional) – Coordination number, by default 10

Returns:

Returns lny_c {“Substance name”: lny_c}

Return type:

dict[str, float]

get_comb_mod(inp: SubstancesUNIFAC) dict[str, float][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}\]
Parameters:
  • inp (SubstancesUNIFAC) – SubstancesUNIFAC object with defined concentrations

  • z (int, optional) – Coordination number, by default 10

Returns:

Returns lny_c {“Substance name”: lny_c}

Return type:

dict[str, float]

get_res(inp, T: float)[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)\]
Parameters:
  • inp (SubstancesUNIFAC) – SubstancesUNIFAC object with defined concentrations

  • T (float) – Temperature, [K]

Returns:

Returns residual component {“Substance name”: lny_a}

Return type:

dict[str, float]

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

class pytherm.activity.unifac_old.UNIFAC(dataset: ParametersUNIFAC, substances: SubstancesUNIFAC, dict_mode=False)[source]

Bases: ActivityModel

UNIFAC model for activity coefficients calculation

UNIFAC type (classic or modified) depends on ParametersUNIFAC

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

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

Raises:

Warning – Raises if unifac_mode is unknown (not classic or modified)

Examples

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

Methods

get_comb_mod(inp)

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

get_comb_original(inp)

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

get_ge(system[, T])

Calculate excess molar Gibbs free energy

get_ge_RT(system[, T])

Calculate excess molar Gibbs free energy divided by RT

get_res(inp, T)

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

get_y(system[, T])

Calculate activity coefficietns for system dict

calculate_psi

change_t2

get_gr

get_gr_str

get_t1

get_t2

T = -1.0
calculate_psi(T)[source]
change_t2(i, j, vals)[source]
dict_mode: bool
get_comb: Callable
get_comb_mod(inp: SubstancesUNIFAC) dict[str, float][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}\]
Parameters:
  • inp (SubstancesUNIFAC) – SubstancesUNIFAC object with defined concentrations

  • z (int, optional) – Coordination number, by default 10

Returns:

Returns lny_c {“Substance name”: lny_c}

Return type:

dict[str, float]

get_comb_original(inp: SubstancesUNIFAC) dict[str, float][source]

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

\[\ln \gamma_i^c = \ln \frac{\phi_i}{x_i} + \frac{z}{2} q_i \ln\frac{\theta_i}{\phi_i} + L_i - \frac{\phi_i}{x_i} \sum_{j=1}^{n} x_j L_j\]
\[\theta_i = \frac{x_i q_i}{\sum_{j=1}^{n} x_j q_j}\]
\[\phi_i = \frac{x_i r_i}{\sum_{j=1}^{n} x_j r_j}\]
\[L_i = 5(r_i - q_i)-(r_i-1)\]
Parameters:
  • inp (SubstancesUNIFAC) – SubstancesUNIFAC object with defined concentrations

  • z (int, optional) – Coordination number, by default 10

Returns:

Returns lny_c {“Substance name”: lny_c}

Return type:

dict[str, float]

get_ge(system: dict[str, float], T=298) float[source]

Calculate excess molar Gibbs free energy

Parameters:
  • system (dict[str, float]) – Input dictionary {“Substance name”: concentration}

  • T (int, optional) – Temperature, [K], by default 298

Returns:

excess molar Gibbs free energy

Return type:

float

get_ge_RT(system, T=298)[source]

Calculate excess molar Gibbs free energy divided by RT

Parameters:
  • system (dict[str, float]) – Input dictionary {“Substance name”: concentration}

  • T (int, optional) – Temperature, [K], by default 298

Returns:

excess molar Gibbs free energy

Return type:

float

get_gr(name)[source]
get_gr_str(name)[source]
get_res(inp, T: float)[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)\]
Parameters:
  • inp (SubstancesUNIFAC) – SubstancesUNIFAC object with defined concentrations

  • T (float) – Temperature, [K]

Returns:

Returns residual component {“Substance name”: lny_a}

Return type:

dict[str, float]

get_t1(name)[source]
get_t2(i, j)[source]
get_y(system, T=298)[source]

Calculate activity coefficietns for system dict

\[\gamma_i = \exp\left(\ln \gamma_i^c + \ln \gamma_i^r \right)\]
Parameters:
  • system – Input dictionary {“Substance name”: concentration}

  • T (int, optional) – Temperature, [K], by default 298

Returns:

Activity coefficients

Return type:

dict[str, float]

groups: list
phase: SubstancesUNIFAC
class pytherm.activity.unifac_old.UNIFAC_W(dataset: ParametersUNIFAC, substances: SubstancesUNIFAC, Mw, dict_mode=False)[source]

Bases: UNIFAC

Methods

get_comb_mod(inp)

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

get_comb_original(inp)

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

get_ge(system[, T])

Calculate excess molar Gibbs free energy

get_ge_RT(system[, T])

Calculate excess molar Gibbs free energy divided by RT

get_res(inp, T)

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

get_y(system[, T])

Calculate activity coefficietns for system dict

calculate_psi

change_t2

get_gr

get_gr_str

get_t1

get_t2

get_y(system, T=298.0)[source]

Calculate activity coefficietns for system dict

\[\gamma_i = \exp\left(\ln \gamma_i^c + \ln \gamma_i^r \right)\]
Parameters:
  • system – Input dictionary {“Substance name”: concentration}

  • T (int, optional) – Temperature, [K], by default 298

Returns:

Activity coefficients

Return type:

dict[str, float]