计算化学公社

标题: idpp.py脚本生成过渡态文件报错 [打印本页]

作者
Author:
404039756    时间: 2022-2-16 00:20
标题: idpp.py脚本生成过渡态文件报错

在运行ponychen写的过渡态脚本idpp.py时候会报下面的错误,麻烦各位大佬给看看是什么问题
(, 下载次数 Times of downloads: 55)
这是我准备的POSCAR中的一部分,原子有部分固定,后面尝试不固定原子也会报相同错误
(, 下载次数 Times of downloads: 55)

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


作者
Author:
卡开发发    时间: 2022-2-16 10:53
你可以把两个结构也带上来,我看看根据实际情况有时间对这个idpp.py调整下。
作者
Author:
404039756    时间: 2022-2-16 16:24
本帖最后由 404039756 于 2022-2-16 16:29 编辑

好的,谢谢卡开发发老师!
初始结构
(, 下载次数 Times of downloads: 18)
末态结构
(, 下载次数 Times of downloads: 17)
作者
Author:
404039756    时间: 2022-2-16 16:26
卡开发发 发表于 2022-2-16 10:53
你可以把两个结构也带上来,我看看根据实际情况有时间对这个idpp.py调整下。

已经发出来了,请老师指点下
作者
Author:
卡开发发    时间: 2022-2-16 18:45
本帖最后由 卡开发发 于 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))]
复制代码



作者
Author:
404039756    时间: 2022-2-16 22:25
卡开发发 发表于 2022-2-16 18:45
作者处理fix那个数组用的是list,然后在索引fix的时候用的是fix,但实际上list不允许这样索引(我用的是py ...

已经可以正常运行了,谢谢卡开发发老师指出问题以及修改的代码,非常感谢您给新人的指点!
作者
Author:
404039756    时间: 2022-2-17 01:19
本帖最后由 404039756 于 2022-2-17 01:39 编辑
卡开发发 发表于 2022-2-16 18:45
作者处理fix那个数组用的是list,然后在索引fix的时候用的是fix,但实际上list不允许这样索引(我用的是py ...

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

作者
Author:
卡开发发    时间: 2022-2-17 01:40
404039756 发表于 2022-2-17 01:19
我尝试运行了下,好像没有添加周期性,会导致部分移动出格子的原子在生产的POSCAR中不显示,请教下老师怎 ...

你指的是我后续给的脚本?还是原始的?
作者
Author:
卡开发发    时间: 2022-2-17 01:56
404039756 发表于 2022-2-17 01:19
我尝试运行了下,好像没有添加周期性,会导致部分移动出格子的原子在生产的POSCAR中不显示,请教下老师怎 ...

原始的脚本你需要两个结构的笛卡尔坐标尽可能匹配,我给那个脚本在晶格矢量匹配的情况可以在31行处修改为neb.idpp_interpolate(mic=True)试试,这样在处理两个结构差异是按照最小镜像进行处理的。
作者
Author:
404039756    时间: 2022-2-17 02:03
卡开发发 发表于 2022-2-17 01:56
原始的脚本你需要两个结构的笛卡尔坐标尽可能匹配,我给那个脚本在晶格矢量匹配的情况可以在31行处修改为 ...

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

作者
Author:
卡开发发    时间: 2022-2-17 02:33
本帖最后由 卡开发发 于 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楼的代码我根据讨论情况之后会重新修改。

作者
Author:
404039756    时间: 2022-2-17 08:11
卡开发发 发表于 2022-2-17 02:33
大概率是你其中一些原子在两个结构中顺序是不匹配的。我随便挑个例子,第43行,POSCAR_ini:0.661586 0.8 ...

好的,谢谢老师耐心指点!我今天下午用MS生成一下文件再和您请教
作者
Author:
404039756    时间: 2022-2-17 17:06
我先传上来arc文件,MS里面预览的时候部分固定的原子坐标不能移动,生成的都是没有固定的,另外貌似MS过渡态的生成看起来好像也不是线性的,因为我仅沿一个方向移动,过渡态大部分原子的xyz坐标好像有略微的变动。 (, 下载次数 Times of downloads: 8)

作者
Author:
卡开发发    时间: 2022-2-20 05:42
404039756 发表于 2022-2-17 17:06
我先传上来arc文件,MS里面预览的时候部分固定的原子坐标不能移动,生成的都是没有固定的,另外貌似MS过渡 ...

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

"使用ASE实现idpp方法插值NEB路径" 哈哈,看到文章了,感谢老师的耐心解答!
作者
Author:
404039756    时间: 2022-2-20 17:29
卡开发发 发表于 2022-2-20 05:42
我单独把arc文件当中首尾两帧挑出来,然后用ase调用Atoms.wrap()将全部原子移动到晶格内,首尾两个结构完 ...

没事,这种情况我就用线形插值先跑下
作者
Author:
静哥哥    时间: 2022-6-10 17:44
您好,请问这个脚本怎么用啊,按照这个网页试了下,好像没有结果产生。python makeneb.py -i 初始 末尾poscar  -n 4 --method idpp --optimizer BFGS -o
作者
Author:
静哥哥    时间: 2022-6-10 19:04
卡开发发 发表于 2022-2-20 05:42
我单独把arc文件当中首尾两帧挑出来,然后用ase调用Atoms.wrap()将全部原子移动到晶格内,首尾两个结构完 ...

卡开发发老师,您好。我想找您请教两个问题
1、在算有阴离子空位时,钙钛矿结构里阳离子迁移到临近八面体间隙位,发现移动阳离子会导致周边阴离子位置变化较大,导致结构一直不收敛,前后结果检查了很多遍,没有问题,也尝试了用IOPT=1 3 7,都不收敛。而没有阴离子空位时阳离子迁移收敛很快。所以我考虑是不是插点有问题,因此想到使用idpp.py。但是研究了下发现不会用。
2、按照“使用ASE实现idpp方法插值NEB路径”一文中,比如我有初始和末态poscar,命令为IS 和FS。请问我需要产生插点,是这样用吗:python3 makeneb.py -i IS  FS -n 5 --method idpp --optimizer BFGS 。每次这样调用,就会弹出使用帮助窗口,程序无法执行。所以向您请教下,麻烦了。
作者
Author:
卡开发发    时间: 2022-6-10 20:54
静哥哥 发表于 2022-6-10 19:04
卡开发发老师,您好。我想找您请教两个问题
1、在算有阴离子空位时,钙钛矿结构里阳离子迁移到临近八面 ...

可以把IS和FS传来看看。
作者
Author:
静哥哥    时间: 2022-6-11 08:43
本帖最后由 静哥哥 于 2022-6-11 10:25 编辑
卡开发发 发表于 2022-6-10 20:54
可以把IS和FS传来看看。

卡发老师,请见下帖,我把poscar、incar等都上传了,麻烦您了

作者
Author:
静哥哥    时间: 2022-6-11 10:24
卡开发发 发表于 2022-6-10 20:54
可以把IS和FS传来看看。

卡发老师,我发现的确有问题,我的模型是wo3做了222扩胞,然后去掉一个O得到初始结构并进行了优化。让后将空位处的W原子手动移到临近八面体位置,并进行了结构优化,得到了末态POSCAR.

用dist,pl计算距离大概3.7,因此我插入了4个点,用nebavoid.pl 使最小距离大于0.8,然后进行cineb计算。cineb我一般都是分成低中高三步,逐步优化,但是我发现跑了一晚上才跑了32步。我是8375的配置,64核,平时一样的结构跑CINEB,也就十几个小时左右就跑完了。今天这个的确有问题,麻烦您帮忙看看。多谢了。



作者
Author:
卡开发发    时间: 2022-6-11 10:47
静哥哥 发表于 2022-6-11 10:24
卡发老师,我发现的确有问题,我的模型是wo3做了222扩胞,然后去掉一个O得到初始结构并进行了优化。让后 ...

你试试看makeneb.py -i ISPOSCAR FSPOSCAR -n 5 --method idpp
-i后面的文件名要按照你实际的反应物和产物的POSCAR文件名设置。
最好是加上-o的参数,会产生XDATCAR轨迹记录路径。之后用ase gui XDATCAR查看产生的结果,如果原子没有匹配再用其他程序进行调整。
作者
Author:
静哥哥    时间: 2022-6-11 11:12
本帖最后由 静哥哥 于 2022-6-11 11:16 编辑
卡开发发 发表于 2022-6-11 10:47
你试试看makeneb.py -i ISPOSCAR FSPOSCAR -n 5 --method idpp
-i后面的文件名要按照你实际的反应物和产 ...

开发老师,请问下,我按照您的提示输入后会出现以下问题,请问这怎么解决呢

作者
Author:
静哥哥    时间: 2022-6-11 11:17
卡开发发 发表于 2022-6-11 10:47
你试试看makeneb.py -i ISPOSCAR FSPOSCAR -n 5 --method idpp
-i后面的文件名要按照你实际的反应物和产 ...

我是python3.6.5,这个有关系吗
作者
Author:
卡开发发    时间: 2022-6-11 11:41
静哥哥 发表于 2022-6-11 11:17
我是python3.6.5,这个有关系吗

我这边用你的结构是能正常进行的,也许是python版本问题也可能是ase版本问题。你可以把主程序部分的try except结构去除,只留下try下面的部分看看报什么样的错误。这个程序只是提供一种解决思路,并不打算做完善。
作者
Author:
静哥哥    时间: 2022-6-11 17:30
卡开发发 发表于 2022-6-11 11:41
我这边用你的结构是能正常进行的,也许是python版本问题也可能是ase版本问题。你可以把主程序部分的try e ...

好的,谢谢卡发老师,我在研究研究
作者
Author:
zorow    时间: 2022-8-9 15:06
静哥哥 发表于 2022-6-11 11:12
开发老师,请问下,我按照您的提示输入后会出现以下问题,请问这怎么解决呢

我也遇到了这个问题,但是貌似非线性插点还是成功了
作者
Author:
Jalyn    时间: 2023-3-30 11:59
静哥哥 发表于 2022-6-11 17:30
好的,谢谢卡发老师,我在研究研究

请教楼主这个问题最后怎么解决的呢
作者
Author:
xmuqyj    时间: 2023-4-23 21:34
您好,用您的脚本,出现loop到1000不收敛啊
作者
Author:
wangchaolong    时间: 2023-6-3 10:43
卡开发发 发表于 2022-2-16 10:53
你可以把两个结构也带上来,我看看根据实际情况有时间对这个idpp.py调整下。

老师你好,idpp.py这个脚本运行需要Python的程序,我怎么在vasp上安装python呢?安装哪个版本?我有点懵
作者
Author:
wangchaolong    时间: 2023-6-3 10:52
请问楼主,你知道怎么让idpp.py这个脚本正常运行吗?我这里显示好像是需要安装python,如果需要安装的话该怎么安装在vasp上呢?




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3