首先介绍什么是wannier函数,wannier函数就是另外一种完备基矢,它是由计算出来的Bloch函数通过傅里叶变换得到的。
根据Bloch定理,电子波函数可以写成如下形式
但是使用平面波作为基底往往导致Hamitonian维度非常大,当K点个数增加的时候,计算量就变得非常大,于是人们想要构造更加接近原子轨道的基底,于是对得到的Bloch函数做傅里叶变换,人们就得到了在实空间局域的wannier函数。
它也是正交的,但是正如综述文章提到的那样,它并不是哈密顿量的本征矢,但是它依然包含了我们想要的所有信息。首先从wannier基矢表达出来的波函数求电荷密度与我们用布洛赫函数求出来是一样的。其次,对于所有的单粒子算符,得到的期望值也是一样的。
在物理上人们用的不多,反而是化学领域大家对它比较感兴趣,因为它可以比较清晰地反映化学反应中化学键的变化。一个重要的改变是Marzari和Vanderbilt在1997年的一篇文章通过“最大局域化”来作为评判一个wannier基底的标准。因为wannier函数基底的选取具有相当大的任意性。
非常有趣的是,波函数的点和中心和布洛赫函数的Berry相位有着很大的联系,这个联系可以从极化的modern theory中找到。所以凝聚态领域也开始关注wannier函数。
我们想要寻找最大局域化的wannier函数还是要从bloch函数入手,根据往常的经验,倒空间越是非局域化的东西在实空间就越局域化。所以我们可以通过寻找使得Bloch函数更平滑的幺正变换来获得局域化的wannier函数。
Marzari和Vanderbilt在1997年那篇文章里边提到了他们想法来源于一篇更早的来自于1964年的一篇des Cloizeaux的文章。从一堆尝试局域化轨道开始,投影到波矢k对应的Bloch流形上,这样可以得到相对平滑的布洛赫函数,虽然不正交。
Marzari和Vanderbilt的方法
首先引入一个局域泛函
Wannier 手册
拟合能带QE版
这里以YH10为例
首先进行一遍自洽计算
&control
calculation = 'scf',
prefix = 'ts',
pseudo_dir = '../pp/',
outdir = './',
restart_mode = 'from_scratch',
tstress = .true.,
tprnfor = .true.,
/
&system
ibrav = 0,
! celldm(1) = 6.571860421,
! celldm(3) = 5.750964669,
nat = 3,
ntyp = 2,
ecutwfc = 100,
occupations = 'smearing',
smearing = 'mp',
degauss = 0.05,
nbnd = 24,
! la2F = .true.,
/
&electrons
conv_thr = 1.0d-10,
mixing_beta = 0.7,
diagonalization='cg'
/
ATOMIC_SPECIES
Ti 47.867 Ti.pz-n-nc.UPF
Se 78.96 Se.pz-n-nc.UPF
CELL_PARAMETERS {Angstrom}
3.477678751 0.000000000 0.000000000
-1.738839375 3.011758144 0.000000000
0.000000000 0.000000000 20.000007627
ATOMIC_POSITIONS (crystal)
Ti -0.000000025 -0.000000047 0.500000061
Se 0.333333340 0.666666714 0.578908387
Se 0.666666675 0.333333328 0.421091561
K_POINTS {automatic}
8 8 1 0 0 0
这里需要注意的是需要把ibrav指定的晶格结构转换成晶格坐标基矢CELL_PARAMETERS {Angstrom} 注意单位是埃,因为QE默认的是a.u. 如果跟后边的wannier不一样,算出来的结果自然就有问题。
然后是第二步,做一遍非自洽计算。