Propiedades termodinámicas

Propiedades termodinámicas

  • Fugacidad

$ ln \hat \phi_i = \left( \frac{\partial F}{\partial n_i}\right)_{T,V} - ln (Z) $

  • Entalpía residual
  • Entropía residual
  • Gibbs residual

$ \frac{S^r(T,V,n)}{R} = -T \left(\frac{\partial F}{\partial T}\right) $

$ \frac{C^r_V(T,V,n)}{R} = -T^2 \left(\frac{\partial^2 F}{\partial T^2}\right)_{V,n} - 2T \left(\frac{\partial F}{\partial T} \right)_{V,n} $

$ \frac{C^r_P - C^r_P}{R} = -\frac{T}{R} \frac {\left(\frac{\partial P}{\partial V}\right)^2_{V,n}} {\left(\frac{\partial P}{\partial V}\right)} - n $

$ H^r(T, P, n) = A^r(T,V,n) + TS^r(T,V,n) + PV - nRT $

$ G^r(T, P, n) = A^r(T,V,n) + PV - nRT -nRTlnZ $

$ S^r(T, P, n) = S^r(T,V,n) + nRlnZ $

$ S^r(T, P, n) = \frac{H^r(T,P,n) + G^r(T,P,n)} {T} $

  • The sound speed

$ W^2 = \frac{V} {\beta_sM_w} $

$ M_w = \sum\limits_{i}^{c} n_iM_{w_i} $

$ \beta_s = -\frac{1}{V} \left(\frac{\partial V}{\partial P}\right)_s = -\frac{1}{V} \frac {\frac{C_V}{C_P}} {\left(\frac{\partial P} {\partial V} \right)_{T,n}} $

  • The Joule-Thomson coefficient

$ \eta = \left(\frac{\partial T}{\partial P} \right)_{H,n} = - \frac{1}{C_P} \left(V + \frac{T \left( \frac{\partial P}{\partial T}\right)_{V,n}} {\left( \frac{\partial P}{\partial V}\right)_{T,n}} \right) $

Diagramas de propiedades termodinámicas

- Referencias

[1] Michael L. Michelsen and Jorgen M. Mollerup. Thermodynamics Models: Fundamentals & Computacional aspects. Denmark. Second Edition. 2007.

[2] Python web: https://www.python.org/

[3] Jupyter web: https://jupyter.org/

Propiedades termodinamicas residuales


Introducción

En esta sección se presenta el calculo de las siguientes propiedades termodinámicas residuales:

  • entropía residual
  • entalpía residual
  • energía libre de Gibbs

utilizando las ecuaciones de estado SRK y PR y el enfoque modular de Mishelsen&Mollerup en el lenguaje de programación Python.

Propiedades termodinámicas

Para iniciar se recuenda las definiciones de las propiedades termodinámicas consideradas:

entropía residual a volumen constante $(T,V,n)$

$ \frac{S^r(T,V,n)}{R} = -T \left(\frac{\partial F}{\partial T}\right)_{V,n} - F $

entalpía residual

$ H^r(T,P,n) = A^r(T,V,n) + TS^r(T,V,n) + PV - nRT $

Energía libre de Gibss residual

$ G^r(T,P,n) = A^r(T,V,n) - PV - nRT -nRTln(Z) $

Entropía residual a presión constante $(T,P,n)$

$ S^r(T,P,n) = S^r(T,V,n) + nRTln(Z) $

Desarrollo

Se observa que para realizar el calculo de la entropía residual $ S^r(T,V,n) $ se requiere del calculo de la primera derivada parcial de la función de la energía de Helmhotlz con respecto a al temperatura, la cual se define como lo hizo Michelsen&Mollerup.

Primeras derivadas parciales de la función $F$ de Helmhotlz con respecto al número de moles $N$ para temperatura $T$ y volumen $V$ constantes, con respecto a la temperatura para $V$ y $N$ constantes y con respecto al volumen para $T$ y $N$ constantes, respectivamente.

$ \left(\frac{\partial F} {\partial\ n_i}\right)_{T, V} = F_n + F_B B_i + F_D D_i $

$ \left(\frac{\partial F} {\partial\ T}\right)_{V, n} = F_T + F_D D_T $

$ \left(\frac{\partial F} {\partial\ V}\right)_{T, n} = F_V $

por tanto, para este caso interesa obtener las variables $ F_T$, $F_D$ y $D_T$ que son las que componen a la derivada parcial necesaria en el calculo de la entropía residual. Dichas variables, provienen de la manipulación de la función de energía de Helmholtz $F(n,T,V,B,D)$ y sus respectivas derivadas parciales tal como se muestra a continuación

$ F_T = \frac{D(T)} {T^2} f $

$ F_D = -\frac{f} {T} $

En las ecuaciones anteriores de la función $F_D$, se requiere el termino $D(T)$ que se muestra en la siquente ecuación

$ D(T) = \sum\limits_{i} {n_i \sum\limits_{j} {n_ja_{ij}(T)} = {1\over 2} \sum\limits_{i} {n_i D_i} } $

donde $D_i$ es la derivada del parámetro $D$ con respecto al número de moles $n_i$ de la mezcla, dando como resultado

Primera derivada parcial del parámetro $D$ con respecto a $n_i$

$ D_i = 2 \sum\limits_{j} {n_ja_{ij}} $

Otra de las variables que aparece es $f$, la cual surge de la reorgacización de la función de la energía libre de Helmholtz, escrita de esta forma es independiente del modelo termodinámico que se utilice (ecuación de estado), además de facilitar la manipulación del sistema de ecauciones modelo de forma modular.

Función de la energía de Helmholtz

$ F = F (n,T,V,B,D) = -ng(V, B) - {D(T) \over T} f(V, B) $

Donde

$ g = ln(1- B/V) = ln(V - B) - ln(V) $

$ f = {1 \over RB(\delta_1 - \delta_2)} ln{(1 + \delta_1 B/V) \over (1 + \delta_2 B/V)} = {1 \over RB(\delta_1 - \delta_2)} ln{V + \delta_1 B \over V + \delta_2 B} $

y de esta forma se obtiene $f$,

Por otro lado, se debe determinar el valor de la variable $D_T$ que corresponde a la primera derivada parcial del parametro $D$ con respecto a la temperatura $T$, por eso es necesario recordar la relación que tiene este parámetro $D$ con con el parametro $a$ y su funcionalidad con la temperatura.

Tomando como ejemplo los parámetros de compuesto puro en el caso de la ecuación de estado de PR, los cuales se obtienen a partir de las propiedades criticas (presión y temperatura)

$ a = 0.45723553 R^2 \frac{T_c^2}{Pc} $

$ b_c = 0.077796070 R \frac{T_c} {P_c} $

en donde la corrección del parametro $a$ con respecto a la temperatura viene dado por el factor $\alpha$, tal como se muestra a continuación

$ a(T) = a \alpha(T_r,w) $

$ \alpha(T_r,w) = \left(1 + m\left(1 - \sqrt{\left(\frac{T} {T_c}\right)}\right) \right)^2 $

de la cual es simple obtener la primera derivada del parámetro $a(T)$ con respecto a la temperatura, utilizando la regla de la cadena para simplificar y resultar en la derivada del parámetro $\alpha$ con respecto a la temperatura como sigue

$ \frac{\partial \alpha} {\partial T} = - \frac{m} {T} \left(\frac{T} {T_c}\right) ^{0.5} \left(m \left(- \left(\frac{T} {T_c}\right) ^{0.5} + 1\right) + 1\right) $

$ \frac{\partial a_{ij}}{\partial T} = a_{ij} \frac{\partial \alpha}{\partial T} $

es decir que ya se puede obtener la expresiones que permiten calcular las variables $D_{iT}$ y $D_T$, que se muestran a continuación

$ D_{iT} = 2\sum\limits^c_{j} n_j \frac{\partial a_{ij}}{\partial T} $

$ D_T = \frac{1}{2} \sum\limits^c_{i}n_iD_{iT} $

en este punto ya se cuenta con todas las expresiones necesarias para realizar el calculo de la entropía residual utilizando las ecuaciones de estado SRK y PR uniendo lo presentado en esta sección con la sección de propiedades de sustacias puras (tal como se ha presentado en los seminarios y sigó documentando), para acceder a los datos del archivo DIPPR.

.. note:: incluir test para verificar la implementación realizada

A continuación se muestra un ejemplo para el caso de Metano a diferentes presiones y temperatura.

.. note:: Realizar 3 ejemplos más. Uno a presión constante variando la temperatura y visceversa. Otro para una mezcla y variando la compocición para una presión y temperatura especificada.

Diagrama

.. image:: _static/entropy_pressure.jpg :width: 1200

.. note:: incluir ejemplo numérico con el valor de cada una de las variables necesarias para el calculo de la entropía.

.. image:: _static/seccion_en_construccion.gif :width: 1200

$$ \Delta H^{gi} = \int_{T_1}^{T_2} C_p(T) dT$$


In [2]:
import pyther as pt

datos = pt.Data_parse()

In [6]:
dfile = "PureFull.xls"
datos.read_dppr(dfile)


---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-6-664d3ff5f297> in <module>()
      1 dfile = "PureFull.xls"
----> 2 datos.read_dppr(dfile)

/home/andres-python/anaconda3/lib/python3.5/site-packages/pyther/pure_data.py in read_dppr(self, dppr_file)
     18 
     19         #self.dppr_data = pd.read_excel(dppr_file).set_index("Name").ix[:, 1:12]
---> 20         self.dppr_data = pd.read_excel(dppr_file).set_index("Name").ix[:, 1:12]
     21         # component_names = dppr_data.index.get_values()
     22         return self.dppr_data

/home/andres-python/anaconda3/lib/python3.5/site-packages/pandas/io/excel.py in read_excel(io, sheetname, header, skiprows, skip_footer, index_col, names, parse_cols, parse_dates, date_parser, na_values, thousands, convert_float, has_index_names, converters, true_values, false_values, engine, squeeze, **kwds)
    189 
    190     if not isinstance(io, ExcelFile):
--> 191         io = ExcelFile(io, engine=engine)
    192 
    193     return io._parse_excel(

/home/andres-python/anaconda3/lib/python3.5/site-packages/pandas/io/excel.py in __init__(self, io, **kwds)
    247             self.book = xlrd.open_workbook(file_contents=data)
    248         elif isinstance(io, compat.string_types):
--> 249             self.book = xlrd.open_workbook(io)
    250         else:
    251             raise ValueError('Must explicitly set engine if not passing in'

/home/andres-python/anaconda3/lib/python3.5/site-packages/xlrd/__init__.py in open_workbook(filename, logfile, verbosity, use_mmap, file_contents, encoding_override, formatting_info, on_demand, ragged_rows)
    393         peek = file_contents[:peeksz]
    394     else:
--> 395         with open(filename, "rb") as f:
    396             peek = f.read(peeksz)
    397     if peek == b"PK\x03\x04": # a ZIP file

FileNotFoundError: [Errno 2] No such file or directory: 'PureFull.xls'
  • Arreglar el acceso a los componentes
  • Multiusuario en jupyter
  • Revisar tolueno
  • Revisar formato de lista

In [ ]: