Questaal Home
Navigation

Making a Fermi Surface for spin polarized Fe

This tutorial outlines the steps needed to generate a Fermi surface for Fe, using either the ASA program lm or the FP programs lmf.
The Fermi surface drawn on a 2D projection of the Brillouin zone, is a contour plot of the bands at the Fermi level. Fermi surfaces for both majority and minority spins are drawn.

In a subsequent section, the fermi surface is drawn again, majority bands only this time, but using the velocity vF at the Fermi level to color the bands. The evolution in vF becomes apparent, and quite remarkably it changes by a large factor depending on the point on the Fermi surface.

In the final section, the same minority bands are drawn, but now using two color weights, corresponding respectively to the Fe d t2g and eg characters.

This tutorial assumes ~/lmf is the top-level directory for the Questaal repository, and that executables lm or lmf, lmdos (and for plotting, the mcx calculator and the plotting utility fplot) are in your path.

Setup: self-consistent calculation for Fe

With the FP program lmf:
If you don’t want to build an input file from scratch, use one from the Questaal repository and make the density self-consistent:
cp ~/lmf/fp/test/ctrl.fe .
lmfa fe -vnsp=2
lmf fe --rs=0 -vnsp=2

Alternatively, repeat the steps for LDA self-consistency (or for the stout-hearted, QSGW self-consistency) in the Fe tutorial; steps are summarized in Command summary.

With the ASA program lm:
Use the following test to obtain an input file and self-consistent density:
~/lm/testing/test.lm --quiet fe

Bands on a regular 2D mesh

Both lmf and lm can generate energy bands in a mesh mode for generating contour plots, i.e. bands on a regular mesh of q points in 2D.

Pick up a q-points file appropriate for Fe from the Questaal repository:

cp ~/lmf/fp/test/fs.fe .
sed -i.bak 's/ 3  / 35 /; s/ 5  / 51 /' fs.fe

fs.fe has this structure (see here for syntax):

# vxrangenvyrangenheightband
.5 .50 0 1350 0 10 1510.002:6

Fe is magnetic and bands 2,3,4,5,6 cross the Fermi surface (either majority or minority), so bands 2..6 will be generated. This file is set up to generate mesh of points for bands 2..6 in the rectangle defined by Γ=(0,0,0) in the lower left corner, H=(0,0,1)2π/a at the upper left corner, N=(1/2,1/2,0)2π/a at the lower right corner, and N=(1/2,1/2,1)2π/a at the upper right corner.

Do one of:

 lmf fe --band~con~fn=fs
 lm  fe --iactiv=no --band~con~fn=fs

Drawing the Fermi surface

To plot the Fermi surface you will need graphics software. This tutorial uses Questaal’s fplot utility, in the contour plotting mode.

bnds.fe consists of 10 blocks of bands, each block on a 2D grid of 35×51 points. Split this file into 10 separate files. Name the first five (down spin) 2d, 3d, 4d, 5d, 6d, and the last five 2u, 3u, 4u, 5u, 6u,

If you have the mcx calculator calculatoryour path, do this with the following command:

   set rf = "-r:open bnds.fe"  (tcsh)
   rf="-r:open bnds.fe"        (bash)
   mcx $rf -w 2d $rf -w 3d $rf -w 4d $rf -w 5d $rf -w 6d $rf -w 2u $rf -w 3u $rf -w 4u $rf -w 5u $rf -w 6u

We will use the fplot utility to draw the Fermi surface Copy the box below into file plot.fs

% var ef=-0.006678 # (or whatever the fermi level is output from your band calculation)
fplot -frme 0,1/sqrt(2),0,1  -x 0,1/sqrt(2) -y 0,1 -tmx .1

  -lt 1,col=0,.1,1 -con {ef} 2u
  -lt 1,col=0,.3,1 -con {ef} 3u
  -lt 1,col=0,.5,1 -con {ef} 4u
  -lt 1,col=0,.7,1 -con {ef} 5u
  -lt 1,col=0,.9,1 -con {ef} 6u

  -lt 2,col=0,.1,1 -con {ef} 2d
  -lt 2,col=0,.3,1 -con {ef} 3d
  -lt 2,col=0,.5,1 -con {ef} 4d
  -lt 2,col=0,.7,1 -con {ef} 5d
  -lt 2,col=0,.9,1 -con {ef} 6d

Generate a postscript file using

fplot -f plot.fs

The postscript file should look like the picture shown below. Compare, e.g. to this paper by Coleman et al: Phys. Rev. B23, 2491 (1981).

Click here to see the image.

Fermi surfaces with Fermi velocity as a color weight

This section shows how to draw the Fermi surface, using color to delineate the Fermi velocity.

The first step is to make the Fermi velocities on a fine k mesh. Do this with the following:

lmf -vnk=51 ctrl.fe  --quit=band
lmdos fe -vnk=51 --dos~bands=3:6~rdm~window=-.05,.05~npts=101~mode=3  --kresm=-0.001939

lmdos finds all tetrahedra that encompass the Fermi level (which can be read from the output as -0.001939). and compute the DOS or related quantity at that energy. The --dos tage is explained here. mode=3 tells lmdos to generate not the DOS, but the velocity. This data is written to file dosq.h5, and can be read by lmf with the coldos flag as will be shown shortly.

lmdos should generate the following:

 <|v|> (spin 1) at Ef.  Avg 0.1807 a.u. = 0.1706 x 10^6 m/s.  Resolve by band:
  ib   <|v|>       ib   <|v|>       ib   <|v|>       ib   <|v|>
   3   0.5727  |    4   0.2197  |    5   0.0000  |    6   0.0000  |
 total DOS(Ef) = 1.844866
 q- and band- resolved   4 bands  132651 qp  ef=-0.001939  microcell vol 1.25643e-6

 <|v|> (spin 2) at Ef.  Avg 0.3133 a.u. = 0.2958 x 10^6 m/s.  Resolve by band:
  ib   <|v|>       ib   <|v|>       ib   <|v|>       ib   <|v|>
   3   0.1733  |    4   0.1511  |    5   0.3086  |    6   0.6908  |
 total DOS(Ef) = 3.810278

Minority (spin 1) bands register no velocities for bands 5 and 6, because they do not cross the Fermi level. The majority (spin 2) bands all have some presence at EF and for simplicity we will draw the Fermi surface only for that spin.

With dosq.h5 in hand, regenerate bnds.fe, this time including DOS (actually velocity) as a color weight:

cp ~/lmf/fp/test/fs.fe .
sed -i.bak 's/ 3  / 35 /; s/ 5  / 51 /' fs.fe
lmf -vnk=51 ctrl.fe  --quit=band --band:con:coldos:fn=fs

For simplicity, we will draw the Fermi surface only for spin 2 (the majority spin since the magnetic moment is negative).

The contour plot maker needs to know what colors to use, and files to find the weights. Extract spin 2 bands 2,3,4,5,6 into files 2, 3, 4, 5, 6, and corresponding weights into files w2, w3, w4, w5, w6:

set ef = `grep efermi= bnds.fe | head -1 | vextract . efermi`
set rf = "-r:open -qr bnds.fe -shft=-$ef"
set rfw = "-r:open -qr bnds.fe"
mcx [ 2:6 -qr $rfw ]  [ i=2:6 -qr $rf -w \{i} ]  [ i=2:6 -qr $rfw ] [ i=2:6 -qr $rfw -w w\{i} ] -show

Note that variable rfw causes mcx to read the next array from bnds.fe, while rf does the same but subtracts the Fermi level before writing.

Put the following box into file plot.fs2. It is a script for the fplot utility. For each of 3, 4, 5, 6 It reads files with that name to draw the lines, and correspoinding w3, w4, w5, w6 for the weights.

Copy the box below into file plot.fs2 and do

fplot -pr91 -f plot.fs2
fplot -frme 0,1/sqrt(2),0,1  -x 0,1/sqrt(2) -y 0,1 -tmx .1
   -lt 1,bold=4 -con~col=0,0,0~colwt=0,0,1~range=.1,.9~wtfn=w3 0 3
   -lt 1,bold=4 -con~col=0,1,0~colwt=0,0,1~range=.1,.9~wtfn=w4 0 4
   -lt 1,bold=4 -con~col=1,0,0~colwt=0,0,1~range=.1,.9~wtfn=w5 0 5
   -lt 1,bold=4 -con~col=1,0,0~colwt=0,0,1~range=.1,.9~wtfn=w6 0 6

The range 0.1…0.9 signifies that the color for a weight of 0.1 or less is assigned to col, while it gets assigned to colwt. for a weight of 0.9 or more. The color for any weight linearly interpolates between these two limits. The Fermi velocity varies by roughly and order of magnitude with k.

Click here to see the image.

The figure shows that the excursion in velocity is quite large — roughly an order of magnitude.

Fermi surfaces with orbital character as a color weight

This section shows how to draw the Fermi surface, using color to delineate the orbital character. Here we will use two colors: red to denote the Fe d t2g and green the Fe d teg character.

The xy, yz and xz orbitals are the t2g; in Questaal’s basis they the first, second, and fourth d orbitals as can be seen from this table. The basis set used here has two channels of d orbitals, as can be seen by doing the following:

lmf ctrl.fe --quit=ham --pr55

do this

lmf ctrl.fe --band~con~col=5,6,8,dup=16~col2=7,9,dup=16~fn=fs

With eigenvalues + two color weights; bnds.fe has 30 panels of points in all (5 bands × 2 spins × (1+2)) We need to extract eigenvalue blocks spin-2 bands 6-10, then t2g weights for these bands (panels 16-20), then eg weights (panels 26-30)

set ef = `grep efermi= bnds.fe | head -1 | vextract . efermi`
set rf = "-r:open -qr bnds.fe -shft=-$ef"
set rfw = "-r:open -qr bnds.fe"
mcx [ 2:6 -qr $rfw ]  [ i=2:6 -qr $rf -w \{i} ]  [ i=2:6 -qr $rfw ] [ i=2:6 -qr $rfw -w t2g\{i} ] [ i=2:6 -qr $rfw ] [ i=2:6 -qr $rfw -w eg\{i} ] -show

Copy the box below into file plot.fs3 and do

fplot -pr91 -f plot.fs3
fplot -frme 0,1/sqrt(2),0,1  -x 0,1/sqrt(2) -y 0,1 -tmx .1
   -lt 1,bold=4 -con~colwt=1,0,0~wtfn=t2g3~colw2=0,1,0~wtf2=eg3~ 0 3
   -lt 1,bold=4 -con~colwt=1,0,0~wtfn=t2g4~colw2=0,1,0~wtf2=eg4~ 0 4
   -lt 1,bold=4 -con~colwt=1,0,0~wtfn=t2g5~colw2=0,1,0~wtf2=eg5~ 0 5
   -lt 1,bold=4 -con~colwt=1,0,0~wtfn=t2g6~colw2=0,1,0~wtf2=eg6~ 0 6

Click here to see the image.

One contour changes continuously between t2g and eg; the ones at the top are mostly t2g but towards the right acquire some non-d-character; the small pocket at the bottom right is a mix of t2g and non-d.