本章不假设任何分子模拟基础,只需要高二已学的数学与物理。 目标只有两个:说清分子动力学模拟(MD)在算什么,以及 LAMMPS 这个工具怎么用起来。
本课程的数学门槛只有一件工具——导数,也就是人教B版数学选修第三册里的 「瞬时变化率」。它的全部含义可以压成一句话: 先算平均变化率,再让间隔取极限。
在一小段 $\Delta t$ 里位移了 $\Delta x$,两者相除就是这一段的平均速度。 $\Delta t$ 越小,「这一段」就越接近某一个瞬间;令 $\Delta t\to 0$,平均量就变成瞬时量:
对速度再做一遍同样的事——先平均,再取极限:
上标 2 只表示求导两次,没有别的意思。牛顿第二定律 $F=ma$ 是高中熟悉的式子; 分子动力学把它当成一条推进规则:已知力 → 算出加速度 → 更新速度 → 更新位置。
| 先算的平均量 | 取极限 $\Delta t\to 0$ 得 | 在高中叫什么 |
|---|---|---|
| $\Delta x/\Delta t$(平均速度) | $\mathrm{d}x/\mathrm{d}t$ | 瞬时速度 |
| $\Delta v/\Delta t$(平均加速度) | $\mathrm{d}^2x/\mathrm{d}t^2$ | 瞬时加速度 |
两原子相对移动一小段 $\Delta r$,势能随之改变 $\Delta U$。把势能变化量除以位移变化量、 取相反数,再让 $\Delta r\to 0$,就得到力——读法就是 势能曲线切线斜率的相反数。高中已学过两个现成的例子:
| 高中熟悉的势能 | 求导 $\mathrm{d}U/\mathrm{d}r$ | 力 $F=-\mathrm{d}U/\mathrm{d}r$ | 物理含义 |
|---|---|---|---|
| 万有引力 $U=-\frac{GMm}{r}$ | $\frac{GMm}{r^{2}}$ | $-\frac{GMm}{r^{2}}$ | 恒为负,指向 $r$ 减小方向 $\Rightarrow$ 引力 |
| 库仑 $U=\frac{kQq}{r}$ | $-\frac{kQq}{r^{2}}$ | $\frac{kQq}{r^{2}}$ | $Qq$ 带正负号:同号相斥、异号相吸 |
把「力 → 加速度 → 速度 → 位置」合写成一条等式,就叫微分方程: 左边是未知函数的导数,右边也含未知函数本身,没有一步到位的公式解。 计算机把时间离散化、用差分代替导数,改写成右边这条能直接算的式子:
于是它变成一条递推式:知道这一刻的位置,就能算出下一刻; 从 $t=0$ 推到 $t=N\Delta t$,轨迹就出来了——这就是分子动力学模拟,也是 LAMMPS 的全部工作。
MD 的核心假设极其简单:把原子(或原子团)当成经典粒子, 它们之间的相互作用由一个势函数 $U$ 描述,于是每个粒子的运动 就完全由牛顿第二定律决定。
方程里有两个数学符号值得留意:$\mathrm{d}^2\mathbf{r}/\mathrm{d}t^2$ 是位置求导两次得到的加速度;$-\nabla U$ 是「势能对坐标求导、再取负号」, 一维情形就是上一页的 $-\mathrm{d}U/\mathrm{d}r$。
MD 的「原始产品」是一条轨迹——每个时刻、每个原子的位置与速度。 宏观量不是直接算出来的,而是由轨迹做统计平均得到的。
| 宏观 / 微观量 | 从轨迹怎么得到 |
|---|---|
| 温度 $T$ | 由原子动能统计:原子动得越剧烈,温度越高。$E_k=\frac{3}{2}Nk_BT$($k_B$ 为玻尔兹曼常数) |
| 压强 $P$ | 维里定理:动能项 + 原子间作用力项 |
| 总能量 $E$ | 动能 + 势能,逐帧求和 |
| 径向分布函数 $g(r)$ | 统计原子间距离的分布,反映液体/晶体结构 |
| 均方位移 MSD | 对时间拟合斜率得到扩散系数 $D$ |
| 弹性常数、应力 | 由应力的涨落公式或直接形变模拟得到 |
LAMMPS 的全称是 Large-scale Atomic/Molecular Massively Parallel Simulator, 直译即「大规模原子/分子并行模拟器」。
| 项目 | 内容 |
|---|---|
| 开发方 | 美国 Sandia 国家实验室(Sandia National Laboratories) |
| 首次发布 | 1995 年,至今持续更新(每季度一个日期版本) |
| 实现语言 | C++ |
| 许可 | 开源,GNU GPL |
| 定位 | 经典分子动力学引擎:原子、粗粒化粒子、介观粒子 |
| 并行 | 以 MPI 为主,同时支持 OpenMP 多线程与 KOKKOS 性能可移植层 |
| 官网 | https://www.lammps.org |
| 维度 | LAMMPS 的覆盖范围 |
|---|---|
| 相互作用 | 两体/多体势(LJ、EAM、MEAM、Tersoff、AIREBO、ReaxFF…);键合力场与专用水模型(CHARMM、AMBER、TIP3P、SPC/E…);并可外挂机器学习势(ML-PACE、ML-IAP) |
| 尺度跨度 | 原子尺度 → 介观尺度:粗粒化模型、耗散粒子动力学 DPD、SPH 流体 |
| 统计系综 | NVE、NVT、NPT、NPH、μVT 等,另含多种温度/压力控制方式 |
| 积分方法 | velocity-Verlet;多时间步 r-RESPA;刚体与 SHAKE/RATTLE 约束 |
| 边界条件 | 周期性 p、固定 f、自由 s、收缩 m,可逐方向组合 |
| 外场与约束 | 外加电场/磁场、固定原子、壁面、纳米压痕、拉伸形变 |
| 分析工具 | 内置 compute / fix 直接给出 $g(r)$、MSD、应力、配位数等 |
| 扩展接口 | 库接口可与 Python、量子化学程序耦合(如 QM/MM) |
LAMMPS 的名字里就有「Massively Parallel」。它自诞生起就是为并行设计的, 核心策略是域分解:把模拟盒子切成若干子域分给不同进程, 每个进程只管自己那一块的原子。
| 并行后端 | 说明 |
|---|---|
| MPI | 跨节点并行,主力方式;配合域分解与通信优化 |
| OpenMP | 单节点多线程,可与 MPI 混用(每进程多线程) |
| KOKKOS | 性能可移植层,提供 Serial / OpenMP / CUDA / HIP 等后端 |
| GPU | 通过 KOKKOS 的 CUDA/HIP 后端,或传统的 GPU 包实现 |
势函数是 MD 里最关键的输入。它决定了模拟「像不像真实材料」, 也决定了这套计算能不能用。
| 势函数(pair_style) | 适用对象 | 特点 |
|---|---|---|
| lj/cut | 惰性气体、粗粒化 | 最简单,只有 $\varepsilon$、$\sigma$ 两个参数 |
| eam、eam/alloy | 金属与合金(Cu、Al、Fe…) | 嵌入原子法,适合金属热力学与力学性质 |
| meam | 金属、半导体 | 考虑角度依赖,比 EAM 更接近真实 |
| tersoff | 共价晶体(Si、C) | 显含键角,描述共价键 |
| airebo | 碳氢体系 | 反应性不强但速度快,适合碳材料 |
| reaxff | 化学反应 | 允许键断裂与生成,可模拟反应过程 |
| TIP3P、SPC/E | 水 | 专用水分子模型,配合长程静电求解 |
| ml-iap、ML-PACE | 任意体系 | 机器学习势,接近 DFT 精度,但需要先训练 |
units 命令一次性选定单位制(lj、real、metal、si…),此后脚本里所有数值的含义都由它决定。本课程第一个算例用 units lj,即能量、长度、质量均为无量纲的约化单位。LAMMPS 官方为 Windows 提供预编译安装包,由 Fedora 上的 MinGW64 交叉编译器构建,
托管在官方软件源 rpm.lammps.org。
本课程统一使用下面这个文件(64 位 + 图形界面版):
| 文件名片段 | 含义 |
|---|---|
| LAMMPS | 程序名 |
| 64bit | 64 位版本(自 2022 年起不再提供 32 位) |
| GUI | 附带图形界面:带语法高亮的输入文件编辑器,可直接运行脚本 |
| Python | 附带完整 Python 运行环境,可从 LAMMPS 内调用 Python |
| MSMPI | 使用 Microsoft MPI 编译,支持多进程并行(需另装 MS-MPI) |
| latest / stable / 日期 | 最新开发版 / 稳定版 / 指定日期版本 |
SHA256SUMS 文件,可用于校验安装包的完整性。同一目录也提供 PLUMED、ML-PACE 等插件安装包,本课程暂不需要。LAMMPS-64bit-GUI-latest.exe。若出现 Windows SmartScreen 提示,选择「更多信息 → 仍要运行」。lmp -h 查看命令行选项。GUI 的安装包不含 MSMPI,只能串行或多线程运行。需要多进程并行时,应改装 LAMMPS-64bit-latest-MSMPI.exe(无图形界面),并另行安装 Microsoft MPI——完整步骤见下一页。Windows 版 LAMMPS 只有文件名含 MSMPI 的包支持多进程并行,且必须搭配
微软官方的 MS-MPI——它是 LAMMPS 在 Windows 上唯一支持的 MPI 库。
| 下载文件 | 大小 | 作用 | 需要吗 |
|---|---|---|---|
| msmpisetup.exe | 7.4 MB | 运行时:提供 mpiexec.exe 与并行通信库 | 需要 |
| msmpisdk.msi | 2.2 MB | 开发包:头文件与导入库,仅从源码编译 LAMMPS 才用到 | 不需要 |
msmpisetup.exe。当前版本 v10.1.3(10.1.12498.52,2024-07-15)。Program Files 并注册系统变量,UAC 提示时选择「是」。C:\Program Files\Microsoft MPI\,一路 Next 完成安装。mpiexec;出现 Microsoft MPI Startup Program 帮助信息即为成功。lmp.exe(用户级,不需要管理员),MS-MPI 提供 mpiexec.exe(机器级,需要管理员)。此后并行运行只需:mpiexec -n 4 lmp -in in.lj。| 菜单项 | 用途 |
|---|---|
| LAMMPS Shell | 已配置好环境的命令行窗口,推荐从这里开始 |
| LAMMPS GUI | 图形界面:打开、编辑、运行输入脚本,并查看 log 窗口 |
| LAMMPS Manual (PDF) | 官方手册,随安装包一同发布 |
| Benchmarks / Examples | 官方基准算例与示例目录(含参考输出) |
lmp -h
能打印出命令行选项列表,就说明可执行文件已在 PATH 中,安装成功;
若提示「不是内部或外部命令」,则说明环境变量没有生效,需要重装或手动添加路径。
版本号不必单独查询:任何一次运行都会在开头打印一行版本横幅,
形如 LAMMPS (2 Aug 2023)——看到它就知道程序正常启动了。
PATH 指向安装目录下的可执行文件,LAMMPS_POTENTIALS 指向随包发布的势函数目录——因此写 pair_coeff 时可以直接引用势文件名,不必复制到工作目录。
File 菜单:新建、打开、保存与查看
| 菜单项 | 快捷键 | 作用 |
|---|---|---|
New | Ctrl+N | 清空编辑区,文件名重置为 unknown(此时保存会先让你取名) |
Open | Ctrl+O | 打开对话框选一个脚本;其下方列出最近打开的 5 个文件,点一下即可重开 |
View | Ctrl+Shift+F | 只读查看任意文本文件(看 log.lammps 最方便)——注意它不是「切换视图」 |
Inspect Restart | Ctrl+Shift+R | 读入 restart 文件,一次弹出三个窗口:系统信息、data 文件内容、快照图 |
Save | Ctrl+S | 保存当前文件。文件名若是 unknown,会先弹出对话框让你选名字 |
Save As | Ctrl+Shift+S | 另存为新文件名或新文件夹;换文件夹会同时切换工作目录 |
Quit | Ctrl+Q | 退出程序;若有未保存的修改,会先问「保存 / 不保存 / 取消」 |
View 在这里是查看文件内容,不是切换视角;② Save As 存到别的文件夹会连带切换工作目录,脚本里的相对路径(势文件名、dump 输出名)会跟着换地方。
Run 菜单:启动计算、停止计算与可视化
| 菜单项 | 快捷键 | 作用 |
|---|---|---|
Run LAMMPS from Editor Buffer | Ctrl+Enter | 把编辑区里的内容当作脚本执行,未保存的修改也生效——日常就用这条 |
Run LAMMPS from File | Ctrl+Shift+Enter | 读取磁盘上的文件运行,仅作备用;缓冲区跑不了的输入才用它,改动需先保存 |
Stop LAMMPS | Ctrl+/ | 做完当前这一步后停下,跳过后面所有 run / minimize,等价于脚本里的 timer timeout 0 |
Relaunch LAMMPS Instance | — | 销毁并重建 LAMMPS 实例。平时用不到,只在程序行为异常时试 |
Set Variables... | Ctrl+Shift+V | 设置 index 型变量,实例创建时传入,故运行前生效;对话框会预填脚本中的变量 |
Create Image | Ctrl+I | 给当前体系拍一张快照,显示在 Image 窗口;计算进行中不可用 |
View in OVITO | Ctrl+Shift+O | 用 OVITO 打开当前体系(需系统 PATH 中能找到 OVITO) |
View in VMD | Ctrl+Shift+D | 用 VMD 打开当前体系(需系统 PATH 中能找到 VMD) |

View 菜单:五个观察窗口
| 菜单项 | 快捷键 | 作用 |
|---|---|---|
Output Window | Ctrl+Shift+L | 显示的正是运行时刷屏的那段文本:版本横幅、每步的能量与温度、耗时 |
Charts Window | Ctrl+Shift+C | 把热力学输出画成折线图;Data 下拉选择画哪一项,Plot 选原始 / 平滑 / 两者 |
Image Window | Ctrl+Shift+I | 显示 Create Image 拍下的单张快照,可调尺寸、视角与着色 |
Slide Show Window | Ctrl+L | 脚本里写了 dump image 时,边算边把每帧图像像放幻灯片一样显示出来 |
Variables Window | Ctrl+Shift+W | 显示脚本中变量当前的值(相当于 info variables),写循环时用它看跑到哪一步了 |
LAMMPS 是「读脚本、按行执行」的程序。脚本语法上没有强制分段, 但惯例上分为四段,看懂这四段,就看得懂绝大多数输入文件。
| 段 | 代表命令 | 作用 |
|---|---|---|
| ① 初始化 | units, dimension, boundary, atom_style, newton | 定义单位制、维度、边界条件与原子表示方式 |
| ② 定义体系 | lattice, region, create_box, create_atoms, read_data | 造盒子、放原子;或用 read_data 读入已有结构 |
| ③ 设置相互作用 | pair_style, pair_coeff, bond_style, kspace_style, neighbor, timestep | 指定力场与数值参数(截断、邻接表、时间步) |
| ④ 计算与输出 | velocity, fix, compute, thermo, dump, run | 给初始速度、积分演化、采样统计、写文件 |
pair_style 定「用哪种势」,pair_coeff 给「这套势的参数」,dump 写「轨迹」,thermo 控「屏幕上的热力学输出频率」。下面这份 22 行脚本是 LAMMPS 最经典的入门算例——Lennard-Jones 流体。 它没有真实材料对应,但只要这份能跑通,后面换势函数就只是替换第 ③ 段。
# ---------- ① 初始化 ----------
units lj
atom_style atomic
dimension 3
boundary p p p
# ---------- ② 定义体系 ----------
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# ---------- ③ 设置相互作用 ----------
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0 2.5
neighbor 0.3 bin
neigh_modify delay 0 every 20 check no
# ---------- ④ 计算与输出 ----------
velocity all create 1.44 87287 loop geom
timestep 0.005
thermo 50
dump mydump all atom 100 dump.lj
fix 1 all nve
run 1000in.lj,在 LAMMPS Shell 里执行 lmp -in in.lj 即可运行。四段式的好处在这里最明显:想让体系变成铜或水,只需替换第 ③ 段。在 LAMMPS Shell 里进入存放脚本的目录,直接运行:
cd D:\md\lj
lmp -in in.lj
也可以在 LAMMPS GUI 里打开 in.lj,点击运行。
| 文件 | 内容 |
|---|---|
| log.lammps | 屏幕输出的完整记录:版本信息、体系规模、每若干步的热力学量 |
| dump.lj | 轨迹文件:每 100 步一帧,含原子坐标与速度,供可视化使用 |
| data.lj / restart | 只有脚本里写了 write_data / write_restart 才会产生 |
| 列名 | 含义 |
|---|---|
| Step | 时间步序号 |
| Temp | 瞬时温度(由动能统计得到;本算例第 0 步必定是 1.44) |
| E_pair / E_mol | 对势能 / 分子内能(键、角、二面角) |
| TotEng | 总能量 = 动能 + 势能 |
| Press | 压强(动能项 + 维里项) |
TotEng 应只做小幅涨落。若它持续单调上升,通常说明时间步过大(能量不守恒)或体系尚未弛豫。LAMMPS 自己不做三维渲染,它把轨迹写成文本文件,交给专门工具显示。
dump 文件,可按原子类型或坐标着色,播放多帧动画,导出图片或 GIF,并内置配位数、位移、位错分析等功能。下载与安装见下页。ITEM: TIMESTEP、NUMBER OF ATOMS、BOX BOUNDS 与 ATOMS 四个块。理解了这四个块,用任何软件、甚至自己写脚本读都轻而易举。OVITO(Open Visualization Tool)是分子模拟领域最通用的可视化与后处理软件,
由德国团队自 2009 年起持续开发,已被两万余篇论文引用。它能直接读取
LAMMPS 的 dump 文件、无需格式转换,即可完成三维显示、多帧动画、
着色与导出图片,并内置配位数、位移矢量、位错分析等后处理功能。
| 版本 | 授权 | 说明 |
|---|---|---|
| OVITO Basic | 免费开源 | 本课程选这个:基础可视化与常用分析功能齐全,完全够用 |
| OVITO Pro | 商业授权 | 额外提供路径追踪渲染、Python 脚本生成、自定义分析模块等,需付费许可证 |
ovito-basic-…-win64.exe 与 ovito-pro-…-win64.exe,点错会下到需要许可证的 Pro 版。dump.lj。OVITO 自动识别 LAMMPS dump 格式,不必填写任何参数。dump 每 100 步写一帧,1000 步共 11 帧。Z,层状结构立刻显现。dump … atom 风格,只输出 id type xs ys zs 五列,没有速度、也没有能量。把它改成 dump … custom … id type x y z vx vy vz,并在前面加一句 compute pe all pe/atom、再多输出一列 c_pe,就能按这些量着色——这也是后续章节做定量分析时的常规做法。rpm.lammps.org/windows,本课程使用
LAMMPS-64bit-GUI-latest.exe。PATH 与
LAMMPS_POTENTIALS 自动配置,验证命令是 lmp -h。MSMPI 的安装包,另装
Microsoft MPI(msmpisetup.exe,机器级安装),
启动命令为 mpiexec -n N lmp -in in.lj。in.lj 跑通第一个算例,从 log.lammps 读热力学量,
用 OVITO 看轨迹。| 资源 | 地址 |
|---|---|
| LAMMPS 官网 | https://www.lammps.org |
| 官方手册 | https://docs.lammps.org |
| Windows 安装包 | https://rpm.lammps.org/windows/ |
| MS-MPI 下载 | https://www.microsoft.com/en-us/download/details.aspx?id=105289 |
| OVITO 可视化(选 Basic,免费) | https://www.ovito.org/#download |
| NIST 势函数库 | https://www.ctcms.nist.gov/potentials/ |