请选择 进入手机版 | 继续访问电脑版

计算化学公社

 找回密码
 现在注册!
查看: 3348|回复: 9

[VASP] vasp做过渡态经验<二>:Dimer

[复制链接]

68

帖子

5

威望

442

eV
积分
610

Level 4 (黑子)

发表于 2017-12-6 10:08:00 | 显示全部楼层 |阅读模式
Dimer是vasp内置的另一个强大的过渡态搜索方法,而且与NEB联用的时候有奇效。Dimer算法和NEB有一点相似,NEB是在初始态和末态之间插入image,然后计算image之间的切线力来寻找切线力为零的点。而Dimer在某种程度上可以看作是使用了两个靠的很近的image,程序会计算出这两个image之间的曲率,并沿着曲率增大的方向爬升,直到到达鞍点(此时曲率一定为负)。详解请看sob帖子:过渡态、反应路径的计算方法及相关问题

由于有且只有两个image,Dimer占用的计算资源要比NEB小不少,在做大体系过渡态搜寻的时候很有优势。并且Dimer不会像准牛顿法一样会陷入到局部极小值,导致原子受力无法收敛,因此用来做过渡态的优化同样也有巨大的优势。

Dimer的问题只有一个,就是需要一个好的初猜,一个接近过渡态的初猜构型。对于有经验的人来说,可以直接猜出构型然后跑Dimer。但这对于初学者来说比较困难,因此比较好的方法是先跑一个NEB,然后选取一个切线力接近零的image来跑Dimer。根据我的经验来看,一找一个准,效率比纯用NEB高很多。

在阅读以下内容之前,请先按照vasp官方pdf手册里dimer计算的例子做一遍。是pdf手册,online手册里没有计算的例子:Documentation

做Dimer的方法如下:

1. 选取一个好的初猜构型,可以是自己猜的,也可以是用NEB找出来的。然后像做过渡态频率分析一样,对关键性的原子做频率分析(IBRION=5),频率分析的精度不需要太高,像这样的参数足够了:
  1. ENCUT = 200
  2. EDIFF = 1E-06
  3. IBRION = 5
  4. NFREE = 1
复制代码
频率分析完成后会有一个或多个虚频,提取出来做成动画观看,找到需要的振动方向(目标化学键断裂/生成的振动方向)。可使用我的脚本Mabinogiysk/VASP-script
  1. > imagefreq.py
复制代码
会输出:
  1.    --------------------Processing--------------------
  2.                           freq23
  3.                           freq24
  4.        --------------------Done--------------------
复制代码
表示有编号23、24两个虚频,然后使用脚本:
  1. > freqmov.pl POSCAR freq23 freq24  30 0.6
复制代码
会生成freq23.xyz、freq24.xyz两个文件,用VMD打开即可观看振动动画。其中30是动画的帧数,0.6是振动的幅度的缩放系数。

找到需要的虚频之后另外新建文件夹,然后把POSCAR文件和freq文件复制过去,比如找到的是freq24,就把freq24也复制过去。注意更改优化的原子范围,做频率分析的时候可以只做其中关键的几个原子,剩下的都固定住。做dimer的时候可以全部原子一起优化,不仅限于频率分析的那几个原子。然后在新的文件夹里执行:
  1. > modemake.py freq24
复制代码
会生成一个MODECAR文件,或者也可以自己创建这个MODECAR文件,然后手动把振动频率复制粘贴过去。该文件格式在vasp官方的pdf手册里有。

做Dimer计算时切记不能少了MODECAR文件,没有这文件程序不会报错,而是会随机初始化一个搜寻方向。最后发现跑了大半天跑错了。

再放入KPOINTS、INCAR、POTCAR文件,其中INCAR需要加入以下参数:
  1.   IBRION = 3
  2.   POTIM = 0
  3.   ICHAIN = 2
  4.   DdR = 0.005
  5.   DRotMax = 10
  6.   DFNMin = 0.01
  7.   DFNMax = 1.0
复制代码
参数的意思官网上写的很清楚,请仔细阅读。

使用vtst tool的vasp会额外生成一个DIMCAR文件,跑dimer的时候要随时注意观察里面的参数:
  1. Step         Force        Torque        Energy     Curvature         Angle
  2.     1      10.66425       7.30318    -313.00133      -8.31593       3.93420
  3.     1      10.66425       4.60136    -313.00133      -8.89013      10.49022
  4.     1      10.66425       4.28355    -313.00133      -9.56912       5.58496
  5.     1      10.66425       2.25775    -313.00133      -9.97084       1.47304
  6.     1      10.66425       1.42447    -313.00133     -10.01435       0.72662
  7.     1      10.66425       1.01984    -313.00133     -10.01417       1.35954
  8.     1      10.66425       1.25866    -313.00133     -10.04105       0.58905
  9.     1      10.66425       0.74732    -313.00133     -10.10158       1.33623
  10.     2       3.92046       6.15419    -313.53353      -2.28795      12.73724
复制代码
需要注意的是Torque、Curvature和Angle. Torque是旋转的力的大小,Angle是旋转角度,力越大,旋转角度越大,Curvature是曲率。

一个正常的dimer计算,在每一个step里,例如上面的step1中,Torque和Angle应该越来越小,Curvature为负且越来越大。到step2时,由于原子移动了,这些值会重新变大,但在每一步里最终都应该收敛到1以下。刚开始的时候可能Torque会比较大,Curvature也会为正值。但如果跑到step5之后Torque和Angle依然不收敛或者Curvature是正值,那这个构型肯定出错了。
  1. 16       0.30555       0.76073    -314.21155      -5.02730       1.05284
  2. 17       0.34635       0.70113    -314.21341      -5.06017       1.07320
  3. 18       0.19482       0.80455    -314.21545      -4.88598       0.82223
  4. 18       0.19482       0.51358    -314.21545      -4.87067       0.67008
  5. 19       0.17114       0.78338    -314.21625      -4.77814       1.06994
  6. 20       0.13178       0.99078    -314.21700      -4.76946       1.34724
  7. 20       0.13178       0.63770    -314.21700      -4.71167       0.66381
  8. 21       0.09606       0.76383    -314.21723      -4.84227       1.29235
  9. 22       0.09606       ---        -314.21723       ---           ---
复制代码
这才是一个正确的dimer,刚开始Torque比较大,需要旋转很多次才能移动原子。快要收敛的时候基本上只会旋转一两次。






评分

参与人数 7威望 +1 eV +30 收起 理由
ggdh + 5 谢谢
Jack + 5 谢谢分享
hakuna + 5 赞!
wangyj + 5 期待后续
muxijiao + 5 高产!,请问可以做一些phonopy相关的么
ztchem + 5 我很赞同
sobereva + 1

查看全部评分

248

帖子

0

威望

1006

eV
积分
1254

Level 4 (黑子)

发表于 2017-12-8 09:21:41 | 显示全部楼层
写得非常好!
做过频率计算之后,查看振动模式时,还可以直接用wxdragon

22

帖子

0

威望

1372

eV
积分
1394

Level 4 (黑子)

发表于 2017-12-26 21:55:04 | 显示全部楼层
Dimer_test$ python imagefreq.py
imagefreq.py:26: Warning: 'with' will become a reserved keyword in Python 2.6
  File "imagefreq.py", line 26
    with open(file_name, 'w') as output_file:
            ^
SyntaxError: invalid syntax
您好,我在使用您的imagefreq.py时出现以上错误,是因为python版本原因吗?我的python版本是Python 2.5.2。

68

帖子

5

威望

442

eV
积分
610

Level 4 (黑子)

 楼主| 发表于 2017-12-28 22:26:19 | 显示全部楼层
DavyHou 发表于 2017-12-26 21:55
Dimer_test$ python imagefreq.py
imagefreq.py:26: Warning: 'with' will become a reserved keyword in ...

需要python2.6

22

帖子

0

威望

1372

eV
积分
1394

Level 4 (黑子)

发表于 2017-12-29 04:45:56 | 显示全部楼层

非常感谢。另外还有个小问题,是python2.6及以上版本都可以吗,还是限定2.6版?

19

帖子

0

威望

176

eV
积分
195

Level 3 能力者

发表于 2017-12-31 02:45:28 | 显示全部楼层
谢谢分享!已发送个学生学习!

22

帖子

0

威望

250

eV
积分
272

Level 3 能力者

发表于 2018-2-14 19:47:17 | 显示全部楼层
本帖最后由 lianghuashou 于 2018-2-14 19:50 编辑

非常感激您的分享,我的系统是CENTOS 7.0 运行的时候有点问题,我已经export $PATH
/Ultility/vasp_ultility/vasp_edit_script/vas2gv.pl: line 5: syntax error near unexpected token `('
不知道这是python版本的问题还是哪里的问题,我的python是2.7.5 。期待并谢谢您的解答。

26

帖子

0

威望

55

eV
积分
81

Level 2 能力者

发表于 2018-6-8 10:39:11 | 显示全部楼层
你好,我看vasp说明中的improved dimer method,只需要把算的频率加在POSCAR后边,以及IBRION设为44就可以了。为什么你们不用这个呢?还是说我理解错了?请指教,谢谢。

31

帖子

0

威望

514

eV
积分
545

Level 4 (黑子)

发表于 2018-7-16 15:44:40 | 显示全部楼层
能否再初态和末态之间用modemake.pl产生MODECAR来做dimer呢?

4

帖子

0

威望

67

eV
积分
71

Level 2 能力者

发表于 2018-9-27 23:18:59 | 显示全部楼层
感谢,请问使用 imagefreq.py的时候出现这种是什么原因,该怎么解决?
Traceback (most recent call last):
  File "./imagefreq.py", line 4, in <module>
    from VASP import read_total_atoms
ImportError: No module named VASP
您需要登录后才可以回帖 登录 | 现在注册!

本版积分规则

手机版|北京科音自然科学研究中心|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949-1号 )

GMT+8, 2018-11-20 04:53 , Processed in 0.109317 second(s), 25 queries .

快速回复 返回顶部 返回列表