Created
May 8, 2014 18:33
-
-
Save computron/c0323115e92b48d0019d to your computer and use it in GitHub Desktop.
Create, plot, and analyze Phase Diagrams using the pymatgen codebase and Materials Project database
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
This is a basic example of how to create, plot, and analyze Phase Diagrams using the pymatgen | |
codebase and Materials Project database. To run this example, you should: | |
* have pymatgen (www.pymatgen.org) installed along with matplotlib | |
* obtain a Materials Project API key (https://www.materialsproject.org/open) | |
* paste that API key in the MAPI_KEY variable below, e.g. MAPI_KEY = "foobar1234" | |
For citation, see https://www.materialsproject.org/citing | |
For the accompanying comic book, see http://www.hackingmaterials.com/pdcomic | |
""" | |
from pymatgen import MPRester | |
from pymatgen.entries.compatibility import MaterialsProjectCompatibility | |
from pymatgen.phasediagram.pdanalyzer import PDAnalyzer | |
from pymatgen.phasediagram.pdmaker import PhaseDiagram | |
from pymatgen.phasediagram.plotter import PDPlotter | |
if __name__ == "__main__": | |
MAPI_KEY = None # You must change this to your Materials API key! (or set MAPI_KEY env variable) | |
system = ["Fe", "P"] # system we want to get PD for | |
# system = ["Fe", "P", "O"] # alternate system example: ternary | |
mpr = MPRester(MAPI_KEY) # object for connecting to MP Rest interface | |
compat = MaterialsProjectCompatibility() # sets energy corrections and +U/pseudopotential choice | |
# Create phase diagram! | |
unprocessed_entries = mpr.get_entries_in_chemsys(system) | |
processed_entries = compat.process_entries(unprocessed_entries) # filter and add energy corrections | |
pd = PhaseDiagram(processed_entries) | |
# Plot! | |
plotter = PDPlotter(pd, show_unstable=False) # you can also try show_unstable=True | |
plotter.show() | |
# plotter.write_image("{}.png".format('-'.join(system)), "png") # save figure | |
# Analyze phase diagram! | |
pda = PDAnalyzer(pd) | |
print 'Stable Entries (formula, materials_id)\n--------' | |
for e in pd.stable_entries: | |
print e.composition.reduced_formula, e.entry_id | |
print '\nUnstable Entries (formula, materials_id, e_above_hull (eV/atom), decomposes_to)\n--------' | |
for e in pd.unstable_entries: | |
decomp, e_above_hull = pda.get_decomp_and_e_above_hull(e) | |
pretty_decomp = [("{}:{}".format(k.composition.reduced_formula, k.entry_id), round(v, 2)) for k, v in decomp.iteritems()] | |
print e.composition.reduced_formula, e.entry_id, "%.3f" % e_above_hull, pretty_decomp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment