- 科研
- 科学计算
- 高性能计算
【免费下载链接】lammps
Public development project of the LAMMPS MD software package
导读
本文以 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(镜像);详见 boundarychange_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_styleatom_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_dataread_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_stylepair_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(恒温);详见 fixfix_modify:修改已定义 fix 的附加属性(能量/维里贡献开关、输出选项等)compute:定义诊断计算,语法为compute ID group-ID style args,如compute ke all ke(动能);详见 computecompute_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()函数实现变间隔输出);详见 thermothermo_style:选择打印内容与格式(one、custom、multi等,可含任意compute与变量)thermo_modify:调整热力学输出细节(打印格式、标题、是否写入 log 文件等)dump:周期性输出原子轨迹(atom、custom、cfg、image、movie等格式);详见 dumpdump image:输出快照位图(如 JPEG/PNG),dump movie:连续输出并编码为影片(如 MPEG);两者语法见 dump_imagedump_modify:调整 dump 参数(输出格式、频率、padding、缩放等)undump:停止某个 dumprestart:周期性写入重启文件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 3thermo 50表示每 50 步打印一次热力学量(并在仿真开始与结束时各打印一次)。注释中的dump ... image展示了按 25 步输出图片快照、pad 3补齐编号、&续行的典型写法。
八、动作(Actions)
本类 8 条命令是真正"驱动计算执行"的命令,对应文档 Commands_input.rst 中定义的三类命令中的"执行类":
run:运行分子动力学,语法run N,支持upto、start、stop、pre、post、every等关键字;详见 runminimize:能量最小化(分子静力学),语法minimize etol ftol maxiter maxeval;详见 minimizererun:重放 dump 文件中的历史构型并重新计算诊断量neb/neb_spin:Nudged Elastic Band 找最小能量路径(后者为自旋版本)prd:Parallel Replica Dynamics 加速稀有事件模拟tad:Temperature Accelerated Dynamicstemper:并行退火(副本交换)模拟
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等风格),是脚本灵活性的核心;详见 variableif/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 个部分组成:
- 初始化(Initialization):在创建/读入原子前设置参数,命令即分类一中的
units、dimension、newton、processors、boundary、atom_style、atom_modify;若 data 文件含力场参数,还需提前声明pair_style、bond_style等样式 - 系统定义(System definition):三种途径——
read_data/read_restart读入,或lattice+region+create_box+create_atoms自行构建,或read_dump;需要放大系统用replicate - 仿真设置(Simulation settings):力场系数(
pair_coeff等)、仿真参数(neighbor、group、timestep、run_style、min_style)、fix/compute/variable、输出设置(thermo、dump、restart) - 运行仿真(Run a simulation):
run(MD)、minimize(能量最小化)、temper(副本交换);第 3、4 部分可反复循环——跑一段、改设置、再跑
同时,Commands_input.rst 强调 LAMMPS逐行执行命令(而非先整体解析再运行),因此命令顺序有实际后果:例如下面两段脚本行为不同——
timestep 0.5 run 100 run 100run 100 timestep 0.5 run 100第一段两次 run 都用 0.5 时间步;第二段第一次 run 用默认 1.0 步长,第二次才用 0.5。另外,processors与boundary必须在read_data之前设置才能按预期影响处理器映射与盒边界。
解析规则要点:命令行的 6 条文法
写输入脚本前还应掌握 Commands_parse.rst 的 6 条解析规则:
- 续行:行末
&表示命令延续到下一行(下一行会拼接续上,&与换行被移除) - 注释:第一个
#之后全部视为注释并丢弃;注意&之后的注释会阻止续行 - 变量替换:
$触发变量替换,${name}用花括号界定变量名,$x取单字符变量,$(expr)为立即数值表达式 - 分词:行按空白(空格、Tab)切分为"词"
- 命令名:第一个词是命令名,其后均为参数
- 引号:单引号
'、双引号"、三引号"""包裹的文本作为一个参数;三引号保留换行且其中的#、$不会被当作注释/变量处理,适合多行字符串(如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
相关推荐
Raycast脚本命令输出模式详解:从静默到全屏展示
Raycast脚本命令输出模式详解:从静默到全屏展示 输出模式概述 在Raycast脚本命令开发中,输出模式决定了脚本执行结果如何呈现给用户。根据不同的使用场景
开发工具桌面应用Python-qrcode命令行工具详解:从脚本到批处理的完整方案
Python qrcode命令行工具详解:从脚本到批处理的完整方案 想要快速生成QR码图片而不写Python代码?😊 Python qrcode命令行工具就是
图像处理Yii2 控制台命令完全指南:从入口脚本到自定义命令的开发实战
Yii2 控制台命令完全指南:从入口脚本到自定义命令的开发实战 Yii 框架不仅提供了丰富的 Web 应用开发能力,还内置了一套功能强大的控制台(Console
后端Web框架
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考