spglib专题

spglib完整核心接口:对称性、磁群与倒易网格

已安装版本的完整顶层接口实操、真实结构输入、数值核对与数据图。

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

下载完整脚本、输入CIF、逐函数输出与图片。

运行方式#

本例在集群pymatgen/2026.9.24环境中使用spglib 2.7.0,逐个实际调用该版本__all__公开的31个顶层函数。采用Si常规胞、石墨烯和给定反铁磁序的bcc Fe;这些是几何与对称性计算,不涉及DFT能量,也不推断磁基态。

module purge
module load pymatgen/2026.9.24
python spglib_all.py
python plot_spglib.py
cat spglib/RESULTS.json

spglib/CALLS.json保存每个函数的实际返回值,Si.cif与graphene.cif为结构输入。完整包也可执行bash run.sh。

1 输入的三个数组#

from ase.build import bulk
import spglib
atoms = bulk('Si', 'diamond', a=5.43, cubic=True)
cell = (atoms.cell.array, atoms.get_scaled_positions(), atoms.numbers)
data = spglib.get_symmetry_dataset(cell, symprec=1e-5)
print(data.number, data.international, len(data.rotations))

晶格矩阵按行放置,坐标为分数坐标,最后一项是类型编号。本例输出227号空间群、Fd-3m和192个对称操作。symprec单位与晶格一致,这里为Å;放宽容差可能抹掉真实的小畸变。

2 结构、数据库和标准胞接口#

函数 本例用途与核对
get_symmetry_dataset 完整数据集,Si空间群227
get_symmetry 提取旋转与平移
get_spacegroup 人类可读空间群名称
get_pointgroup 从旋转确定点群
get_spacegroup_type 按数据集Hall编号查询数据库
get_spacegroup_type_from_symmetry 从实际操作重新识别,仍为227
get_symmetry_from_database 数据库操作数与实际Si数据集一致
get_hall_number_from_symmetry 旧入口实际调用;新代码优先用get_spacegroup_type_from_symmetry
standardize_cell 标准化结构
find_primitive 8原子常规胞得到2原子原胞
refine_cell 得到理想化常规胞
niggli_reduce 改写基矢,核对晶胞体积不变
delaunay_reduce 另一种晶格约化,核对体积不变

Hall编号对应具体空间群设置,不等于国际空间群编号。Niggli/Delaunay约化也不等于凭空删除原子。把约化晶格用于结构时,还要一致地转换坐标,不能只替换POSCAR前三行。

3 倒易网格、权重和布里渊区#

mapping, addresses = spglib.get_ir_reciprocal_mesh([6,6,6], cell)
import numpy as np
representatives, weights = np.unique(mapping, return_counts=True)
print(len(mapping), len(representatives), weights.sum())

本例6³全网格216点,约化为20个代表点,权重和仍为216。

倒易网格代表点和权重

函数 本例用途
get_ir_reciprocal_mesh 从结构生成不可约网格及映射
get_stabilized_reciprocal_mesh 直接从旋转生成网格,与代表点数量交叉核对
get_grid_point_from_address 将整数网格地址转回线性索引,抽查0、7、90、215
get_grid_points_by_rotations 旋转一个点,核对仍映射到同一代表点
relocate_BZ_grid_address 将网格地址搬到第一布里渊区,保留边界映射
get_BZ_grid_points_by_rotations 在搬移后的网格中查旋转点,检查索引范围

整数地址要按网格尺寸和偏移转换成分数坐标。实空间旋转与倒易空间旋转不能混用;完整脚本使用逆转置得到倒易旋转。布里渊区边界可能有多个等价表示,不能仅按数组长度判定多算了物理点。

4 二维与磁性接口#

函数 本例
get_symmetry_layerdataset / get_layergroup 带真空石墨烯,非周期方向为第3方向,两者得到层群80
get_magnetic_symmetry_dataset Fe指定标量磁矩[2,−2],UNI编号1599
get_magnetic_symmetry 旋转、平移与时间反演标记
get_magnetic_spacegroup_type 按UNI编号查询磁群类型
get_magnetic_spacegroup_type_from_symmetry 从实际磁操作识别,UNI编号一致
get_magnetic_symmetry_from_database 提取对应磁群数据库操作

层群编号不是三维空间群编号。磁群分类依赖你给出的磁矩和标量/轴矢量约定;只指定一个反铁磁排列不能证明它是能量最低排列。

5 版本与错误处理#

get_version、spg_get_version、spg_get_version_full、spg_get_commit记录库版本与构建信息;get_error_message演示旧错误查询接口。脚本包含旧入口是为了说明现有代码的迁移,不建议新项目继续依赖已弃用接口。常用版本查询直接用:

print(spglib.__version__)

“31个入口均执行”只表示本版本的顶层函数覆盖,不表示所有参数组合、磁构型和退化晶格都已穷举。更换库版本后以新版本实际接口与本地输出为准。

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

查看配图

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

100%查看原图 ↗