Questaal Home

Generating Energy Bands

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 lines mode. Some information to help you construct symmetry lines for any crystal lattice can be found here.

This tutorial shows how to generate energy bands for silicon using the ASA code  lm; but the  --band  switch applies equally to all codes that make crystal energy bands.

As a second step you must draw the bands. In this tutorial we create a postscript figure using the plbnds and fplot utilities.

Spectral functions are the analog of energy bands for interacting hamiltonians such as generated by GW or Dynamical Mean Field Theory. See this tutorial to draw the spectral function for Fe from a GW calculation.


This tutorial assumes you have cloned and built the lm repository (located here). For the purposes of demonstration, ~/lm will refer to the location of the cloned repository (source directory). In practice, this directory can be named differently.

All instances of commands assume the starting position is your build directory (this can be checked with the pwd command). In this tutorial it will be called ~/build/.

$ cd ~/build/

with ~/build being the directory the lm repository was built in to.

Note: the build directory should be different from the source directory.


Energy bands are typically plotted along specified symmetry lines, which information you supply through a symmetry-line file. For the purpose of this tutorial, we will use one included in the repository, although generally you will want to create your own. You can obtain the symmetry-line file for silicon,, by following these commands:

$ cp ../lm/startup/ .

which will copy the symmetry-line file to your current working directory. For drawing bands you want to use the --band switch in the symmetry line mode. The symmetry line mode is the default mode; the code will generate bands along symmetry lines you specify. 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.

To generate the bands, simply run

$ lm si --band:fn=syml

The –band switch tells lm to generate energy bands, contained in the file, along the specified k-points (rather than the standard cycle of integration of states over the Brillouin zone)

Once you have this file, it can be plotted with your preferred plotting package. Here, we will give an example using plbnds and fplot:

echo -15 15 5 10 | plbnds -fplot -scl=13.6 -ef=0 si

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

fplot -f plot.plbnds

This will give you your desired postscript file

Colouring Energy Bands

It is also possible to colour your generated energy bands. The idea behind this is to assign a weight to each line, which is can be coloured by the graphics plotting package.

To obtain this, run the –band command with the list of orbitals you want to highlight


E.g. for Arsenic, using lmf (the commands are the same for lm):

$ lmf --band~col=28:47~syml ...

This will read line data from the syml file, and weight orbitals 28 to 47. Of course, you will want to colour specific orbitals, e.g. only the p orbitals. To see how the orbitals are ordered, run the energy band program (lm or lmf) with rather high verbosity (>51) and look for the tables following Makidx. This will detail at what orbital number various bands are located.

Makidx:  basis arranged in downfolding order:
 ib     low      intermed       high        .. offH ..
  1  spdf (16)       (0)        g (9)       0    0    0
 k2    sd (6)        (0)      pfg (19)     16    0    9
 k3     d (5)        (0)          (0)      22    0   28
  2  spdf (16)       (0)        g (9)      27    0   28
 k2     p (3)        (0)     sdfg (22)     43    0   37
 k3     s (1)        (0)          (0)      46    0   59
  3   spd (9)        (0)       fg (16)     47    0   59
 k2       (0)        (0)    spdfg (25)     56    0   75
  4   spd (9)        (0)       fg (16)     56    0  100
 k2       (0)        (0)    spdfg (25)     65    0  116

Makidx:  hamiltonian dimensions Low, Int, High, Negl: 65 0 141 94
kappa   Low   Int   High  L+I  L+I+H  Neglected
  1      50     0    50    50   100       0
  2       9     0    91     9   100       0
  3       6     0     0     6     6      94
 all     65     0   141    65   206      94

Orbital positions in hamiltonian, resolved by l:
Site  Spec  Total   By l ...
  1   Ga     1:27   1:1(s)   2:4(p)   5:9(d)   10:16(f) 17:17(s) 18:22(d) 23:27(d)
  2   As    28:47   28:28(s) 29:31(p) 32:36(d) 37:43(f) 44:46(p) 47:47(s)
  3   EA1   48:56   48:48(s) 49:51(p) 52:56(d)
  4   EC1   57:65   57:57(s) 58:60(p) 61:65(d)

As you can see, the relevant area is the last table.

Edit This Page