xTB 周期边界:GFN-FF与tblite固定晶胞
GEN输入、晶格梯度、固定晶胞优化,以及48原子苯分子晶胞实例。
阅读本篇目录
下载完整输入、原生文本输出、CSV与画图脚本,保存为example.zip:
python3 -m zipfile -e example.zip .
cd xtb-periodic-dipro-examples
bash results.sh
bash plot.sh
使用xtb/6.7.1官方Intel版、固定提交edcfbbe,单线程CPU。原始参考结果位于reference-results;用sbatch job.slurm 算例名提交,计算结果写到新的work/算例名。下文贴出的核心命令都对应实际执行输入。
1. 周期输入要包含什么#
本例把一个甲烷放进8×8×8Å的周期盒,演示文件与操作,不作为固态甲烷的收敛模型。GEN文件完整内容:
5 S
C H
1 1 4.0000 4.0000 4.0000
2 2 4.6293 4.6293 4.6293
3 2 4.6293 3.3707 3.3707
4 2 3.3707 4.6293 3.3707
5 2 3.3707 3.3707 4.6293
0 0 0
8 0 0
0 8 0
0 0 8
首行的S表示周期结构和Cartesian坐标。第二行列出元素,原子行前两个数为序号和元素类型序号;最后是原点和3个晶格矢量。坐标单位Å,不能把Bohr坐标直接贴进来。
2. 普通GFN-FF与晶格梯度#
sbatch job.slurm methane-periodic-FF
xtb input.gen --gfnff --grad --parallel 1
cat gradient
cat gradlatt
cat gfnff_charges
本例总能量约−0.63093021721Eh。gradient包含原子坐标与原子梯度,gradlatt包含晶格与对应梯度,均按原生原子单位存储;不要把晶格梯度直接叫应力GPa。gfnff_charges本例碳约−0.09165784e、各氢约0.02291446e,总电荷为零。
配套也运行了孤立分子GFN-FF:
sbatch job.slurm methane-molecular-FF
孤立与周期计算的边界条件不同,不能把能量差不加说明地当作晶格能。GFN-FF不是电子结构方法,不提供可信的轨道能带或电子DOS。
3. 周期GFN2与固定晶胞优化#
sbatch job.slurm methane-periodic-tblite
sbatch job.slurm methane-fixed-cell-opt
核心命令:
xtb input.gen --gfn 2 --tblite --grad --parallel 1
xtb input.gen --gfn 2 --tblite --opt loose --cycles 20 --nocellopt --parallel 1
这里的GFN2与GFN-FF是不同模型,不横向比较它们绝对总能量的高低。--nocellopt固定晶胞、只允许原子位置变化。本例优化后晶格仍为8Å立方盒,体积512ų,原子位置已调整。
cat reference-results/methane-fixed-cell-opt/xtbopt.gen
普通XYZ通常不包含足够晶胞信息,保存周期结果时保留GEN文件。若目标是变胞优化,应先确认该方法与程序入口的支持范围,再检查真空、周期方向和晶格梯度。
4. 苯分子晶胞#
下载包还包含官方指南的4分子、48原子苯晶胞,用普通GFN-FF实际计算梯度:
head inputs/benzene-crystal-gfnff/input.coord
tail -n 8 inputs/benzene-crystal-gfnff/input.coord
sbatch job.slurm benzene-crystal-gfnff
xtb input.coord --gfnff --grad --parallel 1
该.coord输入使用Bohr坐标,包含$periodic和晶格,不能与上面的GEN单位混用。

本安装版的--mcgfnff分子晶体重参数化入口在这里的试算出现电荷方程求解问题。本教程采用已可运行的普通--gfnff;不要复用旧gfnff_topo缓存后,把普通力场结果误标成mcGFN-FF。换结构或模型时使用干净目录。