Suppose I want to calculate the band structure of a material system along a specific high symmetry path in the Brillouin Zone. If the point group of the system is given, how can I easily compute the fractional coordinates of the high symmetry points U, G, W, etc.? Can Pymatgen compute these points? I guess this should be automated. Thanks.
If you are really interested in learning how to generate the path, I strongly advice you to avoid using any automatic tool like suggested in previous answers.
In the Wiki page entitle Brillouin zone you can find the first Brillouin zone for each one of the Bravais lattice. This Wiki is based on the following paper:
Setyawan, Wahyu; Curtarolo, Stefano (2010). "High-throughput electronic band structure calculations: Challenges and tools". Computational Materials Science. 49 (2): 299–312 (DOI: 10.1016/j.commatsci.2010.05.010). arXiv:1004.2974.
Of course that you also need to go through solid state books like:
- Kittel, Charles (1996). Introduction to Solid State Physics. New York: Wiley. ISBN 978-0-471-14286-7.
- Ashcroft, Neil W.; Mermin, N. David (1976). Solid State Physics. Orlando: Harcourt. ISBN 978-0-03-049346-1.
After you know the Bravais lattice of your system, you look for the Brillouin zone, then look for the corresponding table with the high symmetry points and then you create your own path. Normally we start from the $\Gamma$ point that is the center of the Brillouin zone. The subsequent points are selected maintaining the continuity of the path.
For example, if your system has tetragonal symmetry (lets said, it is primitive tetragonal), then the first Brillouin zone will be:
In the caption of the figure, there is a suggestion for the path. If you look carefully, there are three branch: the first one between $\Gamma$ and Z, a second one between X and R; and finally, a third one between M and A. As you can see, there is a discontinuity between Z and X and between R and M as you have to jump to reach them.
Now, that you know the high symmetry points and created the path, you need to know how to generate it. The table bellow has the values of each point (in the reciprocal space) according the cell parameters.
Finally, you go to your program and add the path in accordance with its own format.
If the crystal unit cell is in a format readable by ASE, then you can use code that looks approximately like so:
from ase.io import read
atoms = read("myfilename.xyz")
bandpath = atoms.cell.bandpath()
bandpath object will have the relevant attributes to play with (kpoint coordinates, special point labels, special point coordinates, etc). This is a nice intro tutorial on the above process in a bit more detail than my rather minimal code block.
Pymatgen can definitely do what you are asking for. You can find several algorithms under the
pymatgen.symmetry.kpath module here. I include a minimal example below using the new method from Munro et al. implemented in Pymatgen:
from pymatgen.core import Structure
from pymatgen.symmetry.kpath import KPathLatimerMunro
struc = Structure.from_file('myfilename.cif')
kpath = KPathLatimerMunro(struc)
kpts = kpath.get_kpoints()
It would be helpful for all of us if you could put up that green chekmarck on the answers you found helpful and maybe tell us how you ended up resolving your issue, if you already have that is ...