示例 11-4:过渡态验证——爬坡图像的有限差分频率分析¶
目的¶
- 对 CI-NEB(或 Dimer)得到的过渡态做
IBRION = 5频率计算,确认"有且仅有一个虚频"; - 检查虚频本征矢是否沿反应方向;
- 对初态做同样的计算,估算谐振子过渡态理论的 Vineyard 指前因子。
对应教程:第11章 过渡态搜索:NEB / CI-NEB / Dimer(§9)。
文件说明¶
| 文件 | 说明 |
|---|---|
INCAR |
电子部分与 NEB 相同、EDIFF = 1E-7;IBRION = 5、POTIM = 0.015、NFREE = 2、NSW = 1 |
KPOINTS |
与示例 11-1 相同(Γ 中心 4×4×1) |
| POSCAR | 由爬坡图像的 CONTCAR 经 set_freq_selective.py 生成(只放开反应相关原子) |
IBRION = 5 是唯一支持 Selective dynamics 的有限差分模式;IBRION = 6 会忽略它并计算全部原子。
运行步骤¶
以示例 11-1 为例(吸附原子是第 37 号原子,表面层 z ≈ 13.96 Å):
cd VASP/examples/11-pt-adatom-neb
mkdir -p ts_freq is_freq
SEL=../10-co-pt111-adsorption/set_freq_selective.py
# 快速检查:只放开吸附原子(3 个模,6 次 SCF)
python $SEL 02/CONTCAR -i 37 -o ts_freq/POSCAR
# 更完整:吸附原子 + 表面层(10 个原子,30 个模)
# python $SEL 02/CONTCAR -i 37 --zmin 13.0 -o ts_freq/POSCAR
python $SEL IS/CONTCAR -i 37 -o is_freq/POSCAR # 初态必须放开相同的原子
for d in ts_freq is_freq; do cp ../11-ts-freq-check/INCAR ../11-ts-freq-check/KPOINTS POTCAR $d/; done
(cd ts_freq && sbatch ../../10-co-pt111-adsorption/job.slurm)
(cd is_freq && sbatch ../../10-co-pt111-adsorption/job.slurm)
grep -E "f =|f/i=" ts_freq/OUTCAR | head -3
grep -E "f =|f/i=" is_freq/OUTCAR | head -3
注意 OUTCAR 中频率列表会打印两遍(第二遍在 "Eigenvectors after division by SQRT(mass)" 之后),只看前 3N_free 行。
预期结果 / 如何检查¶
ts_freq:恰好 1 个明显的f/i(虚频),其本征矢主要是吸附原子沿跳跃方向(x)的运动;另外 2 个为实频;is_freq:3 个都是实频(极小点);- 若 TS 出现 2 个明显虚频,说明是高阶鞍点或未收敛;没有虚频说明不是鞍点;
- 指前因子:\(\nu^*=\prod_i\nu_i^\mathrm{IS}/\prod_{j\neq\mathrm{imag}}\nu_j^\mathrm{TS}\)(单位 THz 或 s⁻¹),典型量级 \(10^{12}\)–\(10^{13}\) s⁻¹。
快速计算指前因子(把频率换成你 OUTCAR 中的数值,单位 THz):
import numpy as np
nu_is = np.array([3.0, 2.5, 2.4]) # placeholder numbers - replace with is_freq/OUTCAR values (THz)
nu_ts = np.array([2.6, 2.2]) # real TS modes only, imaginary one removed (THz)
print("nu* = %.3e s^-1" % (np.prod(nu_is) / np.prod(nu_ts) * 1e12))
注意事项¶
- 只放开吸附原子是最省时的检查,但会高估/低估部分频率;发表数据时应放开更多近邻原子并检查收敛;
- 小于约 50 cm⁻¹ 的虚频多为数值噪声:提高
EDIFF、检查 TS 是否收敛、尝试POTIM = 0.01/0.02; - 振动模式可视化:VaspVib2XSF;
- VTST 的动力学矩阵方法(
ICHAIN = 1+dymmatrix.pl、dymprefactor.pl)是另一种选择,见教程 §9.2。