pymatgen专题

pymatgen:Voronoi配位数与多面体

用实际Cu和Fe晶格对照面数、面形索引与固体角加权配位数,避免和最近邻壳层混用。

更新于 2026-11-12约 5 分钟阅读按任务与环境选择适用配置
阅读本篇目录

“配位数”取决于如何定义邻居。本例在鸢算科技集群读取实际FCC Cu、BCC Fe结构,运行Voronoi多面体分析与加权配位统计,并用FeO演示几何氧化物分类。

下载实际数据、结构、完整后处理和绘图脚本。

unzip pymatgen-surface-local-tools-wave721-*.zip
cd pymatgen-surface-local-tools
module load pymatgen/2026.9.24
bash results.sh
bash plot.sh

环境为pymatgen2026.9.24、Python3.11、NumPy/SciPy和Matplotlib。run.sh重新后处理到新建的analysis,不提交DFT;reference-data和原图保留,plot.sh画图到figures。再次分析请保留已有目录,在另一份解压目录运行。

实际Cu/Fe几何及Voronoi面数、固体角加权配位的差异

1. 读取结构和多面体索引#

python - <<'PY'
from pymatgen.core import Structure
from pymatgen.analysis.structure_analyzer import VoronoiAnalyzer
analyzer = VoronoiAnalyzer(cutoff=5)
for name in ['Cu','Fe']:
    s = Structure.from_file('inputs/POSCAR-' + name)
    print(name, analyzer.analyze(s, n=0))
PY

cutoff=5单位Å,是构造Voronoi分析的搜索范围,不是只把5Å内所有原子都当成同一种最近邻。

本例输出:

结构 索引从三边面开始 Voronoi面数
FCC Cu 0,12,0,0,0,0,0,0 12
BCC Fe 0,6,0,8,0,0,0,0 14

每个数是有相应边数的面的数量:FCC的12个四边形面构成菱形十二面体;BCC有6个四边形面和8个六边形面,对应截角八面体。这里不是原子轨道或电子占据的计数。

2. 再看加权配位数#

python - <<'PY'
from pymatgen.core import Structure
from pymatgen.analysis.local_env import VoronoiNN
from pymatgen.analysis.structure_analyzer import average_coordination_number
for name in ['Cu','Fe']:
    s = Structure.from_file('inputs/POSCAR-' + name)
    nn = VoronoiNN()
    print(name, '面数:', len(nn.get_voronoi_polyhedra(s,0)))
    print('加权CN:', nn.get_cn(s,0,use_weights=True))
    print('按元素平均:', average_coordination_number([s],freq=1))
PY

FCC Cu的面数和加权CN都为12;BCC Fe的面数为14,加权CN约为10.160610。原生权重使用归一化固体角,不是每个面都取1。

BCC的径向第一近邻是8个,而其Voronoi面数是14。 前者按距离壳层,后者包含有Voronoi共面的邻居;两种结果可以同时正确。不要把14或10.16直接当作“BCC第一壳层有多少原子”。

3. 多结构统计怎么用#

python - <<'PY'
from pymatgen.core import Structure
from pymatgen.analysis.structure_analyzer import VoronoiAnalyzer, average_coordination_number
a = Structure.from_file('inputs/POSCAR-Cu')
b = a.copy()
b.scale_lattice(a.volume*1.02**3)
series = [a,b]
print(VoronoiAnalyzer(cutoff=5).analyze_structures(series,step_freq=1))
print(average_coordination_number(series,freq=1))
PY

这里第二个结构只是整体缩放2%的几何控制,两者仍为相同FCC拓扑;没有把这两个结构称为MD轨迹。对真实MD可替换为同组成、同原子数的一系列结构,freq=10表示每10帧抽取一次。

average_coordination_number输出按元素平均的加权CN,不是多面体类型分布。不同组成或原子数的结构不能不加检查地放进同一序列平均。

4. FeO的几何分类与键长估计#

python - <<'PY'
from pymatgen.core import Structure
from pymatgen.analysis.structure_analyzer import oxide_type, get_max_bond_lengths
s = Structure.from_file('inputs/FeO.json')
print('氧化物几何分类:', oxide_type(s))
print('半径规则估计:', get_max_bond_lengths(s))
PY

本例FeO返回普通oxide类别。这个几何分类根据氧相关连接判断是否有过氧/超氧等特征,不能替代电荷和电子结构分析。

get_max_bond_lengths是基于半径规则的估计,不是从能量面求得的断键阈值,也不表示小于它的每一对原子都有同等化学键强度。

cat reference-data/Pymatgen-Voronoi-local-analysis.csv
cat reference-data/FeO-heuristic-bond-lengths.csv

若需要按成键数据选择邻居,可继续阅读ICOHP配位分析;按最近邻壳层做组成有序统计见CuNi短程有序度。接口见pymatgen结构分析。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗