xTB ONIOM内外分区与能量组合
用完整水分子片段定义GFN2内区和GFN-FF外区,运行ONIOM并用三个独立单点重建分层总能。
阅读本篇目录
当你希望把较精细的方法集中到局部区域,可使用ONIOM分层:低层方法计算全体系,再用内区的高层结果替换内区低层贡献。本例采用GFN2和GFN-FF两个现有方法,用两个完整水分子避免跨边界共价键的处理问题。
1. 运行例子#
下载完整输入、运行与绘图包,解压进入 xtb-cli-special,在已分配CPU作业内执行:
bash run.sh
也可 sbatch job.slurm 提交。CPU分区按56核整节点分配计费,本例一个线程,使用 xtb/6.7.1,绘图用 sisl/0.16.4。CPU队列维护时请待恢复后提交,不在登录节点做生产计算。共同资料包完整运行一次后即可阅读两篇教程,不需要反复计算。
2. 完整结构与内区编号#
cat inputs/dimer.xyz
6
Two intact water fragments;second shifted3Angstrom in x
O 0.05291772109030 0.10583544218060 0.15875316327090
H 0.81682432412487 0.28469910273760 -0.38959556953728
H -0.14865865300789 0.94592297669472 0.57088389466498
O 3.0529177210902998 0.10583544218060 0.15875316327090
H 3.81682432412487 0.28469910273760 -0.38959556953728
H 2.8513413469921098 0.94592297669472 0.57088389466498
前3个原子组成内区水分子,后3个是外区水分子。脚本使用 --oniom gfn2:gfnff 1,2,3:GFN2用于内区,GFN-FF用于全体系和内区低层参考。后一个水沿x平移3Å,保持各自几何;这里没有经过二聚体优化。

这是一个减法组合,不能称为“全体系都按GFN2精度计算”。内外区域之间的作用仍受低层描述等模型假设影响。
3. 从原生输出读取总能#
tail -n 25 raw/oniom-dimer/native.out
cat results/SUMMARY.json
本次ONIOM命令没有生成包含最终分层总能的 xtbout.json,最终结果从原生文本里的 ONIOM TOTAL ENERGY 读取。不要把中间片段的某个能量误认为总体系结果。
| 独立计算项 | 能量/Eh |
|---|---|
| GFN-FF,全体系 | −0.654517485464 |
| GFN2,内区 | −5.070369440854 |
| GFN-FF,内区 | −0.327257831610 |
| 原生ONIOM总能 | −5.397629094707 |
组合公式为:
E_ONIOM = E_low(full) + E_high(inner) - E_low(inner)
三个独立单点重建得到约−5.397629094708Eh,与原生结果差约10⁻¹²Eh。最后一项必须减去,避免内区低层能量被重复计入。比较反应或不同构型时,区域、原子映射、电荷、自旋和方法设置必须一致。
4. 查内区、复查和绘图#
cat raw/oniom-dimer/inner_region.xyz
module load sisl/0.16.4
python -B verify.py --reference
python -B plot.py
本例只验证完整分子片段下的固定结构能量组合,不把它当成分层优化、梯度或跨共价键边界的示例。实际分区跨越化学键时,还需要检查连接原子、边界处理与区域依赖,不能直接套用本例的1、2、3编号。