MACE专题

MACE与LAMMPS回调联用

用原生LAMMPS fix external接收MACE能量、力和virial,完成静态、NVE与固定晶胞优化。

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

下载本专题输入、Si实算数据、教学模型与工具(ZIP)。本例采用LAMMPS 30Sep2026自带的 fix external Python回调:LAMMPS负责积分或最小化,MACE负责势能、力和virial。它适合学习两者怎样衔接;本例单MPI进程、CPU推断,不代表ML-MACE或ML-IAP原生扩展的并行性能。

1 一条命令运行#

bash calculate.sh lammps
cat work/lammps/RESULTS.json

助手同时加载 mace/0.3.16 和 lammps/30Sep2026-8173m。附件带与该LAMMPS版本匹配的官方Python绑定源码和GPL许可,实际共享库仍来自集群模块,没有把二进制程序打包进附件。配套CPU构建使用oneAPI 2024.2与Intel MPI 2021.13,模块载入对应运行库;客户无需重新编译LAMMPS。

cat work/lammps/NVE.lammps.log
cat work/lammps/relax.lammps.log

2 LAMMPS如何接收模型#

lammps_bridge.py 构建的关键输入如下:

units metal
atom_style atomic
boundary p p p
atom_modify map array sort 0 0.0
read_data NVE.data
pair_style zero 5.0
pair_coeff * *
fix model all external pf/callback 1 1
fix_modify model energy yes virial yes
timestep 0.0005
thermo_style custom step pe ke etotal pxx pyy pzz pxy pxz pyz
thermo 1

pair_style zero 不再提供另一份经验势力。pf/callback 1 1 每步调用一次模型并每步施加返回力,避免无意复用旧力。units metal 的时间单位是ps,因此0.0005 ps为0.5 fs。具体接口见 LAMMPS官方fix external。

3 不只传力,还要传能量和virial#

回调的核心操作为:

energy = atoms.get_potential_energy()
forces = atoms.get_forces()
sigma = atoms.get_stress(voigt=False)
virial = -atoms.get_volume() * sigma
force_array[:] = forces[atom_ids - 1]
lmp.fix_external_set_energy_global("model", energy)
lmp.fix_external_set_virial_global("model", [
    virial[0, 0], virial[1, 1], virial[2, 2],
    virial[0, 1], virial[0, 2], virial[1, 2]])

完整实现还按原子ID重排坐标和力,并检查回调异常。LAMMPS virial六分量顺序是 xx yy zz xy xz yz,与ASE六分量应力的排列不同;这里从3×3张量明确取值。只传力会让能量输出、最小化或压力缺少一致信息。

4 先静态,再NVE,最后优化#

脚本依次执行:

  1. 原生 run 0,与ASE检查E、F与压力。
  2. 相同质量、坐标和初始速度,运行20步NVE,再比较末态。
  3. 原始结构从零速度开始,用 min_style fire 优化原子位置;晶胞固定。
fix integrate all nve
run 20

优化阶段单独建立LAMMPS对象,使用:

min_style fire
minimize 0.0 0.02 300 600

minimize 的力判据和ASE最大原子力范数不是同一个量,因此脚本还会独立输出最终最大原子力。最终LAMMPS为0.00254 eV/Å,ASE BFGS为0.00788 eV/Å,二者均低于0.02 eV/Å。

5 本例实际数值#

bash run.sh
cat analysis/NVE.csv

原生LAMMPS与ASE的短轨迹和优化比较

静态能量和力差在本次输出中均为0;压力分量最大差0.00145 bar。20步NVE的最大总能量漂移 1.27E-6 eV/原子,ASE与LAMMPS末态坐标差 1.19E-9 Å。这些数值说明本例接口与积分衔接一致,不表示模型对未知构型的物理预测必然正确。

需要高性能原生扩展时,可参考 MACE的ML-MACE路线 或 ML-IAP路线;它们需要对应构建与导出模型,不能在本例脚本中只改一个 pair_style 名称就直接替换。

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

查看配图

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

100%查看原图 ↗