LAMMPS MDI驱动与单位换算
用本机TCP连接实际交换坐标、能量和力,理解MDI驱动端、LAMMPS引擎及Hartree/bohr单位。
阅读本篇目录
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/Å。

残差处于本例输出浮点精度范围,只说明接口和换算一致,不表示势函数对真实材料具有相同精度。
5 接其他程序前先做小体系比较#
先让被连接程序分别独立计算同一构型,核对元素顺序、原子数、坐标、晶胞、周期边界和单位,再交换能量与力。需要多节点、MPI或插件LINK模式时,还要使用相应构建与启动方式;本例实际运行的是同节点TCP串行路径,不把它代称为这些模式。
参考:MDI命令、LAMMPS与MDI联用。