(technically pronounced peng-van, but some pronounce numpy
as num-pee rather than num-pie, so who really knows?)
A lightweight Python package for computing descriptors of chemical bonding and local electronic structure from Wannier functions.
A handful of example outputs from pengwann
as applied to rutile.
The colour-coded numbers next to the crystal structure are Löwdin-style charges computed for Ti (blue) and O (red).
Core features:
- 📖 Read Wannier90 output files
- 🔎 Identify interatomic and on-site interactions in terms of atom-assigned Wannier functions
- 💻 Compute in parallel:
- The Wannier orbital Hamilton population (WOHP)
- The Wannier orbital bond index (WOBI)
- The Wannier-projected density of states (pDOS)
- Orbital and k-resolved implementations of all of the above
- 📈 Integrate descriptors to derive:
- Löwdin-style populations and charges
- Measures of bond strength and bond order
pengwann
replicates the core functionality of LOBSTER but uses Wannier functions rather than pre-defined atomic or pseudo-atomic orbitals as a local basis in which to express the Hamiltonian and the density matrix.
A Wannier basis is advantageous in that, when derived from energetically isolated bands, the spilling factor is strictly 0.
For further details regarding detailed methodology, functionality and examples, see the documentation.
The latest tagged release of pengwann
is pip
-installable as:
pip install pengwann
Similarly, if you are using a conda
environment, the latest tagged release is conda
-installable as:
conda install -c conda-forge pengwann
Alternatively, to install the current development build, you can build from source with:
pip install git+https://github.com/PatrickJTaylor/pengwann.git
Note that building pengwann
from source entails compiling a small Rust extension, meaning that a suitable version of the Rust compiler must be available on the host machine.
For more details regarding installation and platform support, see the full installation guide in the docs.
For a quick run through of the basics, see the first example in the docs on computing bonding descriptors in diamond.
All of the example notebooks discussed in the documentation are also available for local execution under docs/examples should you wish to play around with some sample workflows and their associated data.
If you're having problems using pengwann
and the docs do not provide a solution, feel free to open a discussion and we will endeavour to get back to you as soon as possible.
If you think you have found a bug in pengwann
, please create an issue and let us know!
Contributions to pengwann
via pull request are very welcome, whether the changes are big or small!
See the contributing guide for more details.
The development of pengwann
was initially inspired by WOBSTER, which in turn drew inspiration from previous work on using Wannier functions for population analysis1.
Footnotes
-
S. Kundu et al., Population analysis with Wannier orbitals, In: J. Chem. Phys. 154 (10 2021), p. 104111 ↩