VASP四大输入文件——KPOINTS

本文介绍了VASP模拟计算中KPOINTS文件的设置,特别是五行式KPOINTS的用法。内容包括Gamma中心和Monkhorst-Pack网格的区别,K点数目的选取方法,以及真空层K点的处理。还提到了原子和分子计算的K点选择,并给出了自动生成KPOINTS文件的脚本示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转载于微信公众号,VASP学习交流,将会持续更新

今天这里讲的是常规计算使用的五行式的KPOINTS,一般计算要在第一布里渊区均匀撒点,能带计算在高对称点连线路径上取值,能带计算的以后再说。

五行式KPOINTS

  • K-POINTS     
    0             
    Gamma         
    1 1 1    

    0 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  赋予脚本可执行权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值