3.37 Response to atomic coordinate perturbations using DFPT for Hessian and phonon calculations

This code has recently been reorganised by Connor Box, the original DFPT implementation in FHI-aims was written by Honghui Shang and coworkers at FHI. Please contact carbogno@fhi-berlin.mpg.de for any questions related to the response of atomic perturbations using DFPT in FHI-aims.

The user is warned that this driver routine is not well maintained and may not work as expected. Please contact the developers for further information.

Any interested user is directed to the main reference for this implementation:

  1. 1.

    Lattice dynamics calculations based on density-functional perturbation theory in real space
    Honghui Shang, Christian Carbogno, Patrick Rinke, Matthias Scheffler
    Comp. Phys. Comm., 215, 26 (2017)

Lattice Dynamics

In order to get vibration/phonon frequencies, first we need to get dynamical matrix, Let’s define a lattice vector 𝐑Im as

𝐑Im=𝐑I+𝐑m, (3.133)

whereby 𝐑m denotes an arbitrary linear combination of 𝐚1, 𝐚2, and 𝐚3. And the dynamical matrix DIJ(𝐪) is a Fourier transform of harmonic Hessian matrix (Force constant) ΦIm,Jharm.

DIJ(𝐪) =1MIMJmΦIm,Jharmexp(i𝐪𝐑𝐦)
=1MIMJmd2EKSd𝐑Imd𝐑Jexp(i𝐪𝐑𝐦) (3.134)

Since the finite (3N×3N) dynamical matrix 𝐃(𝐪) would in principle have to be determined for an infinite number of 𝐪-points in the Brillouin zone. Its diagonalization would produce a set of 3N 𝐪-dependent eigenfrequencies ωλ(𝐪) and -vectors 𝐞λ(𝐪).

In order to derive the second order derivatives for total energy analytically (which is the key idea for the DFPT approach), the ground state total energy and force is derived first and we could get this second order derivatives directly. It is should be noted that, here real-space DFPT method is used, so that we could get the real-space force constant directly.

In FHI-aims, the total energy is calculated by using band-energy, a derivation for cluster systems is a following, and the extending to extended systems is straightforward.

EKS=12i<ϕi|2|ϕi>n(𝐫)IZI|𝐫𝐑I|d𝐫+
12n(𝐫)n(𝐫)|𝐫𝐫|𝑑𝐫𝑑𝐫+12IJIZIZJ|𝐑I𝐑J|+Exc(n) (3.135)

using

hks^=122IZI|𝐫𝐑I|+n(𝐫)|𝐫𝐫|𝑑𝐫+vxc(𝐫)

we have

=i<ϕi|hks^|ϕi>[n(𝐫)vxc(𝐫)]𝑑𝐫+Exc(n)
12n(𝐫)n(𝐫)|𝐫𝐫|𝑑𝐫𝑑𝐫+12IJIZIZJ|𝐮I𝐮I| (3.136)
=ifiϵi[n(𝐫)vxc(𝐫)]𝑑𝐫+Exc(n)
12n𝐫)n(𝐫)|𝐫𝐫|𝑑𝐫𝑑𝐫+12IJIZIZJ|𝐑I𝐑I| (3.137)
=ifiϵi[n(𝐫)vxc(𝐫)]𝑑𝐫+Exc(n)
12n(𝐫)n(𝐫)|𝐫𝐫|𝑑𝐫𝑑𝐫+12n(𝐫)IZI|𝐫𝐑I|d𝐫
+12IJIZIZJ|𝐑I𝐑J|12n(𝐫)IZI|𝐫𝐑I|d𝐫 (3.138)
=ifiϵi[n(𝐫)vxc(𝐫)]𝑑𝐫+Exc(n)
12n(𝐫)[IVIfree(|𝐫𝐑I|)+δVI(|𝐫𝐑I|)]𝑑𝐫
12IZI[JVJfree(|𝐑J𝐑I|)+JIδVJ(|𝐑J𝐑I|)] (3.139)
=ifiϵi[n(𝐫)vxc(𝐫)]𝑑𝐫+Exc(n)
12n(𝐫)[IVIes,tot(|𝐫𝐑I|)]𝑑𝐫
12IZI[VIes,tot(0)+JIVJes,tot(|𝐑J𝐑I|)] (3.140)

Here Eq.(3.140) is exactly the one to calculate Kohn-Sham total energy. An extension expression to extended system is in Eq.3.141

Etot=1Nkiucf𝐤iϵ𝐤iuc[n(𝐫)vxc(𝐫)]𝑑𝐫+Exc(n) (3.141)
12ucn(𝐫)[I,mVIes,tot(|𝐫𝐑I,m|)]𝑑𝐫
12IZI[VIes,tot(0)+(J,m)(I,0)VJes,tot(|𝐑Jm𝐑I|)]

Then we get the analytical force expression for cluster systems:

FI=dEKSd𝐑I=𝐅IHF+𝐅IP+𝐅IM
[(n(𝐫)IZI|𝐫𝐑I|d𝐫)𝐑I+(12IJIZIZJ|𝐑I𝐑J|)𝐑I]
μν[Pμν(χμ𝐑Ih^ksχν+χμh^ksχν𝐑I)𝑑𝐫WμνSμν𝐑I]
[n(𝐫)nMP(𝐫)]VMP(𝐫)𝐑I𝑑𝐫 (3.142)

Here Pμν refers to density matrix and Wμν refers to energy density matrix. Here the first term is Hellmann-Feynman force using Hellmann-Feynman theorem ; The second term is Pulay term, it comes from basis set dependence of atomic coordinate; The third term is multipole force, it count the contribution from multipole expansion error for Hartree energy calculation (multipole Poisson solver).

Under periodic boundary conditions, we get the following expression for force for extended systems:

𝐅JHF=ZJ[VJes,tot(0)𝐑J+(I,m)(J,0)(VIes,tot(|𝐑J𝐑Im)|𝐑J)] (3.143)
𝐅JP=2Nk𝐤,i,μ,νfi𝐤Cμi𝐤φμ𝐤(𝐫)𝐑J(h^ksϵi𝐤)Cνi𝐤φν𝐤(𝐫)𝑑𝐫, (3.144)

In our real-space DFPT method, this harmonic Hessian matrix is calculated directly, as explained in our paper. The Hessian can be split into two part

EKS(2)=d2EKSd𝐑Id𝐑J=ΦI,JHF+ΦI,JP+ΦI,JMP (3.145)
=[2(n(𝐫)IZI|𝐫𝐑I|d𝐫)𝐑I𝐮J+2(12IJIZIZJ|𝐑I𝐑J|)𝐑I𝐑J]
+μνPμν𝐑J(χμ𝐑Ih^ksχν+χμh^ksχν𝐑I)𝑑𝐫
+μνPμν[2χμ𝐑I𝐑Jh^ksχν+χμ𝐑Ih^ks𝐑Jχν+χμ𝐑Ih^ksχν𝐑J]𝑑𝐫
+μνPμν[χμ𝐑Jh^ksχν𝐑I+χμh^ks𝐑Jχν𝐑I+χνh^ks2χν𝐑I𝐑J]𝑑𝐫
(μνEμν𝐑JSμν𝐑I+μνEμν2Sμν𝐑I𝐑J)
+[n(𝐫)nMP(𝐫)]𝐑IVMP(𝐫)𝐑J𝑑𝐫
+[n(r)nMP(r)]2VMP(r)𝐑I𝐑J𝑑𝐫

It can also be divided into three part: Hellmann-Feynman Hessian, Pulay Hessian, Multipole Hessian. In real calculation, we drop multipole Hessian due to its value is only 103 times small compared with the other two.

Under periodic boundary conditions, we get the following expression for force constants:

ΦIs,Jharm=d2𝐄KSd𝐑Isd𝐑J=d𝐅Jd𝐑Is=d𝐅Isd𝐑J=ΦIs,JHF+ΦIs,JP. (3.146)
ΦIs,JHF = ZJ(dd𝐑JVJes(0)𝐑J)δIs,J0
ZJ(dd𝐑JVIes,tot(|𝐑J𝐑Is)|𝐑Is)(1δIs,J0),

in which δIs,J0=δIJδs0 denotes a multi-index Kronecker delta.

For the sake of readability, its total derivative is split into four terms:

ΦIs,JP=ΦIs,JPP+ΦIs,JPH+ΦIs,JPW+ΦIs,JPS. (3.148)

The first term

ΦIs,JPP=2μm,νn(dPμm,νnd𝐑J)χμm(𝐫)𝐑Ish^ksχνn(𝐫)𝑑𝐫 (3.149)

accounts for the response of the density matrix Pμm,νnm,n. The second term

ΦIs,JPH = 2μm,νnPμm,νn (3.153)
(2χμm(𝐫)𝐑Is𝐑Jh^ksχνn(𝐫)d𝐫
+χμm(𝐫)𝐑Isdh^ksd𝐑Jχνn(𝐫)𝑑𝐫
+χμm(𝐫)𝐑Ish^ksχνn(𝐫)𝐑Jd𝐫)

accounts for the response of the Hamiltonian h^ks(𝐤), while the third and fourth term

ΦIs,JPW = 2μm,νndWμm,νnd𝐑Jχμm(𝐫)𝐑Isχνn(𝐫)𝑑𝐫 (3.154)
ΦIs,JPS = 2μm,νnWμm,νn𝐑Jχμm(𝐫)𝐑Isχνn(𝐫)𝑑𝐫 (3.155)

for the response of the energy weighted density matrix Wμm,νn and the overlap matrix Sμm,νn, respectively, Please note that in all four contributions many terms vanish due to the fact that the localized atomic orbitals χμm(𝐫) are associated with one specific atom/periodic image 𝐑J(μ)m, which implies, e.g.,

χμm(𝐫)𝐑Is=χμm(𝐫)𝐑IsδJ(μ)m,Is. (3.156)

In the above force constants, it is clear that the first order density matrix Pμν𝐑J and the first order energy density matrix Wμν𝐑J are needed. These first order qualtities are obtained in the DFPT cycle. The flowchart of our DFPT cycle for lattice dynamics is shown in Fig.3.8.

Refer to caption
Figure 3.8: Flowchart of DFPT cycle for atomic perturbation response

The atomic perturbation response calculation is triggered by setting the atomic_pert_response keyword to DFPT in the control.in file. The atomic_pert_serial keyword can be used to determine whether the CPSCF cycle is carried out for each atomic coordinate in serial, or for all atomic coordinates at the same time (i.e 3N CPSCF cycles or 1 longer CPSCF cycle).

Tags for general section of control.in

 

Tag: atomic_pert_response(control.in)

Usage: atomic_pert_response type
Purpose:
type specifies the method to calculate response to atomic coordinate perturbations and triggers such a calculation.
Currently, only DFPT is a valid option.
Default: DFPT.

Hessian/Dynamical matrix part of the calculation is only calculated at the LDA level.
For periodic systems, only 𝐪=0 peturbations are supported.

 

Tag: atomic_pert_serial(control.in)

Usage: atomic_pert_serial boolean
Purpose:
Determines whether the DFPT cycle is carried out for each atomic coordinate in serial, or for all atomic coordinates at the same time. Not much difference between the two. Generally no need to alter this.
Default: .true..