Plot a Reaction between Stoichiometric Phases

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

Get access to a thermodynamic database (by default, the Berman (1988) database).

modelDB = model.Database()

To print a list of all of the phases in the database, execute:


Specify a new reaction by indicating reactants, products.

forsterite + quartz = 2 enstatite

reaction = modelDB.get_rxn(['Fo','Qz','cEn'],[0,0,0],[-1,-1,2])
<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].

Set up temperature bounds, and calculate the univariant curve.

Tlims = 273.15+np.array([500,2000])
univariant_line = reaction.trace_boundary(Tlims=Tlims,Nsamp=100)

Now, plot up the results.

plt.plot (univariant_line[0]-273.15, univariant_line[1]/100.0, 'r-')
plt.ylabel('P (MPa)')
plt.xlabel('T (°C)')