pymatgen:离线原型识别
从实际Si、Cu、NaCl结构匹配A4、A1和B1原型,理解原胞、常规胞与匹配容差。
阅读本篇目录
想确认手里的结构更接近金刚石、面心立方还是岩盐型,可以先做原型匹配,再决定后续建模和计算。本例使用已有实际Si、Cu、NaCl几何,运行pymatgen的离线AFLOW原型库匹配,不查询在线数据库。
unzip pymatgen-prototypes-wave707-*.zip
cd pymatgen-prototypes
bash results.sh
1. 使用哪个接口#
环境为pymatgen2026.9.24、Python3.11、pandas、NumPy/SciPy。本例使用PrototypeDatabaseMatcher。旧名称AflowPrototypeMatcher在该版本仍可调用,但已提示弃用,新的脚本采用当前接口。
module load pymatgen/2026.9.24
把下面保存为identify.py:
import pandas as pd
from pymatgen.core import Structure
from pymatgen.analysis.prototypes import AFLOW_PROTOTYPE_LIBRARY
from pymatgen.analysis.prototypes.matcher import PrototypeDatabaseMatcher
matcher = PrototypeDatabaseMatcher(pd.DataFrame(AFLOW_PROTOTYPE_LIBRARY))
for name in ['Si', 'Cu', 'NaCl']:
structure = Structure.from_file('inputs/POSCAR-' + name)
matches = matcher.get_prototypes(structure)
print(name, [entry['tags'] for entry in matches] if matches else [])
python identify.py
2. 实际匹配到什么#
| 输入 | 空间群 | Strukturbericht | Pearson | AFLOW原型 |
|---|---|---|---|---|
| Si | 227 | A4 | cF8 | A_cF8_227_a |
| Cu | 225 | A1 | cF4 | A_cF4_225_a |
| NaCl | 225 | B1 | cF8 | AB_cF8_225_a_b |
这里的A4为金刚石型,A1为面心立方型,B1为岩盐型。Pearson符号中的原子数描述相应常规晶胞;Si或NaCl输入是2原子原胞时,匹配到cF8并不表示文件偷偷多了6个原子。
cat reference-data/Pymatgen-prototype-identification.csv
cat inputs/POSCAR-NaCl
该输入的晶格与坐标为:
ActualNaClDFTgrid;rigidshiftcontrol,postprocessingonly
1.0
0.0000000000000000e+00 2.8500000000000001e+00 2.8500000000000001e+00
2.8500000000000001e+00 0.0000000000000000e+00 2.8500000000000001e+00
2.8500000000000001e+00 2.8500000000000001e+00 0.0000000000000000e+00
Cl Na
1 1
Direct
5.0000000000000000e-01 5.0000000000000000e-01 5.0000000000000000e-01
0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00
3. 匹配结果能说明稳定性吗#
不能。原型匹配比较结构几何及原型映射,不计算总能、压力、形成能或相变温度。不同元素可能共享同一种原型,同一材料也可能因应变、缺陷和对称性降低而匹配不到库中条目。
默认初始相对晶格长度容差0.2、位点容差0.3、角度容差5°,它们属于结构匹配流程,不是声子稳定性或能量精度标准。多候选时保存全部标签;无匹配时保留空结果,不能强行贴上最想要的原型。
修改自己的结构路径后,先核对晶格、坐标单位、周期性和占位。对带真空的二维模型,不应为了匹配三维体相原型而删除真空或改变结构。
4. 接着生成候选结构#
资料包的完整run.sh还会执行下一篇的带氧化态替位推荐:
bash run.sh
ls analysis
ls models
它仅做离线分类和几何生成,不提交DFT任务。使用新的解压目录,避免覆盖已经生成的模型。
阅读替位候选与初始模型。接口说明见pymatgen原型模块。
需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。