This notebook demonstrates how to perform structure enumeration using Python Materials Genomics (pymatgen). These notebooks are described in detail in

Deng, Z.; Zhu, Z.; Chu, I.-H.; Ong, S. P. Data-Driven First-Principles Methods for the Study and Design of 
Alkali Superionic Conductors. Chem. Mater. 2017, 29 (1), 281–288 DOI: 10.1021/acs.chemmater.6b02648.

If you find these notebooks useful and use the functionality demonstrated, please consider citing the above work.

Let's start by importing some modules and classes that we will be using.


We will first read in the structure from crystallographic information file (CIF) found in ICSD.

From the above, we see that the reported experimental structure has Li disorder. The occupancy of Li is higher than what would be expected for a Li6PS5Cl nominal composition. We will first adjust the composition by setting the Li occupancies to 0.5 to obtain stoichiometric charge-balanced Li6PS5Cl.

To keep the number of orderings manageable, we will perform enumeration only on the primitive cell. The primitive cell can be obtained using the SpacegroupAnalyzer.

Enumerate structures using enumlib

We will use the EnumerateStructureTransformation class to enumerate all symmetrically distinct structures. EnumerateStructureTransformation is a user-friendly wrapper around enumlib, a fortran library to generate derivative structures written by Hart et al.

VASP input generation

Pymatgen has useful classes for batch generating VASP input files that use parameters that are compatible with those used in the Materials Project. These parameters have been well-tested over a large database of structures in different chemistries. Using the same parameters also allow the energies computed to be compared with those in the Materials Project database for phase stability and other analyses.