/export/home/anliying/.local/lib/python3.8/site-packages/ase-3.22.1-py3.8.egg/ase/atoms.py:967: VisibleDeprecationWarning: Use get_global_number_of_atoms() instead warnings.warn('Use get_global_number_of_atoms() instead',
时间: 2023-12-18 21:02:56 浏览: 202
这是一个 Python 的警告信息,意思是说在 ASE 库的 atoms.py 文件中的第 967 行出现了一个可见的过时警告(VisibleDeprecationWarning),建议使用 get_global_number_of_atoms() 方法代替。这个警告信息并不会影响程序的运行,但是建议开发者升级代码以消除警告信息。
相关问题
ImportError: cannot import name 'crystal' from 'ase.geometry' (/export/home/anliying/.local/lib/python3.8/site-packages/ase-3.22.1-py3.8.egg/ase/geometry/__init__.py)
由于ASE库版本更新,ASE现在已经没有crystal模块了。如果您需要使用ASE的晶体结构生成功能,可以使用ase.build模块中的相关函数,比如make_supercell、bulk和molecule。这些函数可以方便地生成晶体结构、分子结构和超胞结构。
下面是一个使用ASE的make_supercell函数生成超胞的示例代码:
```python
from ase.io import read
from ase.build import make_supercell
# 加载POSCAR文件
structure = read('POSCAR')
# 生成2x2x2的超胞
supercell = make_supercell(structure, [2, 2, 2])
# 输出超胞的原子数和晶格参数
print('Number of Atoms in Supercell: ', len(supercell))
print('Lattice Parameters of Supercell: ', supercell.get_cell_lengths_and_angles())
```
该代码使用ASE的make_supercell函数生成2x2x2的超胞,并输出超胞的原子数和晶格参数。根据超胞的大小和晶格参数,您可以确定原子的分布情况。如果超胞较小且晶格参数不变,则原子的分布比较均匀。如果超胞较大或晶格参数发生变化,则原子的分布可能会受到影响。
File "structure_analysis4.py", line 16, in <module> positions1 = sort(pos1.get_positions()[indices1]) File "/export/home/anliying/.local/lib/python3.8/site-packages/ase-3.22.1-py3.8.egg/ase/build/tools.py", line 651, in sort tags = atoms.get_chemical_symbols() AttributeError: 'numpy.ndarray' object has no attribute 'get_chemical_symbols'
这个错误是由于你正在尝试使用 `sort()` 函数对一个 Numpy 数组进行排序,但是这个函数需要的是一个 ASE Atoms 对象。在你的代码中,你需要将 Numpy 数组转换为 ASE Atoms 对象,然后再使用 `sort()` 函数。
要解决这个问题,你可以使用 `Atoms()` 函数将 Numpy 数组转换为 ASE Atoms 对象,例如:
``` python
from ase import Atoms
# 获得第一个POSCAR中指定原子的位置列表
indices1 = [i for i, atom in enumerate(pos1) if atom.symbol == atom_type]
positions1 = pos1.get_positions()[indices1]
atoms1 = Atoms(symbols=[atom_type]*len(positions1), positions=positions1)
sorted_atoms1 = sort(atoms1)
# 获得第二个POSCAR中指定原子的位置列表
indices2 = [i for i, atom in enumerate(pos2) if atom.symbol == atom_type]
positions2 = pos2.get_positions()[indices2]
atoms2 = Atoms(symbols=[atom_type]*len(positions2), positions=positions2)
sorted_atoms2 = sort(atoms2)
```
在这个示例中,我们首先从原始的 POCSAR 文件中提取了我们感兴趣的特定原子的位置,并将它们转换为 ASE Atoms 对象。然后,我们使用 `sort()` 函数对这些 Atoms 对象进行排序,并获得了排序后的 Atoms 对象。最后,我们可以使用排序后的 Atoms 对象计算结构相似性。
注意,如果你想比较两个 Atoms 对象之间的距离矩阵,你需要使用 `atoms1.get_all_distances(atoms2)` 函数,而不是 `neighbor_list()` 函数。这个函数将返回一个二维矩阵,表示 atoms1 中每个原子到 atoms2 中每个原子的距离。
阅读全文