ABACUS 专题

ABACUS 轨迹的均方位移实操

原生CANDELA的时间单位、周期展开、MSD及有限时间比值辨析。

更新于 2026-10-29约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

下载CANDELA源码、完整INPUT、实际ABACUS轨迹、原生结果和绘图脚本,解压进入附件根目录。先提取已有结果:

bash analyze.sh

图在 reference/figures,对照数据在 reference/analysis。附件里的两段Al32轨迹来自鸢算科技集群真实ABACUS3.10.1计算,各81帧、步长0.5 fs,共40 fs;一段NVE、一段Nose–Hoover链控温。它们用于教学,保持了晶体结构,不能当作已经平衡的液态或长时间扩散样本。

1 使用哪个程序,怎样重新运行#

CANDELA是轨迹分析程序,读取ABACUS的 MD_dump,不重新计算DFT。这里使用官方源码固定提交 9d4befd83c66b23463b8bac8939b98bb1516f72e,GNU C++/Fortran13.3,通用x86-64、串行、不开CUDA/OpenMP。附件带源码和许可,在自己的算例目录编译,不需要改动公共软件。

新解压目录在已分配的计算资源中运行:

bash run.sh

也可以提交附件模板:

sbatch submit.slurm

模板选P100主机分配资源,但本例只执行单线程CPU后处理,不是GPU加速测试。它依次编译CANDELA、建立独立 work、运行6个分析条件,再提取和画图。已存在 work 或 candela-build 时请新解压,避免覆盖结果。

希望逐步执行,可以在已分配资源中运行下面这些命令;它与 run.sh 二选一:

bash build.sh
python3 -B setup.py
python3 -B run_cases.py

CANDELA的输入也叫 INPUT,不要在ABACUS原始计算目录直接运行它。 本附件把轨迹、分析输入、参考结果、新结果分开保存。

2 先写清每帧相隔多久#

查看实际MSD输入:

cat inputs/al-nve-msd/INPUT
calculation msd
system Al
geo_in_type ABACUS
geo_directory ../../trajectories/al-nve.MD_dump
geo_1 0
geo_2 80
geo_interval 1
geo_ignore 0
ntype 1
natom 32
natom1 32
id1 Al
id2 Al
msd_dt 0.0005
ele_select Al

msd_dt=0.0005的单位为ps,即0.5 fs。它是相邻输出帧的时间间隔;若MD每10步才输出一帧,应乘10,不能照抄积分步长。本例每步输出,所以81帧从0到0.04 ps。ele_select Al指定统计元素,calculation msd是单时间原点的均方位移。

head -n 8 reference/cases/al-nve-msd/MSD.dat

本版输出三列:时间/ps、MSD/Ų、MSD/(6t)/Ų·ps⁻¹。第一帧定义原点,数据文件从首个非零时间开始,所以有80行。

3 周期边界和位移怎样处理#

MSD需要连续轨迹:粒子跨过周期边界不能被误当作移动了一个盒长。原生CANDELA对相邻帧采用最近像增量,再累积到展开坐标;附件也用独立NumPy算法按同一固定立方盒检查。若一帧间真实位移已大于半盒长,仅靠最近像无法恢复真实路径,需要提高输出频率或保留可靠的image/unwrapped信息。

module load ase/3.29.0
python -B analyze.py reference
python -B plot_results.py reference

图和数组分别在 reference/figures/msd_short_time.png 与 reference/analysis/trajectory-analysis.npz。新的结果用 work。

实际NVE、NHC轨迹的MSD与时间依赖比值

40 fs末端的实际MSD约为:

轨迹 MSD/Ų 原生MSD/(6t)/Ų·ps⁻¹
NVE 0.0273959 0.114150
Nose–Hoover链 0.0275210 0.114671

独立周期展开得到的MSD与原生文本最大差均约5×10⁻⁸ Ų。这里两条轨迹质心平移贡献很小,但一般仍应检查整体漂移;附件同时保存去质心的对照数组,原生结果保持原样。

4 第三列为什么还不是扩散系数#

单个有限时间的MSD/(6t)不等于已经找到长时间线性区的扩散系数。本例只有40 fs,晶体短时位移接近弹道过程,图中对照了t²标度;第三列也随时间变化。因此不要把0.114150直接换算并写成材料扩散系数。

真正计算各向同性三维扩散,需要足够长且平衡的轨迹,排除弹道/受限振动区,在可靠的线性区求MSD斜率并除6,比较拟合区间、时间原点与独立采样;二维、各向异性或受限运动要换成适用定义。原生 msd_multiple 属于另一种多时间原点分析,参数不能机械套用本例单原点结果。

完成本例后,你应能从自己的 MD_dump 开始,写明帧间隔、独立分析目录、选择元素、运行程序、提取MSD并检查短时行为,再决定是否已有足够数据讨论扩散。ABACUS与CANDELA格式衔接可查官方接口说明。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗