xTB 外电场与偶极:有限差分的实际操作
水分子的三个方向正负电场、偶极输出、步长比较与PTB极化率定义。
阅读本篇目录
下载完整输入、原生文本输出、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计算入口及其调用的响应模块。