pymatgen专题

pymatgen:配位几何识别与畸变程度

用实际Si、NaCl、Cu和单层hBN结构识别配位形状,比较Si单轴应变前后的连续对称性指标。

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

数出四个近邻,还不能确定它们是否形成四面体;即使键长相同,键角也可能已经变化。ChemEnv把局域环境与理想多面体比较,给出几何类型和连续对称性指标CSM。

本例在鸢算科技集群使用pymatgen2026.9.24实际运行,复用已有VASP计算中的Si、Cu、NaCl和单层hBN几何,不启动新的电子结构计算。另生成4组受控Si应变结构,演示几何形状变化;它们不是重新松弛后的材料结构。

下载结构、完整分析脚本、实际CSV和绘图脚本。

unzip pymatgen-chemenv-wave706-*.zip
cd pymatgen-chemenv
bash results.sh
bash plot.sh

四种实际结构的中心原子和周期近邻

1. 准备软件和结构#

module load pymatgen/2026.9.24
cat inputs/POSCAR-Si

该环境使用Python3.11、NumPy/SciPy以及Matplotlib,不需要为本例重新编译DFT程序。Si输入为:

Si
 1.0000000000000000
     0.0000000000000000    2.7344629562984917    2.7344629562984917
     2.7344629562984917    0.0000000000000000    2.7344629562984917
     2.7344629562984917    2.7344629562984917    0.0000000000000000
 Si 
   2
Direct
  0.0000000000000000  0.0000000000000000 -0.0000000000000000
  0.2500000000000000  0.2500000000000000  0.2500000000000000
Cartesian
  0.0000000000000000  0.0000000000000000  0.0000000000000000
  0.0000000000000000  0.0000000000000000  0.0000000000000000

它是2原子原胞。中心Si的四个近邻包含其他周期映像,不能只看POSCAR文件中还有几个坐标。图中画的是以中心原子为原点的相对近邻坐标,不是把周期映像重复算成新的独立结构。

2. 从结构得到配位环境#

完整脚本已在附件analyze.py。核心步骤如下:

from pymatgen.core import Structure
from pymatgen.analysis.chemenv.coordination_environments.coordination_geometry_finder import LocalGeometryFinder
from pymatgen.analysis.chemenv.coordination_environments.chemenv_strategies import SimplestChemenvStrategy
from pymatgen.analysis.chemenv.coordination_environments.structure_environments import LightStructureEnvironments

s = Structure.from_file('inputs/POSCAR-Si')
finder = LocalGeometryFinder()
finder.setup_structure(s)
environments = finder.compute_structure_environments(
    only_cations=False, only_indices=[0],
    maximum_distance_factor=1.6,
    min_cn=3, max_cn=12,
    additional_conditions=[0], valences='undefined')
strategy = SimplestChemenvStrategy(
    distance_cutoff=1.3, angle_cutoff=0.3,
    additional_condition=0)
light = LightStructureEnvironments.from_structure_environments(
    strategy, environments)
print(light.coordination_environments[0])

only_indices=[0]只分析0号位点;去掉这个限制才会逐位点处理。only_cations=False允许分析元素晶体或阴离子位点。这里additional_condition=0不加阴阳离子成键限制,也不猜测氧化态,适合比较几何;需要化学成键条件时,应另行提供可靠的价态信息。

distance_cutoff=1.3和angle_cutoff=0.3是这个策略的归一化Voronoi距离与角度筛选参数,不是1.3Å和0.3度。不要不看定义就当作普通键长截断。

3. 运行并读取结果#

在新的解压目录执行:

bash run.sh
cat analysis/ChemEnv-coordination.csv
ls cases/Si

输出cases/*/POSCAR、light-environments.json与CSV。原始输入保留在inputs;随包的reference-data是已经实际算出的参考结果。

结构 环境符号 配位数 近邻距离/Å 解释
Si T:4 4 2.368114 四面体
NaCl的Cl位点 O:6 6 2.850000 八面体
Cu C:12 12 2.570349 立方八面体
单层hBN的B位点 TL:3 3 1.443376 平面三角形

这些高对称参考结构的CSM均接近数值零。CSM是无量纲形状指标,小值表示更接近相应理想环境;它不是能量、力、配位概率或材料稳定性评分。

4. 二维结构遇到Voronoi错误怎么办#

这个hBN输入的c方向为20Å。默认10Å Voronoi搜索范围只包含共面点,不能建立完整的三维Voronoi构造。本例保留结构和真空层,增加构造搜索范围:

environments = finder.compute_structure_environments(
    only_cations=False, only_indices=[0],
    maximum_distance_factor=1.6,
    min_cn=3, max_cn=12,
    additional_conditions=[0], valences='undefined',
    voronoi_distance_cutoff=25)

这使构造时能看到相邻周期层,随后仍按策略选近邻,最终为面内三配位。没有给坐标加随机噪声,也没有把真空层外的原子当成化学近邻。换真空厚度时应重新检查构造范围和实际输出。

5. 配位数不变,形状能变化吗#

可以。对Si晶胞的Cartesian x方向施加1%、3%、5%、10%的仿射应变,保持分数坐标不变;不再做离子松弛。本次原生分析得到:

单轴应变 配位类型 CSM
0% T:4 约0
1% T:4 0.00220743
3% T:4 0.01960208
5% T:4 0.05372012
10% T:4 0.20768432

实际应变模型的CSM和近邻夹角

这组模型的四条近邻键仍等长,但近邻之间的夹角已分裂,所以四面体形状发生畸变。CSM在这条特定应变路径上增加,并不表示所有复杂变形或随机扰动都必然单调。

脚本还实际比较了整体旋转、均匀放大8%、交换等价Si位点顺序,CSM仍约为0。CSM主要描述形状,不用它代替键长、体积或应变能。

6. 换自己的结构#

先把结构转换为pymatgen支持的文件,再修改Structure.from_file、位点范围和近邻策略。保留元素、坐标和周期映像信息;用输出的近邻向量核对实际选中了哪些原子。

cat reference-data/ChemEnv-neighbor-vectors.csv

对于混合配位、强畸变或无序结构,应比较距离/角度参数的敏感性,并按需要使用多权重策略。这里演示的是固定参数的SimplestChemenvStrategy,不能把一次分类当作唯一化学键定义。

方法及参数说明见pymatgen ChemEnv官方文档与ChemEnv方法论文。近邻数和网络维数的基础操作见局域配位与结构维数。

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

查看配图

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

100%查看原图 ↗