17: Iron Spin-orbit-coupled bands and Fermi-surface contours¶
Note: It is recommended that you go through Tutorial 8 first (bcc Fe without spin-orbit).
Note: This tutorial requires a recent version of the pw2wannier90
interface.
-
Outline: Plot the spin-orbit-coupled bands of ferromagnetic bcc Fe. Plot the Fermi-surface contours on a plane in the Brillouin zone.
-
Directory:
tutorials/tutorial17/
Files can be downloaded from here -
Input files
-
Fe.scf
Thepwscf
input file for ground state calculation -
Fe.nscf
Thepwscf
input file to obtain Bloch states on a uniform grid -
Fe.pw2wan
The input file forpw2wannier90
-
Fe.win
Thewannier90
andpostw90
input file
-
Note that num_wann =18
in Fe.win
, but only nine trial orbitals are
provided. The line
tells wannier90
to use in step 3 below the specified trial orbitals on
both the up- and down-spin channels, effectively doubling their number.
-
Run
pwscf
to obtain the ferromagnetic ground state of iron1 -
Run
pwscf
to obtain the Bloch states on a uniform k-point grid -
Run
wannier90
to generate a list of the required overlaps (written into theFe.nnkp
file) -
Run
pw2wannier90
to compute:-
The overlaps \(\langle u_{n{\bf k}}\vert u_{m{\bf k}+{\bf b}}\rangle\) between spinor Bloch states (written in the
Fe.mmn
file) -
The projections for the starting guess (written in the
Fe.amn
file) -
The spin matrix elements \(\langle \psi_{n{\bf k}}\vert \sigma_i\vert \psi_{m{\bf k}}\rangle\), \(i=x,y,z\) (written in the
Fe.spn
file)
-
-
Run
wannier90
to compute the MLWFs.\ -
Run
postw90
to compute the energy eigenvalues and spin expectation values.- serial execution
- example of parallel execution with 8 MPI processes
In this tutorial we use the module kpath
to plot the energy bands
coloured by the expectation value of the spin along [001]:
To plot the bands using gnuplot
(version 4.2 or higher) issue
or, using python
,
Next we plot the Fermi-surface contours on the (010) plane \(k_y=0\),
using the kslice
module. Set kpath = false
and uncomment the
following instructions in Fe.win
,
kslice = true
kslice_task = fermi_lines
fermi_energy = [insert your value here]
kslice_corner = 0.0 0.0 0.0
kslice_b1 = 0.5 -0.5 -0.5
kslice_b2 = 0.5 0.5 0.5
kslice_2dkmesh = 200 200
taking the Fermi level value from scf.out
. The energy eigenvalues are
computed on a \(200\times 200\) \(k\)-point grid covering the BZ slice. The
lines of intersection between the Fermi surface and the (010) plane can
be visualized with the gnuplot
or python
scripts generated at
runtime,
or
The Fermi lines can be colour-coded by the spin expectation value
\(\langle S_z\rangle\) of the states on the Fermi surface. Add to
Fe.win
the line
and re-run postw90
. The names of the gnuplot
and python
scripts
generated at runtime are unchanged. (However, the plotting algorithm is
different in this case, and the lines are not as smooth as before. You
may want to increase kslice_2dkmesh
.)
Further ideas¶
-
Redraw the Fermi surface contours on the (010) plane starting from a calculation without spin-orbit coupling, by adding to the input files
iron_{up,down}.win
in Tutorial 8 the linesInput filekslice = true kslice_task = fermi_lines fermi_energy = \[insert your value here\] kslice_corner = 0.0 0.0 0.0 kslice_b1 = 0.5 -0.5 -0.5 kslice_b2 = 0.5 0.5 0.5 kslice_2dkmesh = 200 200
before running
postw90
,The
python
scripts generated at runtime draw the up- and down-spin Fermi lines on separate figures. To draw them together, use the scriptiron_updn-kslice-fermi_lines.py
provided with Tutorial 17 (or merge the two generated scripts). Compare the Fermi lines with and without spin-orbit, and note the spin-orbit-induced avoided crossings. -
In Tutorial 8 we obtained MLWFs separately for the up- and down-spin channels of bcc Fe without spin-orbit. The Wannier-interpolated DOS was therefore automatically separated into minority and majority contributions. For a spinor calculation we can still spin-decompose the DOS, using
The data file
Fe-dos.dat
created bypostw90
contains the up-spin and down-spin contributions in the third and fourth columns,(You should replace 12.6285 with your value of the Fermi energy). An alternative approach is to project the DOS onto the up-spin and down-spin WFs separately. To find the DOS projected onto the up-spin (odd-numbered) WFs replace
spin_decomp = true
withand re-run
postw90
. This approach has the advantage that it does not require theFe.spn
file.
-
Please note the following counterintuitive feature in
pwscf
: in order to obtain a ground state with magnetization along the positive z-axis, one should use a negative value for the variablestarting_magnetization
. ↩