VTST:一次生成全部振动模式动画
用真实NH3的DISPLACECAR、modes.dat和freq.dat生成12组XYZ动画,并解释振幅、帧数和原始模式边界。
阅读本篇目录
dymmodes2xyz.pl 可以根据位移自由度、modes.dat 和参考结构,一次生成多个模式的 XYZ 动画。本例使用真实 NH₃ 原生动力学矩阵输出的 12 个原始模式,不重新计算电子结构。
1. 解压并查看图表#
下载输入、12组动画、CSV 和绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd vtst-matrix-tools
module load ase/3.29.0 vtstscripts/1040
bash read.sh
bash plot.sh
ls reference-results/movies/movies
其中有 mode001.xyz 到 mode012.xyz,每个文件 8 帧。模式编号从 1 开始,对应 modes.dat 的列,不能把矩阵的每一行误认为一个完整模式。
2. 准备四类文件#
POSCAR:四原子的参考结构,原子顺序 H、H、H、N。DISPLACECAR:指明哪些笛卡尔自由度参与模式,每个原子一行。modes.dat:12×12 模式矩阵,每一列为一个模式。freq.dat:12 行频率和虚频标记,行数与模式数一致。
本例 DISPLACECAR 为:
0.01 0.01 0.01
0.01 0.01 0.01
0.01 0.01 0.01
0.01 0.01 0.01
脚本使用其中的正值分量建立自由度映射,所以应使用正的位移标记;不要自行用负号表达振动方向。原子顺序、自由度顺序和模式矩阵必须对应。
3. 实际生成动画#
mkdir movies-new
cd movies-new
cp ../inputs/POSCAR .
cp ../inputs/DISPLACECAR .
cp ../inputs/modes.dat .
cp ../inputs/freq.dat .
perl "$VTSTSCRIPTS_ROOT/dymmodes2xyz.pl" \
POSCAR DISPLACECAR modes.dat movies freq.dat 8 0.1
ls movies
cd ..
参数依次为参考结构、位移文件、模式矩阵、输出目录、频率文件、每个模式的帧数和全模式幅度。这里 8 是帧数,0.1 是按输入模式向量缩放的 Å 幅度;不是每个原子都移动 0.1 Å。
脚本按正弦函数生成帧,第 0 帧为参考结构,第 2/6 帧接近正/负振幅极值。原始模式向量已归一化时,全体位移范数的峰值约为 0.1 Å。输入的幅度只影响可视化,不改变频率或重新求解本征模式。
4. 用终端打开动画#
安装有 ASE 图形界面的个人电脑上可执行:
ase gui movies-new/movies/mode012.xyz
从集群下载 XYZ 后也可以用 OVITO 打开,并切换时间帧播放。集群命令行直接生成文件即可,不要求在登录终端启动图形窗口。
XYZ 保留元素和坐标,普通 XYZ 不保留晶胞,当前脚本还会把坐标折回周期晶胞;跨边界运动可能出现视觉跳跃。显示分子键时需要自行检查连接关系。

5. 不把动画当成新的频率计算#
本例保留完整 12 个原始模式,包括分子平移/转动方向和它们的有限位移数值误差。动画中出现虚频标记,不足以证明又找到了一个鞍点;也不能把原始 12 个频率全部代入分子振动热力学或跃迁前因子。相应处理见刚体模式与频率检查。
bash run.sh
bash read.sh work-new analysis-new
bash plot.sh analysis-new
analysis-new/mode-movies.csv 逐模式、逐帧记录频率标记与总位移范数;图表读取指定的结果目录,便于比较自己的新动画。