Questaal Home

Optics and resolved DOS in Fe

This tutorial is intended to show various ways in which DOS can be decomposed in the lmf code, using a QSGW potential. See also a companion tutorial which covers similar ground in a DFT context, but with a few other features shown. That tutorial uses either lmf or the ASA code, lm.

LDA self-consistency (starting from init.fe)

nano init.fe
blm --nit=20 --nk=16 --gmax=7.9 --mag --nkgw=8 --gw fe
cp actrl.fe ctrl.fe
lmfa fe
cat basp0.fe | sed -e 's/\(Fe.*\)/\1 PZ=0 0 4.5'/ > basp.fe
lmf fe > out.lmf

Edit the ctrl file to add BZ and OPTICS tags.

nano ctrl.fe

Total DOS and integrated DOS

lmf -vnkabc=16 fe --quit=band --dos:rdm
cp dos.fe tdos.fe
lmf -vnkabc=16 fe --quit=band --dos:rdm:idos

Plot the total DOS and integrated DOS

fplot -lt 1,col=1,0,0 -colsy 2 tdos.fe -lt 1,col=0,1,0 -colsy 3 tdos.fe
fplot -frme:xor=-0.000599:yab=8 0,1,0,1 -lt 1,col=1,0,0 -ord x2+x3 dos.fe

Identify the t2g and eg orbitals

lmf fe --pr60 --quit=ham

Make the Mulliken t2g and eg majority spin DOS

lmf fe -vlteto=3 -voptmod=-5 -vnk=16 --quit=band --jdosw=5,6,8,21,22,24,26,27,29 --jdosw2=7,9,23,25,28,30

Compare resolved to total DOS

fplot -lt 1,col=0,0,0  jdos.fe -lt 1,col=.6,.6,.6 -ord x3+x4 jdos.fe -lt 2,col=1,0,0 -ord x3 jdos.fe -lt 2,col=0,1,0 -ord x4 jdos.fe

Further resolve the DOS by k:

lmf fe -vlteto=3 -voptmod=-5 -vnk=16 -vlpart=12 --quit=band --jdosw=5,6,8,21,22,24,26,27,29 --jdosw2=7,9,23,25,28,30

Table of Contents


You should first carry out the LDA self-consistency steps in the QSGW Tutorial for Fe. This tutorial is written assuming you stopped at the LDA level (step 1). However the tutorial equally applies if you want the same results at the QSGW level (step 2).

To view the postscript file, this document assumes you are using the apple-style open command.

1. Self-consistent LDA calculation for Fe

Do step 1 of the QSGW Tutorial for Fe. To follow this tutorial at the QSGW level, also complete step 2.

2. Setup for Optics

This optics tutorial requires some additional tags to the input file. Append the following lines to ctrl.fe.

BZ      NPTS=1001 DOS=-.7 .8 SAVDOS=T
% const optmod=0 lteto=3 lpart=0
% ifdef (optmod==-5|optmod==-6)
OPTICS  MODE={optmod} NPTS=1001 WINDOW=-.7 .8 LTET={lteto}
% else
OPTICS  MODE={optmod} NPTS=301 WINDOW=0 1 LTET={lteto}

The reasons for these extra tags will become clear in the tutorial.

3. Total Number and Density of States

Total DOS are generated automatically when BZ_SAVDOS=T. With BZ added to the ctrl file, you can generate it immediately.

The following generates the total DOS, saving it into file tdos.fe:

$ lmf -vnkabc=16 fe --quit=band --dos:rdm
$ cp dos.fe tdos.fe

and the following generates the number-of states (NOS), or integrated DOS:

$ lmf -vnkabc=16 fe --quit=band --dos:rdm:idos


  • the Fermi level should come out to -0.000599 Ry.
  • At the Fermi level the total number of electrons should be 8.
  • the :rdm tag is not necessary (DOS will be written wether the entire --dos switch is present), but it causes lmf to write the file in an easy to read Questaal format for 2D arrays.
  • The majority and minority DOS are roughly similar, but spin split by slightly less than 0.2 Ry, or about 2.2 eV, as noted in the QSGW tutorial.

The following uses the fplot utility to make postscript files.

For the DOS:

$ fplot -lt 1,col=1,0,0 -colsy 2 tdos.fe -lt 1,col=0,1,0 -colsy 3 tdos.fe
$ open

For the combined spin↑ + spin↓ NOS:

$ fplot -frme:xor=-0.000599:yab=8 0,1,0,1 -lt 1,col=1,0,0 -ord x2+x3 dos.fe
$ open

The figures should look like those shown below. In the left figure the vertical axis is aligned with the Fermi level, and the horizontal axis lies at 8 electrons. You can confirm that the integrated DOS crosses 8 at EF.

In the right figure DOS are resolved by spin (red for majority spin, green for minority spin).

Fe total NOS and DOS

See Table of Contents

4. Resolve DOS into t2g and eg symmetry

In Fe the d orbitals are of primary interest. Spherical harmonics for l=2 split under cubic symmetry into t2g and eg symmetry. In this section we resolve the spin-1 DOS into those symmetries.

Optics MODE=-5 generates the spin 1 DOS. Step 3 already supplied this information, but the optics MODE=-5 works in concert with the --jdos switch which enables you to project the DOS into orbitals of your choosing, using a Mulliken analysis. --jdos offers a lot of flexibility, but a bit of extra work is needed to identify which orbitals in the LMTO basis set are associated with t2g and eg symmetry.

Run lmf with a high verbosity, stopping early:

lmf fe --pr60 --quit=ham

You should see this table:

 Orbital positions in hamiltonian, resolved by l:
 Site  Spec  Total    By l ...
   1   Fe    1:30   1:1(s)   2:4(p)   5:9(d)   10:16(f) 17:17(s) 18:20(p) 21:25(d) 26:30(d)

It tells you that channels 5:9 (first kappa), 21:25 (second kappa) and 26:30 (local orbitals) are associated with the Fe d orbitals. In each group of 5 orbitals, three of them are of t2g character and two of eg character. The t2g are the xy, xz, and yz, orbitals; the eg have 3z2−1 and x2y2 character. At the Γ point in the Brillouin zone, the Fe d states are three-fold and two-fold degenerate, according to their character.

To know which of the 5 orbitals belong to each class, consult the spherical harmonics page. The table indicates that the first, second, and fourth l=2 orbitals are t2g, and orbitals 3 and 5 are the eg. Since the d orbitals appear three times in the basis, there are 9 and 6 t2g and eg orbitals, respectively.

Comparing to the table above, channels 5,6,8, 21,22,24, and 26,27,29 can be identified as t2g orbitals, and channels 7,9, 23,25, and 28,30 the eg.

Run lmf as follows:

$ lmf fe -vlteto=3 -voptmod=-5 -vnk=16 --quit=band --jdosw=5,6,8,21,22,24,26,27,29 --jdosw2=7,9,23,25,28,30


  • You can project onto one (--jdosw) or two (--jdosw and --jdosw2) combinations of orbitals, using Mulliken projection.
  • This special Mulliken projected DOS MODE=-5 requires the enhanced tetrahedron integrator (LTET=3).
  • You can of course use more or fewer k points.
  • A file jdos.fe should be written to disk with total and the two Mulliken-projected DOS in the format described here.
  • –quit=band avoids overwriting the density restart file.
  • lmf prints out messages like this:

     optics: restrict transitions to : occ=(1,4) unocc=(2,6)

    This message is not relevant for the DOS.

As a sanity check, the total DOS in jdos.fe should match tdos.fe

$ fplot tdos.fe -lt 2,col=1,0,0  jdos.fe

The black and red dashed lines should lie on top of one another.

Make a Figure drawing:

  1. the total spin&uar; DOS;
  2. the sum of t2g and eg DOS in light grey;
  3. the t2g DOS in red;
  4. the eg DOS in green

    $ fplot -lt 1,col=0,0,0 jdos.fe -lt 1,col=.7,.7,.7 -ord x3+x4 jdos.fe -lt 2,col=1,0,0 -ord x3 jdos.fe -lt 2,col=0,1,0 -ord x4 jdos.fe

the figure should look similar to this:

Fe total NOS and DOS

In the interval (−0.35,0) Ry, the grey almost superimposes on the black. This shows that almost all the DOS in that interval is of Fe d character. Below −0.4 and above 0, a difference in the two appears: the d bandwidth has been exhausted and what remains is mostly of Fe s character. You can also see that the t2g is a somewhat wider than the eg.

5. Resolve DOS by k

In the previous section the DOS were resolved into t2g and eg character. Here it is further resolved by k. To accomplish this use the OPTICS_PART tag. To see its function, look at the web documentation or just do

lmf --input | grep -A 10 OPTICS_PART

Use OPTICS_PART=2 to resolve by k; we will use OPTICS_PART=12 to write the output to a binary file poptb.fe, since resolving DOS into 145 distinct k channels and three kinds of DOS creates a large file. Column 1 is the energy. The DOS channels are ordered as


Repeat the previous calculation adding a variable -vlpart=12:

$ lmf fe -vlteto=3 -voptmod=-5 -vlpart=12 -vnk=16 --quit=band --jdosw=5,6,8,21,22,24,26,27,29 --jdosw2=7,9,23,25,28,30

This should create a binary file poptb.fe. To confirm that the k resolved DOS sum to the total DOS, do:

mcx -br poptb.fe -split a 1,nr+1 1,2,'(nc-1)/3'+2,'(nc-1)/3*2'+2,'(nc-1)/3*3'+2 a11 a12 -csum -ccat jdos.fe -coll 1,2 -- -px:5
mcx -br poptb.fe -split a 1,nr+1 1,2,'(nc-1)/3'+2,'(nc-1)/3*2'+2,'(nc-1)/3*3'+2 a11 a13 -csum -ccat jdos.fe -coll 1,3 -- -px:5
mcx -br poptb.fe -split a 1,nr+1 1,2,'(nc-1)/3'+2,'(nc-1)/3*2'+2,'(nc-1)/3*3'+2 a11 a14 -csum -ccat jdos.fe -coll 1,4 -- -px:5

5.1 DOS Heat Maps

The k resolved DOS can be used to make a “heat map” of the Fermi surface, that is a tabulation of the DOS for all k points in the Brillouin Zone for a specific energy.

This is accomplished with optics editor, which you invoke with --–popted :

$ lmf fe --rs=1,0 -vlteto=3 -voptmod=-5 -vlpart=12 -vnk=16 --popted

You will be prompted for an instruction:

 Option :

Typing  ? <enter>  will give you a menu of options.

As with many of the Questaal editors you can string a sequence of instructions on the command line: the editor will treat them as though you entered them interactively. Separate instructions are delimited by the character immediately following --popted. In the present case, try

$ lmf fe --rs=1,0 -vlteto=3 -voptmod=-5 -vlpart=12 -vnk=16 '--popted:readb:npol 3:kshowe -0.01 1 sort ds,q3:kmape 0.05 1:saveka:q'

:  was used as the delimiter. These instructions do the following:

  • :readb  reads binary file poptb.ext
  • :npol 3  tells the editor that the file has three “polarizations.” In this case “polarizations” refer to total DOS, and first and second Mulliken DOS.
  • :kshowe -0.01 1 sort ds,q3  causes the editor to :
    • print out the DOS at ω=−0.01 Ry
    • print out the DOS for the first “polarization” (total DOS in this case).
    • sort the list by increasing length, and for two vectors of the same length by the third component of k. Results are printed to standard output.
  • :kmape 0.05 1  causes the editor to :
    • Map DOS(ω=0.05 Ry) to each point in the full BZ
    • Maps the first “polarization” (total DOS in this case)
    • Results are kept in an internal array
  • :saveka  saves the internal array generated by kmape to an ASCII file, pka.ext.
  • :q  quits the editor.

Additional exercises