Spin-Orbit Coupling

by Benedikt Maurer & Andris Gulans for exciting neon

Purpose: In this tutorial you will learn how to calculate the electronic ground state with spin-orbit coupling (SOC). The effect of SOC is demonstrated by looking at the band structure of GaAs. In the last section, we explain how to use a recently developed method to accurately and efficiently treat SOC.

0. Define relevant shell variables

Read the following tutorials before starting with the next sections!

From now on the symbol $ will indicate the shell prompt.

1. Theoretical background: Spin-orbit coupling

Spin-orbit coupling (SOC) is a relativistic contribution to the kinetic energy that describes the interaction of an electron's spin with its orbit. The spin-orbit term in the electron Hamiltonian is given by (see SOC-67):

\begin{align} H_\textrm{SOC} = \frac{\hbar}{4m_0^2c^2}(\boldsymbol{\sigma} \times \nabla V_\textrm{KS})\cdot \mathbf{p} \end{align}

where $m_0$, $\boldsymbol{\sigma} = (\sigma_x, \sigma_y, \sigma_z)^\textrm{T}$, $V_\textrm{KS}$, and $\mathbf{p}$ are the electron mass, a vector of the Pauli matrices, the Kohn-Sham potential, and the electron's momentum, respectively. The strength of the SOC increases with the magnitude of the nuclear charge, and it may be crucially important to consider the SOC for materials with heavy atoms.

To demonstrate the effect of SOC on the electronic structure of GaAs, we calculate the band structure with and without SOC with exciting and compare them to each other.

2. Electronic band structure of GaAs without SOC

Create a working directory for this tutorial and move into it:

$ mkdir tutorial-SOC && cd tutorial-SOC

At first, calculate the ground state and band structure of GaAs without SOC. To do so, create a new directory and move into it:

$ mkdir GaAs-noSOC && cd GaAs-noSOC

Then create the file input.xml with your editor of choice and copy and paste the following lines into it

   <title>GaAs noSOC</title>
   <structure speciespath="$EXCITINGROOT/species">
      <crystal scale="10.683" >
         <basevect>  0.0  0.5  0.5 </basevect>
         <basevect>  0.5  0.0  0.5 </basevect>
         <basevect>  0.5  0.5  0.0 </basevect>
      <species speciesfile='Ga.xml' rmt='2.0'>
         <atom coord="0.00 0.00 0.00"/>
      <species speciesfile='As.xml' rmt='2.0'>
         <atom coord="0.25 0.25 0.25"/>
      ngridk="4 4 4"
            <path steps="1000">
               <point coord="1.0     0.0     0.0" label="Gamma"/>
               <point coord="0.625   0.375   0.0" label="K"/>
               <point coord="0.5     0.5     0.0" label="X"/>
               <point coord="0.0     0.0     0.0" label="Gamma"/>
               <point coord="0.5     0.0     0.0" label="L"/> 

Set up the correct species path and run exciting:

$ SETUP-excitingroot.sh
$ time exciting_smp

You can monitor the progress of self-consistent cycle (SCF) by typing:

$ tail -f INFO.OUT

If the calculation was successful, the files BAND.OUT, BANDLINES.OUT, and bandstructure.xml exist.

Visualize the band structure by using the following commands:

$ cd ..
$ PLOT-band-structure.py -d GaAs-noSOC  -e -5 3  -z vbM

The script PLOT-electronic-bands.py is described in details in The python script "PLOT-band-structure.py". In this case, electronic band-structure data are taken from the directory GaAs-noSOC. The script option -z vbM is used to align the plots to the valence-band maximum (vbM). The script PLOT-band-structure.py produces a file PLOT.png which can be viewed with the standard tools. The result should look as follows:


3. Electronic band structure of GaAs with SOC

The ground state of GaAs without SOC can be used as starting point for the calculation with SOC. Create a new directory for the calculation with SOC, copy and paste all files from the old directory into the new one and move into it:

$ cp -rf GaAs-noSOC GaAs-SOC
$ cd GaAs-SOC

To perform a ground-state calculation that includes SOC, the input file input.xml should be modified such that the title is changed to GaAs SOC and the content of the groundstate is adjusted as

      ngridk="4 4 4"
      <spin spinorb="true"/>

If you compare this to the previous groundstate element, you will notice the following differences:

  1. The do attribute is set to "fromfile". This enables exciting to use the self-consistent potential from the scalar-relativistic calculation as the starting point. As for skip, the files STATE.OUT and EFERMI.OUT from the calculation to skip have to be present in the directory.
  2. A new element spin is added to groundstate with the attribute spinorb="true". This enables SOC for the ground state.
  3. The attribute nempty="15" has been added to the groundstate element. This attribute defines how many unoccupied (empty) states are considered for the solution of the electronic ground state with SOC. When SOC is taken into account, a proper choice of the parameter nempty is fundamental for converged results!

Use the following command to run the calculation:

$ time exciting_smp &
$ tail -f INFO.OUT

Note, that the output file INFO.OUT contains a new section called Moments: inside the SCF information.

 Moments :
     interstitial                 :     0.00000000     0.00000000     0.00000000
     moment in muffin-tin spheres :
         atom     1    As         :     0.00000000     0.00000000    -0.00000000
         atom     2    Ga         :    -0.00000000    -0.00000000    -0.00000000
     total moment in muffin-tins  :    -0.00000000    -0.00000000    -0.00000000
     total moment                 :    -0.00000000    -0.00000000    -0.00000000

This section shows the moments of the interstitial and the muffin-tin part of the solution. If this section is present, SOC is included into the solution of the ground state.

If you did not change anything else than the groundstate element, the band structure is calculated already and you can compare it to the band structure of the calculation without SOC. To do so leave the directory and run the script PLOT-band-structure.py:

$ cd ..
$ PLOT-band-structure.py -d GaAs-noSOC GaAs-SOC  -e -5 3  -z vbM

Electronic band-structure data are now taken from both GaAs-noSOC and GaAs-SOC directories. The result is saved to PLOT.png and should look like the following image:


Comparing the band dispersion curves from the two calculations, we notice a few features introduced by the SOC.

  1. The band gap Eg slightly decreases.
  2. The 3 top valence bands lose their triple degeneracy at the Γ-point, and we can recognize the heavy and light hole bands as well as the split-off band. The difference between the light-hole (or heavy-hole) and the split-off bands is known as the spin-orbit splitting ΔSO.
  3. Some bands lose their spin-degeneracy as GaAs does not have an inversion symmetry. This can be verified by looking at the electronic band structure close to the Γ-point along the X->Γ->L directions. This feature is more visible in the plot which is produced by changing the energy window used by the script PLOT-band-structure.py as follows:
$ PLOT-band-structure.py -d GaAs-noSOC GaAs-SOC  -e -1.5 1.5  -z vbM  -k 0.70 0.775  -s 0.5

The plot is useful for a qualitative analysis, but it is more convenient to look at the output files EIGVAL.OUT or BAND.OUT inside the directory GaAs-SOC for extracting the numbers. EIGVAL.OUT contains Kohn-Sham eigenvalues at each k-point considered in the self-consistent calculation. If you open this file in the directory with the SOC calculation, you will find the following data:

    10 : nkpt
    40 : nstsv

     1   0.000000000       0.000000000       0.000000000     : k-point, vkl
 (state, eigenvalue and occupancy below)
    21 -0.2881192567       1.000000000    
    22 -0.2881192567       1.000000000    
    23  0.1720853625       1.000000000    
    24  0.1720858305       1.000000000    
    25  0.1840653194       1.000000000    
    26  0.1840653230       1.000000000    
    27  0.1840666353       1.000000000    
    28  0.1840667532       1.000000000    
    29  0.1980049392       0.000000000    
    30  0.1980049392       0.000000000    
    31  0.3105719280       0.000000000    
    32  0.3105719459       0.000000000    
    33  0.3173281258       0.000000000    
    34  0.3173281280       0.000000000 

The indices of the bands are as follows:

  • 23-24 — the split-off band,
  • 25-26 — the light hole band,
  • 27-28 — the heavy hole band,
  • 29-30 — the lowest conduction band.

Taking into account that the energies are given in the atomic units (Hartrees), the Kohn-Sham band gap is Eg = 0.38 eV, which is much smaller than the experimental value Egexp = 1.42 eV (see GaAs-gap). The obtained spin-orbit splitting is ΔSO = 0.33 eV. Unlike the band gap, it is in a good agreement with experiment (ΔSOexp = 0.34 eV).

4. Advanced method: Second variation with local orbitals

The second variation with local orbitals as explicit basis functions (SVLO) permits an accurate and efficient treatment of SOC. More information about the method can be found in Ref. SVLO.

To enable the SVLO method you need to include inside the element spin, in addition to the attribute spinorb="true", the attribute svlo="true". The attribute nempty (inside the element groundstate), which defines the number of unoccupied (empty) states considered in the calculation of the SOC contribution, must be accurately chosen also when the SVLO method is employed in order to obtain converged results.

One significant advantage of the SVLO method is that it can be utilized in conjunction with Dirac-type local orbitals, as illustrated in Understanding the exciting Species Files. This is crucial since for many materials, these orbitals produce substantial effects that need to be accounted for in order to achieve accurate results.

Note that, the SVLO method is a recent implementation for which many exciting features are not yet supported. In order to use it for groundstate calculation with SOC, the attribute useDensityMatrix, inside the element groundstate, must be set to false (useDensityMatrix="false").

For more information about the input parameters see Input Reference.


  • SOC-67: The form of HSOC in the given form is derived in J. J. Sakurai, Advanced quantum mechanics (Addison-Wesley, Reading, MA, 1967) pp. 62, 63, 1, 4.
  • GaAs-gap: Schlesinger, T. E. "Gallium arsenide." Encyclopedia of Materials: Science and Technology (2001): 3431-3435.
  • SVLO: C. Vona, S. Lubeck, H. Kleine, A. Gulans, C. Draxl: arXiv:2306.02965
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License