VTST:准备并运行instanton路径
用固定氢原子的NH3小例,介绍ICHAIN=4、温度、半路径目录和MODECAR的实际操作。
阅读本篇目录
当研究低温核量子隧穿时,instanton方法把虚时间路径表示为一串由弹簧连接的结构。它与普通NEB的势能最小路径有区别:温度会参与弹簧项,最终寻找的是有效作用量相关的驻点路径。
本例固定NH₃的三个H原子,允许N原子的x、y、z方向移动,初始N路径主要沿H平面的法向z方向。真空晶胞10Å,温度120K;计算4个半路径结构,程序镜像生成8个完整路径珠子。它适合学习输入和结果读取,不作为自由气相NH₃定量隧穿速率。
1. 先看结构与现成结果#
下载完整输入、实际输出与读取绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd vtst-instanton-path
bash read.sh
bash plot.sh
ls analysis-read figures
默认读取随包结果,不会重新执行VASP。读取依赖ASE、NumPy,绘图依赖Matplotlib。

本例使用 vasp/6.6.1-8173m-vtst 中的CPU程序,Intel oneAPI构建环境。必须使用编入VTST instanton功能的版本,普通未扩展的VASP不能仅靠添加 ICHAIN 实现该功能。
2. 理解目录与原子约束#
find inputs -maxdepth 2 -type f | sort
cat inputs/01/POSCAR
cat inputs/KPOINTS
第一个半路径结构完整内容:
H N
1.0000000000000000
10.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 10.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 10.0000000000000000
H N
3 1
Selective dynamics
Cartesian
5.9397308802582085 5.0000000000000000 5.0000000000000000 F F F
4.5301345598708957 5.8138308150243212 5.0000000000000000 F F F
4.5301345598708957 4.1861691849756797 5.0000000000000000 F F F
5.0000000000000000 5.0000000000000000 5.1446480131023939 T T T
前三行原子的 F F F 固定H位置;最后N原子的 T T T 允许三个方向移动。不要把“N的初始坐标只在z方向变化”理解成“只允许N沿z移动”。
目录 01—04 是4个参与计算的半路径结构。00、05 供该版本多图像输入检查使用,本例分别复制最近的半路径结构;它们不会增加到计算图像数中,也不是NEB的两个能量端点。完整8珠子顺序为:
01 02 03 04 04 03 02 01
所有图像须使用相同晶胞、元素顺序、原子数、约束和POTCAR。每个计算图像还带有 MODECAR,本版本按完整珠子数读取初始搜索方向,不要用普通单结构的4行MODECAR直接替换。
3. 设置INCAR与KPOINTS#
cat inputs/INCAR
SYSTEM=NH3 fixed-H constrained N inversion ring-polymer teaching case
ENCUT=400
PREC=Accurate
EDIFF=1e-6
EDIFFG=-0.02
ISPIN=1
ISYM=0
ISMEAR=0
SIGMA=0.05
NELM=160
ALGO=Normal
LREAL=.FALSE.
LASPH=.TRUE.
IBRION=3
POTIM=0
NSW=80
ISIF=2
ICHAIN=4
IMAGES=4
IOPT=0
NCORE=1
LWAVE=.FALSE.
LCHARG=.FALSE.
Qltol=0.01
QdR=0.005
Qmaxmove=0.02
Qdt=0.05
Qnl=4
Qifcg=.TRUE.
Qtpz=120
Qdo_ins=.TRUE.
Qdo_pre=.FALSE.
Qftol=0.02
ICHAIN=4 选择instanton;IMAGES=4 是半路径计算图像数;Qtpz=120 是温度K。Qftol=0.02 用于路径力分量,EDIFF=1E-6 用于每次电子自洽,两者检查不同的收敛过程。POTIM=0 配合该路径驱动,并不表示计算了普通分子动力学时间步。
QdR 是Lanczos等步骤的有限位移尺度;本例为0.005Å。Qdo_ins=.TRUE. 搜索路径,Qdo_pre=.FALSE. 不计算前因子。Qnl 控制Lanczos矩阵规模,不能理解为珠子数。
KPOINTS使用真空分子的Γ点:
Gamma molecular cell
0
Gamma
1 1 1
0 0 0
4. 准备自己的计算目录并提交#
仍在资料包根目录:
python3 prepare.py
# 按POSCAR元素顺序,使用自己有权使用的H和N势文件
cat /你的势目录/H/POTCAR /你的势目录/N/POTCAR > work-new/POTCAR
cd work-new
sbatch ../submit.sh
squeue -u "$USER"
tail -f native.log
资料包不附带受许可约束的POTCAR。提交脚本按4个MPI进程×每进程14个CPU申请本站56核整节点;本例每进程只用1个计算线程,每个计算图像对应1个MPI进程;若增加进程数,应保持能被4整除,并检查所用VASP构建支持的并行方式。
#!/bin/bash
#SBATCH --job-name=NH3-instanton
#SBATCH --partition=cpu-8173m
#SBATCH --nodes=1
#SBATCH --ntasks=4
#SBATCH --cpus-per-task=14
#SBATCH --time=00:20:00
#SBATCH --output=slurm-%j.out
set -eo pipefail
module purge
module load vasp/6.6.1-8173m-vtst
export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1
[[ -s POTCAR ]] || { echo 'Place the H then N POTCAR in this working directory'; exit 1; }
python3 - <<'PYCODE'
from pathlib import Path
import os,json,subprocess,time
args=['mpirun','-np',os.environ['SLURM_NTASKS'],'vasp_std']
started=time.monotonic()
with Path('native.log').open('x')as log:
completed=subprocess.run(args,stdout=log,stderr=subprocess.STDOUT)
Path('EXECUTION.json').write_text(json.dumps(dict(args=args,UID=os.getuid(),returncode=completed.returncode,seconds=time.monotonic()-started))+'\n')
raise SystemExit(completed.returncode)
PYCODE
计算完成回到资料包目录:
cd ..
bash read.sh work-new
bash plot.sh
CSV输出到 analysis-read,图输出到 figures。接着阅读instanton结果与初始路径,确认路径含义,再把它改用于自己的体系。