xTB专题

xTB接口对象、轨道与错误处理

理解环境、分子、计算器和结果对象,正确复制更新状态,读取列优先矩阵并处理错误队列。

更新于 2026-11-09约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

本篇面向希望把xTB接到自己程序中的用户。稳定接口围绕四个对象:环境负责输出和错误,分子负责结构、电荷等输入,计算器负责方法与数值设置,结果对象保存能量、梯度和波函数相关数组。

1. 先跑共同的小例#

下载接口源码、固定输入和结果图包,进入 xtb-c-api,在CPU作业内执行:

bash run.sh

本包用现有静态库编译C助手,不要求额外安装Python-xTB绑定。icx编译C,ifx负责链接Fortran库;-nofor-main 用于C主程序,MKL采用顺序库,运行限制为一个线程。完整命令已在脚本里,不需要手动拼长命令。

2. 对象的基本顺序#

核心调用如下;完整可编译源码是包内 api_driver.c,包含逐步错误检查和数组分配。

xtb_TEnvironment env = xtb_newEnvironment();
xtb_TMolecule mol = xtb_newMolecule(
    env, &natoms, numbers, positions_bohr, &charge, &uhf, NULL, NULL);
xtb_TCalculator calc = xtb_newCalculator();
xtb_TResults res = xtb_newResults();
xtb_loadGFN2xTB(env, mol, calc, NULL);
xtb_setAccuracy(env, calc, 0.0001);
xtb_setMaxIter(env, calc, 500);
xtb_setElectronicTemp(env, calc, 300.0);
xtb_singlepoint(env, mol, calc, res);
xtb_getEnergy(env, res, &energy);
xtb_getGradient(env, res, gradient);

本例使用孤立分子,所以晶格和周期标志传NULL。分子的原子数、元素、电荷、未成对电子数等条件改变时,应重新创建相应对象;仅更新坐标可用 xtb_updateMolecule。周期体系、特殊方法和溶剂应分别核对支持范围。

3. 更新坐标时怎样保留上一份结果#

先用 xtb_copyResults 保存副本,再更新原分子坐标并把新计算写入原结果对象。这样可以比较前后结构,而不是让同一个指针被新结果覆盖后丢掉旧状态。本例实际做了水分子坐标小位移和还原,并保留副本中的全部数组。

head -n 18 raw/water-gfn2/api/result.json
cat raw/water-gfn2/api/handled-input-error.json

结果JSON包含 center、updated、restored 和前后副本。后一个文件演示查询尚未计算的结果时如何拿到错误消息;这不是正常计算出的零能量。自己的程序应检查环境状态、读取错误信息并释放不再使用的对象,再按正确输入创建新环境。

xtb_delResults、xtb_delCalculator、xtb_delMolecule 和 xtb_delEnvironment 需要传对象指针的地址,释放后句柄会置空。重复建模或批量调用时,应把对象生命周期写清楚。

4. 轨道数、矩阵顺序和物理含义#

接口与CLI梯度对照、独立差分、分子轨道和完整键级

先用 xtb_getNao 获取维数,再分配轨道能量、占据和系数数组。水的GFN1有8个分子轨道、GFN2有6个;不能把一个方法的固定数组长度直接用于另一个方法。

Fortran返回的矩阵按列优先存储,NumPy读取时可用 reshape((nao, nao), order="F")。轨道相位和简并子空间的表示可以改变,不应只凭某个系数正负判断物理是否不同;没有重叠矩阵S时,也不能用CᵀC替代CᵀSC检查正交。

本例导出的孤立分子virial不用于解释周期晶体应力。MO能量图只是当前近似方法的分子轨道结果,不是晶体能带或实验激发谱。

5. 查看完整接口索引与范围#

cat api-symbol-coverage.csv

CSV列出当前开发头中的全部函数,并标注本例实际调用情况。GFN0、GFN-FF、溶剂和外电荷等未在本包运行的分支仍明确单列;符号存在并不等于所有方法组合都可直接套用。xtb_getAPIVersion 返回的是接口ABI版本,也不是xTB发行版号。

module load sisl/0.16.4
python -B verify.py

这一步重读已完成数据,不重新计算电子结构。输入、静态库和头文件条件不同时,请先核对对应版本的官方接口说明与结果对象实现,再迁移到自己的程序。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗