|
|
本帖最后由 卡开发发 于 2021-10-19 11:25 编辑
写了一段python判断了一下,看上去可能是O-O之间的距离比较短,但可能不是这个原因。
- #FILE:min_bond_len.py
- import re
- import numpy as np
- from io import StringIO
- import ase.io
- #读取POSCAR文本。
- f=open('POSCAR')
- txt=f.read()
- f.close()
- #获取元素种类。
- lines=re.findall('Direct\n(.*)\n',txt,re.S)
- lines=np.array([line.split()[-3] for line in lines[0].split('\n')])
- name=np.unique(lines)
- #将元素种类添加到POSCAR的5~6行。
- lines=txt.split('\n')
- part1='\n'.join(lines[:5])
- part2=' '.join(name)
- part3='\n'.join(lines[5:])
- txt='\n'.join([part1,part2,part3])
- #将上述字符串作为文件用ase.io读取。
- poscar=StringIO(txt)
- s=ase.io.read(poscar,format='vasp')
- #获得全部(周期性边界)最短键长。
- dist=s.get_all_distances(mic=True)
- #找到最短键长对应的原子。
- dx=[]
- idx=[]
- for i in range(len(s)):
- for j in range(i):
- if i!=j:
- idx.append((i+1,j+1))
- dx.append(dist[i,j])
- i=np.argmin(dx)
- print('最近的两个原子为%d和%d,其距离为%8.4f'%(idx[i][0],idx[i][1],dx[i]))
复制代码- $ python3 min_bond_len.py
- $ 最近的两个原子为63和62,其距离为 0.7510
复制代码
|
评分 Rate
-
查看全部评分 View all ratings
|