Questaal Home

Generating Energy Bands in the ASA

This tutorial shows how to generate energy bands for PbTe using the ASA code  lm, but the  --band  switch applies equally to all codes that make crystal energy bands. 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 calculation for PbTe in your working directory.


Energy bands are typically plotted along specified symmetry lines, which information you supply through a symmetry-line file.

Cut and paste the box below into file syml.pbte

41  .5 .5 .5     0  0 0                L to Gamma   (Lambda)
41   0  0  0     1  0 0                Gamma to X   (Delta)
21   1  0  0     1 .5 0                X to W       (Z)
41   1 .5  0     0  0 0                W to Gamma   (no name?)

syml.pbte has rows such as:

41    .5  .5  .5     0  0  0                L to Gamma   (Lambda)
0     0   0   0      0  0  0

Each line of text specifies a line segment in k-space. In the first line of this file the segment runs from to in units of . ‘41’ specifies the number of k points are generated in this segment. At present the remainder of the line is not used. The last line tells the line reader not to read any more lines.

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 –band switch tells lm to generate energy bands. They are written to file bands.pbte along the specified k-points (rather than the standard cycle of integration of states over the Brillouin zone. 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:

echo -12,8,5,10 | plbnds -fplot -ef=0 -scl=13.6 -dat=green -lt=1,bold=3 -lbl=L,G,X,W,G - 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

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.

echo -12,8,5,10 | plbnds -fplot~scl=.7~sh -ef=0 -scl=13.6 -dat=green -lt=1,bold=3 -lbl=L,G,X,W,G - bnds.pbte

ASA bands of PbTe without Spin Orbit coupling

ASA bands of PbTe without Spin Orbit coupling

Colouring Energy Bands

It is also possible to colour 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 colour.

To obtain bands with one, two, or three color weights, run the –band command with the list of orbitals to include 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)

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

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

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

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, do

echo -12,8,5,10 | plbnds -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=L,G,X,W,G - bnds.pbte

Coloured ASA bands of PbTe without Spin Orbit coupling

ASA bands of PbTe without Spin Orbit coupling

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.