Spin-orbit Coupling

Most density-functional theory calculations are based in non-relativistic quantum mechanics, where spin decouples completely from the spatial degrees of freedom and only enter in the orbital occupations. Far from the atoms, the electron velocities are indeed much smaller than the speed of light and the non-relativistic approximation is valid. This is however no longer true close to the nuclei for electrons with non-zero angular momentum. Importantly, even valence electrons (with l > 0) in heavy atoms pick up relativsitic effects - especially spin-orbit coupling - from the regions of space close to the nuclei. This tutorial demonstrates the effect of spin-orbit coupling on the band structure of metallic platinum.

In plane-wave calculations using pseudopotentials, these relativistic effects can be built into the pseudopotentials. The SG15 pseudopotentials we have used so far do not have relativistic versions available, so we will use pseudopotentials from Pseudo Dojo. Download scalar relativistic (SR) and full relativistic (FR) pseudopotentials and store them in separate directories, $SR and $FR (as the SR and FR pseudopotentials share file names for any given atom).

Unpacked the tar files as follows:

tar -zxvf $SR/nc-sr-05_pbe_stringent_upf.tgz # Non (Scalar) Relativistic
tar -zxvf $FR/nc-fr-04_pbe_stringent_upf.tgz # Full Relativistic

Your pseudopotential paths should now be:

$FR/Pt.upf   #the relativistic one
$SR/Pt.upf   #the non-relativistic one

We first run the non-relativistic calculation (but with the new Pseudo Dojo pseudopotential)

lattice:
  system: cubic
  modification: face-centered
  a: 7.41

ions:
  pseudopotentials:
    - $SR/ID.upf
  coordinates:
    - [Pt, 0, 0, 0]

electrons:
  spinorial: no
  fillings:
     smearing: fermi
     sigma: 0.01
  k-mesh:
    size: [12, 12, 12]
  xc:
    functional: gga_pbe
  basis:
    ke-cutoff: 45 # Higher wavefunction cutoff as determined from Pseudo Dojo website

  checkpoint_out: Pt_out.h5

Save the above input commands in Pt.yaml. To change the calculation for a spinorial calculation, change the line spinorial: no to spinorial: true and change the pseudopotential line to:

pseudopotentials:
  - $FR/$ID.upf

Remember to also change the value given for checkpoint_out for the new relativistic calculation. We choose our new checkpoint filename:

checkpoint_out: Pt_soc_out.h5

Save the new input file, with the necessary alterations for a relativistic calculation, in Pt.soc.yaml and run as before.

Now we run both the nonrelativistic and relativistic band structure calculations. For the nonrelativistic calculation, we use an input file, kpoints.yaml:

include: Pt.yaml

electrons:
  fillings:
    n-bands: 12
    n-bands-extra: 5

fixed-H: Pt_out.h5 #fixed Hamiltonian so there's no more SCF

k-mesh: null #de-specify the k-mesh from Si.yaml

k-path:
  dk: 0.05
  points:
    - [0, 0, 0, $\Gamma$]
    - [0, 0.5, 0.5, X]
    - [ 0.25, 0.75, 0.5, W]
    - [0.5, 0.5, 0.5, L]
    - [0, 0, 0, $\Gamma$]
    - [ 0.375, 0.75, 0.375, K]

checkpoint-out: kpoints_out.h5

For the relativistic band structure calculation, we create a new input file, kpoints.soc.yaml:

include: Pt.soc.yaml

electrons:
  fillings:
    n-bands: 24
    n-bands-extra: 10

fixed-H: Pt_soc_out.h5 #fixed Hamiltonian so there's no more SCF

k-mesh: null #de-specify the k-mesh from Si.yaml

k-path:
  dk: 0.05
  points:
    - [0, 0, 0, $\Gamma$]
    - [0, 0.5, 0.5, X]
    - [ 0.25, 0.75, 0.5, W]
    - [0.5, 0.5, 0.5, L]
    - [0, 0, 0, $\Gamma$]
    - [ 0.375, 0.75, 0.375, K]

checkpoint-out: kpoints_soc_out.h5

We then plot the overlayed band structures as follows:

python -m qimpy.interfaces.bandstructure -c "kpoints_out.h5 kpoints_soc_out.h5"  -o Pt_soc_bandstructure.png

Which should produce:

../../_images/Pt_soc_bandstructure.png