news 2026/10/5 1:53:43

LAMMPS 命令分类详解:从 9 大功能域到完整输入脚本实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LAMMPS 命令分类详解:从 9 大功能域到完整输入脚本实战
  • 科研
  • 科学计算
  • 高性能计算

【免费下载链接】lammps

Public development project of the LAMMPS MD software package

项目地址:https://gitcode.com/gh_mirrors/la/lammps
点击查看免费下载

导读

本文以 LAMMPS 官方命令分类索引页 Commands by category 为主体骨架,系统梳理 LAMMPS 全部通用命令按功能划分的 9 大类别——初始化、设置模拟盒子、设置原子、力场、设置、时间步内操作与诊断、输出、动作、输入脚本控制。同时结合仓库中的 输入脚本结构、解析规则、通用命令字母表 以及真实示例 examples/melt/in.melt,帮助读者建立"命令分类 → 输入脚本编排 → 仿真运行"的完整知识链。读完本文,你将能读懂任意 LAMMPS 输入脚本,并能够按照正确的命令顺序独立编写自己的仿真脚本。

命令分类体系:9 大功能域一览

LAMMPS 的命令按功能划分为 9 个类别,该分类页位于文档 Commands_category.rst,是整个命令参考手册的导航中枢。完整的字母序命令列表见 Commands_all.rst,fix、compute、pair 等样式类命令则分别在 Commands_fix.rst、Commands_compute.rst、Commands_pair.rst、Commands_bond.rst 等独立页面中按字母序排列。

理解分类的意义:LAMMPS 逐行读取输入脚本,每条命令立即生效(详见 输入脚本解析规则)。按功能分类有助于快速定位"此刻我该写什么命令"——初始化参数必须放在创建原子之前,力场系数必须放在运行之前。这 9 大分类恰好对应了一个仿真从"设定环境"到"执行计算"的自然顺序。

以下逐一展开每个分类及其命令。

一、初始化(Initialization)

本类命令用于设置必须在创建或读入原子之前定义的全局参数,共 5 条:

命令作用文档
newton控制牛顿第三定律(成对力计算)的开启/关闭,影响计算效率与数值行为newton
package设置 GPU、KOKKOS、OPENMP、INTEL 等加速包的运行时参数(如 GPU 数量、线程数)package
processors指定 MPI 进程如何映射到模拟盒子的 3 个维度(如processors 2 2 1)processors
suffix设置默认样式后缀(如suffix gpu),让 LAMMPS 自动选择加速版 fix/pair 等样式suffix
units设置单位制:lj、real、metal、si、cgs、electron、micro、nano等units

这些命令大多有默认值,因此输入脚本中只有需要改变默认行为时才必须显式写出。例如units lj声明无量纲化 Lennard-Jones 单位制,配合dimension 3声明三维空间。

二、设置模拟盒子(Setup simulation box)

本类 6 条命令负责定义仿真的空间范围与边界拓扑:

  • boundary:设置 6 个盒面(xlo/xhi/ylo/yhi/zlo/zhi)的边界条件类型,可选p(周期性)、f(固定)、s(收缩)、m(镜像);详见 boundary
  • change_box:动态修改盒子的尺寸、形状与边界条件(支持 triclinic 倾斜盒),常配合fix deform使用
  • create_box:依据已定义的region创建模拟盒子(必须先用region定义空间范围)
  • dimension:设置仿真维度(2 或 3),必须在创建盒子前调用
  • lattice:定义晶格类型(fcc、bcc、sc、hcp、custom等)与晶格常数
  • region:定义几何区域(block、sphere、cylinder、union、intersect等),是create_box、create_atoms、group region等命令的基础

典型的调用顺序是:dimension→lattice→region→create_box,例如:

dimension 3 lattice fcc 0.8442 region box block 0 10 0 10 0 10 create_box 1 box

这段代码正是示例 examples/melt/in.melt 中构建 3D 熔化模拟盒子的方式。

三、设置原子(Setup atoms)

本类共 17 条命令,是输入脚本中体量最大的一类,负责向盒子填充原子、定义分组与质量、设置初速度:

  • atom_style:声明原子数据模型(atomic、charge、molecular、bond、ellipsoid、sphere、hybrid等),决定每个原子携带哪些属性,是创建原子前必须设置的命令;详见 atom_style
  • atom_modify:修改原子属性相关设置(如 map 数组、sort 频率、边界处 ghost 原子数量)
  • balance:运行中动态或静态地负载均衡(rcb、shift、sort等算法)
  • create_atoms:按晶格或 region 随机填充原子
  • create_bonds:在已有原子间创建键(常用于无拓扑结构后处理)
  • delete_atoms:删除指定区域或类型的原子(可选保留键、边界等)
  • delete_bonds:删除指定原子的键/角/二面角
  • displace_atoms:平移、旋转或随机移动原子坐标
  • group:按 ID、类型、region、分子或布尔表达式定义原子组,几乎所有fix/compute都作用于组
  • mass:为原子类型设定质量
  • molecule:从分子模板文件读取分子(含拓扑),配合create_atoms放置
  • read_data:从 data 文件读入盒子和原子(含力场参数与拓扑);详见 read_data
  • read_dump:从 dump 文件恢复原子坐标
  • read_restart:从重启文件恢复完整仿真状态
  • replicate:将当前系统沿各方向复制拼接,扩大模拟规模
  • set:批量修改原子属性(类型、电荷、坐标、质量等)
  • velocity:为原子组设置初速度(create按温度抽取、set直接赋值、scale缩放等)

仍以 in.melt 为例,该段展示了"设置原子"的典型链路:

units lj atom_style atomic lattice fcc 0.8442 region box block 0 10 0 10 0 10 create_box 1 box create_atoms 1 box mass 1 1.0 velocity all create 3.0 87287 loop geom

四、力场(Force fields)

本类 17 条命令定义成对势、键角势与长程静电等力场模型及其系数。这也是 LAMMPS 命令索引中样式类(style)命令最集中的类别:

  • pair_style:成对相互作用模型(lj/cut、eam、tersoff、hybrid、table等);详见 pair_style
  • pair_coeff:为指定原子类型对设置 pair 系数(I J 两类型,可含通配符)
  • pair_modify:修改 pair 计算细节(混合规则、tail 修正、shift 等)
  • pair_write:将解析式 pair 势按表格写出,便于验证或转成 table 样式
  • bond_style/bond_coeff/bond_write:键伸缩势模型、系数与表格写出
  • angle_style/angle_coeff:键角势模型与系数
  • dihedral_style/dihedral_coeff:二面角势模型与系数
  • improper_style/improper_coeff:非正常(improper)势模型与系数
  • kspace_style:长程库仑/色散求解器(ewald、pppm、msm等)
  • kspace_modify:修改 kspace 求解参数(精度、网格、倾斜修正等)
  • dielectric:设置全局介电常数(影响库仑相互作用缩放)
  • special_bonds:定义 1-2、1-3、1-4 相邻键连原子间的排除与缩放因子,是分子力场的关键设置

从源码目录 src/ 可以看到力场样式的实现规模:成对势集中在 src/EXTRA-PAIR/、src/MANYBODY/ 等子目录,键角势位于 src/MOLECULE/,长程求解器位于 src/KSPACE/。Commands_pair.rst 中列举了全部 pair 样式,且对加速版本用括号字母标注(见后文"加速版本后缀"一节)。

in.melt 中力场部分仅两行即完成设置:

pair_style lj/cut 2.5 pair_coeff 1 1 1.0 1.0 2.5

五、设置(Settings)

本类 12 条命令调整仿真运行的全局参数:

  • neighbor:设置近邻列表构建参数(skin厚度、bin/nsq算法)
  • neigh_modify:调整近邻列表刷新频率、延时、是否检查、排除列表等
  • comm_modify:修改通信相关设置(ghost 原子交换模式、截断值等)
  • comm_style:选择通信算法(brick或tiled)
  • run_style:设置时间积分风格(verlet、respa、rRESPA等)
  • timestep:设置时间步长(单位由units决定)
  • reset_timestep:重置当前步号
  • timer:控制计时输出(off/partial/full/loop)
  • min_style/min_modify:能量最小化算法(cg、sd、hftn等)及容差、迭代限制
  • info:输出系统信息(编译选项、加速包、近邻统计等),可用于调试
  • partition:将整个模拟划分为多个分区(multi-partition 运行)

示例脚本中的近邻设置:

neighbor 0.3 bin neigh_modify every 20 delay 0 check no

其中neighbor 0.3 bin声明 0.3 个长度单位的 skin 厚度并使用 bin 网格算法;neigh_modify every 20表示每 20 步重建一次近邻列表。

六、时间步内的操作(fix)与诊断(compute)

本类 6 条命令是 LAMMPS 最富扩展性的机制:fix在时间积分循环内注入操作(恒温器、外力、约束、输出等),compute计算系统诊断量(温度、压力、势能等)。样式数量极多,分别见 Commands_fix.rst(数百种)与 Commands_compute.rst:

  • fix:定义时间步内操作,语法为fix ID group-ID style args,如fix 1 all nve(微正则积分)、fix 2 all nvt 300.0 300.0 0.1(恒温);详见 fix
  • fix_modify:修改已定义 fix 的附加属性(能量/维里贡献开关、输出选项等)
  • compute:定义诊断计算,语法为compute ID group-ID style args,如compute ke all ke(动能);详见 compute
  • compute_modify:修改 compute 的附加属性(温度计算用的自由度等)
  • unfix/uncompute:删除此前定义的 fix / compute

示例脚本中:

fix 1 all nve

此处在thermo输出温度等热力学量时,其温度由compute thermo_temp(默认compute temp)提供,说明 fix 与 compute 的协作贯穿整个时间步循环——这也是文档将该类单列一节的深层原因。

七、输出(Output)

本类 13 条命令控制仿真结果的多通道输出:

  • thermo:周期性打印热力学量(温度、能量、压力等),语法thermo N,N 为步数间隔;N 也可用 equal 风格变量(如thermo v_s配合logfreq()函数实现变间隔输出);详见 thermo
  • thermo_style:选择打印内容与格式(one、custom、multi等,可含任意compute与变量)
  • thermo_modify:调整热力学输出细节(打印格式、标题、是否写入 log 文件等)
  • dump:周期性输出原子轨迹(atom、custom、cfg、image、movie等格式);详见 dump
  • dump image:输出快照位图(如 JPEG/PNG),dump movie:连续输出并编码为影片(如 MPEG);两者语法见 dump_image
  • dump_modify:调整 dump 参数(输出格式、频率、padding、缩放等)
  • undump:停止某个 dump
  • restart:周期性写入重启文件
  • write_restart:立即写入重启文件
  • write_data:写出 data 文件(可指定部分/全部原子)
  • write_dump:立即写出一次 dump 快照
  • write_coeff:写出当前力场系数文件

in.melt 中展示了典型用法与注释掉的进阶用法:

thermo 50 #dump id all atom 50 dump.melt #dump 2 all image 25 image.*.jpg type type & # axes yes 0.8 0.02 view 60 -30 #dump_modify 2 pad 3

thermo 50表示每 50 步打印一次热力学量(并在仿真开始与结束时各打印一次)。注释中的dump ... image展示了按 25 步输出图片快照、pad 3补齐编号、&续行的典型写法。

八、动作(Actions)

本类 8 条命令是真正"驱动计算执行"的命令,对应文档 Commands_input.rst 中定义的三类命令中的"执行类":

  • run:运行分子动力学,语法run N,支持upto、start、stop、pre、post、every等关键字;详见 run
  • minimize:能量最小化(分子静力学),语法minimize etol ftol maxiter maxeval;详见 minimize
  • rerun:重放 dump 文件中的历史构型并重新计算诊断量
  • neb/neb_spin:Nudged Elastic Band 找最小能量路径(后者为自旋版本)
  • prd:Parallel Replica Dynamics 加速稀有事件模拟
  • tad:Temperature Accelerated Dynamics
  • temper:并行退火(副本交换)模拟

run 命令是其中最常用的,其关键字语义值得展开:upto表示从当前步运行到指定步号(适合长任务断点续算);start/stop配合会随时间变化的fix(如fix nvt)跨多次 run 平滑渐变;every可在运行中分段插入命令,例如:

run 100000 start 0 stop 1000000 every 1000 "print 'Protein Rg = $r'" run 100000 every 1000 NULL

第一条每 1000 步打印一次回转半径变量,第二条每 1000 步"空操作"分段运行(NULL表示不执行命令)。

示例脚本最后两行即本类命令:

thermo 50 run 250

九、输入脚本控制(Input script control)

本类 14 条命令构成 LAMMPS 的脚本编程能力——变量、条件、循环、子脚本与外部命令调用:

  • variable:定义变量(index、loop、equal、string、atom、python等风格),是脚本灵活性的核心;详见 variable
  • if/next/label/jump:组合实现条件分支与循环(label标记 +jump回跳 +next递增变量是经典循环范式)
  • include:在当前位置插入执行另一个输入脚本(子脚本)
  • print:打印文本(支持变量替换与格式化),常配合if、run every使用
  • echo:控制命令回显(none/screen/log/both),便于调试
  • info:输出系统/编译/包信息
  • log:将后续输出重定向到新日志文件
  • python:在脚本中调用 Python 函数,与 LAMMPS 双向交换数据(需要 PYTHON 包)
  • shell:执行外部 shell 命令
  • clear:清空当前系统状态,重新初始化(用于在一个输入脚本中串联多个独立任务)
  • quit:退出 LAMMPS(if条件中常用,如if "${steps} > 1000" then quit)

配合 变量替换规则,可以写出高度参数化的脚本,例如用$引用变量、用$(...)直接内联数值表达式:

variable X equal (xlo+xhi)/2+sqrt(v_area) region 1 block $X 2 INF INF EDGE EDGE variable X delete

上面的临时变量可等价替换为立即表达式region 1 block $((xlo+xhi)/2+sqrt(v_area)) 2 INF INF EDGE EDGE,甚至附加 C 风格格式化串控制输出精度:print "Final energy per atom: $(v_ke_per_atom+v_pe_per_atom:%10.3f) eV/atom"。

把分类融入实战:输入脚本的四段式结构

掌握了 9 大分类后,还需要理解命令的组织顺序。官方文档 输入脚本结构 指出,一个典型 LAMMPS 输入脚本由 4 个部分组成:

  1. 初始化(Initialization):在创建/读入原子前设置参数,命令即分类一中的units、dimension、newton、processors、boundary、atom_style、atom_modify;若 data 文件含力场参数,还需提前声明pair_style、bond_style等样式
  2. 系统定义(System definition):三种途径——read_data/read_restart读入,或lattice+region+create_box+create_atoms自行构建,或read_dump;需要放大系统用replicate
  3. 仿真设置(Simulation settings):力场系数(pair_coeff等)、仿真参数(neighbor、group、timestep、run_style、min_style)、fix/compute/variable、输出设置(thermo、dump、restart)
  4. 运行仿真(Run a simulation):run(MD)、minimize(能量最小化)、temper(副本交换);第 3、4 部分可反复循环——跑一段、改设置、再跑

同时,Commands_input.rst 强调 LAMMPS逐行执行命令(而非先整体解析再运行),因此命令顺序有实际后果:例如下面两段脚本行为不同——

timestep 0.5 run 100 run 100
run 100 timestep 0.5 run 100

第一段两次 run 都用 0.5 时间步;第二段第一次 run 用默认 1.0 步长,第二次才用 0.5。另外,processors与boundary必须在read_data之前设置才能按预期影响处理器映射与盒边界。

解析规则要点:命令行的 6 条文法

写输入脚本前还应掌握 Commands_parse.rst 的 6 条解析规则:

  1. 续行:行末&表示命令延续到下一行(下一行会拼接续上,&与换行被移除)
  2. 注释:第一个#之后全部视为注释并丢弃;注意&之后的注释会阻止续行
  3. 变量替换:$触发变量替换,${name}用花括号界定变量名,$x取单字符变量,$(expr)为立即数值表达式
  4. 分词:行按空白(空格、Tab)切分为"词"
  5. 命令名:第一个词是命令名,其后均为参数
  6. 引号:单引号'、双引号"、三引号"""包裹的文本作为一个参数;三引号保留换行且其中的#、$不会被当作注释/变量处理,适合多行字符串(如print输出多行系统状态)

此外,LAMMPS 期望 7-bit ASCII 文本;UTF-8 中形似 ASCII 或不可见的非 ASCII 字符可能被替换并给出警告,编写输入文件时应避免。

完整可运行示例:3D Lennard-Jones 熔化

将以上 9 大分类与四段式结构合而为一,仓库示例 examples/melt/in.melt 是理想的完整范例(运行方式:lmp -in in.melt,或mpirun -np 4 lmp -in in.melt):

# 3d Lennard-Jones melt units lj # ① 初始化:LJ 单位制 atom_style atomic # ① 初始化:原子风格 lattice fcc 0.8442 # ② 系统定义:fcc 晶格 region box block 0 10 0 10 0 10 create_box 1 box create_atoms 1 box mass 1 1.0 velocity all create 3.0 87287 loop geom # ② 系统定义:初始速度 pair_style lj/cut 2.5 # ③ 仿真设置:力场 pair_coeff 1 1 1.0 1.0 2.5 neighbor 0.3 bin # ③ 仿真设置:近邻 neigh_modify every 20 delay 0 check no fix 1 all nve # ③ 仿真设置:NVE 积分 thermo 50 # ③ 仿真设置:热力学输出 run 250 # ④ 运行仿真

对照分类表:第 1-2 行属"初始化",第 3-11 行属"设置模拟盒子/设置原子",第 13-19 行属"力场/设置",fix属"时间步内操作",thermo属"输出",run属"动作"。

进阶:加速版本后缀与样式索引

fix、compute、pair、bond 等样式类命令的许多样式提供加速版本,分类页与各样式索引页用括号字母标注:g= GPU、i= INTEL、k= KOKKOS、o= OPENMP、t= OPT。例如 Commands_pair.rst 中的buck (giko)表示 buck 势同时有 GPU/INTEL/KOKKOS/OPENMP 加速版;Commands_fix.rst 中的addforce (k)表示 KOKKOS 版本。配合"初始化"分类中的suffix命令(如suffix gpu)可自动选择加速样式,再以package命令配置加速器资源。

总结

LAMMPS 的命令体系以"9 大功能分类"为纲、以"四段式输入脚本结构"为序:初始化确定环境 → 盒子与原子定义系统 → 力场与设置注入物理 → fix/compute 提供机制 → 输出记录结果 → run/minimize 驱动计算 → 脚本控制命令编织流程。任何复杂的 LAMMPS 仿真脚本,都可以拆解并归入这张分类图中。建议读者在编写新脚本时,对照 Commands_category.rst 逐类自查命令是否齐全、顺序是否合规,并使用-skiprun命令行标志(跳过 run/minimize 仅做语法检查,详见 Commands_input.rst)验证脚本正确性后再正式运行。

  • 科研
  • 科学计算
  • 高性能计算

【免费下载链接】lammps

Public development project of the LAMMPS MD software package

项目地址:https://gitcode.com/gh_mirrors/la/lammps
点击查看免费下载

相关推荐

上一篇:Yii 2 RESTful 响应格式详解:内容协商、数据序列化与 JSON 输出控制
下一篇:5步掌握QLExpress动态规则引擎:从配置到实时生效的终极指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 1:51:59

Aleph Alpha 开源 78B 参数 MoE 模型 Kolibri

德国 AI 实验室 Aleph Alpha 在 10 月 3 日发布了开源权重模型 Kolibri,总参数量 78B,采用 Apache 2.0 许可证。这是一个混合专家架构(MoE)模型,每次推理仅激活 3.46B 参数,在英文数学和代码测试中达到 90 …

作者头像 李华
网站建设 2026/10/5 1:44:48

终极游戏存档守护指南:用Ludusavi轻松实现跨平台备份

终极游戏存档守护指南:用Ludusavi轻松实现跨平台备份 【免费下载链接】ludusavi Backup tool for PC game saves 项目地址: https://gitcode.com/GitHub_Trending/lu/ludusavi 游戏存档是每位玩家最珍贵的数字资产,但系统崩溃、硬件故障或意外删除…

作者头像 李华