Intrinsic SOC does not depend on the symmetry of the system and can be expressed by:
HSO=λL^⋅S^
Where:
L^S^=[Lx^,Ly^,Lz^]=−iℏ(r×∇)=21[σx^,σy^,σz^]
To make things simple, we can re-write this with non-hermition raising and lowering operators $\boldsymbol{S_{\pm}}$ and $\boldsymbol{L_{\pm}}$:
HSO=21λ(L^+σ^−+L^−σ^++L^zσ^z)
Where:
L^+L^−=L^x+iL^y=L^x−iL^y
and the raising and lowering $\hat L_{\pm}$ act on complex spherical harmonics, resulting in:
L^±YℓmL^zYℓm=(ℓ∓m)(ℓ±m+1)Yℓm±1=mYℓm,
while the raising and lowering $\hat \sigma_{\pm}$ act on spin components of the wavefunction, resulting in:
σ^+∣↑⟩=0,σ^+∣↓⟩=∣↑⟩,σ^−∣↑⟩=∣↓⟩,σ^−∣↓⟩=0.
Note thtat the usual real spherical harmonics like $p_x$, $p_y$ $p_z$ are made up by linear combinate spherical harmonics:
px=21(Y1−1−Y11)py=2i(Y1−1+Y11)pz=Y10
For example, if we are only considering the basis of:
{∣px,↑⟩,∣py,↑⟩,∣pz,↑⟩,∣px,↓⟩,∣py,↓⟩,∣pz,↓⟩}
then we can calculate the matrix elements of $\hat{\boldsymbol{L}}_{\pm}$ by:
L^+∣px⟩L^+∣py⟩L^+∣pz⟩=L^+21(Y1−1−Y11)=21((1+1)(1−1+1)Y10−0)=Y10=∣pz⟩=i∣pz⟩=−∣px⟩−i∣py⟩
Hence, the $\hat{\boldsymbol{L}}_{\pm}$ operators can be written as:
L+=00100i−1−i0,σ+=(0010),L−=00−100i1−i0,σ−=(0100),Lz=0i0−i00000σz=(100−1).
And the SOC hamiltonian can be expressed in the matrix form:
HSO=2λ0i0001−i0000i000−1−i000−10−i000ii001−i0000
This is what’s I’ve implemented in the wanSOC package. For example, to generate the above mentioned Hamiltonian, we can:
from __future__ import print_function
import numpy as np
from wanSOC.basis import *
from wanSOC.io import *
from wanSOC.helper import *
from wanSOC.hamiltonian import *
orb = 'p'
q_axis = [0,0,1]
H_SO = gen_Hsoc(orb, q_axis)
print(H_SO)