Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Phase stability using the Materials API + pymatgen.
#!/usr/bin/env python
from import MPRester
from pymatgen.phasediagram.pdmaker import PhaseDiagram
from pymatgen.phasediagram.plotter import PDPlotter
#This initializes the REST adaptor. Put your own API key in.
a = MPRester("YOUR_API_KEY")
#Entries are the basic unit for thermodynamic and other analyses in pymatgen.
#This gets all entries belonging to the Ca-C-O system.
entries = a.get_entries_in_chemsys(['Ca', 'C', 'O'])
#With entries, you can do many sophisticated analyses, like creating phase diagrams.
pd = PhaseDiagram(entries)
plotter = PDPlotter(pd)
#!/usr/bin/env python
__author__ = "Shyue Ping Ong"
__maintainer__ = "Shyue Ping Ong"
__email__ = ""
__status__ = "Production"
__version__ = "1.0"
__date__ = "Sep 21, 2012"
import argparse
import sys
from import MPRester
from pymatgen.phasediagram.pdmaker import PhaseDiagram
from pymatgen.apps.borg.hive import VaspToComputedEntryDrone
from pymatgen.phasediagram.pdanalyzer import PDAnalyzer
from pymatgen.entries.compatibility import MaterialsProjectCompatibility
def calculate_phase_stability(args):
#This initializes the REST adaptor.
a = MPRester(args.api_key)
drone = VaspToComputedEntryDrone()
entry = drone.assimilate(
compat = MaterialsProjectCompatibility()
entry = compat.process_entry(entry)
if not entry:
print "Calculation parameters are not consistent with Materials " + \
"Project parameters."
syms = [el.symbol for el in entry.composition.elements]
#This gets all entries belonging to the relevant system.
entries = a.get_entries_in_chemsys(syms)
#Process entries with Materials Project compatibility.
entries = compat.process_entries(entries)
pd = PhaseDiagram(entries)
analyzer = PDAnalyzer(pd)
ehull = analyzer.get_e_above_hull(entry) * 1000
print "Run contains formula {} with corrected energy {:.3f} eV.".format(
print "Energy above convex hull = {:.1f} meV".format(ehull)
if ehull < 1:
print "Entry is stable."
elif ehull < 30:
print "Entry is metastable and could be stable at finite temperatures."
elif ehull < 50:
print "Entry has a low probability of being stable."
print "Entry is very unlikely to be stable."
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="""
This is a simple phase stability estimation script which utilizes the
Materials API and pymatgen to calculate the phase stability of a single
Author: Shyue Ping Ong
Version: {}
Last updated: {}""".format(__version__, __date__))
parser.add_argument("directory", metavar="dir", type=str,
help="directory containing vasp run to process")
parser.add_argument("-k", "--key", dest="api_key", type=str, required=True,
help="User's Materials API key.")
args = parser.parse_args()
Copy link

machel7 commented May 16, 2018

I am happy to find you at Git. Because I'm in china, where Twitter&Google is shielded, so that it is not convenient to get access to you by the other routht.
Pymatgen looks like very powerful, so I wonder to know if pymaten can be used for steel-making, for some calculations for the equilibrium between steel(Fe,C,Si,Mn,P,S....) and slag (CaO,SiO2,MgO....).
There is already a software named FactSage that contains professional database for oxides, But the price is too high. Thus I have an idea to build functions with python myself, but I know some others must have done some work. so I find pymatgen and come here。

Copy link

kaifengZheng commented Mar 4, 2019

Dear researcher,
I'm using the powerful Pymatgen tool. There are some outdates import-codes still in the codes above, Could you help to change.
MPRester is in pymatgen.ext.matproj and PhaseDiagram, PDPlotter are in pymatgen.analysis.phase_diagram now. My version of pymatgen is 2019.2.24.
I tried those lines:
from pymatgen.ext.matproj import MPRester
from pymatgen.analysis.phase_diagram import PhaseDiagram,PDPlotter

Copy link

aziziph commented Jun 19, 2019

Dear pymatgen users,

It seems the library 'pdanalyzer' no longer exists, since I face to error while using 'from pymatgen.phasediagram.pdanalyzer import PDAnalyzer'. Any comment from where to import this library?


Copy link

shyuep commented Jun 19, 2019

It is now integrated into the PhaseDiagram class

Copy link

aziziph commented Jun 19, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment