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.scfThepwscfinput file for ground state calculation -
Fe.nscfThepwscfinput file to obtain Bloch states on a uniform grid -
Fe.pw2wanThe input file forpw2wannier90 -
Fe.winThewannier90andpostw90input 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
pwscfto obtain the ferromagnetic ground state of iron1 -
Run
pwscfto obtain the Bloch states on a uniform k-point grid -
Run
wannier90to generate a list of the required overlaps (written into theFe.nnkpfile) -
Run
pw2wannier90to compute:-
The overlaps \(\langle u_{n{\bf k}}\vert u_{m{\bf k}+{\bf b}}\rangle\) between spinor Bloch states (written in the
Fe.mmnfile) -
The projections for the starting guess (written in the
Fe.amnfile) -
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.spnfile)
-
-
Run
wannier90to compute the MLWFs. -
Run
postw90to 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}.winin 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 200before running
postw90,The
pythonscripts 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.pyprovided 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.datcreated bypostw90contains 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 = truewithand re-run
postw90. This approach has the advantage that it does not require theFe.spnfile.
-
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. ↩