Posts Light-Matter Interaction and Dipole Transition Matrix
Post
Cancel

Light-Matter Interaction and Dipole Transition Matrix

Quantum theory of light-matter interaction

Let us consider an atom in the presence of an external classical electromagnetic fields, the gauge invariant Schrödinger equation writes 1

(1)iψ(r,t)t=H^ψ(r,t)

where the gauge invariant Hamiltonian

H^=12m(pecA)2+eφ(r)+V^(r)(2)=p22m+V^(r)e2mc[pA+Ap]+e22mc2A2+eφ(r)

A and φ are magnetic vector potential and electric scalar potential, recpetively. They are related to the electric and magnetic field by the following equations 2

(3)E=φ1ctA(4)B=×A

The form of Eq.(1) is invariant under the gauge transformation

(5)A=A+λ(r,t)(6)φ=φ1cλ(r,t)t(7)ψ(r,t)=exp[iecλ(r,t)]ψ(r,t)

i.e.

(8)iψ(r,t)t=[12m(pecA)2+eφ+V^(r)]ψ(r,t)

Electric Dipole Approximation

Generally, the wavelength of the electromagnetic field is much larger than the typical size of an atom/molecule, i.e. 2π/k=λa or ka1 (a is the typical atomic orbital size), we can thus assume that the vector potential is practically position independent for an atom/molecule, i.e.

(9)A(r,t)A(t)

The approximation is referred to as the electric dipole approximation (EDA). 3

More specifically, for a monochromatic field of plane wave

(10)A(r,t)=2A0cos(krωt)

Under the EDA, we can thus take eikr1 with kr1, and as a result the vector potential does not depend on position.

(11)A(t)=A0[eiωt+eiωt]

Coulomb Gauge

The Coulomb gauge (also known as the transverse gauge) is defined by the gauge condition

(12)AC(r,t)=0

where “C” in the subscript is used to indicate the gauge. Moreover, if there is no current in the space, then we also have

(13)φC(r)=0

Generally, the operator p and A do not commute,

(14)pAAp=j[p^jAjAjp^j]=j[p^j,Aj]=ijjAj=iA

Note the difference between pA and iA in the above equation, where the former means two operators applying consecutively on the wavefunction and the latter is just the gradient of A, i.e. the nabla operator applies on A.

Apparently, under the Coulomb gauge, the two operators commute, i.e.

(15)pAC=ACp

Subsituting the Coulomb gauge condition into Eq.(10), one has

kA0=0

i.e. the field propagation direction k is perpendicular to the field vibration direction A0, hence the name transverse gauge.

Length Gauge

Starting with the Coulomb gauge and electric dipole approximation (vector potential is position independent and only depends on time), and by choosing λ(r,t) in the gauge transformation Eq.(5), Eq.(6) and Eq.(7) as

(16)λL(r,t)=rAC(t)

One has the two potentials in length gauge (LG)

(17)AL=AC(t)+λL(r,t)=0(18)φL=φC1cλL(r,t)t=rE(t)

where E(t)=c1tAC(t) and we have used “C” and “L” in the subscripts to indicate the Coulomb and length gauge, respectively.

Substituting Eq.(17) and Eq.(18) into Eq.(2), one obtains the Hamiltonian in length gauge

(19)H^L=H^0+H^L(20)H^0=p22m+V^(r)(21)H^L=erE(t)

where H^I is the light-matter interaction in the length gauge.

Velocity Gauge

Again, we start with the Coulomb gauge and EDA. However, this time we choose λ as

(22)λV(t)=e2mctAC2(τ)dτ

This leads to the two potentials in velocity gauge (VG)

(23)AV=AC(t)+λV(t)=AC(24)φV=φC1cλV(r,t)t=e22mc2AC(t)

Substituting Eq.(23) and Eq.(24) into Eq.(2), one obtains the Hamiltonian in the velocity gauge

(25)H^L=H^0+H^V(26)H^V=emcAp

with H^V being the light-matter interaction in the velocity gauge.

Dipole and Momentum Transition Matrix

According to Fermi’s golden rule 4, the transition rate between two states, in the length gauge, is given by

(27)Pij=2π|ψi|H^L|ψj|2δ(EiEj±ω)|ψi|er|ψj|2

where the matrix element of er is usually referred to as the dipole matrix element or transition dipole moment (TDM).

(28)Tij=eψi|r|ψj

Or in the velocity gauge

(29)Pij=2π|ψi|H^V|ψj|2δ(EiEj±ω)|ψi|p|ψj|2

If the molecular orbitals are eigenfunctions of some Hamiltonian H^0, i.e.

(30)H^0ψj(r)=[p22m+V^(r)]ψj(r)=εjψj(r)

Then one can utilize the commutator relation

(31)[r,H^0]=iH^0p=ipm(32)ψi|[r,H^0]|ψj=(εjεi)Tij=imψi|p|ψj

which lead to

(33)Tij=eψi|r|ψj=iem(εjεi)ψi|p|ψj

We will shorten the above relation between the momentum matrix element and the transition dipole moment as the “p-r” relation.

Transition between Molecular Orbitals

The transition dipole moment between two molecular orbitals

(34)Tij=eψi|r|ψj=eψi(r)rψj(r)dr(35)=e(ψi(r)xψj(r)drψi(r)yψj(r)drψi(r)zψj(r)dr)

where ψ(r) can generally be expanded, within a certain accuracy, with a finite set of spherical harmonics (multipole expansion), i.e. 5

(36)ψ(r)=l=0Lm=llRl(r)Yl,m(r^)

Both real and complex spherical harmonics can be used in the expansion, however, since the molecular orbitals can be real functions, real spherical harmonics are usually used in calculations to save memory and improve the speed. For simplicity, we will just focus on the case where there is only one term in the expansion, i.e.

(37)ψ(r)=Rl(r)Yl,m(r^)

Recall that the real spherical harmonics Ylm of quantum number l=1 are defined as 6

Y1,1=i12(Y11+Y11)=34πyrY1,0=Y10=34πzrY1,1=12(Y11+Y11)=34πxr

or equivalently

(38)x=4π3rY1,1;y=4π3rY1,1;z=4π3rY1,0

Substituting Eq.(38) and Eq.(37) into Eq.(35), one have

(39)Tij=e[0Rl1(r)Rl2(r)r3dr]4π3(G(l1,l2,1,m1,m2,1)G(l1,l2,1,m1,m2,1)G(l1,l2,1,m1,m2,0))

where G(l1,l2,l3,m1,m2,m3) is the real Gaunt coefficients defined as

(40)G(l1,l2,l3,m1,m2,m3)=0πsinθdθ02πdϕYl1,m1(r^)Yl2,m2(r^)Yl3,m3(r^)

and can be evaluated analytically. 7 Note that r3 rather than r2 is used in the radial integration, where the extra r is introduced by Eq.(38). Eq.(39) shows that the TDM between molecular orbitals can be written as a radial integration term multiplied by an analytical angular term.

TDM from p-r relation

The matrix element of the momentum operator can be easily evaluated in the momentum space, i.e.

(41)ψi|p|ψj=ψi|kkk|ψjdk(42)=(ψi(k)kxψj(k)dkψi(k)kyψj(k)dkψi(k)kzψj(k)dk)

where the wavefunction in momentum space can be written as

(43)ψ(k)=k|ψ=ilGl(k)Yl,m(k^)

with Gl(k) being the spherical Bessel transform (SBT) of the radial function Rl(r)

(44)Gl(k)=2π0Rl(r)jl(kr)r2dr

Combining Eq.(43), Eq.(44) and Eq.(33), one have the TDM evaluated in momentum space

Tij=il2l1+12em(εjεi)[0Gl1(k)Gl2(k)k3dk](45)×4π3(G(l1,l2,1,m1,m2,1)G(l1,l2,1,m1,m2,1)G(l1,l2,1,m1,m2,0))

Again, the TDM from momentum space evaluation can be written as a radial integration over k, multiplied by the same analytical angular term as in Eq.(39).

Selection Rules

  • If real molecular orbitals are used, the TDM should also be real vectors. To ensure this, one require that l2l1+1=2n, where nN in Eq.(45).

  • The properties of the real Gaunt coefficients require that l1+l2+1=2n, where nN. 8

  • The spherical harmonics have definite parity, i.e. they are either even or odd with respect to inversion about the origin 9

    Yl,m(r^)=(1)lYl,m(r^)

    Moreover, r is an odd function. To make sure that TDM is non-zero, one require that the l1+l2 is ODD so that the integration is not zero.

    If complex spherical harmonics are used, then in this case

    (46)x=2π3r[Y11+Y11];y=2π3ri[Y11+Y11];z=4π3rY10

    The Gaunt coefficients defined by complex spherical harmonics are only non-zero for m1+m2+m3=0. 10 Therefore, the TDM is only non-zero for

    (47)Δm=m1m2=0 or ±1

TDM between hydrogen orbitals

Below, we use hydrogen orbital, which can be obtained analytically, as a simple example calculate the TDM and verify the equivalence of the two method. We choose the initial orbital as hydrogen 1s and the final state being hydrogen 2px orbitals.

The script follows, where atomics units are used

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python

import numpy as np
from sympy import lambdify
from sympy.abc import r
from sympy.physics.hydrogen import R_nl, E_nl

from pysbt import sbt, GauntTable

# All the quantities are in atomic units, i.e.
# Hartree for energy and Bohr for length.
# hbar = 1; m = 1
N    = 512
rmin = 2.0 / 1024 / 32
rmax = 30
# Logarithmic radial grid
rr   = np.logspace(np.log10(rmin), np.log10(rmax), N, endpoint=True)
# init spherical Bessel transform
ss   = sbt(rr)

n1 = 1; l1 = 0; m1 = 0 # 1s
n2 = 2; l2 = 1; m2 = 1 # 2px

R1 = lambdify((r), R_nl(n1, l1, r), 'numpy')(rr)
R2 = lambdify((r), R_nl(n2, l2, r), 'numpy')(rr)

G1 = ss.run(R1, l=l1, norm=True)
G2 = ss.run(R2, l=l2, norm=True)

# energy difference between the two states
dE = E_nl(n2) - E_nl(n1)

# Radial integration over r and k
Tr = np.sum(R1 * R2 * ss.rr**3 * ss.simp_wht_rr)
Tp = np.sum(G1 * G2 * ss.kk**3 * ss.simp_wht_kk)

print(f'R-space radial integration: Tr = {Tr:8.6f}')
print(f'K-space radial integration: Tp = {Tp:8.6f}')
print(f'Tp / dE = {Tp / dE:8.6f}')

Ta  = np.sqrt(4*np.pi / 3) * np.array([
    GauntTable(l1, l2, 1, m1, m2, m) for m in [1, -1, 0]
])
Tij =  Tr * Ta
print(f'Angular term: Ta = ({Ta[0]:8.6f}, {Ta[1]:8.6f}, {Ta[2]:8.6f})')
print(f'   Tij = Ta * Tr = ({Tij[0]:8.6f}, {Tij[1]:8.6f}, {Tij[2]:8.6f})')

From the outputs, one can see that transition dipole moment from the two methods are indeed identical.

1
2
3
4
5
R-space radial integration: Tr = 1.290266
K-space radial integration: Tp = 0.483850
Tp / dE = 1.290266
Angular term: Ta = (0.577350, 0.000000, 0.000000)
   Tij = Ta * Tr = (0.744936, 0.000000, 0.000000)

TDM between Bloch states

For crystals, the wavefunctions take the form of a Bloch wave

(48)|ψnk=eikr|unk

For finite crystals with periodic boundary condition (PBC), the matrix elements of the momentum operator is related to the gradient-k operator by 11

(49)ψnk|p|ψmk=im(εnkεmk)unk|ik|umk

Moreover, there’s no simple p-r relation between momentum and position operator matrix elements.

(50)ψnk|r|ψmkunk|ik|umk

We will focus on the matrix elements of the momentum opeartor in the Bloch waves. Within the PAW formalism, the momentum opeartor matrix element is given by

(51)ψck|p|ψvk=uc,k|ki|uv,kuc,k|ki|uv,k=u~c,k|ki|u~v,kinmu~c,k|p~n,kp~m,k|u~v,k(52)×[ϕn|r|ϕmϕ~n|r|ϕ~m]

where p~nk is the k-dependent projector function as defined in a previous post, ϕ and ϕ~ are the PAW AE and PS partial waves.

Note that the imaginary part of the dielectric function in the longitudinal expression is given by 12

ϵαβ(ω)=4π2e2Ωlimq01q2c,v,k2wkδ(εc,kεv,kω)(53)×uc,k+qeα|uv,kuc,k|uv,k+qeβ

and in the transversal expression by 12

ϵαβ(ω)=4π2e24Ωω2me2limq0c,v,k2wkδ(εc,k+qεv,kω)(54)×uc,k|iαkα|uv,kuc,k|iβkβ|uv,k

In principle, both longitudinal and transversal expression yield almost exactly indetical results in the limit of a complete PAW one-center basis. However, this limit is in practice not always reached, and hence the longitudinal expression should be preferred over the simpler transversal expression.

Matrix element of nabla operator — pseudo-wavefunction

The matrix elements of the nabla operator can be readily evaluated in reciprocal space

(55)uc,k|ki|uv,k=Gcc,k(G)[k+G]cv,k(G)

where c(G) is the plane-wave coefficients for unk(r).

Matrix element of nabla operator — one-center contribution

(56)τnm=ϕn|r|ϕmϕ~n|r|ϕ~m

Recall that AE/PS partial waves consist of a radial part and an angular part, 13

(57)ϕn(r)=Un,l(r)Yl,m(r^)(58)ϕ~n(r)=U~n,l(r)Yl,m(r^)

and their Fourier transform

(59)ϕn(k)=ilGn,l(k)Yl,m(k^)(60)ϕ~n(k)=ilG~n,l(k)Yl,m(k^)

where Gn,l(k) is the spherical Bessel transform of Un,l(r). 14

The matrix element of the nabla operator can be evaluated by either real-space or momentum-space integration.

Real-space integration

ϕn|r|ϕm=ϕn(r)rϕm(r)dr=Un,l(r)Yl,m(r^)r[Un,l(r)rlrlYl,m(r^)]r2drdΩ=Un,l(r)rl+2r[Un,l(r)rl]Yl,m(r^)Yl,m(r^)erdrdΩ(61)+Un,l(r)Un,l(r)r2lYl,m(r^)r[rlYl,m(r^)]drdΩ
  • For the first term in the last line of Eq.(61), remember that

    (62)er=(xr,yr,zr)

    which can be written as real spherical harmonics with l=1, i.e.

    (63)er=4π3(Y1,1(r^),Y1,1(r^),Y1,0(r^))

    As a result, the first term reduces to

    (64)4π30Un,l(r)rl+2r[Un,l(r)rl]dr×(G(l,l,1,m,m,1)G(l,l,1,m,m,1)G(l,l,1,m,m,0))
  • For the second term in Eq.(61), one can show that 6

    (65)r[rlYl,m(r^)]=rl1m=1ll1cmYl1,m(r^)

    Therefore, the second term reduces to

    (66)0Un,l(r)Un,l(r)rdr×Yl,m(r^)r1lr[rlYl,m(r^)]dΩ

    The integration with respect to the angle can be performed using GPAW. 15

Note that in VASP, rU(r)=R(r) instead of U(r) for partial waves are stored in POTCAR. By taking this into account and combine Eq.(64) and Eq.(66), one have

ϕn|r|ϕm=4π30[Rn,lRn,lr(l+1)Rn,lRn,lr]dr×(G(l,l,1,m,m,1)G(l,l,1,m,m,1)G(l,l,1,m,m,0))(67)+0Rn,lRn,lrdr×Yl,m(r^)r1lr[rlYl,m(r^)]dΩ

All the terms with spherical harmonics in Eq.(67) can be obtained analytically.

The subroutine NABLA_RADIAL in VASP source file optics.F calculates τnm by real space integration. The results are stored in NABLA of a potcar type. VASP version 5.x caluclate the matrix element up to lmax = 2 while version 6.x increases lmax to 3.

Since the AE/PS partial waves are not necessarily zero at r=rmax, the matrix element of nabla operator is asymmetric with respect to AE and PS partial waves. However, the difference of the two is symmetric.

One can add the following code to main.F of VASP source and perform a recompile. Afterwards, VASP can outputs τnm to file “nabla_X”, where X is the name of the elements.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 IF (IO%LOPTICS) CALL SET_NABIJ_AUG(P,T_INFO%NTYP)
 ! Add the code after the previous line
 io_begin
 do nt = 1, T_INFO%NTYP
   open(unit=124, file='nabla_' // trim(P(NT)%ELEMENT), status='unknown', action='write')
   do i = 1, 3
     do j = 1, P(NT)%LMMAX
       write(124, fmt=*) (P(NT)%NABLA(i,j,n), n=1, P(NT)%LMMAX)
     end do
     write(124,*) 
   end do
   close(unit=124)
 end do
 io_end

Momentum-space integration

Similar to the evaluaton of Eq.(45)

ϕn|r|ϕm=il2l1+10Gn,l1(k)Gm,l2(k)k3dk(68)×4π3(G(l1,l2,1,m1,m2,1)G(l1,l2,1,m1,m2,1)G(l1,l2,1,m1,m2,0))

Therefore

τnm=ϕn|r|ϕmϕ~n|r|ϕ~m=il2l1+10[Gn,l1(k)Gm,l2(k)G~n,l1(k)G~m,l2(k)]k3dk(69)×4π3(G(l1,l2,1,m1,m2,1)G(l1,l2,1,m1,m2,1)G(l1,l2,1,m1,m2,0))

The matrix element of the nabla operator from real/momentum space integration is implemented in the VaspBandUnfolding package.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python

from paw import pawpotcar

pp    = pawpotcar(potfile='pot.C')
# evaluate tau_nm in real-space, False for momentum-space evaluation
nij   = pp.get_nablaij(lreal=True)
xyz   = 'xyz'

for ii in range(3):
    head = ' '.join(
        [f'({n}, {l},{m:2d})'.rjust(10) for n, l, m in pp.ilm]
    )
    print(f'tau_nm({xyz[ii]})'.center(10) + head)
    for jj in range(pp.lmmax):
        n, l, m = pp.ilm[jj]
        c1 = f'({n}, {l},{m:2d})'.center(10)
        line = ' '.join([
            f'{x:10.6f}' for x in nij[ii,jj,:]
        ])
        print(c1 + line)
    print()

The outputs of the script are shown below, where the numbers in the patentheses of the first column and first line of each section correspond to (n, l, m) for AE/PS partial waves.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
tau_nm(x)  (0, 0, 0)  (1, 0, 0)  (2, 1,-1)  (2, 1, 0)  (2, 1, 1)  (3, 1,-1)  (3, 1, 0)  (3, 1, 1)
(0, 0, 0)   0.000000   0.000000  -0.000000  -0.000000  -0.417279  -0.000000  -0.000000   0.941495
(1, 0, 0)   0.000000   0.000000  -0.000000  -0.000000  -0.557957  -0.000000  -0.000000   1.261615
(2, 1,-1)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(2, 1, 0)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(2, 1, 1)   0.417279   0.557957   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(3, 1,-1)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(3, 1, 0)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(3, 1, 1)  -0.941495  -1.261615   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000

tau_nm(y)  (0, 0, 0)  (1, 0, 0)  (2, 1,-1)  (2, 1, 0)  (2, 1, 1)  (3, 1,-1)  (3, 1, 0)  (3, 1, 1)
(0, 0, 0)   0.000000   0.000000  -0.417279  -0.000000  -0.000000   0.941495  -0.000000  -0.000000
(1, 0, 0)   0.000000   0.000000  -0.557957  -0.000000  -0.000000   1.261615  -0.000000  -0.000000
(2, 1,-1)   0.417279   0.557957   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(2, 1, 0)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(2, 1, 1)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(3, 1,-1)  -0.941495  -1.261615   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(3, 1, 0)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(3, 1, 1)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000

tau_nm(z)  (0, 0, 0)  (1, 0, 0)  (2, 1,-1)  (2, 1, 0)  (2, 1, 1)  (3, 1,-1)  (3, 1, 0)  (3, 1, 1)
(0, 0, 0)   0.000000   0.000000  -0.000000  -0.417279  -0.000000  -0.000000   0.941495  -0.000000
(1, 0, 0)   0.000000   0.000000  -0.000000  -0.557957  -0.000000  -0.000000   1.261615  -0.000000
(2, 1,-1)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(2, 1, 0)   0.417279   0.557957   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(2, 1, 1)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(3, 1,-1)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(3, 1, 0)  -0.941495  -1.261615   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
(3, 1, 1)   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000

Reference

This post is licensed under CC BY 4.0 by the author.