pymatgen结构、表面与XRD操作
用Si建立结构、生成111表面并计算理想粉末XRD。
阅读本篇目录
本文使用鸢算科技集群实际运行的小算例。先下载输入、完整脚本与参考数据并解压,以下命令从解压目录开始。reference 保存原始参考结果,自己的运行放在 work,避免覆盖。
1 构建和检查Si结构#
使用pymatgen 2026.9.24独立Python环境,不需要MPI或GPU。
module purge
module load pymatgen/2026.9.24
mkdir -p work/symmetry
cp scripts/symmetry_examples.py work/symmetry/
cd work/symmetry
python symmetry_examples.py pymatgen-structure-xrd
from pymatgen.core import Structure, Lattice
from pymatgen.symmetry.analyzer import SpacegroupAnalyzer
s = Structure.from_spacegroup('Fd-3m', Lattice.cubic(5.43), ['Si'], [[0,0,0]])
print(len(s), SpacegroupAnalyzer(s).get_space_group_number())
s.to(filename='si.cif')
s.to(filename='POSCAR')
得到8原子Si常规胞、227号空间群。CIF写出再读入后,使用结构匹配检查;不要把格式转换当作结构优化。
2 切出(111)表面#
from pymatgen.core.surface import SlabGenerator
slab = SlabGenerator(s, (1,1,1), min_slab_size=10, min_vacuum_size=15, center_slab=True).get_slab()
slab.to(filename="POSCAR-slab")
本次生成8原子表面胞,沿表面法向的实际空隙为 16.459 Å。倾斜晶胞的c矢量长度不等于真空厚度,应沿表面法向投影检查。表面原子尚未弛豫,终止方式、化学计量、偶极和上下表面对称性仍需按研究体系选择。
3 计算理想粉末XRD#
from pymatgen.analysis.diffraction.xrd import XRDCalculator
pattern = XRDCalculator(wavelength="CuKa").get_pattern(s)
for angle, intensity in zip(pattern.x, pattern.y):
print(angle, intensity)

本例第一峰为 2θ=28.470830°。纵轴为归一化强度;图为理想结构的衍射峰,不包含仪器展宽、真实晶粒尺寸、织构或实验背景。结果在 xrd.csv,可与自己的结构计算作对照。
查看和复现配图#
下载包 figures 中是高清图片,可点击正文图片放大。reference 中保存数据与结果表;重新绘图可执行:
module purge
module load ase/3.29.0
mkdir -p work/replot
cp -r reference work/replot/
cp plot_reference.py work/replot/
cd work/replot
python plot_reference.py
不同教程共用此资料包;同一个脚本不需要重复下载。重新运行算例时使用新的工作目录。
方法与接口参考:pymatgen官方文档。
需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。