This package is intended for obtaining the effective band structure of a supercell for a certain k-point path of the primitive cell. It was originally based on PyVaspwfc for reading VASP wavefunction outputs, with a notable improvement being that symmetry-breaking is properly accounted for by sampling necessary additional k-points and averaging accordingly. Typical applications of band structure unfolding are the electronic structure analysis of defects, disorder, alloys, surfaces (and more), as illustrated in the example outputs below and docs examples.
Our goal is to implement the band structure unfolding workflow in a robust and user-friendly software package.
For the methodology of supercell band unfolding, see here.
Cs₂(Sn/Ti)Br₆ Vacancy-Ordered Perovskite Alloys
Oxygen Vacancy (Vₒ⁰) in MgO
To generate an unfolded band structure, one typically needs to perform the following steps:
Create a primitive unit cell, and generate a band structure k-point path corresponding to this primitive cell.
Create a supercell (e.g. disordered, defective, surface slab etc.), and obtain its optimised structure.
Generate a series of k-points for the supercell to be calculated.
Perform a band structure calculation with the supercell, and save its wavefunction output to file.
Post-process the supercell wavefunction to obtain the unfolded band structure in the k-point path of the primitive unit cell.
These generation and analysis steps are automated in
easyunfold, with only the primitive unit cell and
supercell structures required as inputs from the user.
Typically, the supercell comprises some form of symmetry-breaking relative to the primitive cell, such as defects, disorder (e.g. special quasi-random structures (SQS) for site disorder – other forms of disorder such as magnetic, dynamic/vibrational, polar, elastic etc. also possible), or a surface/interface slab. In all cases, the supercell symmetry is lowered compared to the pristine primitive cell. Hence, for a given k-point path in the primitive cell Brillouin Zone, additional k-points are required to be sampled for the supercell, and the extracted spectral weights need to be appropriately averaged to obtain the correct effective band structure (EBS). See the docs Theory page for more details.
We’ll add papers that use
easyunfold to this list as they come out!
DFT code support#
Implementing a subclass of
WaveFunctionthat handles reading the wave function output.
Implementing functions for reading/writing k-points.
Adding branches for dispatching based on the
dft_codeattribute of the
UnfoldKSetobject in various places within the code.
The Atomic Simulation Environment (ASE) is used by
reading in structures, so structure file IO is natively supported for essentially all public DFT codes.
Code Compatibility Notes#
Atom-projected band structures are currently only supported for
Gamma-only and non-collinear spin calculations are not supported for
And those who helped in the development:
Bugs reports and feature requests#
Bug reports and feature requests are well come. If you found any bug or missing features please report it on the Issue Tracker.
We welcome your help in improving and extending the package with your own contributions. This is managed through GitHub pull requests; for external contributions, we prefer the fork and pull workflow while core developers use branches in the main repository:
First open an Issue to discuss the proposed contribution. This discussion might include how the changes fit
easyunfold’s scope and a general technical approach.
Make your own project fork and implement the changes there. Please keep your code style compliant and use the
Open a pull request to merge the changes into the main project. A more detailed discussion can take place there before the changes are accepted.