计算化学公社

 找回密码 Forget password
 注册 Register
Views: 9204|回复 Reply: 30
打印 Print 上一主题 Last thread 下一主题 Next thread

[VASP] idpp.py脚本生成过渡态文件报错

[复制链接 Copy URL]

14

帖子

0

威望

115

eV
积分
129

Level 2 能力者


在运行ponychen写的过渡态脚本idpp.py时候会报下面的错误,麻烦各位大佬给看看是什么问题

这是我准备的POSCAR中的一部分,原子有部分固定,后面尝试不固定原子也会报相同错误


下面是idpp.py这个脚本文件
idpp.py (14.11 KB, 下载次数 Times of downloads: 173)

3621

帖子

3

威望

1万

eV
积分
18423

Level 6 (一方通行)

第一原理惨品小作坊

2#
发表于 Post on 2022-2-16 10:53:09 | 只看该作者 Only view this author
你可以把两个结构也带上来,我看看根据实际情况有时间对这个idpp.py调整下。
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

14

帖子

0

威望

115

eV
积分
129

Level 2 能力者

3#
 楼主 Author| 发表于 Post on 2022-2-16 16:24:56 | 只看该作者 Only view this author
本帖最后由 404039756 于 2022-2-16 16:29 编辑

好的,谢谢卡开发发老师!
初始结构
POSCAR(ini) (3.72 KB, 下载次数 Times of downloads: 18)
末态结构
POSCAR(fin) (1.78 KB, 下载次数 Times of downloads: 17)

14

帖子

0

威望

115

eV
积分
129

Level 2 能力者

4#
 楼主 Author| 发表于 Post on 2022-2-16 16:26:03 | 只看该作者 Only view this author
卡开发发 发表于 2022-2-16 10:53
你可以把两个结构也带上来,我看看根据实际情况有时间对这个idpp.py调整下。

已经发出来了,请老师指点下

3621

帖子

3

威望

1万

eV
积分
18423

Level 6 (一方通行)

第一原理惨品小作坊

5#
发表于 Post on 2022-2-16 18:45:48 | 只看该作者 Only view this author
本帖最后由 卡开发发 于 2022-2-20 05:39 编辑
404039756 发表于 2022-2-16 16:24
好的,谢谢卡开发发老师!
初始结构

作者处理fix那个数组用的是list,然后在索引fix的时候用的是fix[i,sigma],但实际上list不允许这样索引(我用的是python3.7)。原作者之所以使用list的原因是因为在89行使用了list的append,解决办法也比较简单,在91行(也就是pos_a = np.array(tmp)的下一行)加入fix=np.array(fix)即可。

需要提醒的是,你的两个结构晶胞朝向不一样,这种情况很可能做不对,我测试了一下能运行起来,但结果肯定是不对的。

事实上从讨论角度来说,python的ase已经提供了idpp的插值方法,且提供了更多选项和可能,我根据官网的例子写了如下程序,但是选项和用户交互没有做完善,有人感兴趣可以稍作修改,例如增加argparse的输入等。做法不是唯一的,我仅仅提供一个套路思路。
idpp.py:
  1. from ase import io
  2. from ase import build
  3. from ase.neb import NEB
  4. from ase.visualize import view
  5. import os

  6. #读取数据
  7. ##初始参数,此处只列出三个最基本的。
  8. ##对NEB.interpolate的参数可以再进行添加。
  9. ##nimages建议不要大于9,无法确定VTST怎样处理10以上的images。
  10. nimages=5
  11. POSCAR_ini='POSCAR_ini'
  12. POSCAR_fin='POSCAR_fin'

  13. #数据处理
  14. ##通过ase.io读取始末的POSCAR。
  15. initial=io.read(POSCAR_ini,format='vasp')
  16. final=io.read(POSCAR_fin,format='vasp')
  17. ##初始化image,其中放nimages个结构。
  18. images=[initial]
  19. ##将初始结构拷贝nimage-2次作为初始化,减2是因为两个端点单独设置。
  20. images+=[initial.copy() for i in range(nimages-2)]
  21. images+=[final]
  22. ##将多帧images转换为NEB对象。
  23. neb=NEB(images)
  24. ##对NEB对象中的images进行插值,方法使用idpp,其他参数可以按照
  25. ##https://wiki.fysik.dtu.dk/ase/ase/neb.html
  26. ##自行添加,请仔细阅读手册。
  27. ##最终NEB中的image将被更新。
  28. ##默认是迭代输出写入idpp.log以及轨迹写入idpp.traj。
  29. neb.interpolate()
  30. neb.idpp_interpolate()

  31. #输出结果
  32. ##按编号建立文件夹,没文件夹的建文件夹,有文件夹的跳过。
  33. [os.mkdir('%02d'%i) for i in range(len(images)) if not os.path.exists('%02d'%i)]
  34. ##到对应目录去写入POSCAR文件
  35. [io.write('%02d/POSCAR'%i,images[i]) for i in range(len(images))]
复制代码


日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

14

帖子

0

威望

115

eV
积分
129

Level 2 能力者

6#
 楼主 Author| 发表于 Post on 2022-2-16 22:25:18 | 只看该作者 Only view this author
卡开发发 发表于 2022-2-16 18:45
作者处理fix那个数组用的是list,然后在索引fix的时候用的是fix,但实际上list不允许这样索引(我用的是py ...

已经可以正常运行了,谢谢卡开发发老师指出问题以及修改的代码,非常感谢您给新人的指点!

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
卡开发发 + 1 欢迎讨论

查看全部评分 View all ratings

14

帖子

0

威望

115

eV
积分
129

Level 2 能力者

7#
 楼主 Author| 发表于 Post on 2022-2-17 01:19:27 | 只看该作者 Only view this author
本帖最后由 404039756 于 2022-2-17 01:39 编辑
卡开发发 发表于 2022-2-16 18:45
作者处理fix那个数组用的是list,然后在索引fix的时候用的是fix,但实际上list不允许这样索引(我用的是py ...

我尝试运行了下,好像没有添加周期性,会导致部分移动出格子的原子在生产的POSCAR中不显示,请教下老师怎么给它加上周期性

3621

帖子

3

威望

1万

eV
积分
18423

Level 6 (一方通行)

第一原理惨品小作坊

8#
发表于 Post on 2022-2-17 01:40:33 | 只看该作者 Only view this author
404039756 发表于 2022-2-17 01:19
我尝试运行了下,好像没有添加周期性,会导致部分移动出格子的原子在生产的POSCAR中不显示,请教下老师怎 ...

你指的是我后续给的脚本?还是原始的?
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

3621

帖子

3

威望

1万

eV
积分
18423

Level 6 (一方通行)

第一原理惨品小作坊

9#
发表于 Post on 2022-2-17 01:56:55 | 只看该作者 Only view this author
404039756 发表于 2022-2-17 01:19
我尝试运行了下,好像没有添加周期性,会导致部分移动出格子的原子在生产的POSCAR中不显示,请教下老师怎 ...

原始的脚本你需要两个结构的笛卡尔坐标尽可能匹配,我给那个脚本在晶格矢量匹配的情况可以在31行处修改为neb.idpp_interpolate(mic=True)试试,这样在处理两个结构差异是按照最小镜像进行处理的。
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

14

帖子

0

威望

115

eV
积分
129

Level 2 能力者

10#
 楼主 Author| 发表于 Post on 2022-2-17 02:03:36 | 只看该作者 Only view this author
卡开发发 发表于 2022-2-17 01:56
原始的脚本你需要两个结构的笛卡尔坐标尽可能匹配,我给那个脚本在晶格矢量匹配的情况可以在31行处修改为 ...

尝试了下还是会有这样的问题,初态和末态就是一个平移 POSCAR_ini (1.78 KB, 下载次数 Times of downloads: 8)
POSCAR_fin (1.79 KB, 下载次数 Times of downloads: 4)

3621

帖子

3

威望

1万

eV
积分
18423

Level 6 (一方通行)

第一原理惨品小作坊

11#
发表于 Post on 2022-2-17 02:33:49 | 只看该作者 Only view this author
本帖最后由 卡开发发 于 2022-2-17 02:45 编辑
404039756 发表于 2022-2-17 02:03
尝试了下还是会有这样的问题,初态和末态就是一个平移

大概率是你其中一些原子在两个结构中顺序是不匹配的。我随便挑个例子,第43行,POSCAR_ini:0.661586 0.827069 0.400716 F F T;POSCAR_fin:0.661586 0.327116 0.400716 F F T
第45行,POSCAR_ini:0.893821 0.019011 0.344816 F F T;POSCAR_fin:0.893821 -0.480942 0.344816 F F T
这种情况可能不止发生在这两个原子上,于是乎就会产生结构的一块区域发生平移。

不过如果你熟悉M$的话,你可以导入到M$,然后用那个tools->reaction preview把两个结构正确匹配的原子对应起来通过preview生成xtd,然后把这个xtd对应的隐藏arc文件用这个脚本读进来能解决这个问题。你可以先进行到产生arc我们再进行下一步讨论。我想这种处理方式可能是目前较为简单的了。

另外5楼的代码我根据讨论情况之后会重新修改。
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

14

帖子

0

威望

115

eV
积分
129

Level 2 能力者

12#
 楼主 Author| 发表于 Post on 2022-2-17 08:11:20 | 只看该作者 Only view this author
卡开发发 发表于 2022-2-17 02:33
大概率是你其中一些原子在两个结构中顺序是不匹配的。我随便挑个例子,第43行,POSCAR_ini:0.661586 0.8 ...

好的,谢谢老师耐心指点!我今天下午用MS生成一下文件再和您请教

14

帖子

0

威望

115

eV
积分
129

Level 2 能力者

13#
 楼主 Author| 发表于 Post on 2022-2-17 17:06:08 | 只看该作者 Only view this author
我先传上来arc文件,MS里面预览的时候部分固定的原子坐标不能移动,生成的都是没有固定的,另外貌似MS过渡态的生成看起来好像也不是线性的,因为我仅沿一个方向移动,过渡态大部分原子的xyz坐标好像有略微的变动。 ini-fin.arc (20.17 KB, 下载次数 Times of downloads: 8)

3621

帖子

3

威望

1万

eV
积分
18423

Level 6 (一方通行)

第一原理惨品小作坊

14#
发表于 Post on 2022-2-20 05:42:03 | 只看该作者 Only view this author
404039756 发表于 2022-2-17 17:06
我先传上来arc文件,MS里面预览的时候部分固定的原子坐标不能移动,生成的都是没有固定的,另外貌似MS过渡 ...

我单独把arc文件当中首尾两帧挑出来,然后用ase调用Atoms.wrap()将全部原子移动到晶格内,首尾两个结构完全相同,只是顺序和周期发生了一些偏差,但是总的来说这样的情况也确实没办法找过渡态。
对之前的代码稍加完善了一下makeneb.py

评分 Rate

参与人数
Participants 1
eV +4 收起 理由
Reason
404039756 + 4 谢谢

查看全部评分 View all ratings

日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

14

帖子

0

威望

115

eV
积分
129

Level 2 能力者

15#
 楼主 Author| 发表于 Post on 2022-2-20 17:27:19 | 只看该作者 Only view this author
卡开发发 发表于 2022-2-20 05:42
我单独把arc文件当中首尾两帧挑出来,然后用ase调用Atoms.wrap()将全部原子移动到晶格内,首尾两个结构完 ...

"使用ASE实现idpp方法插值NEB路径" 哈哈,看到文章了,感谢老师的耐心解答!

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
卡开发发 + 1 欢迎讨论

查看全部评分 View all ratings

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-22 21:29 , Processed in 0.196589 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list