VTST:原生动力学矩阵实操
从已优化的NH3最小点和鞍点出发,使用ICHAIN=1和DISPLACECAR收集力并提取Hessian。
阅读本篇目录
本篇演示 VTST 的原生动力学矩阵入口 ICHAIN=1:逐个移动选中的笛卡尔自由度,收集力,再用 dymmatrix.pl 生成质量加权矩阵和频率。它与 VASP 内置的 IBRION=5 频率入口是两种不同的执行方式。
1. 先准备已优化的结构#
下载完整输入、原生结果、CSV 与绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd vtst-native-dynmat
module load ase/3.29.0
bash read.sh
bash plot.sh
默认读取附带的实际结果,CSV 在 analysis-read/,图片在 figures/。需要重算时运行 bash submit.sh,等待作业结束后执行 bash read.sh work-new analysis-read 和 bash plot.sh。
本例调用 VASP 6.6.1 + VTST,编译环境为 NVHPC 25.3、配套 OpenMPI 与 MKL 2023.2。两组原始实算分别使用 P100 和 V100 16G,每组 1 张 GPU、1 个 MPI 进程、1 线程;包内模板在 P100 上顺序计算两组。POTCAR 不放进下载包,提交脚本在集群读取 PAW64/PBE 的 H、N 文件并按 POSCAR 顺序组合。
本例使用之前已优化的 NH₃ 最小点及翻转鞍点,四个原子放在 12 Å 立方盒中。此前结构优化的力标准为 0.02 eV/Å;本篇只收集有限位移力,不再优化结构和晶胞。
最小点 inputs/minimum/POSCAR:
H N
1.000000000000000
12.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 12.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 12.0000000000000000
H N
3 1
Direct
0.5000000000721657 0.5591616300961801 0.4838419542058191
0.5681915934809153 0.4410526811637319 0.4838403610398243
0.4318084079056659 0.4410526818880980 0.4838403616372904
0.4999999985412533 0.4804220901853165 0.5161192397837309
鞍点 inputs/saddle/POSCAR:
H N
1.000000000000000
12.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 12.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 12.0000000000000000
H N
3 1
Direct
0.4999999993207838 0.5640506507416372 0.4991386256267992
0.5724328585054330 0.4386033291705689 0.4991388281979632
0.4275671293526156 0.4386033229234896 0.4991388289624208
0.5000000128211661 0.4804317804976301 0.4992503838794862
顺序均为 H、H、H、N。替换体系时必须让 POSCAR、POTCAR、位移行和后处理的原子顺序一致。
2. 写入计算参数#
最小点的完整 INCAR:
SYSTEM = NH3 VTST native dynamical matrix minimum
ENCUT = 550
PREC = Accurate
EDIFF = 1E-6
EDIFFG = -1E-8
IBRION = 3
POTIM = 0
ICHAIN = 1
NSW = 13
ISIF = 2
ISMEAR = 0
SIGMA = 0.05
LREAL = .FALSE.
LASPH = .TRUE.
LWAVE = .FALSE.
LCHARG = .FALSE.
NELM = 150
ALGO = Normal
ISYM = 0
NWRITE = 2
ICHAIN=1 让 VTST 控制位移序列,配合 IBRION=3、POTIM=0。电子收敛使用 1E−6 eV,与本系列其他操作算例一致。
这里 EDIFFG=-1E-8 是为避免有限位移收集提前停止而设置的执行控制;它不是把前面的结构优化力标准改成 1E−8。NSW=13 对应本例一次参考力计算,加 12 个非零笛卡尔位移;换成其他自由度数量时,需要相应增加步数。
完整 KPOINTS:
Gamma
0
Gamma
1 1 1
0 0 0
3. DISPLACECAR怎样写#
0.015 0.015 0.015
0.015 0.015 0.015
0.015 0.015 0.015
0.015 0.015 0.015
每行对应一个原子,三列依次选择 x、y、z 方向。非零数值是实际位移量,单位 Å;0.015 0.015 0.015 的含义是依次计算三个独立方向,不是把三个方向同时移动一次。
本例四行全非零,因此共有 12 个位移方向。原生实现使用参考点加单边位移,本例实际产生 13 组力;不要把它与中心差分的正负位移数量混淆。
4. 提交与查看结果#
在资料包根目录:
bash submit.sh
squeue -u "$USER"
待作业完成后:
ls work-new/minimum
head -15 work-new/minimum/freq.dat
bash read.sh work-new analysis-read
bash plot.sh
模板已经顺序运行 VASP 和 dymmatrix.pl。如果需要对自己现有的 OUTCAR 单独提取,进入保存了正确 DISPLACECAR 的目录再执行:
module load vtstscripts/1040
dymmatrix.pl DISPLACECAR OUTCAR
它读取 OUTCAR 中 VTST 写出的 HIPREC TOTAL-FORCE,生成 freq.mat、eigs.dat、freq.dat、modes.dat。普通静态 OUTCAR 或内置频率 OUTCAR 不能直接假定包含相同数据。
freq.mat 是质量加权矩阵,单位对应 eV/(Ų·amu);eigs.dat 是其本征值,不能直接当作 Hz。freq.dat 给出 cm⁻¹,末列 1 表示虚频、0 表示实频。下一篇说明为什么分子的原始 12 个模式不能直接全部拿来计算前因子。
5. 本例实际得到什么#

两组原生计算正常结束,每组实际收集 13 组力。去除整体平移、转动后,最小点有 6 个正的内部振动,鞍点有 1 个虚频和 5 个正频率。图中箭头由本次矩阵的内部模式换算为笛卡尔位移并放大展示,不是 MD 轨迹。
继续阅读整体模式与频率检查,查看原始频率、内部模式和中心差分对照。