本帖最后由 Illuminatia 于 2026-6-27 21:40 编辑
先前用半经验方法辅助寻找反应路径和做高通量计算时,卢天老师的 gau_xtb 给了我很大帮助。它的核心作用是把 Gaussian 和 xTB 接起来:Gaussian 负责优化、频率、过渡态搜索等流程控制,xTB 负责快速提供能量、梯度和 Hessian。这样在正式 DFT 计算之前,可以先用较低成本摸清构型、虚频模式和过渡态附近的大致情况。后来我在使用实验性的 g-xTB 时,遇到了一个实际需求:原版 gau_xtb 主要面向常规 xTB 调用,并没有直接支持我当时使用的 g-xTB 调用方式;同时,溶剂化计算中的相关参数也不方便从 Gaussian External 接口中干净地传递给底层 xTB/g-xTB 程序。实际使用时,脚本路径、临时文件、converter、小工具和服务器环境又很容易混在一起。换一台机器后,常见问题往往不是方法本身,而是接口脚本里残留了旧路径,或者缺少某个转换程序,或者参数没有正确传到底层程序。
所以我在 gau_xtb 思路的基础上,把自己使用的 g-xTB 联动方式整理成了一个相对干净、便于迁移的压缩包: 这个包的作用很简单:让 Gaussian 通过 External 接口调用支持 –gxtb 的 xTB/g-xTB 可执行程序,并允许在 Gaussian 输入中比较方便地传递 g-xTB 和溶剂化相关参数。这样在 Gaussian 的 opt、freq 和过渡态初筛流程中,可以由 g-xTB 提供能量、梯度和 Hessian。
本包当前按以下版本整理和测试: - g-xTB distribution label:v2.0.1
- 可执行文件报告:xtb version 6.7.1 (26dd68d)
- 可执行文件编译日期:2026-05-14
- xtb –help 中确认 –gxtb 选项可用
基本用法
解压后进入目录: - tar -xzf gau_g_xTB.tar.gz
- cd gau_g_xTB
复制代码在目标机器上编译 Gaussian 坐标到 xyz 的转换程序: 设置 g-xTB 安装目录: - export GXTB_HOME=/path/to/gxtb-install-root
复制代码默认情况下,脚本会调用: 因此,这个 xtb 可执行文件需要支持 –gxtb。 随后可以先运行自检: 如果只是想查看 wrapper 支持哪些参数,可以运行: - /path/to/gau_g_xTB/xtb.sh –help
复制代码
Gaussian 输入示例
实际 Gaussian 输入中,建议一开始直接写 xtb.sh 的绝对路径,避免被 PATH 问题干扰。后续还是建议使用Environment Modules 方便版本管理。 例如,用 g-xTB COSMO 做结构优化,可以写成: - #p opt external=’/path/to/gau_g_xTB/xtb.sh –parallel 4 –solvent cosmo:ch2cl2’ UGBS nosymm
复制代码频率计算可写成: - #p freq external=’/path/to/gau_g_xTB/xtb.sh –parallel 4 –solvent cosmo:ch2cl2’ UGBS nosymm
复制代码过渡态初筛或释放约束后的 TS 优化可写成: - #p opt(ts,calcfc,noeigen,nomicro) external=’/path/to/gau_g_xTB/xtb.sh –parallel 4 –solvent cosmo:ch2cl2’ UGBS nosymm
复制代码这里的电荷、多重度、坐标和其它 Gaussian 关键词仍然按普通 Gaussian 输入来写。Gaussian 在每一步会告诉外部程序当前需要几阶导数,xtb.sh 内部大致对应为: - derivative level 0:调用 –sp
- derivative level 1:调用 –grad
- derivative level 2:调用 –hess –grad
在 g-xTB 模式下,如果要修改这个值,可以用 –xtb-arg 把参数直接传给底层 xTB/g-xTB。例如: - –xtb-arg –etemp –xtb-arg 300
复制代码溶剂化相关参数也可以通过 wrapper 传递到底层程序。当前示例中使用的是: 具体可用的溶剂模型和溶剂名称仍取决于使用者本机安装的 xTB/g-xTB 版本,请以对应版本的 xtb –help 和官方文档为准。
压缩包内容
解压后主要结构如下: - gau_g_xTB/
- ├── xtb.sh
- ├── extderi.py
- ├── README.md
- ├── VERSION.md
- ├── NOTICE.md
- ├── src/
- │ ├── genxyz.f90
- │ └── extderi.f90
- ├── scripts/
- │ ├── build_genxyz.sh
- │ └── smoke_check.sh
- └── examples/
- └── …
复制代码
其中: - xtb.sh 是 Gaussian 调用的入口;
- extderi.py 负责把 xTB/g-xTB 的能量、梯度和 Hessian 转成 Gaussian External 需要的输出格式;
- src/genxyz.f90 和 src/extderi.f90 保留 Fortran converter 源码;
- examples/ 提供 Gaussian 示例输入;
- scripts/build_genxyz.sh 用于在目标机器上编译 genxyz;
- scripts/smoke_check.sh 用于做基本自检;
- README.md、VERSION.md 和 NOTICE.md 分别记录使用说明、版本信息和来源说明。
作者与来源说明
这个包的出发点来自卢天老师原先的 gau_xtb 思路:利用 Gaussian External 接口,把 Gaussian 的任务流程和 xTB 的快速能量及导数计算接起来。包内 Fortran 版 genxyz / extderi 的 lineage 也归功于 Dr. Tian Lu,Beijing Kein Research Center for Natural Sciences;相应原始注释已保留。
我在此基础上主要针对自己使用 g-xTB 时遇到的问题做了整理和扩展,包括: - 增加对实验性 g-xTB 调用方式的支持;
- 支持从 Gaussian External wrapper 向底层 xTB/g-xTB 传递溶剂化相关参数;
- 增加 Python 版 extderi.py converter;
- 补充示例输入、自检脚本和说明文档。
NOTICE.md 中也写明了这些来源和贡献关系。 如果在研究中使用了,请注意引用原版接口: - Tian Lu, gau_xtb: A Gaussian interface for xtb code, http://sobereva.com/soft/gau_xtb (accessed month day, year)
复制代码
使用建议
第一,这个脚本只解决接口问题:也就是 Gaussian 如何把结构和导数需求交给 g-xTB,以及如何把结果读回来。它不保证 g-xTB 本身一定适合某个具体体系。 第二,g-xTB 相关选项和溶剂设置本身仍在发展中,不建议把 wrapper 跑通等同于结果已经可靠。过渡态、虚频、溶剂模型、热化学校正和最终能垒仍然需要按具体体系认真检查。 第三,我更建议把它用于初筛、构型摸索和给后续更高级别计算提供起点,而不是直接把它当成最终能垒计算方案。
如果 Gaussian 报 External 程序输出缺失,可以先看当前作业目录下的: - gau_xtb_command.log
- xtbout
- xtb.err
复制代码如果提示 genxyz 不存在或不可执行,通常就是还没有在当前机器上运行: 如果底层 xTB/g-xTB 报溶剂、参数或 –gxtb 相关错误,建议直接在命令行中先测试对应的 $GXTB_HOME/bin/xtb 是否支持这些选项,再回到 Gaussian External 流程中排查。
笔者能力有限, 写的没有非常优雅,欢迎批评指正。
|