Spin-Orbit Interaction (SOI) is a quantum mechanical effect that couples electron spin to orbital motion. In this chapter, we start from its relativistic origin, learn about its manifestations in solids—the Rashba and Dresselhaus effects—and understand applications to spintronics devices.
1.1 Relativistic Origin of Spin-Orbit Interaction
Spin-orbit interaction emerges naturally from the non-relativistic limit of the Dirac equation. An electron moving with velocity $\mathbf{v}$ in an electric field $\mathbf{E}$ experiences an effective magnetic field in its rest frame:
$$ \mathbf{B}_{\text{eff}} = -\frac{1}{c^2}\mathbf{v} \times \mathbf{E} $$The interaction between this effective field and the electron spin is spin-orbit interaction. In an atom, the electric field comes from the nuclear Coulomb potential:
$$ \mathbf{E} = -\nabla V(r) = \frac{1}{e}\frac{dV}{dr}\frac{\mathbf{r}}{r} $$Combining these with the Thomas half-factor (1/2), we obtain the SOI Hamiltonian:
$$ H_{\text{SOI}} = \frac{\hbar}{4m^2c^2}\frac{1}{r}\frac{dV}{dr}\mathbf{L} \cdot \mathbf{S} = \xi(r)\mathbf{L} \cdot \mathbf{S} $$where $\mathbf{L}$ is orbital angular momentum, $\mathbf{S}$ is spin angular momentum, and $\xi(r)$ is the spin-orbit coupling constant.
Atomic Number Dependence
SOI strength scales as the fourth power of atomic number ($\xi \propto Z^4$). This is because heavier elements have larger nuclear charges, and inner-shell electrons orbit closer to the nucleus at higher velocities. For example:
- Light elements (C, N, O): SOI ≈ meV
- Transition metals (Fe, Co, Ni): SOI ≈ 10-100 meV
- Heavy metals (Pt, W, Ta): SOI ≈ 0.1-1 eV
Code Example 1.1: Atomic SOI Strength Calculation
"""
Spin-orbit coupling constant for hydrogen-like atoms
"""
import numpy as np
import matplotlib.pyplot as plt
def soi_coupling_constant(Z, n, l):
"""
SOI coupling constant for hydrogen-like atom (in eV)
Parameters:
Z: Atomic number
n: Principal quantum number
l: Azimuthal quantum number
"""
# Physical constants
alpha = 1/137 # Fine structure constant
m_e = 0.511e6 # Electron mass (eV/c^2)
a_0 = 0.529e-10 # Bohr radius (m)
# Rydberg energy
E_n = 13.6 * Z**2 / n**2 # eV
# SOI coupling constant (approximation)
if l == 0:
return 0
xi = (alpha**2 * Z**4 * 13.6) / (n**3 * l * (l + 0.5) * (l + 1))
return xi
# SOI strength for various elements (2p orbital)
elements = {
'H': 1, 'C': 6, 'O': 8, 'Si': 14, 'Fe': 26,
'Cu': 29, 'Ag': 47, 'W': 74, 'Pt': 78, 'Au': 79, 'Bi': 83
}
n, l = 2, 1 # 2p orbital
Z_values = list(elements.values())
names = list(elements.keys())
xi_values = [soi_coupling_constant(Z, n, l) for Z in Z_values]
plt.figure(figsize=(12, 6))
plt.bar(names, xi_values, color='steelblue', alpha=0.7)
plt.yscale('log')
plt.xlabel('Element', fontsize=12)
plt.ylabel('SOI Coupling Constant ξ (eV)', fontsize=12)
plt.title('Spin-Orbit Interaction Strength vs Atomic Number', fontsize=14)
plt.grid(True, alpha=0.3, axis='y')
# Z^4 dependence guide line
Z_fit = np.array(Z_values)
xi_fit = xi_values[0] * (Z_fit / Z_values[0])**4
plt.plot(names, xi_fit, 'r--', linewidth=2, label='$Z^4$ dependence')
plt.legend()
plt.tight_layout()
plt.show()
print(f"Pt (Z=78) SOI is ~{(78/6)**4:.0f}x stronger than C (Z=6)")
1.2 Rashba Effect
The Rashba effect is a form of SOI that appears in systems with broken spatial inversion symmetry. It becomes important at interfaces or surfaces where structural symmetry is broken.
The Rashba SOI Hamiltonian is:
$$ H_{\text{Rashba}} = \alpha_R (\boldsymbol{\sigma} \times \mathbf{k}) \cdot \hat{z} = \alpha_R (k_y \sigma_x - k_x \sigma_y) $$where $\alpha_R$ is the Rashba coefficient, $\boldsymbol{\sigma}$ are Pauli matrices, and $\mathbf{k}$ is the wave vector.
Band Splitting from Rashba Effect
When Rashba SOI acts on a 2D electron gas, the energy dispersion becomes:
$$ E_{\pm}(\mathbf{k}) = \frac{\hbar^2 k^2}{2m^*} \pm \alpha_R k $$The spin degeneracy is lifted, splitting into two bands.
Code Example 1.2: Rashba Band Structure
"""
Visualization of Rashba effect band splitting
"""
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def rashba_energy(kx, ky, m_eff, alpha_R):
"""Energy dispersion of 2DEG with Rashba SOI"""
hbar = 1.055e-34
k = np.sqrt(kx**2 + ky**2)
E_kinetic = (hbar**2 * k**2) / (2 * m_eff) * 6.242e18 # Convert to eV
E_rashba = alpha_R * k
return E_kinetic + E_rashba, E_kinetic - E_rashba
# Parameters
m_eff = 0.067 * 9.109e-31 # GaAs effective mass
alpha_R = 1e-11 # Rashba coefficient (eV·m)
# k-space grid
kx = np.linspace(-5e8, 5e8, 200)
ky = np.linspace(-5e8, 5e8, 200)
KX, KY = np.meshgrid(kx, ky)
E_plus, E_minus = rashba_energy(KX, KY, m_eff, alpha_R)
# 3D plot
fig = plt.figure(figsize=(14, 5))
# Band structure (3D)
ax1 = fig.add_subplot(121, projection='3d')
ax1.plot_surface(KX/1e8, KY/1e8, E_plus*1000, alpha=0.7, cmap='Reds', label='E+')
ax1.plot_surface(KX/1e8, KY/1e8, E_minus*1000, alpha=0.7, cmap='Blues', label='E-')
ax1.set_xlabel('$k_x$ (×$10^8$ m$^{-1}$)')
ax1.set_ylabel('$k_y$ (×$10^8$ m$^{-1}$)')
ax1.set_zlabel('Energy (meV)')
ax1.set_title('Rashba Band Splitting (3D)')
# Cross-section (ky=0)
ax2 = fig.add_subplot(122)
idx = len(ky)//2
ax2.plot(kx/1e8, E_plus[idx,:]*1000, 'r-', linewidth=2, label='E+ (↑)')
ax2.plot(kx/1e8, E_minus[idx,:]*1000, 'b-', linewidth=2, label='E- (↓)')
ax2.axhline(y=0, color='k', linestyle='--', alpha=0.3)
ax2.set_xlabel('$k_x$ (×$10^8$ m$^{-1}$)', fontsize=12)
ax2.set_ylabel('Energy (meV)', fontsize=12)
ax2.set_title('Rashba Band Splitting ($k_y=0$ section)', fontsize=14)
ax2.legend()
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Spin Texture in Rashba Effect
Under Rashba SOI, spin orients perpendicular to momentum and lies in-plane. This is called spin texture.
Code Example 1.3: Spin Texture Visualization
"""
Visualization of spin texture from Rashba SOI
"""
import numpy as np
import matplotlib.pyplot as plt
def rashba_spin_texture(kx, ky):
"""Spin direction from Rashba SOI (normalized)"""
k = np.sqrt(kx**2 + ky**2)
# E+ band: spin along (-ky, kx, 0)
# E- band: spin along (ky, -kx, 0)
with np.errstate(invalid='ignore'):
sx_plus = -ky / k
sy_plus = kx / k
sx_minus = ky / k
sy_minus = -kx / k
return sx_plus, sy_plus, sx_minus, sy_minus
# k-space grid (polar)
theta = np.linspace(0, 2*np.pi, 24)
k_vals = [1, 2, 3]
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
for ax, (title, sign) in zip(axes, [('E+ Band (outer)', 1), ('E- Band (inner)', -1)]):
for k in k_vals:
kx = k * np.cos(theta)
ky = k * np.sin(theta)
sx = -sign * ky / k
sy = sign * kx / k
ax.quiver(kx, ky, sx, sy, color=plt.cm.viridis(k/4),
scale=15, width=0.01, headwidth=4)
circle = plt.Circle((0, 0), k, fill=False, linestyle='--', alpha=0.3)
ax.add_patch(circle)
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.set_aspect('equal')
ax.set_xlabel('$k_x$', fontsize=12)
ax.set_ylabel('$k_y$', fontsize=12)
ax.set_title(title, fontsize=14)
ax.grid(True, alpha=0.3)
plt.suptitle('Spin Texture from Rashba SOI', fontsize=16)
plt.tight_layout()
plt.show()
1.3 Dresselhaus Effect
The Dresselhaus effect is SOI arising from the lack of spatial inversion symmetry in the crystal structure itself. It is important in zinc-blende (GaAs etc.) and wurtzite crystals.
Linear Dresselhaus Hamiltonian in 2D systems:
$$ H_{\text{D}} = \beta (k_x \sigma_x - k_y \sigma_y) $$where $\beta$ is the Dresselhaus coefficient. Cubic terms also exist:
$$ H_{\text{D3}} = \gamma (k_x k_y^2 \sigma_x - k_y k_x^2 \sigma_y) $$Comparison: Rashba vs Dresselhaus
| Property | Rashba Effect | Dresselhaus Effect |
|---|---|---|
| Origin | Structural inversion asymmetry | Bulk inversion asymmetry |
| Hamiltonian | $\alpha_R(k_y\sigma_x - k_x\sigma_y)$ | $\beta(k_x\sigma_x - k_y\sigma_y)$ |
| Spin direction | Perpendicular to $\mathbf{k}$ | Diagonal direction |
| Tunability | Gate voltage controllable | Fixed by crystal growth |
Code Example 1.4: Rashba-Dresselhaus Mixed System
"""
Mixed effects of Rashba and Dresselhaus SOI
"""
import numpy as np
import matplotlib.pyplot as plt
def mixed_soi_energy(kx, ky, m_eff, alpha, beta):
"""Energy dispersion with Rashba + Dresselhaus SOI"""
hbar = 1.055e-34
k2 = kx**2 + ky**2
E_kin = (hbar**2 * k2) / (2 * m_eff) * 6.242e18
# SOI terms
soi_x = alpha * ky + beta * kx
soi_y = -alpha * kx - beta * ky
E_soi = np.sqrt(soi_x**2 + soi_y**2)
return E_kin + E_soi, E_kin - E_soi
# Parameters
m_eff = 0.067 * 9.109e-31
kx = np.linspace(-5e8, 5e8, 200)
# Dispersion for different α/β ratios
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
cases = [
(1e-11, 0, 'Rashba only (α=1, β=0)'),
(0, 1e-11, 'Dresselhaus only (α=0, β=1)'),
(1e-11, 1e-11, 'Equal mixing (α=β)')
]
for ax, (alpha, beta, title) in zip(axes, cases):
E_plus, E_minus = mixed_soi_energy(kx, 0, m_eff, alpha, beta)
ax.plot(kx/1e8, E_plus*1000, 'r-', linewidth=2, label='E+')
ax.plot(kx/1e8, E_minus*1000, 'b-', linewidth=2, label='E-')
ax.set_xlabel('$k_x$ (×$10^8$ m$^{-1}$)', fontsize=11)
ax.set_ylabel('Energy (meV)', fontsize=11)
ax.set_title(title, fontsize=12)
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# Special case α=β: Persistent Spin Helix
print("When α=β, spin along [110] direction is conserved")
print("→ Persistent Spin Helix (PSH) state")
Persistent Spin Helix
Under the special condition $\alpha = \beta$, the spin component along the [110] direction is conserved, suppressing spin relaxation. This is called the Persistent Spin Helix (PSH) and is favorable for long-distance spin information transport.
1.4 SOI in Heavy Metals and Interfaces
Spintronics devices exploit the strong SOI of heavy metals (Pt, W, Ta, etc.).
SOI Effects in Heavy Metal Thin Films
- Spin Hall Effect (SHE): Conversion from charge current to spin current
- Inverse Spin Hall Effect (ISHE): Conversion from spin current to charge current
- Spin-Orbit Torque (SOT): Magnetization control in adjacent magnetic layers
Code Example 1.5: Spin Hall Angle by Material
"""
Spin Hall angle and spin diffusion length for various materials
"""
import numpy as np
import matplotlib.pyplot as plt
# Experimental data (typical values)
materials = {
'Pt': {'theta_SH': 0.08, 'lambda_s': 3.0, 'Z': 78},
'Ta (β)': {'theta_SH': -0.15, 'lambda_s': 1.8, 'Z': 73},
'W (β)': {'theta_SH': -0.30, 'lambda_s': 1.4, 'Z': 74},
'Pd': {'theta_SH': 0.01, 'lambda_s': 9.0, 'Z': 46},
'Au': {'theta_SH': 0.01, 'lambda_s': 35, 'Z': 79},
'Cu': {'theta_SH': 0.003, 'lambda_s': 500, 'Z': 29},
}
names = list(materials.keys())
theta_values = [abs(m['theta_SH']) for m in materials.values()]
lambda_values = [m['lambda_s'] for m in materials.values()]
Z_values = [m['Z'] for m in materials.values()]
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# Spin Hall angle
ax1 = axes[0]
colors = ['red' if materials[n]['theta_SH'] < 0 else 'blue' for n in names]
bars = ax1.bar(names, [materials[n]['theta_SH'] for n in names], color=colors, alpha=0.7)
ax1.axhline(y=0, color='k', linestyle='-', linewidth=0.5)
ax1.set_ylabel('Spin Hall Angle θ_SH', fontsize=12)
ax1.set_title('Spin Hall Angle by Material', fontsize=14)
ax1.grid(True, alpha=0.3, axis='y')
# Spin diffusion length
ax2 = axes[1]
ax2.bar(names, lambda_values, color='steelblue', alpha=0.7)
ax2.set_yscale('log')
ax2.set_ylabel('Spin Diffusion Length λ_s (nm)', fontsize=12)
ax2.set_title('Spin Diffusion Length by Material', fontsize=14)
ax2.grid(True, alpha=0.3, axis='y')
plt.tight_layout()
plt.show()
print("W, Ta have negative spin Hall angles (spin direction reversed)")
print("Pt and W are widely used for SOT-MRAM")
1.5 SOI Applications in Spintronics
Code Example 1.6: SOT Switching Simulation Concept
"""
Comparison of SOI-based spin torque efficiency
"""
import numpy as np
import matplotlib.pyplot as plt
def sot_efficiency(theta_SH, lambda_s, t_FM, t_HM):
"""
Simple model for SOT switching efficiency
Parameters:
theta_SH: Spin Hall angle
lambda_s: Spin diffusion length (nm)
t_FM: Ferromagnet thickness (nm)
t_HM: Heavy metal thickness (nm)
"""
# Consider spin current interface transparency
tanh_factor = np.tanh(t_HM / (2 * lambda_s))
efficiency = abs(theta_SH) * tanh_factor
return efficiency
# Parameter scan
t_HM = np.linspace(0.5, 10, 100) # nm
t_FM = 1.0 # nm
materials_params = {
'Pt': {'theta_SH': 0.08, 'lambda_s': 3.0, 'color': 'blue'},
'W(β)': {'theta_SH': 0.30, 'lambda_s': 1.4, 'color': 'red'},
'Ta(β)': {'theta_SH': 0.15, 'lambda_s': 1.8, 'color': 'green'},
}
plt.figure(figsize=(10, 6))
for name, params in materials_params.items():
eff = sot_efficiency(params['theta_SH'], params['lambda_s'], t_FM, t_HM)
plt.plot(t_HM, eff, linewidth=2, color=params['color'], label=name)
plt.xlabel('Heavy Metal Thickness (nm)', fontsize=12)
plt.ylabel('SOT Efficiency (relative)', fontsize=12)
plt.title('Heavy Metal Materials and SOT Switching Efficiency', fontsize=14)
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
print("W(β) shows highest SOT efficiency due to large spin Hall angle")
print("Optimal heavy metal thickness is ~2-3x spin diffusion length")
Chapter Summary
What We Learned
- Relativistic origin: SOI derives from Dirac equation, strength scales as $Z^4$
- Rashba effect: From structural inversion asymmetry, gate-voltage controllable
- Dresselhaus effect: From crystal structure, fixed as bulk property
- Heavy metal SOI: Strong SOI in Pt, W, Ta drives Spin Hall Effect and SOT
- Applications: Path to SOT-MRAM, Spin FET, spin logic devices
Preparation for Next Chapter
In the next chapter, we study the detailed theory of Spin Transfer Torque (STT) derived from SOI. We will understand magnetization dynamics based on the Slonczewski-Berger model and STT-MRAM design principles.
References
- Winkler, R. (2003). Spin-Orbit Coupling Effects in Two-Dimensional Electron and Hole Systems. Springer.
- Manchon, A., et al. (2015). "New perspectives for Rashba spin-orbit coupling." Nat. Mater., 14, 871-882.
- Hoffmann, A. (2013). "Spin Hall Effects in Metals." IEEE Trans. Magn., 49(10), 5172-5193.