SeeK-path完整接口与路径参数实操
已安装版本的完整顶层接口实操、真实结构输入、数值核对与数据图。
阅读本篇目录
先运行现成例子#
集群通过pymatgen/2026.9.24环境提供SeeK-path。本例实际运行Si、ZnS和Si超胞,比较四个公开路径接口、是否使用时间反演、目标点间距,以及结构容差。
module purge
module load pymatgen/2026.9.24
python seekpath_options.py
cat seekpath/RESULTS.json
ls seekpath/*.csv
脚本实际执行36组路径调用,另做容差和特殊几何阈值对照。图与CSV均由这些调用结果生成。
1 四个接口分别返回什么#
| 接口 | 选择方法 |
|---|---|
| get_path | 高对称点、线段连接和标准原胞信息,不自动采样所有点 |
| get_explicit_k_path | 在推荐路径上生成显式点,提供线性距离、标签与分段范围 |
| get_path_orig_cell | 将路径坐标转换到输入晶胞的倒易基矢下 |
| get_explicit_k_path_orig_cell | 输入晶胞坐标下的显式路径点 |
from ase.build import bulk
import seekpath
atoms = bulk('ZnS', 'zincblende', a=5.45)
cell = (atoms.cell.array, atoms.get_scaled_positions(), atoms.numbers)
result = seekpath.get_explicit_k_path(
cell, with_time_reversal=True, reference_distance=0.025,
recipe='hpkot', threshold=1e-7,
symprec=1e-5, angle_tolerance=-1.0)
print(result['path'])
print(result['explicit_segments'])
得到路径后,要让电子结构计算使用与坐标定义匹配的晶胞。对于超胞,原胞路径换到输入基矢后不自动成为超胞布里渊区的标准高对称路径;脚本保留工具产生的提示,避免忽略这个差别。
2 目标间距不是每段点数#
ZnS的实际点数:
| 时间反演 | reference_distance/Å⁻¹ | 显式点数 |
|---|---|---|
| 使用 | 0.025 | 200 |
| 使用 | 0.05 | 97 |
| 不使用 | 0.025 | 400 |
| 不使用 | 0.05 | 194 |

reference_distance控制目标倒易空间间距,工具按线段长度确定点数并处理端点,因此间距翻倍不保证总点数严格减半。这与VASPKIT KPATH里的“每段20点”不同。若使用鸢算分段能带工作流,请继续按其KPATH格式生成和读取,不要把SeeK-path这个浮点数直接填进KPATH的点数行。
3 时间反演和反演对称性不是一件事#
ZnS没有空间反演。取消时间反演后,本例增加相应反向路径,点数翻倍;Si有反演,表现可能不同。是否允许时间反演取决于实际物理计算,不能只为减少点数而设置True。SeeK-path并不会从这个结构三元组中自动读取你的磁序或外场。
4 三个容差控制各自用途#
symprec:spglib的笛卡尔位置容差,单位Å。angle_tolerance:对称性角度容差,−1使用工具默认处理。threshold:判断特殊晶格度量边界的阈值,不是另一个原子位置容差。
本例对Si一个原子施加(0.001,0.002,0.0015) Å位移:symprec取1e-5和0.001 Å时得到空间群1,取0.01 Å时恢复227。后者表示算法把畸变当作容差,不是证明结构没有变化。对标准Si改变threshold从1e-9到0.1没有改变空间群,也不会凭空改变结构。
5 如何把结果交给画图程序#
CSV保留路径线性距离与笛卡尔k坐标,JSON保留路径标签和分段索引。explicit_segments中的结束索引按Python切片约定使用;断开的线段不能画成一条跨越布里渊区的直线。应将计算出的每个k点本征值与同一顺序的路径坐标对应,再画能带。
本例仅做结构识别与k路径生成,不产生电子能带本征值。改变结构后需要重新运行实际电子结构计算,不能复用硅的本征值来画ZnS。