Universidade do Estado do Rio de Janeiro
Instituto de Química
Prof André Luís Alberton
Índice

Cálculo da entropia padrão (Poiling et al., 2001)¶

O arquivo termodinâmico com os dados de Poiling et al. (2001) pode ser baixado clicando aqui, conforme discutido na página anterior.

Considere por exemplo o 'eixo' adotado por Poiling, Prauznitz, O'Connell (2001):

  • gases ideais Ar, Cl2, D2, F2, He, H2, Kr, Ne, N2, O2, Rn, T2, Xe possuem entalpia e energia livre de Gibbs nulas a 298K e 1 atm
  • sólidos cristalinos Al, As, B, C, I2, P, S, Se, Si, Ti, U possuem entalpia e energia livre de Gibbs nulas a 298K e 1 atm
  • líquidos saturados Br2 e Hg possuem entalpia e energia livre de Gibbs nulas a 298 K

Os dados apresentados por Poiling et al. (2010) compreendem as seguintes informações para o cálculo das reações padrão levando à gás ideal a 298 K e 1 atm:

nº Símbolo Nome CAS $$ \Delta h_{form}^{\tiny{\ominus}} $$ $$ \Delta g_{form}^{\tiny{\ominus}} $$ $$ \Delta h_{b} $$ $$ \Delta h_{m} $$ $$ v_{liq} \left(\frac{cm^3}{mol}\right) $$ $$ T_{liq} (K) $$ $$ Dipolo (Debye) $$
1 Ar argon 7440-37-1 0.0 0.0 6.43 nan 29.1 90.0 0.0
2 Br2 bromine 7726-95-6 30.91 3.13 58.8 nan 51.51 298.15 0.0
3 BrD deuterium_bromide 13536-59-9 -37.12 -53.79 nan nan nan nan nan
4 BrF3 bromine_trifluoride 7787-71-5 -255.64 -229.51 47.57 nan 48.84 298.15 1.1
5 BrF5 bromine_pentafluoride 7789-30-2 -428.86 -351.65 30.6 nan 71.02 298.15 1.5

entalpias (h) e energias livres (g) em kJ/(mol * K)

subescritos - $ _{form} $ - de formação gás ideal a 298.15 K e 1 atm $ _b, _m $ - ebulição e fusão, respectivamente

A questão é que, diferente da entalpia e energia livre de Gibbs, as entropias têm uma escala absoluta, e deveriam a princípio serem adotadas a partir de um valor comum à todos os simuladores. Não é o que ocorre, infelizmente. Contudo, aqui, buscaremos usar a escala absoluta da entropia, tomando dados, sobretudo, a partir do site NIST.

Os valores de entalpia padrão para a base de Poiling et al. (2001) estão ilustrados a seguir

Dados de entropia dos padrões, obtidos do NIST Webbook
Composto Fase $$ s^{\tiny{\ominus}} \ \frac{J}{(mol*K)} $$
Ar {g} 154.84
Cl2 {g} 223.08
D2 {g} 144.96
F2 {g} 202.8
He {g} 126.15
H2 {g} 130.68
Kr {g} 164.08
Ne {g} 146.33
N2 {g} 191.61
O2 {g} 205.15
Rn {g} 176.23
T2 {g} nan
Xe {g} 169.68
Al {s} 28.27
As {s} nan
B {s} 5.9
C {s} 5.833
I2 {s} 116.14
P {s} 41.09
S {s} 32.054
Se {s} nan
Si {s} 18.82
Ti {s} 30.72
U {s} 50.2
Br2 {l} 152.21
Hg {l} 76.0

Vejamos um exemplo de como o cálculo pode ser feito para o propano gasoso.

Exemplo - Cálculo da entropia padrão do propano gasoso¶

Calcule a entropia padrão do propano na fase gás (condições padrão 298.15K e 1 atm). O CAS do propano é igual a 74-98-6.

Solução

Primeiramente vamos extrair da tabela do Prauznitz a entlapia e energia livre de formação.

In [1]:
import pandas as pd
Dd = pd.read_excel(r'DadosPrauznitz.xlsx', sheet_name='VariacoesFase')
DdPropano = Dd[Dd['CAS']=='74-98-6']
DdPropano
Out[1]:
nº Símbolo Nome CAS dHform (kJ/mol/K) dGform (kJ/mol/K) dHb (kJ/mol/K) dHm (kJ/mol/K) Vliq (cm³/mol) T liq K Dipolo (Debye)
90 95 C3H8 propane 74-98-6 -104.68 -24.29 19.04 3.53 74.87 233.15 0.0

Assim, para cálculo das propriedades de fase para o propano por exemplo, teríamos:

$$ 3 \ C_{(s)} + 4 \ H_{2 \ (g)} \rightarrow C_3H_{8 \ (g)}, \ \Delta h_{form}^{\tiny{\ominus}}, g_{form}^{\tiny{\ominus}} $$

O cálculo da entropia do propano, neste caso, pode ser feito como:

$$ \Delta h_{form}^{\tiny{\ominus}} = \Delta g_{form}^{\tiny{\ominus}} + \cdot \Delta s_{form}^{\tiny{\ominus}} \cdot T^{\tiny{\ominus}} $$

Logo:

$$ \Delta s_{form}^{\tiny{\ominus}} = \frac{ \Delta h_{form}^{\tiny{\ominus}} - \Delta g_{form}^{\tiny{\ominus}} }{T^{\tiny{\ominus}} } $$

Partindo do eixo de referência, $ C_{(s)} $, $H_{2, \ (g)} $, temos:

$$ s_{C3H8 \ (g) }^{\tiny{\ominus}} = 3 \cdot s_{C \ (s) }^{\tiny{\ominus}} + 4 \cdot s_{H2 \ (g) }^{\tiny{\ominus}} + \Delta s_{form}^{\tiny{\ominus}} $$

Substituindo valores:

In [2]:
# Entalpia e energia livre de formação (multiplica-se por 1000 para passar para J/(mol*K))
dh_form = DdPropano['dHform (kJ/mol/K)'].values[0]*1000
dg_form = DdPropano['dGform (kJ/mol/K)'].values[0]*1000
T = 298.15
ds_form = (dh_form - dg_form)/T
print('entropia de formação=', ds_form, 'J/(mol*s)')
entropia de formação= -269.62938118396784 J/(mol*s)

Tendo os valores tabelados de entropia para o $ C_{(s)} $ e $ H_{2, (g)} $ como 5.833 e 130.68 J/(mol * K), tem-se:

In [3]:
sC = 5.833
sH2 = 130.68
sProp = (3*sC + 4*sH2) + ds_form
print(sProp)
270.5896188160322

O valor acima resulta me $ 270.58 \frac{ J}{ (mol\cdot K} $. O valor tabelado do site Wikipedia) é de $ 269.91 \frac{ J}{ (mol\cdot K} $, indicando boa concordância dos dados.

Varrendo para todos os compostos¶

Podemos efetuar as contas para todos os compostos tabelados no livro de Poiling et al. (2001). O código a seguir efetua estas operações.

In [4]:
# Função que decompõe um composto químico em seus elementos
def obtemcomposicao(formulas,especies):
    ne = len(especies)
    comp = []
    for formula in formulas:
        nf = len(formula)
        composicao= [formula]
        for esp in especies:
            nl = len(esp)
            k = 0
            while k < nf-nl+1:                
                if esp == formula[k:k+nl]:
                    formula = formula[:k]+formula[(k+(nl-1)+1):]
                    nf = nf - nl
                    num = ''
                    if k==nf:
                        num = float(1)
                        composicao.append([esp,num])
                        break
                    while formula[k].isdigit() and k<nf:
                        num = num + formula[k]
                        formula = formula[:k]+formula[(k+1):]
                        nf = nf - 1
                        if k==nf:
                            break
                    if num =='':
                        num = 1
                    num = float(num)
                    composicao.append([esp,num])
                else:
                    k = k +1
        comp.append(composicao)
    return comp
In [5]:
# Importação de pacotes
import pandas as pd
import numpy as np

# Leitura de dados
Dd = pd.read_excel(r'DadosPrauznitz.xlsx', sheet_name='VariacoesFase')
# Fórmulas qúimicas
formulas = Dd['Símbolo'].values

# em caso de elementos iniciando com mesma letra, os com uma letra apenas devem vir depois. Ex, Ne, N
especies = ['Ar','Al','As','Br','B','Cl','C','D','F','Kr','He','Hg','H','I','Ne','N','O','P','Rn','Se','Si','S','Ti','T','U','Xe']
especies = sorted(especies)
especies.reverse()

# Obtém a composição elementar de todos os compostos
comp = obtemcomposicao(formulas,especies)
In [6]:
# padrões de gás ideal (GI), sólidos cristalinos (SC) e líquidos saturados (LS)
GI = ['Ar', 'Cl2', 'D2', 'F2', 'He', 'H2', 'Kr', 'Ne', 'N2', 'O2', 'Rn', 'T2', 'Xe']
SC = ['Al', 'As', 'B', 'C', 'I2', 'P', 'S', 'Se', 'Si', 'Ti', 'U' ]
LS = ['Br2', 'Hg']
# reune os padrões
padroes = GI+SC+LS
# obtém a composição dos padrões
formulas_padroes = obtemcomposicao(padroes,especies)

# Dados de entropia NIST
entropiapadrao_GI ={'Ar':154.84,'Cl2':223.08,'D2':144.96,'F2':202.80,'He':126.15,'H2':130.68,
           'Kr':164.08,'Ne':146.33,'N2':191.61,'O2':205.15,'Rn':176.23,'T2':None,'Xe':169.68}
           
entropiapadrao_SC = {'Al':28.27,'As':None,'B':5.90,'C':5.833,'I2':116.14 ,'P':41.09,'S':32.054,
                     'Se':None,'Si':18.82,'Ti':30.72,'U':50.20}

entropiapadrao_LS = {'Br2':152.21 ,'Hg': 76.0}
In [7]:
# reune os dicionários
d = dict(entropiapadrao_GI)
d.update(entropiapadrao_SC)
d.update(entropiapadrao_LS)

# número de compostos químicos
K = len(formulas)
entropia = []

# percorre os compostos
for k in range(K):
    P = len(formulas_padroes)
    formula = formulas[k]
    coef = []
    J = len(comp[k])
    s =  (Dd['dHform (kJ/mol/K)'][k]-Dd['dGform (kJ/mol/K)'][k])/298.15*1000
    for j in range(J-1):
        for p in range(P):
            if comp[k][j+1][0]==formulas_padroes[p][1][0]:
                especie = formulas_padroes[p][1][0]
                aux = comp[k][j+1][1]/formulas_padroes[p][1][1]
                coef.append(str(aux)+formulas_padroes[p][0])
                nome = formulas_padroes[p][0]
                valor = d.get(nome)
                if valor!=None and s!=None:
                    s = s + aux*valor
                else:
                    s = None
                break
    entropia.append([comp[k][0],s])

pd.DataFrame(entropia,columns=['Composto','Entropia(J/(mol*K))'])
Out[7]:
Composto Entropia(J/(mol*K))
0 Ar 154.840000
1 Br2 245.384577
2 BrD 204.496454
3 BrF3 292.664551
4 BrF5 324.141391
... ... ...
453 Rn 176.230000
454 S 167.824585
455 Se NaN
456 T2 NaN
457 Xe 169.680000

458 rows × 2 columns

O código a seguir acrescenta à tabela de dados a coluna entropia, e gera o arquivo em Excel, com o nome DadosComEntropia.xlsx.

In [8]:
# captura os valores de entropia
x = [e[1] for e in entropia]

# se o sistema contém ainda apenas 11 colunas 
# (a entropia não foi acrescentada), acrescenta 
# a entropia aos dodos e gera um arquivo de Excel)
if len(Dd.columns) == 11:
    Dd.insert(11, "EntropiaPadrao (J/mol*K)", x, True)
    Dd.to_excel('DadosComEntropia.xlsx', index=False)

O arquivo com os dados de entropia padrão pode ser baixado clicando aqui.

Referências¶

  • P.J. Linstrom and W.G. Mallard, Eds., NIST Chemistry WebBook, NIST Standard Reference Database Number 69, National Institute of Standards and Technology, Gaithersburg MD, 20899, https://doi.org/10.18434/T4D303, (recuperadas 20 fevereiro 2024).
    • Poling, B.E., Prausnitz, J.M., O’Connell, J.P., 2001. The properties of gases and liquids, 5th ed. ed. McGraw-Hill, New York.