本文转载于微信公众号,VASP学习交流,将会持续更新
今天这里讲的是常规计算使用的五行式的KPOINTS,一般计算要在第一布里渊区均匀撒点,能带计算在高对称点连线路径上取值,能带计算的以后再说。
五行式KPOINTS
-
K-POINTS
0
Gamma
1 1 10 0 0
解释
-
第一行随便写都行,不识别,但是一定不能什么都不写
-
第二行是数字0,表示格子自动生成,很多人会误写成氧符号o,
-
第三行G表示的是以gamma点为中心生成网格,还有一种是原始的Monkhorst-Pack网格,又可以叫M点,二者的区别是M在G的基础上在三个方向平移了1/(2N)个单位,所以G点是M点的特殊情况;VASP只认第一个字母,大小写均可,所以Gamma可以写为G,g,gamma,ga....,Monhorst可以写为M, m等。。。。
-
第四行表示在xyz三个方向上生成对应数目的K点,本例是1*1*1,意思是在倒格矢a,b,c方向上都只取一个k点,一共1个k点,4*4*1意思是在倒格矢a,b方向上都取4个k点,c方向上取一个,一共16个,K点的密度由KPOINTS决定,KPOINTS取点越多,包含到计算里的信息越多,但是经常有人拿不准K点数目怎么取,经常出错,所以在接下来会总结几个方法教大家怎么取K点
-
第五行表示shift的值,一般都写成 0 0 0,一般不用改,Gamma center的K点就相当于MP方法shift了0.5 0.5 0.5,
KPOINTS的选取
-
方法1,使用官网建议的取值,每个晶格矢量的长度(a, b, c)乘以这个方向上的K点数目(k)。需要做收敛性测试,比如要算一个绝缘体体系, a,b的晶胞长度为6Å,c方向真空层15Å,K点就是3 3 1
-
方法2,把结构拖到MS里,点击CASTEP Tools图标,查看不同K点下,K点密度,一般密度在0.03附近最佳,对于正交晶系,晶格常数取模,然后取倒数。这三个倒数的比值就是三个方向上k-points密度的取值,例如,fcc Cu的KPOINTS则是7 7 7,
-
方法3,对于非正交晶系,倒格矢长度和实空间晶格常数不满足反比关系,所以用以上方法就不行了,这个时候用vaspkit可以产生所有体系的K点,vaspkit--102--1(M点),2(G点)--选择倒格子中k点间距,单位是Angstrom-1,一般计算使用0.04,精确计算0.03或0.02
-
方法4,简单粗暴,一般晶格常数乘以K点数目大约在30~40之间即可,K点数目足够多的情况下,前面的问题都不是问题,但是不要过分大,导致撒点过于密集,浪费机时,过分小撒点过疏,计算不准;
-
不管做什么,正式计算前一定要做收敛性测试。
KPOINTS注意事项
-
真空层一定不要加K点,用1即可,因为这个方向都没有结构,还加K点一来没意义,二来纯粹搞笑,比如说二维体系在xy方向是周期性体系,z方向存在真空层,那么这个方向一定不要加K点,用1即可;
-
对于原子或者分子的计算,K点取一个gamma点就够了(1 1 1),也就是这个KPOINTS文件可以用于绝大多数的原子或者分子计算,不用再修改;但如果你要用ISMEAR = -5 来计算,那么就需要把 1 1 1 改成 2 2 2或者3 3 3
-
对于原子或者分子的计算,K点取一个gamma点(1 1 1)就够了,因为这些原子和分子不是周期性的,多的K点是能提高周期性镜像分子间的相互作用精度,但是这部分能量是我们不想要的。即:对于含有真空层的体系,在真空层的方向上永远只使用一个K点(真空层一定不要加K点,用1即可)。多余的K点只会增加真空层两边体系的相互作用的精度,而这一部分是我们不想要的。
-
对于六角晶系hexagonal的结构,官网建议用gamma centered,因为M平移之后,网格的对称性和晶胞的对称性会出现不匹配的情况,从而导致计算出错;
-
对于特别大的体系,也可以使用单Gamma点,只含有一个Gamma点的计算可以使用vasp_gam版加速计算
-
一般需要做收敛性测试,测试,测试
自动生成KPOINTS的脚本
-
五行式每次输入挺麻烦的,直接写一个小脚本,每次一键操作,直接调用,把脚本命名为kpoints.sh(或者别的名字)
echo K-POINTS >>KPOINTS
echo 0 >>KPOINTS
echo G >>KPOINTS
echo $1 $1 $1>>KPOINTS
echo 0 0 0>>KPOINTS
-
chmod u+x kpoints.sh 赋予脚本可执行权限