Questaal Home

Inverse Participation Ratio

This tutorial demonstrates how to calculate the inverse participation ratio (IPR) in Cr. The IPR is a measure of the localization of an eigenfunction and is defined as , for normalized eigenstate , i.e. . Here is the unit cell volume.


This tutorial uses several Questaal executables, e.g. blm, lmfa, lmf, pfit, plbnds, and fplot. They are assumed to be in your path.

This tutorial is aimed at showing how to calculate the IPR. We will not bother with self-consistency, as it doesn’t affect the explanation. For a potential we will just use a Mattheis construction (overlapped atomic densities).


Cr is an antiferromagnet, with an incommensurate spin-density wave superposed on it. We will ignore the SDW part and treat Cr as a simple antiferromagnet.

Copy the box below to

# Init file for Cr (Wein2K equilibrium volume 11.773A,
    ALAT=5.41632 PLAT= 1 0 0   0 1 0   0 0 1
    ATOM=Crup  MMOM=0,0,1
    ATOM=Crdn  MMOM=0,0,-1
    ATOM=Crup  X=0 0 0
    ATOM=Crdn  X=.5 .5 .5

Create a ctrl file and a symmetry lines file

blm --upcase  --simple --wsite --nk,met --ctrl=ctrl
lmchk --syml~n=71~mq~lblq:G=0,0,0,M=1/2,1/2,0,X=0,1/2,0~lbl=GXM

Get the free atom density and Fermi level

lmf cr --quit=rho --rs=0

Generate the energy bands (bnds.h5)

lmf cr '--band~h5~scol:(z==24):l=2~scol2:(z==24):l=0~fn=syml' --rs=0
cp bnds.h5 bnds0.h5

Note that the instruction specifies two Mulliken projections of the bands: the first selects out Cr d character, the second Cr s character. These we will use as color weights when drawing the bands later. The second instruction preserves bnds.h5 because we want this information, but the file itself will be (unintentionally) overwritten when making the IPR.

Make the inverse participation ratio on for the k points in
Note: lmf can be replaced by an MPI instruction, e.g. mpirun -n 16 lmf. In this case the code execute quickly and you won’t have to wait long even with a scalar calculation.

lmf cr '--band~h5~fn=syml' --pwz~all~rps=2/3~norm~pprt~evrnge=5,20~ipar > out.ipr

writes the inverse participation ratio to file evec.h5. For the interpretation of --pwz~all~rps=2/3~norm~pprt~evrnge=5,20~ipar see the command line options page.

See what evec.h5 contains (h5ls evec.h5). Some of the key elements should be the eigenvalues, inverse participation ratio, and a list of 72 k points

eval                     Dataset {72, 1, 56}
ipar                     Dataset {72, 1, 56}
qirr                     Dataset {72, 3}

Inspect out.ipr. You should see tables like this:

 ib    eval     IPR
  5  -2.7276  14.4311  |   8  -0.0344   2.1115  |  11   0.2724   6.8014  |  14   0.3261   6.8460  |  17   0.5006  10.2828  |  20   1.4727   4.6536
  6  -2.7276  14.4311  |   9   0.0988   4.2044  |  12   0.2724   6.8014  |  15   0.3631   9.1850  |  18   0.5561   6.2882  |
  7  -0.1621   1.5977  |  10   0.2261   5.6411  |  13   0.3261   6.8460  |  16   0.4396  10.5194  |  19   1.4727   4.6536  |

The inverse participation ratio is unity for a constant eigenfunction, and becomes larger the more sharply peaked (and therefore more localized) it is. The IPR is very large for states 5 and 6 (bands 1-6 are high-lying core 3p orbitals).

You can use the inverse participation ratio as you see fit. Here we will merge it with the Mulliken weights generated with the bands file, bnds.h5.

To do this, use a feature of the plbnds editor that will merge ipar residing in evec.h5, into the bnds file an additional color weight. Restore the bnds file from before, and merge the IPR as a color weight:

cp bnds0.h5 bnds.h5
plbnds --h5 --edit~ipr@neg@scl=2~quit bnds.h5

The raw IPR isn’t suitable as a color weight, as it ranges between 1 and ∞. For that reason The inverse of IPR is merged, scaled by a factor scl. Without further modification, the result would range between 1 for a constant eigenstate to 0 for an infinitely localized one. For plotting purposes the picture is clearer if we assign 0 for a constant eigenstate and 1 for an infinitely localized one. The @neg option makes this change, so with the switches given, the third color weight becomes  1−2/IPR, since scl=2.

In the above, plbnds appends a third color weight writes the output to bnds.ipr.h5. The command below displays the weights

mcx -r:h5:id=colwt:c=0,0,1,0:o=0,0,2,0 bnds.ipr.h5 -px

Weights are nonzero only for bands 5 through 20, and the value varies between 0 and 1.

Make a picture of the bands with

plbnds --h5 -range=-10,6 -fplot~scl=.3,.5~ts=.5 -ef=0 -scl=13.6 -lt=1,bold=3,col=0,0,0,colw=1,0,0,colw2=0,1,0,colw3=1,1,1 bnds.ipr.h5

This makes, which you can view with your favorite reader. It should look like the figure shown.

Green depicts s character, black p character and red d character. The more bleached a band is, the larger the IPR. You can see that the states around 2 eV have the highest IPR, as expected since d orbitals are atomic-like and confined, while s and p orbitals are extended.