Phase Diagram Construction

Using the Berman(1988) database of pure solid phases (standard state properties)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from thermoengine import phases
from thermoengine import model
%matplotlib inline

Create Thermodynamic Database

modelDB = model.Database()

Generate Reactions of Interest

rxn_coef = [-1, +1]
rxn_endmem = [0, 0]

# Create reactions
rxns = []
rxns.append(modelDB.get_rxn(['And','Ky'], rxn_endmem, rxn_coef))
rxns.append(modelDB.get_rxn(['And','Sil'], rxn_endmem, rxn_coef))
rxns.append(modelDB.get_rxn(['Ky','Sil'], rxn_endmem, rxn_coef))

# Create labels for legend
rxn_eqns = []
rxn_eqns.append('And = Ky')
rxn_eqns.append('And = Sil')
rxn_eqns.append('Ky = Sil')
<string>:6: DeprecationWarning: Calling nonzero on 0d arrays is deprecated, as it behaves surprisingly. Use atleast_1d(cond).nonzero() if the old behavior was intended. If the context of this warning is of the form arr[nonzero(cond)], just use arr[cond].

Calculate Triple Point

# Calculate triple point
T_tp, P_tp = rxns[0].simultaneous_rxn_cond(rxns[1])
778.726955608905 3736.7184040516986

Plot Phase Diagram

def get_nice_colors(Ncolor):
    cmap = plt.get_cmap(name='viridis')
    ind_a = np.int_(np.round(np.linspace(0,255,Ncolor)))
    colors = [cmap.colors[ind] for ind in ind_a]
    return colors
colors = get_nice_colors(3)
Tlims = 273.15 + np.array([400,900])

rxn_bnds = []
T_bnds = []
P_bnds = []


for irxn, col in zip(rxns, colors):
    iTbnds, iPbnds = irxn.trace_boundary(Tlims=Tlims, Nsamp=100)
    istable = irxn.stability(iTbnds, iPbnds, rxns)
    irxn_bnd, = plt.plot(iTbnds[istable]-273.15, iPbnds[istable]/1e3, '-',
                         lw=2, color=col)
    irxn_bnd_meta, = plt.plot(iTbnds[~istable]-273.15, iPbnds[~istable]/1e3, '--',
                         lw=2, color=col)

plt.plot(T_tp-273.15, P_tp/1e3,'r+',mew=2)

plt.xlabel('Temp.  [C]')
plt.ylabel('Press.  [kbar]')

plt.legend(rxn_bnds, rxn_eqns)
<matplotlib.legend.Legend at 0x7fe8e1222e90>