ABACUS 专题

ABACUS NEP:力、应力与维里的单位

用真实位移和六种应变能量差分核对力、应力符号与维里换算,附完整输入和提取脚本。

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

同一套结果在不同程序里可能分别写成“应力”“总维里”或“维里/原子”。比较前先统一单位。本篇对Si₈实际执行18个扰动单点:第一个原子沿xyz各±0.0002 Å,以及xx、yy、zz、xy、yz、xz六个形变分量各±0.0002。

下载完整输入、参考CSV与运行脚本。

unzip abacus-beta10-NEP-wave674-*.zip
cd abacus-beta10-NEP
bash results.sh
bash plot.sh

以上两步读取本集群已完成的参考数据并重绘,不启动计算。inputs/存放完整输入,reference-data/是参考表,新计算写入work/,新提取表写入results/。每个资料包都附独立环境的编译脚本;已有本篇环境时可复用,无需反复编译。 运行前先按NEP独立环境编译本地工具链。若工具链已在相邻的abacus-beta10-NEP目录中:

bash use-toolchain.sh ../abacus-beta10-NEP/toolchain/install
sbatch job.slurm

第一套资料包本身使用自己的toolchain/install,无需再选择路径。脚本申请cpu-8173m的56核独占整节点;本例内部按需要使用1、2或4个MPI进程,仍按整节点计费。CPU资源暂不可用时可以先看参考数据,待可用后提交。本文结果不作为CPU节点性能测试。

本组统一使用固定ABACUS 3.11.0-beta10(源码提交40e7ce8c575abb2ae7fc0df1bd6ec4b48a695d2d)和NEP_CPU 629ec5d,oneAPI 2024.2的icx/icpx/ifx、Intel MPI 2021.13、顺序MKL 2024.2,面向AVX512 CPU。此独立构建启用PW和NEP_CPU,关闭LCAO、ELPA、LibRI、Libxc、MLALGO、CUDA和OpenMP;不是覆盖全部电子结构功能的通用构建。公共ABACUS 3.10.1模块不提供这里使用的新接口。

1. 直接运行完整差分输入#

所有扰动后的STRU已经包含在资料包中,不需要客户先编写结构变换程序:

ls inputs/finite-differences
cat inputs/finite-differences/force-0-+1/STRU
cat inputs/finite-differences/strain-01-+1/INPUT
sbatch job.slurm

单点INPUT与上一节相同。位移只改第一个原子的位置;形变同时改变晶胞和原子坐标、保持分数坐标,即cell_new = cell_old × Fᵀ。剪切例只改变形变梯度中的一个非对角分量,不是额外把两个对称分量同时加上相同幅度。

2. 看力的符号#

中心差分为Fₐ = −[E(xₐ+h)−E(xₐ−h)]/(2h),这里h=0.0002 Å。直接读取两个真实能量:

grep FINAL_ETOT_IS work/finite-differences/force-0-+1/OUT.nep/running_scf.log
grep FINAL_ETOT_IS work/finite-differences/force-0--1/OUT.nep/running_scf.log
cat results/finite-differences.csv
分量 程序原生力 / eV·Å⁻¹ 能量差分力 / eV·Å⁻¹
x 0.0054030226 0.00540305251
y 0.4024276575 0.40242765483
z 0.7066758812 0.70667584831

三分量最大差3.29×10⁻⁸ eV/Å。这里比较的是同一个固定势函数的能量导数,不是以DFT力为真值重新评价模型。

3. 从kbar换成总维里#

本例ABACUS原生应力为kbar。它对应的总维里按下式换算:

W_ij (eV) = stress_ij (kbar) × volume (ų) / 1602.176634
W_ij = −dE / dF_ij

不要再除原子数,除非想转换为GPUMD输出的eV/atom。压力与拉应力的符号约定可能不同,不能只凭列名给另一个程序的数据加负号;应先用实际能量变化确认。

grep -A7 TOTAL-STRESS work/abacus-static/Si8-case2/OUT.nep/running_scf.log
head -n 12 reference-data/NEP-finite-differences.csv
分量 原生应力换算总维里 / eV 能量形变差分 / eV
xx 1.67116750465 1.67117138679
yy 1.89301487289 1.89301904737
zz 1.72014330288 1.72013608129
xy −1.52543946417 −1.52544025298
yz 0.57669141003 0.57669175208
xz −1.37706837778 −1.37706918419

六分量最大差7.22×10⁻⁶ eV。ABACUS此版本部分内部单位常数采用有限有效数字,提取与转换时应避免把最后几位舍入误差放大为物理差异。

18个实际扰动能量求得的力和六分量维里,与原生输出换算结果对照

4. 换自己的结构时怎么做#

先保留模型和化学元素顺序,修改STRU;位移时保持晶胞不变,形变时同时变换晶胞和位置;重新生成与结构对应的扰动输入,再用相同能量单位求导。资料包的extract.py体积常量对应本篇Si₈,换结构后必须同步改成自己的参考体积,不能直接拿5.444365970³ ų套用。

生产任务应对差分步长做适当检查;过小会受到打印精度影响,过大则超出局部线性区间。本例固定步长用于展示操作与单位,不替代目标体系的收敛设置。

参考数据下载#

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

查看配图

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

100%查看原图 ↗