【ASE+python】测量两个原子之间的距离(考虑周期性)

在理论计算中,如果我们有一个结构,需要求解两个原子之间的距离,可以使用一些可视化程序进行手动测量。但是对于周期性结构,还需要考虑周期性边界的影响,确定测量出来的是最短距离。在此分享使用ASE(Atomic Simulation Environment)灵活地测量两个位置距离且考虑结构周期性的方法。

读取结构信息

可以参考本人之前记录的博客:【ASE+python】实现将poscar格式文件批量转换为xsd格式文件
使用ase.io中的read()函数,可以将结构信息读取为atoms object,结合ase.visualize中的view()函数可以显示结构图形。例如,我有一份掺氮石墨烯的结构信息文件

from ase.io import read,write
from ase.visualize import view
CN=read('POSCAR0',format='vasp')#读入结构信息,转为atoms object
view(CN)#显示图形,viewer='VMD'可以选择显示器

此处’POSCAR0’为文件名字,format=’vasp’指文件类型为vasp。
图形显示为:
【ASE+python】测量两个原子之间的距离(考虑周期性)
下面在该可视化程序中选择‘view’→’show labels’→‘atom index’。可以显示原子序号
【ASE+python】测量两个原子之间的距离(考虑周期性)
根据想要计算的原子之间的距离,记下其原子序号,如计算97号原子与47号原子之间的距离

计算原子之间的距离

下面调用ASE的get_distance()函数,计算97号原子与47号原子之间的距离。

from ase.io import read,write
from ase.visualize import view
CN=read('POSCAR0',format='vasp')#读入结构信息,转为atoms object
view(CN)#显示图形,viewer='VMD'可以选择显示器
distance=CN.get_distance(97,47,mic=True)
print(distance)

计算结果:2.459992982373338

两个原子形成的向量

此外,如果想求两个原子形成的向量,则可以在get_distance()函数中添加:vector=True。如

from ase.io import read,write
from ase.visualize import view
CN=read('POSCAR0',format='vasp')#读入结构信息,转为atoms object
view(CN)#显示图形,viewer='VMD'可以选择显示器
distance=CN.get_distance(97,47,mic=True,vector=True)
print(distance)

输出结果为向量形式:[1.23017875 2.13031118 0. ]

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年6月8日 上午11:19
下一篇 2022年6月8日

相关推荐