一.通過擴胞把其他點的虛頻折射到Gamma點
-
進行primitive cell的計算時,往往會出現(xiàn)虛頻
- 一般可以對unit cell進行擴胞來消除虛頻(削弱周期性邊界條件的影響),或者虛頻會被折射到
點
- 一般可以對unit cell進行擴胞來消除虛頻(削弱周期性邊界條件的影響),或者虛頻會被折射到
-
擴胞計算聲子譜,查看
點聲子譜
-
運行命令
phonopy band.conf舉個band.conf的栗子:
ATOM_NAME = Sn O2 DIM = 2 1 3 EIGNENVECTORS = .TRUE. #這個參數(shù)可以實現(xiàn)輸出虛頻的振動本征值 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文件中可以看到,振動對應(yīng)的實部和虛部
實部和虛部
二.利用phonopy中的MODULATION參數(shù)來移動出現(xiàn)虛頻的原子
比如,點處的原子的移動公式為:
這里是amplitude,
是phase,
是超胞中的原子數(shù),
是第
個原子的質(zhì)量,
是指定的
點,
是第
個unit cell中的第
個原子的位置,
是第
個原子部分的本征矢量。
三.conf的書寫
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點
# 7 參數(shù):虛頻一般就是第一個band,所以我們這里用1
# 8 參數(shù):振幅大小
# 9 參數(shù):是弧度制的相因子,默認為0,可以不寫
四.所用生成腳本
#!/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')
# 之前用于算聲子譜的擴胞系數(shù)
f.write('DIM = 2 1 3\n')
# 闊胞時分析對稱性的允許誤差
f.write('SYMMETRY_TOLERANCE = 1e-3\n')
# 前三個為軟膜找相變,將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)
