示例 06-4:NEB——Si 中间隙 H 在相邻四面体位之间的扩散¶
目的¶
- 完整走一遍 OpenMX 的 NEB 三步流程:优化初态、优化终态、优化最小能量路径;
- 学会用
<NEB.Atoms.SpeciesAndCoordinates给出终态、设置 image 数和弹簧常数、选择 MPI 进程数; - 从
.neb.ene读出势垒,检查每个 image 的 SCF 是否收敛。
对应教程:第6章 结构优化、晶胞优化、状态方程与 NEB(§7)。
体系¶
8 原子立方 Si 胞(a = 5.43 Å)加 1 个间隙 H。H 从四面体间隙位 T1 = (½,½,½)a 扩散到相邻的 T2 = (¾,¾,¾)a,直线路径经过六角间隙位 (⅝,⅝,⅝)a;T1 与 T2 通过六角位处的反演中心互相对称。中性 H 使总电子数为 33,所以做自旋极化计算(scf.SpinPolarization on,H 初始占据 1.0 0.0)。
Note
这是教学用的小胞:H 与周期镜像只相距 5.43 Å,势垒不能直接与文献比较。实际研究需要 64/216 原子超胞,并考虑 H 的电荷态。
文件说明¶
| 文件 | 说明 |
|---|---|
H_Si8_T1_opt.dat |
初态优化(System.Name h_si8_t1),RF,判据 1.0e-4 Hartree/Bohr |
H_Si8_T2_opt.dat |
终态优化(System.Name h_si8_t2),与上一个文件只差 H 坐标和名称 |
H_diffusion_NEB.dat |
NEB 模板(System.Name h_si8_neb):5 个 image,弹簧常数 0.1 Hartree/Bohr²;内含未弛豫的理想端点坐标,可直接运行用于测试 |
build_neb.py |
从两个 *.dat# 读取弛豫后的端点坐标,生成 H_diffusion_NEB_relaxed.dat;检查坐标单位、原子顺序和跨周期边界的原子(只依赖 numpy) |
job.slurm |
Slurm 作业脚本,默认 10 个 MPI 进程(image 数 5 的整数倍) |
运行步骤¶
cd OpenMX/examples/06-neb-h-in-si
sed -i "s#^DATA.PATH.*#DATA.PATH $HOME/openmx4.0/DFT_DATA19#" *.dat # once
# steps 1 and 2: relax both end points with identical settings
mpirun -np 8 openmx H_Si8_T1_opt.dat -nt 1 > h_si8_t1.std
mpirun -np 8 openmx H_Si8_T2_opt.dat -nt 1 > h_si8_t2.std
grep "Utot\." h_si8_t1.out | tail -1 ; grep "Utot\." h_si8_t2.out | tail -1
# step 3: build the NEB input from the relaxed end points and run it
python build_neb.py # -> H_diffusion_NEB_relaxed.dat
mpirun -np 10 openmx H_diffusion_NEB_relaxed.dat -nt 1 > h_si8_neb.std
# or: sbatch job.slurm H_diffusion_NEB_relaxed.dat
预期结果 / 如何检查¶
tail -n 5 h_si8_neb.neb.opt # |Maximum force| must drop below MD.Opt.criterion
cat h_si8_neb.neb.ene # image, Etot (Ha), distance to neighbour, distance from image 0 (Bohr)
awk '!/^#/ && NF>=4 { if (n==0) e0=$2; n++; if (n==1 || $2>emax) emax=$2;
printf "%3d s=%8.4f A dE=%8.4f eV\n", $1, $4*0.529177, ($2-e0)*27.211386 }
END { printf "forward barrier = %.3f eV\n", (emax-e0)*27.211386 }' h_si8_neb.neb.ene
for f in h_si8_neb_*.DFTSCF; do echo "== $f"; tail -n 3 "$f"; done
- 两个端点的总能应几乎相等(对称性),差值反映了网格位置等数值误差;
- 能量曲线应关于中点对称,最高点在六角位附近;
- image 间距(
.neb.ene第 3 列)应大致相等; - 标准输出只显示 image 1 的信息,其余 image 的 SCF 是否收敛要看各自的
.DFTSCF文件或h_si8_neb_#.out; h_si8_neb.neb.xyz可在 OpenMX Viewer、VESTA 或 OVITO 中做动画。
注意事项¶
- NEB 的坐标必须用
Ang或AU,不能用FRAC(手册51.8节);build_neb.py会检查这一点。 - 三步计算的晶胞、截断能、基组、赝势、电子温度、k 点必须完全一致。
- MPI 进程数取 image 数的整数倍;内存不足时加
MD.NEB.Parallel.Number 1(或 2、3)。 - 未收敛时用
H_diffusion_NEB_relaxed.dat#(每步更新,含所有 image 坐标)续算。 - 想直接测试流程、跳过端点优化,也可以运行未弛豫的
H_diffusion_NEB.dat,但得到的不是真正的势垒。 - 输入文件只含 ASCII 字符和 LF 换行。