xTB隐式溶剂与网格精度
用水分子比较GBSA230、770和5810角点,读取溶剂与气相能量,并检查梯度和转动力矩。
阅读本篇目录
隐式溶剂把周围溶液表示为连续介质,不需要在结构里放入大量显式水。本例演示当前xTB6.7.1 C接口的GBSA/Still水溶剂;不能直接把它称为ALPB,也不能把单点总能差当作包含构象、热修正和标准态换算的完整溶解自由能。
1. 先运行再看三个网格#
下载完整接口源码、输入与绘图包,解压进入 xtb-api-extensions。在已分配的CPU作业内执行:
bash run.sh
也可 sbatch job.slurm 提交。CPU分区按56核整节点分配和计费,本例只使用一个线程,不使用GPU。脚本用现有xTB6.7.1头文件与静态库、oneAPI2024.2的icx/ifx编译链接,Python绘图来自 sisl/0.16.4。流程一次生成全部案例;完成后只读结果和绘图,不重复运行完整计算。
2. 添加溶剂的关键输入#
double temperature = 298.15;
int angular_grid = 5810;
xtb_setSolvent(env, calc, "water", NULL, &temperature, &angular_grid);
xtb_singlepoint(env, mol, calc, res);
温度单位K,角点数控制表面积分离散精度。当前安装的6.7.1实现采用GBSA/Still;较新上游文档的模型选择能力不能直接套用于这个旧接口。包内助手通过 YS_XTB_SOLVENT_GRID 传递网格,完整运行会自动比较230、770、5810三档,无须手敲长命令。
3. 查看实际结果和图片#
cat results/solvent-grid.csv
cat raw/gfn2-gbsa/result.json
| 角点数 | 总能/Eh | 最大转动力矩残差/Eh |
|---|---|---|
| 230 | −5.079968158441 | 5.715×10⁻⁵ |
| 770 | −5.079966742376 | 1.546×10⁻⁵ |
| 5810 | −5.079967002854 | 1.112×10⁻⁶ |

网格变化不保证总能单调;本例770到5810的能量差只有约 0.2605微Hartree,但转动力矩仍有可见残差。5810点相较230点约降低51倍,仍未达到图中 10⁻⁷ Eh目标。这说明“总能看起来不变”与“力的旋转精度足够”需要分别判断。
4. 独立检查梯度并重画#
module load sisl/0.16.4
python -B verify.py --reference
python -B plot.py
这些命令只读取已完成的原生结果,不重新做电子单点。5810网格下,九个分子坐标的能量差分与输出梯度最大差约 1.99×10⁻⁷ Eh/Bohr;这是对当前离散模型的梯度一致性检查,不表示积分网格已经完全收敛。
换自己的体系时,结合目标能量差、受力阈值和必要的刚性旋转对照选择网格。需要更严格力精度时,应继续核对模型与数值设置,不能因为脚本正常退出就默认满足精度。
5. 移除溶剂并回到气相#
xtb_releaseSolvent(env, calc);
xtb_singlepoint(env, mol, calc, res);
卸载后重新计算的GFN2气相水能量约 −5.070369440854 Eh;在相同固定几何下,5810点溶剂总能减气相总能约 −0.009597562 Eh。这是指定模型、设置和几何下的差值;比较不同结构或研究溶液反应时,各状态应使用一致的溶剂、温度、网格与热化学约定。