LAMMPS 专题

LAMMPS MDI驱动与单位换算

用本机TCP连接实际交换坐标、能量和力,理解MDI驱动端、LAMMPS引擎及Hartree/bohr单位。

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

MDI让两个程序按统一命令交换原子信息。一方负责驱动计算,另一方提供能量和力;它提供通信接口,本身不会自动定义QM/MM分区或产生新的物理模型。

1 运行完整示例#

下载完整输入、实算数值和运行脚本,在新目录操作:

unzip lammps-optional-interfaces-wave298-*.zip
cd lammps-optional-interfaces-wave298
bash preview.sh
sbatch run.slurm
squeue -u "$USER"

preview/先重画随包参考数据。作业会在需要时运行bash build.sh构建独立环境,再运行bash run.sh完成原生计算、提取和绘图;已有预览会保留。完成后查看native-results/、results/和plots/,不必再次运行bash run.sh。需要重做时换新解压目录。

这份模板申请P100分区中的8个CPU核心和一张显卡;独立构建使用8核,双原子接口计算使用CPU,没有GPU计算内核或GPU加速比。在自己已分配的相容资源内,也可依次运行bash build.sh和bash run.sh。

这里的可选构建位于自己的runtime/,不覆盖公共LAMMPS模块。环境为LAMMPS30Sep2026、GNU13.3、Python3.12.14、MDI1.4.26、KIM-API2.4.2和libcurl8.21.0,采用串行共享库。复用集群已有的CPU依赖库,首次构建需要访问固定版本的官方源码。普通LAMMPS模块不一定启用了PYTHON、MDI或KIM,不能仅看版本号就判断可用。

2 引擎先准备什么#

本例是40 Å周期盒中的两个Ar原子,第一原子坐标为(20,20,18) Å,第二原子先为(20,20,22) Å,再改成(20,20,22.2) Å。相距4.0和4.2 Å,彼此之外没有截断内的周期镜像。

使用同一组Lennard-Jones参数:ε=0.0104 eV、σ=3.4 Å、截断8.15 Å,不作能量平移。它来自KIM-API2.4.2的编程示例,用于理解接口,不是对真实氩物性的精度推荐。

距离 / Å 势能 / eV 下方原子的+z方向力 / eV·Å⁻¹
4.0 −0.00977216275313524 +0.00578235848440572
4.2 −0.00841273649185532 +0.00731112332477757

两个原子的力大小相等、方向相反。正号表示下方原子受力朝向上方原子;这里给出的是固定构型的零步能量与力,不是MD轨迹、温度或扩散结果。

完整引擎输入在包内,可直接查看:

cat inputs/in.engine
cat mdi_driver.c

输入用units metal、atom_style atomic、pair_style lj/cut 8.15和pair_coeff 1 1 0.0104 3.4建立模型,最后进入:

mdi engine elements Ar

在这份输入中,第一次求值由MDI引擎完成。驱动端与引擎在同一计算节点,用127.0.0.1的临时TCP端口连接;不需要开公网端口,也不需要另设集群防火墙规则。

3 驱动端实际发了什么#

顺序 命令 本例作用
1 <NATOMS 核对实际为2个原子
2 <ENERGY、<FORCES 计算并读取第一个构型
3 <COORDS 读取实际求值后的坐标
4 >COORDS 把第二个原子移动0.2 Å对应的bohr长度
5 <ENERGY、<FORCES、<COORDS 计算并读取新构型与已更新坐标
6 EXIT 正常退出引擎

更新坐标后,先让引擎完成求值,再读更新后的坐标。run_native.py会编译随包的自写C驱动程序,启动连接并等待两个程序结束。

cat native-results/mdi/mdi-results.json
cat results/interface-values.csv

4 传输单位与LAMMPS输入单位不同#

本例LAMMPS输入使用metal单位,MDI传输则使用Hartree、bohr、Hartree/bohr。驱动端调用MDI_Conversion_Factor取得换算因子,同时保存原始传输量和换算后的结果。

MDI_Conversion_Factor("electron_volt", "hartree", &haperEV);
MDI_Conversion_Factor("angstrom", "bohr", &bohrperA);
/* energy_eV = energy_Hartree / haperEV */
/* force_eV_A = force_Hartree_bohr / haperEV * bohrperA */

例如4.0 Å构型的MDI能量为约−0.000359120360342012 Hartree,换算后为−0.00977216275313524 eV;下方原子的z方向力约+0.000112448970131536 Hartree/bohr,换算后为+0.00578235848440572 eV/Å。

MDI实际数据流、单位与独立公式的数值差

残差处于本例输出浮点精度范围,只说明接口和换算一致,不表示势函数对真实材料具有相同精度。

5 接其他程序前先做小体系比较#

先让被连接程序分别独立计算同一构型,核对元素顺序、原子数、坐标、晶胞、周期边界和单位,再交换能量与力。需要多节点、MPI或插件LINK模式时,还要使用相应构建与启动方式;本例实际运行的是同节点TCP串行路径,不把它代称为这些模式。

参考:MDI命令、LAMMPS与MDI联用。

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

查看配图

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

100%查看原图 ↗