LAMMPS OpenKIM与geturl实操
实际加载KIM官方双原子示例,比较能量和力,并用geturl练习下载与覆盖规则。
阅读本篇目录
使用模型库前,要分清模型名称、KIM-API接口和LAMMPS是否启用了KIM包。本篇用官方编程示例展示最短的真实路径,再用geturl演示参数文本下载。
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,不能仅看版本号就判断可用。
build.sh从KIM-API2.4.2的官方压缩包构建LennardJones_Ar示例,把它放到自己的runtime/kim-models/,并仅在当前进程设置KIM_API_PORTABLE_MODELS_DIR。这里没有往系统或个人默认模型集合安装文件。
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.kim
cat native-results/kim/kim-results.dat
实际输入先选择模型和单位,再建盒与原子,最后映射元素:
kim init LennardJones_Ar metal
atom_style atomic
atom_modify map array sort 0 0.0
boundary p p p
region cell block 0 40 0 40 0 40 units box
create_box 1 cell
create_atoms 1 single 20 20 18 units box
create_atoms 1 single 20 20 22 units box
mass 1 39.948
kim interactions Ar
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
thermo_style custom step atoms pe
run 0
kim init应在创建模拟盒之前调用,kim interactions Ar把原子类型1对应为Ar。完整包还包含第二个距离的坐标修改和求值,KIM结果与同参数的原生lj/cut及独立公式一致。

换成OpenKIM数据库中的其他模型时,应使用明确的完整模型ID及版本,核对支持元素、单位、截断和训练或拟合范围。不同模型不一定具有相同参数或能够自由更改参数;本例没有把kim query、kim property或所有模型驱动器一并视为已运行。
3 用geturl下载实际文件#
资料包会在计算进程内部启动一个只监听127.0.0.1的临时HTTP服务,提供两份参数文本。原生命令形如:
geturl http://127.0.0.1:临时端口/fixture-v1.json output downloaded.json overwrite yes timeout 10 verify yes
临时端口由脚本自动选择,无需用户填写。随后同一个目的文件依次经历三种情况:
| 操作 | 请求的文本版本 | 下载后实际版本 |
|---|---|---|
| 初次下载,允许覆盖 | 1 | 1 |
| 文件已存在,禁止覆盖 | 2 | 1 |
| 文件已存在,允许覆盖 | 2 | 2 |
cat native-results/geturl/geturl-results.json
cat native-results/geturl/downloaded-step0.json
cat native-results/geturl/downloaded-step1.json
cat native-results/geturl/downloaded-step2.json
每一步都保存文本并核对完整字节与SHA256。第二步保留版本1,不能把“命令没有报错”误解为已经取到服务器上的版本2。临时服务在操作完成后关闭。
4 下载文件不等于选对模型#
geturl需要EXTRA-COMMAND包和libcurl支持。它负责取得文本,不能保证下载内容适用于当前材料;应检查来源、哈希、许可、元素和单位。外网HTTPS下载保持证书校验开启。若现有模块未启用libcurl,可以先用常规下载工具取文件,再把合法的本地文件传给模拟输入。