xTB 振动与模式跟随:氨分子反转实例
区分优化后Hessian、偏置Hessian和原生模式编号,提供缺失模式文件的转换脚本。
阅读本篇目录
下载完整输入、参考轨迹、CSV和画图程序,保存为example.zip:
python3 -m zipfile -e example.zip .
cd xtb-dynamics-path-examples
bash results.sh
bash plot.sh
环境为xtb/6.7.1,官方Intel版,固定提交edcfbbe。例子使用单线程CPU,配套job.slurm负责加载模块和运行;下文核心命令用于说明每一步实际执行的内容。原始结果在reference-results,重算结果在work。短演示用于学会操作,生产计算需要另外选择时长、精度和采样方案。
1. 先做优化与振动#
cat inputs/ammonia-opt-Hessian/input.xyz
sbatch job.slurm ammonia-opt-Hessian
xtb input.xyz --gfn 2 --ohess tight --json --parallel 1
--ohess先优化再算Hessian。氨是非线性4原子分子,共12个自由度:6个接近零的平移/转动模、6个振动模。优化后本例6个振动频率约为1160.33、1593.20、1593.21、3425.33、3477.32、3477.36cm⁻¹。
--hess对当前结构计算Hessian,不等于先优化;--bhess是偏置Hessian入口,不要把它当成另一种泛函。本例也实际运行了:
sbatch job.slurm ammonia-biased-Hessian
对应xtb input.xyz --gfn 2 --bhess tight --json --parallel 1。在这个小例的设置下其振动频率与普通优化后结果接近,不能据此认为偏置Hessian对所有体系都无影响。
2. 准备平面结构#
4
Planar ammonia
N 0 0 0
H 1 0 0
H -.5 .866025403784 0
H -.5 -.866025403784 0
sbatch job.slurm ammonia-planar-Hessian
核心命令:
xtb input.xyz --gfn 2 --hess --json --parallel 1
平面结构有一个约−928.01cm⁻¹的虚频,对应反转方向。负频率表示负曲率,不能当作实验中的负频振动峰。该固定结构不因此自动成为严格优化的过渡态。
3. 模式编号与文件转换#
原生模式编号1–6是投影后的平移/转动,振动从7开始。本例沿模式7跟随,不能看到“第一条物理振动”就写成--modef 1。
当前版本Hessian输出没有自动生成旧模式跟随入口所需的xtb_normalmodes。配套转换脚本从原生文本Hessian构造模式,并与原生JSON中的频率、约化质量核对。先等平面Hessian作业完成,再提交:
sbatch job.slurm ammonia-modefollowing-7
作业脚本中的步骤相当于:
/public/toolkit/miniconda3/envs/ase-3.29.0/bin/python make_normalmodes.py work/ammonia-planar-Hessian work/ammonia-modefollowing-7/xtb_normalmodes
然后在模式任务目录执行:
xtb input.xyz --gfn 2 --modef 7 --input settings.inp --parallel 1
settings.inp为:
$modef
n=8
step=.5
updat=.1
$end
本次原生程序把扫描点数调整为奇数,生成9帧。转换器目前专用于随包NH₃和匹配版本的文本输出,不能直接用于任意元素;其他分子需要使用正确原子质量和对应模式排序。
4. 输出与能量单位#
head -n 12 reference-results/ammonia-modefollowing-7/xtb_modescan_7.xyz
cat ammonia-modefollow.csv
bash plot.sh
xtb_modescan_7.xyz注释的第一个数是相对最低扫描点的能量,单位Eh;后面是频率、约化质量和原生扫描步坐标。图中乘627.509474换为kcal/mol,并用氮相对氢平面的高度画出反转方向。不要将原文件第一个数直接标成kcal/mol。

本例显示沿虚频方向离开平面结构的操作及两侧结构,不代替严格过渡态优化、IRC或速率计算。转换格式依据同版本模式读取源码。