ASE短时动力学与NEB路径
用铜EMT实际完成短NVE轨迹和七映像约束NEB。
阅读本篇目录
本文使用鸢算科技集群实际运行的小算例。先下载输入、完整脚本与参考数据并解压,以下命令从解压目录开始。reference 保存原始参考结果,自己的运行放在 work,避免覆盖。
1 跑一个短NVE轨迹#
ASE 3.29.0与内置EMT;本例108原子Cu,初始温度100 K、固定随机种子27,VelocityVerlet时间步1 fs,运行1000步,即1 ps。这里只检查短时积分与能量变化。
module purge
module load ase/3.29.0
mkdir -p work/ase
cp scripts/ase_examples.py work/ase/
cd work/ase
python ase_examples.py nve
python ase_examples.py neb
from ase.md.verlet import VelocityVerlet
from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary
from ase import units
import numpy as np
MaxwellBoltzmannDistribution(atoms, temperature_K=100, rng=np.random.RandomState(27))
Stationary(atoms)
dynamics = VelocityVerlet(atoms, timestep=1 * units.fs, trajectory="md.traj")
dynamics.run(1000)

本次总能峰峰差为 3.408×10⁻⁶ eV/原子。温度会在势能和动能交换时波动;NVE并不将每一帧温度固定在100 K。这条1 ps轨迹不用于计算收敛扩散系数或热导率。
2 用七个映像演示NEB#
建立27原子的Cu(111)基底,再放一个Cu吸附原子。固定全部基底,只优化吸附原子端点,然后在相邻等价fcc位点之间建立7个映像,使用爬山NEB和FIRE,路径最大力阈值0.03 eV/Å。
from ase.mep import NEB
from ase.optimize import FIRE
from ase.calculators.emt import EMT
images = [initial] + [initial.copy() for _ in range(5)] + [final]
for image in images:
image.calc = EMT()
band = NEB(images, climb=True)
band.interpolate(mic=True)
FIRE(band, logfile="neb.log", trajectory="neb.traj").run(fmax=0.03, steps=350)

这个固定基底、EMT、小表面胞示例的路径势垒为 0.087230 eV。它演示端点、映像、约束和结果读取,不代表经过路径搜索、基底弛豫和尺寸收敛的DFT扩散势垒。
cat nve/RESULT.json
cat neb/energies.csv
cat neb/RESULT.json
查看和复现配图#
下载包 figures 中是高清图片,可点击正文图片放大。reference 中保存数据与结果表;重新绘图可执行:
module purge
module load ase/3.29.0
mkdir -p work/replot
cp -r reference work/replot/
cp plot_reference.py work/replot/
cd work/replot
python plot_reference.py
不同教程共用此资料包;同一个脚本不需要重复下载。重新运行算例时使用新的工作目录。
方法与接口参考:ASE官方教程。
需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。