高对称点的确定
在第一性原理计算中,对于我们常见的能带图,是以波矢k为变量,求本征值。在倒空间中,沿着高对称点之间的连线所对应的波矢,求对应的本征值,连在一起,即为能带。问题是,我们如何找到这些高对称点。
这里介绍一篇文献,以及ASE中提供的方法,给出高对称点。
1. 文献
文中提供了不同晶系下的高对称点坐标、符号、路径,如下图Cubic晶系的例子。
2. ASE 代码
from ase import io, Atoms
from ase.cell import Cell
atoms = io.read('POSCAR')
structure=atoms.cell
kps=structure.bandpath(eps=0.01)
print(kps.special_points)
显示结果:
{'G': array([0., 0., 0.]), 'A': array([0. , 0. , 0.5]), 'H': array([-0.33333333, -0.33333333, 0.5 ]), 'K': array([-0.33333333, -0.33333333, 0. ]), 'L': array([-0.5, 0. , 0.5]), 'M': array([-0.5, 0. , 0. ])}
使用方法
我们只要提供POSCAR,就可以得到对应的高对称点,这里有几点注意:
eps=0.01 是对称性精度,这个值不要太小(越小精度越高),不然会误判对称性。
对于二维材料,我们只取z坐标为0 的就可以,这个例子是一个六角晶格的二维材料,所以,我们只取GMKG就可以。
seekpath
也可以给出高对称点,我潜伏的微信群里,大家都推荐这个,但是我试了,如果用默认的参数,也是会判断出错,也需要降低精度(如果seekpath可以的话),对比下来,我觉得ASE
更好,毕竟它还有其他高大上的功能。
我刚接触这个ASE这库,若理解有误,或有更好的方法,还请读者大佬留言指正,感谢支持 ^_^