理论计算干货:VASP - VTST 计算过渡态 -- NEB 方法
原理
过渡态(transition state)搜索,优化到一阶鞍点。是MEP路径上能量最高的点(一阶鞍点)。在过渡态位置上,仅在沿着反应路径上是能量极大点,而在于之正交的其他所有方向上都是能量极小点。 NEB 是 chain-of-states 搜索方法的一种,经过长时间的发展形成现在的准确性好,稳定性好的 CINEB 方法。做法就是在反应物到产物之间插入一系列结构,共插入 P-1 个,反应物编号为 0,产编号物为 P。不同的是优化不是对每个点孤立地优化,而是优化一个函数,每一步所有点一起运动。 这P+1点保持第一和最后一个点不动,其他的点受到两个力的作用:1. 来自势能面的力 ;2. chain方向上的弹簧力 。 第一项,相当于让一串珠子上的每个点都在势能面上向着最稳定的方向上移动。 第二项,含有弹簧力常数,相当于每个珠子之间的拉力和排斥力,避免珠子之间的距离过短或者过长。 传统PEB方法(plain elastic band)方法遇到的问题: 问题一:反应路径偏离minimum energy path(MEP),在势能面拐点的地方会出现两个珠子距离过远的问题,如下图,左图。 问题二:难以找到最高点,需要插入非常多的点,浪费计算资源。 •势能力垂直于路径上的分量将会引导结构点地正确移动。 这样(1) 每个点在平行于路径切线上的受力只等于弹簧力在这个方向分量,(2) 每个点在垂直于路径切线方向的受力只等于势能力在此方向上分量。这样优化收敛后结构点就能正确描述真实的MEP(Minimum energy pathway),矛盾得到解决。 以上过程讲述的是VASP原版中使用的NEB。但是此方法仍有很多致命的缺点: (1)要插入足够多的点才可能找到近似的过渡态,计算资源消耗极大。 (2)因为珠子不可能到鞍点的顶端,计算出的过渡态能量总是被低估的,又因为本来LDA,GGA泛函就经常低估过渡态能量,所以误差叠加,此方法不太准确。 所以后来,G. Henkelman(VTST的开发者)又发展出了CI-NEB方法,它专门考虑到了定位过渡态问题。CI-NEB与NEB的关键区别是能量最高的点受力的定义 ,在CI-NEB中这个点不会受到相邻点的弹簧力,避免位置被拉离过渡态,而且将此点平行于路径方向的势能力分量的符号反转,促使此点沿着路径往能量升高的方向上爬到过渡态。 CI-NEB方法只需要很少的点,比如包含初、末态总共5个甚至3个点就能准确定位过渡态,是最有效率的寻找过渡态的方法之一。注意 : 在网上看到一些说法CI-NEB插点越多越好,这是错误的结论!!由于能量最高的点可以自动爬坡,所以有的时候插一个点也可以精确的找到过渡态的位置,大多数时候插3到4个点已经完全能应付正常的过渡态计算需要。(具体插入多少点合适需要用dist.pl脚本判断)
CI-NEB过渡态计算步骤,练习一:O在Au(111)上的迁移 我们用VTST中CI-NEB做示范,(首先要确保编译VASP的时候安装了VTST,否则用的是VASP自带的NEB,非常糟糕)。 步骤二 :用dist.pl(VTST脚本)检查两个优化后结构(两个CONTCAR)的相似程度(每个对应原子的初末态距离的平方和,再开根号)。dist.pl ini/CONTCAR fin/CONTCAR
注意:这里如果数值非常大,要检查初态和末态的原子顺序是不是一一对应的! 插点的数目取决于前面dist.pl的返回值,一般插点数目可取(dist.pl返回值/0.8)。 nebmake.pl ../is/CONTCAR ..
这个例子插一个点就够了。(好多人被网上的有毒的教程误导,认为插一个点不对,这其实完全没有问题,这里只插一个点和插三个点的结果完全一样。) filetype1: vasp5 filetype2: vasp5 OK, ALL SETUP HERE FOR LATER ANALYSIS, PUT OUTCARs IN FOLDERS 00 and 02 !!!
代表插点成功,并自动生成了./00 ./01 ./02三个文件夹。 00表示初态,里面放的是../is/CONTCAR, 02表示末态,放的是../fs/CONTCAR, 01是插入的点。三个文件夹里面的文件名称都是POSCAR。 步骤四 :初末态对应的OUTCAR复制到对应的文件夹中,以便后续数据分析。cp ../is/OUTCAR ./00/ cp ../fs/OUTCAR ./02/
参数0表示用POSCAR生成xyz文件;还可取1,为用CONTCAR生成。返回值: Using POSCARs to generate movie
movie.xyz 直接拖入Jmol可以看所有结构。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 注: 用nebmovie.pl,没有直接生成movie.xyz是因为从官方主页下载的脚本默认当使用 nebmovie.pl后面不带参数或者参数为0的时候(即使用POSCAR产生xyz),不输出 movie. xyz。 你想让脚本自动生成movie.xyz而不是自己去合并各个文件夹里面的 xyz 文件, 需要自行修改nebmovie.pl文件。 很简单, 把倒数第二个if语句整个用#注释掉或者直接 which nebmovie.pl 查看返回路径,我的返回值: ~/apps/vtst/vtstscript /vtstscripts-935/nebmovie.pl 把这个脚本的最后几行注释去掉: #if($xyzflag==0){ # unlink "movie.xyz"; #} if($xdatflag==0){ unlink "movie.POSCAR"; unlink "movie.XDATCAR"; }
过渡态也是结构优化的一种,所以可以在结构优化的INCAR基础上修改: (1)EDIFF=1E-7,这个参数非常关键! 过渡态对力计算精度要求极高, 更精准 的电子 步收敛会有更精准的力,可以加速收 敛 。 好多过渡态计算不收敛原因都是因为力 (2)EDIFFG = -0.03,过渡态可以适当放宽结构优化的收敛精度到-0.03,对于非常复 杂难以收敛的体系可以放宽到-0.05。 (3)IBRION = 3, POTIM = 0,这是VTST识别并启动VTST优化算法的标致。 (4)IOPT = 1,根据建议,选择优化算法:IOPT设置成1。IOPT推荐7,2,或1。 0意味着启用VASP自带的优化算法,(比如:IOPT=0,则IBRION=1, POTIM=0.1) (5)ICHAIN=0开启NEB方法, (6)LCLIMB = .TRUE. 爬坡即CI-NEB (7)IMAGES = 1, 插点个数 (8)SPRING = -5, 弹簧力常数,用-5默认值即可。
本文转载自博客: http://blog.wangruixing.cn/2019/08/19/cineb/