xTB专题

xTB 外电场与偶极:有限差分的实际操作

水分子的三个方向正负电场、偶极输出、步长比较与PTB极化率定义。

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

下载完整输入、原生文本输出、CSV与画图脚本,保存为example.zip:

python3 -m zipfile -e example.zip .
cd xtb-periodic-dipro-examples
bash results.sh
bash plot.sh

使用xtb/6.7.1官方Intel版、固定提交edcfbbe,单线程CPU。原始参考结果位于reference-results;用sbatch job.slurm 算例名提交,计算结果写到新的work/算例名。下文贴出的核心命令都对应实际执行输入。

1. 固定结构,分别施加电场#

本例使用前文优化的同一个中性水分子,不在外场下重新优化。电场三个分量以逗号分隔,单位原子单位。以x方向为例:

sbatch job.slurm water-field-0-
sbatch job.slurm water-field-0+

两个独立目录中的核心命令:

xtb input.xyz --ptb --efield -0.00010000,0,0 --json --parallel 1
xtb input.xyz --ptb --efield  0.00010000,0,0 --json --parallel 1

y、z方向分别提交water-field-1-、water-field-1+、water-field-2-、water-field-2+。配套还算了半步长±0.00005的6个条件,用于观察有限差分的步长影响。

2. 偶极矩怎么读#

python3 - <<'PY'
import json
d=json.load(open('reference-results/water-field-0+/xtbout.json'))
print(d['dipole / a.u.'])
PY

该字段为偶极矩原子单位,不能直接标Debye。沿x场的两个结果约为:

F=-0.0001: [0.37893448, 0.68781630, -0.09179968]
F=+0.0001: [0.38025092, 0.68777354, -0.09212308]

用[μ(+h)−μ(−h)]/(2h)得到该方向的响应列。所有结构与坐标系必须相同,不能把优化后旋转了的分子直接代入这个差分。

3. 本例差分结果#

单位为原子单位,行是偶极分量、列是外场方向:

 6.58220  -0.21380  -1.61700
-0.21380   6.81590   0.83250
-1.61700   0.83245   6.13865

半步长结果与之最大差约0.0001原子单位,其中也包含JSON打印精度影响。没有通过无限减小步长来提高精度:步长过小时,输出舍入会放大差分噪声。

4. 为什么与--alpha不完全相同#

本版本CLI外场计算重新执行PTB的两步流程;--alpha则有自己的简单微扰响应流程,调用路径不同。这里的外场偶极差分并不等同于前文PTB极化率的打印张量。两个实际结果如下:

相同水分子的两种原生响应定义,分别展示

不要混合两种定义后声称它们已经互相验证。若需要软件定义的PTB极化率,使用--ptb --alpha;若研究这个CLI外场入口下偶极如何变化,采用相同结构和成对外场,并保留计算路径说明。本例没有把PTB的总能量零占位值用于能量二阶差分。

cat water-externalfield-response.csv
bash plot.sh

CSV同时保留两种步长的外场差分和原生--alpha结果。方法路径可查固定版本PTB计算入口及其调用的响应模块。

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

查看配图

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

100%查看原图 ↗