VTST:晶胞缩放、格式转换与速度清理
区分改变晶胞与缩放原子,了解CIF精度,并在副本中清除速度区块。
阅读本篇目录
下载VTST几何与模式完整示例,保存为example.zip:
python3 -m zipfile -e example.zip .
cd vtst-geometry-mode-examples
bash results.sh
bash plot.sh
这几步读取参考数据并画图。自己执行这些短工具时,运行bash run.sh;结果在work/,已有目录会保留。bash read.sh work核对新结果。这里不启动VASP,也不进行结构优化或MD;结构来自前面的真实NH₃翻转实例,脚本为已安装的VTST scripts1040,使用系统Perl及配套模块,不需要MPI/CUDA编译。
1. 改变晶胞,先决定原子怎样跟着变#
本例原始晶胞为12×12×12 Å,POSCAR缩放因子为1。先看输入:
cat inputs/POSCAR
module load vtstscripts/1040
mkdir cell-demo
cp inputs/POSCAR cell-demo/
cd cell-demo
boxset.pl POSCAR 1.25
head -n 12 POSCAR.out
对这个输入,1.25把晶胞变为15×15×15 Å,但原子的笛卡尔坐标保持不变,分数坐标除以1.25。这不是把分子键长拉长25%,也不是原子始终保持相同分数位置的均匀应变。
参数是POSCAR的缩放因子;原始因子、基矢及负体积写法不同时,不要把它误当成“直接输入新盒长15”。运行后读取输出晶胞与笛卡尔坐标,再决定是否用于下一步计算。

本例全部原子的笛卡尔坐标最大差约5×10⁻¹⁴ Å,属于文本读写的浮点误差。若目标是应变研究,应明确选择是否随晶胞缩放原子;不要用本例结果代替结构弛豫。
2. 导出CIF,保留POSCAR作为计算原件#
pos2cif.pl POSCAR
head -n 20 POSCAR.cif
这个版本只输出五位小数的分数坐标。本例最大笛卡尔舍入差约3.8×10⁻⁵ Å;CIF适合查看结构,但它不是原POSCAR的无损副本。计算续跑和精密力差比较继续使用原POSCAR/CONTCAR。
ASE可能根据包含POSCAR的文件名猜格式;读取此文件时显式指定:
/public/toolkit/miniconda3/envs/ase-3.29.0/bin/python - <<'PY'
from ase.io import read
a = read('POSCAR.cif', format='cif')
print(a.cell.lengths())
print(a.cell.angles())
print(a.get_volume())
PY
当前安装的老getangle.py存在语法问题。读取角度、体积可用上面ASE方法;原POSCAR的三个角为90°、体积1728 ų。
3. 删除速度区块,会覆盖输入#
posvdel.pl最终用结果替换原文件。先在工作副本中备份:
cp POSCAR POSCAR.before-strip
posvdel.pl POSCAR
本例可运行包中的work/strip-velocity-blank/保留了真正含四行速度的输入副本与清理结果。该脚本识别的区块是“坐标之后空一行,紧接每原子三分量速度”。本例内容为:
0.1 0.0 0.0
0.0 0.1 0.0
0.0 0.0 0.1
0.0 0.0 0.0
额外插入Cartesian标记的其他格式不能直接交给这个老脚本;它可能误判而仍然正常退出。处理自己的CONTCAR时先检查区块格式,清理后核对元素、原子数、晶胞和坐标。本操作仅删速度,不重新优化结构。
脚本说明:VTST官方文档。