计算化学公社
标题: gau_g_xTB:基于社长的gau_xtb 思路扩展的 g-xTB 与溶剂化 Gaussian External 接口 [打印本页]
作者Author: Illuminatia 时间: 2026-6-27 21:13
标题: gau_g_xTB:基于社长的gau_xtb 思路扩展的 g-xTB 与溶剂化 Gaussian External 接口
先前用半经验方法辅助寻找反应路径和做高通量计算时,卢天老师的
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 流程中排查。
笔者能力有限, 写的没有非常优雅,欢迎批评指正。
(, 下载次数 Times of downloads: 23)
作者Author: Stardust0831 时间: 2026-6-27 21:54
本帖最后由 Stardust0831 于 2026-6-27 22:00 编辑
溶剂化参数我是直接改接口脚本里调用xtb部分的命令,加xtb支持的溶剂模型选项。
似乎是相当于把要给xtb的参数放在调用命令的后面避免了侵入性较强的直接改脚本?看起来蛮可行的。
g-xTB对输入输出要求有啥额外特别的地方么,想请教一下您做了哪些额外工作以支持g-XTB呢?g-xTB的可用性现在怎么样,支持解析hessian了嘛?
我之前写过了gau_xTB的python实现,可以在windows和linux等更多的平台实现gaussian和xTB联用,所有的功能也都在同一个文件里实现、无需复制多个文件,跨平台实现gaussian与xTB程序联用搜索过渡态、产生IRC、做振动分析,这个项目的github仓库是开源的,如果g-XTB的参数确有特殊之处,或许可以把这事也推广到这个跨平台版本,我很欢迎外部pr或者明确的需求issue,我们可以一起成为这类开源代码仓库的代码贡献者
作者Author: Illuminatia 时间: 2026-6-27 22:08
怎么说呢,实际上就是同时支持的xTB 和新的g-xTB, 实际上用的gau_xTB的那一套原理, 只是parser改成了Python 版 extderi.py. 然后支持直接在“.gjf” 直接添加溶剂化参数
作者Author: Stardust0831 时间: 2026-6-27 22:23
本帖最后由 Stardust0831 于 2026-6-28 00:10 编辑
想请教一下是因为g-xTB的输出格式有变化导致旧有接口失效了嘛?我比较好奇您为了支持g-xTB具体做了啥额外工作?
6月28日凌晨更新:
已完成测试,g-xTB的输出格式与原有xTB兼容,我之前我已有的python写的跨平台的接口就可以直接实现所需功能,gau_xtb.py 原本就支持通过环境变量GAU_XTB_COMMAND追加 xTB 参数。具体代码实现在gau_xtb.py:437:
- command = split_command(os.environ.get("GAU_XTB_COMMAND", "xtb"))
- command.extend(["mol.xyz", "--chrg", str(data.charge), "--uhf", str(data.uhf)])
复制代码 所以只需要:export GAU_XTB_ARGS=--gxtb
就可以让实际对xtb的调用变成类似xtb mol.xyz --chrg 0 --uhf 0 --gxtb --hess --grad,这一用法同样适用于给xtb加溶剂模型的参数。
暂未发现其他需要检查和测试的点。如果大家觉得通过环境变量传参数进去不够直接,我可以支持直接追加命令行参数,相信这也是很好实现的。
作者Author: sobereva 时间: 2026-6-28 01:39
之前有人问我那个gau_xtb是否支持g-xtb,我的态度是等什么时候g-xtb正式发表了我再去支持,免得方法/程序一变动我还得改。想当年xtb版本迭代导致的变化就导致我修改了好多次脚本去兼容
作者Author: Stardust0831 时间: 2026-6-28 01:51
测过了,现在发出来的这个g-xTB是可以直接被此帖之前的两个版本的接口所支持的。
溶剂和g-xTB的调用参数改gau_xTB里调用xTB的命令就行。
我之前那个python写的跨平台版本可以直接读环境变量来传给xTB这些额外参数。话说社长觉得直接对跨平台版本的gau_xtb接口支持gjf文件里面给xTB传参数是有价值的吗?我可以尽快支持。
似乎这种接口还蛮多的了,接orca、xTB和gpu4pyscf都有了,在想要不要把这些接口重构并汇总成一个新的开源项目,输出格式有变化或者要接新的程序也可以直接给这个项目提pr和issue。提pr也都会记录作者贡献。
作者Author: RAL 时间: 2026-6-28 11:13
这东西有了解析梯度以后,感觉会比xtb好很多
作者Author: Daniel_Arndt 时间: 2026-6-30 09:40
g-xTB的2.0.0版和2.0.1版发布的其实都是一个修改后的xtb 6.7.1。
| 欢迎光临 计算化学公社 (http://bbs.keinsci.com/) |
Powered by Discuz! X3.3 |