一.通過(guò)擴(kuò)胞把其他點(diǎn)的虛頻折射到Gamma點(diǎn)
-
進(jìn)行primitive cell的計(jì)算時(shí)间护,往往會(huì)出現(xiàn)虛頻
- 一般可以對(duì)unit cell進(jìn)行擴(kuò)胞來(lái)消除虛頻(削弱周期性邊界條件的影響)盗似,或者虛頻會(huì)被折射到點(diǎn)
-
擴(kuò)胞計(jì)算聲子譜,查看點(diǎn)聲子譜
-
運(yùn)行命令
phonopy band.conf
舉個(gè)band.conf的栗子:
ATOM_NAME = Sn O2 DIM = 2 1 3 EIGNENVECTORS = .TRUE. #這個(gè)參數(shù)可以實(shí)現(xiàn)輸出虛頻的振動(dòng)本征值 BAND = 0.0 0.0 0.0 ... -0.5 0.5 0.5 # BAND_LABELS = G Z T Y S X U R
-
- 在
band.yaml
文件中可以看到,振動(dòng)對(duì)應(yīng)的實(shí)部和虛部
二.利用phonopy中的MODULATION參數(shù)來(lái)移動(dòng)出現(xiàn)虛頻的原子
比如屈尼,點(diǎn)處的原子的移動(dòng)公式為:
這里是amplitude,是phase,是超胞中的原子數(shù),是第個(gè)原子的質(zhì)量,是指定的點(diǎn),是第個(gè)unit cell中的第個(gè)原子的位置,是第個(gè)原子部分的本征矢量。
三.conf的書(shū)寫(xiě)
ATOM_Name = SnO2
DIM = 2 1 3
SYMMETRY_TOLERANCE = 1e-3
MODULATION = 1 2 1,0 0.5 0 1 a
# MODULATION參數(shù)解釋:
# 1 2 3參數(shù):為unitcell的闊胞參數(shù)1 2 1,由于在0 0.5 0 方向上有虛頻,所以在y軸方向上闊胞,,
# 4 5 6參數(shù):出現(xiàn)虛頻的q點(diǎn)
# 7 參數(shù):虛頻一般就是第一個(gè)band,所以我們這里用1
# 8 參數(shù):振幅大小
# 9 參數(shù):是弧度制的相因子斋扰,默認(rèn)為0,可以不寫(xiě)
四.所用生成腳本
#!/usr/bin/env python
# coding=utf-8
import os
import shutil
def MODULATION(delta, fileNumber):
for i in range(0, fileNumber + 1):
displace = float(i * delta)
filename = 'modulation-' + str(displace)
conf = 'modulation-' + str(displace) + '.conf'
f = open(conf, 'w')
f.write('ATOM_Name = SnO2-' + str(displace) + '\n')
# 之前用于算聲子譜的擴(kuò)胞系數(shù)
f.write('DIM = 2 1 3\n')
# 闊胞時(shí)分析對(duì)稱性的允許誤差
f.write('SYMMETRY_TOLERANCE = 1e-3\n')
# 前三個(gè)為軟膜找相變啃洋,將unitcell所闊的胞传货,由于在0 0.5 0 方向上有虛頻,所以在y軸方向上闊胞
f.write('MODULATION = 1 2 1,0 0.5 0 1 ' + str(displace))
f.close()
os.system('phonopy ' + conf)
os.system('rm MPOSCAR-001')
os.system('mv MPOSCAR POSCAR-' + str(displace))
for i in range(0, fileNumber + 1):
displace = i * delta
foldname = 'Modulation-' + str(displace)
if not os.path.exists(foldname):
os.system('mkdir ' + foldname)
for file in ['INCAR', 'POTCAR', 'POSCAR-' + str(displace)]:
shutil.copy2(file, foldname)
os.chdir(foldname)
os.rename('POSCAR-' + str(displace), 'POSCAR')
os.chdir('..')
os.system('rm modulation-*')
os.system('rm POSCAR-*')
if __name__ == '__main__':
MODULATION(delta=1.0, fileNumber=20)