Questaal Home

Generating Energy Bands in the ASA

This tutorial shows how to generate energy bands for PbTe using the ASA code  lm, following an introductory tutorial that explains how to make a self-consistent potential for PbTe in the ASA.

Energy bands are created with the  --band  switch. Here we use it with the lm program but it applies equally to all codes that make energy bands in a crystal. See, for example a corresponding tutorial that generates bands with lmf.

Table of Contents


You can make energy bands along symmetry lines you specify, using any code with band-generating capability (lmf,  lm,  tbe, and  lumpy), using the  --band switch, in symmetry line mode. Some information to help you construct symmetry lines for any crystal lattice can be found here.

You must have a potential which can make a single-particle hamiltonian. For the ASA, this means that the potential parameters are available. Usually they are generated as a byproduct of the self-consistency cycle), but it can be something else, e.g. potential parameters modified by the Levenberg-Marquardt fitting algorithm.

This tutorial begins assuming you have completed Introductory tutorial for the ASA, and have self-consistent ASA setup for PbTe in your working directory.


Energy bands are typically plotted along specified symmetry lines, which information you supply through a symmetry-line file. You can create this file by hand, but it is simpler to use Questaal tools to do it. PbTe has a face-centered cubic (fcc) lattice; an instruction to generate file syml.pbte for the fcc lattice is given here. Adapt the command given there as follows:

lmchk ctrl.pbte --syml~n=51~mq~lblq:G=0,0,0,L=1/2,1/2,1/2,X=0,1/2,1/2,W=1/4,1/2,3/4,K=3/8,3/8,3/4~lbl=LGXWG

syml.pbte has rows such as:

  44    0.5000000   0.5000000   0.5000000     0.0000000   0.0000000   0.0000000  L  to  G
  57    1.0000000   0.5000000   0.0000000     0.0000000   0.0000000   0.0000000  W  to  G

Each line of text specifies a line segment in k-space. In the first line of this file the segment runs from k=(1/2,1/2,1/2) to 0, expressed in Cartesian coordinates, in units of , with the lattice constant (12.147 a.u. for PbTe). ‘44’ specifies the number of k points are generated in this segment.

These are typical lines for the fcc lattice. The structure of this file is described in detail on this page.

For drawing bands, use the --band switch in the symmetry line mode. You don’t have to do anything special because it is the default mode; lm will generate bands along symmetry lines specified in syml.pbte

To generate the bands, simply run

lm pbte --quit=rho
lm pbte --band:fn=syml

The first command is there to generate the proper Fermi level for the given potential.

In the second command, --band~fn=syml tells lm to generate energy bands (rather than perform the standard cycle of integration of states over the Brillouin zone) along lines given in file syml.pbte. They are written to file bands.pbte along the specified k-points. The structure of the bnds file is documented on this page.

Once you have this file, it can be plotted with your preferred plotting package. Here, we will use Questaal’s plbnds and fplot utilities:

plbnds -range=-12,8 -fplot -ef=0 -scl=13.6 -dat=green -lt=1,bold=3 -lbl bnds.pbte

will generate a fplot command file, plot.plbnds, which can be run with

fplot -f plot.plbnds

This will give you your desired postscript file Visualize it with a document viewer of your choice, e.g.


Command-line arguments to plbnds have the following meaning:

  • -range-12,8  specifies the energy window over which to draw the bands
  • -fplot  generates data files and a script for the fplot utility. (Note that  -fplot  has a number of optional modifiers to help tailor the format of the figure.)
  • -ef=0  shifts the Fermi energy to zero
  • -scl=13.6  scales the band energies by 13.6, that is converts from Ry to eV
  • -lbl supplies the symmetry point labels for the end points. (You could specify them explicitly, e.g. -lbl=L,G,X,W,G, but they are already supplied in, and you don’t need to.)

Note You can combine the plbnds and fplot instructions in one command that generates directly. The command below also shrinks the figure by a factor 0.7.

plbnds -range=-12,8 -fplot~scl=.7~sh -ef=0 -scl=13.6 -dat=green -lt=1,bold=3 -lbl bnds.pbte

ASA bands of PbTe without Spin Orbit coupling

ASA bands of PbTe without Spin Orbit coupling

Coloring Energy Bands

It is also possible to color the energy bands. The idea behind this is to assign one or more weights to each band, which can be used to assign a color by the graphics plotting package. Weights are taken from a Mulliken decomposition of an eigenstate into orbital contributions. The sum of all orbital contributions adds to one; by selecting out a subset of orbitals you get a fractional weight which is used as the color.

Suppose we want to assign two color weights, the first color associated with Pb character, the second with Te character. Do

lm pbte --band~scol@atom=pb~scol2=atom=te~fn=syml

Inspect bnds.pbte. It has the same bands as before, but now each k-point has two additional entries for the Mulliken weights. To make a postscript file with color weights, modify the plbnds command to read

plbnds -range=-12,8 -fplot~scl=.7~sh -ef=0 -scl=13.6 -dat=green -lt=1,bold=3,col=0,0,0,colw=1,0,0,colw2=0,1,0  -lbl bnds.pbte

You can see bands just below the Fermi energy (at 0) are mostly of Te character (green) while the bands just above are mostly Pb character (red).

Colored ASA bands of PbTe without Spin Orbit coupling

ASA bands of PbTe without Spin Orbit coupling

You can specify one, two, or three color weights. There is a more general, albeit less convenient way to do specify these weights, as follows:


Each orbital is associated with a site and some lm character. In the ASA, there is one orbital belonging to a site and a particular angular momentum (lm quantum numbers). It is a tedious job to extract their position in the hamiltonian, but lm does this for you. Do

lm pbte --quit=ham --pr55

You should see the following:

 Orbital positions in hamiltonian, resolved by l:
 Site  Spec  Total    By l ...
   1   Pb    1:9    1:1(s)   2:4(p)   5:9(d)
   2   Te   10:18   10:10(s) 11:13(p) 14:18(d)
   3   E    19:27   19:19(s) 20:22(p) 23:27(d)
   4   E    28:36   28:28(s) 29:31(p) 32:36(d)

The following will generate the same bnds.pbte as the command above.

lm pbte --band~col=1:9~col2=10:18~fn=syml

Note that  orbital-list1  and  orbital-list2  are Questaal-style integer lists.

Additional Exercises

  1. Try generating the bands with spin orbit coupling. It has a large effect in this case, because Pb and Te are heavy elements.