本章导读对应讲义第 1–2 页
本章的任务非常明确:让你从零开始把 LAMMPS 跑起来。因此它不追求把分子动力学的理论讲深,而是把「这条路怎么走通」讲清楚——从下载安装包,到看到第一份热力学输出。理论上只需要高中二年级已学的数学与物理基础(见〈数学准备〉一节)。
之所以把工具章放在最前面,是因为本课程后续所有内容(水的结构、聚合物的玻璃化、金属的拉伸、界面的传热……)都要落到「跑一个算例、看一份输出」上。工具不熟,后面的物理就无从谈起。
学完这一章,你应该能做到
- 用高中所学的导数说清「势能 → 力」这一步;
- 用一句话说清 MD 解的是什么方程、给的是什么结果;
- 知道 LAMMPS 的能力边界,能判断「这个问题该不该用 LAMMPS」;
- 在 Windows 上独立完成下载、安装、验证三件事;
- 读懂一份最小输入脚本,能修改参数、运行、并解释输出;
- 遇到常见报错时,知道去哪一栏找原因。
本资料是小节化的长文,与幻灯片的页码一一对应(见文末对照表)。建议先跑通算例再回头精读 §1.7——脚本这种东西,跑过一次之后再看讲解,理解速度会快很多。
数学准备:整门课只需要一个导数对应讲义第 3 页 + 其后插页
本课程面向高中二年级学生,是高中物理与化学的延伸选修课。因此理论部分刻意压在「高中知识能覆盖」的范围内:全课程用到的数学工具其实只有一件——导数,也就是人教B版数学选修第三册里的「瞬时变化率」与「导数的几何意义(切线斜率)」。它会以三次不同的面孔出现(速度、加速度、力),但每一次都是同一个动作;认清这个动作,后面所有公式都能自行读懂。
① 导数的全部含义是一句话:先算平均变化率,再让间隔取极限($\Delta t\to0$ 或 $\Delta r\to0$)。
② 对时间用两次,得到速度与加速度;对位置用一次、取负号,得到力 $F=-\dfrac{\mathrm dU}{\mathrm dr}$。
③ 速度、加速度、力与牛顿第二定律合起来,是一条微分方程;把时间离散化、用差分代替导数,它就变成一条能直接算的递推式——这正是分子动力学模拟在做的事。
0.1 一个导数:从平均量到瞬时量
高中物理里最有用的一个量是平均速度:在一小段时间 $\Delta t$ 里位移了 $\Delta x$,两者相除就是这一段的快慢。但它只是「这一段」的平均值——$\Delta t$ 取得越小,它就越接近某一个瞬间的真实快慢。让 $\Delta t$ 趋于零,这个极限就是瞬时速度:
对速度再做一遍完全相同的动作——先求平均加速度,再取极限——就得到瞬时加速度:
所以 MD 里那个看起来很吓人的符号 $\mathrm d^2\mathbf r/\mathrm dt^2$,含义只是:位置对时间求导一次得速度,再求导一次得加速度。上标 2 表示「求了两次」,没有别的意思。
牛顿第二定律 $F=ma$ 是高中就熟悉的。MD 把它反着用:已知原子所受的力 → 算出加速度 → 由加速度更新速度 → 再由速度更新位置 → 回到第一步。这个循环每转一圈,时间前进一个 $\Delta t$(通常取飞秒量级,$1\ \mathrm{fs}=10^{-15}\ \mathrm{s}$)。「分子动力学模拟」的全部含义,就是这个循环。
0.2 换个间隔再来一次:从势能到力
前一节那个「先平均、再取极限」的动作,把时间间隔 $\Delta t$ 换成距离间隔 $\Delta r$ 就能再用一次。这一次被求导的对象不是位置,而是势能 $U$——一个只与原子间距离有关的能量函数。
直接去求「原子之间的力」是一件困难的事:它随距离变化,又随周围环境变化。物理学的做法是绕一步:先写出体系的势能 $U$,再把势能的变化量除以位移的变化量、取相反数,然后让 $\Delta r\to0$:
它的几何读法是:势能曲线上某点切线的斜率,取相反数,就是那一处的力。高中已经学过两个现成的例子,用同一句话就能读懂:
| 高中熟悉的势能 | 导数 $\mathrm dU/\mathrm dr$ | 力 $F=-\mathrm dU/\mathrm dr$ | 物理含义 |
|---|---|---|---|
| 万有引力势能 $U=-\dfrac{GMm}{r}$ | $\dfrac{GMm}{r^2}$ | $-\dfrac{GMm}{r^2}$ | 恒为负号,指向 $r$ 减小的方向 $\Rightarrow$ 引力 |
| 库仑势能 $U=\dfrac{kQq}{r}$ | $-\dfrac{kQq}{r^2}$ | $\dfrac{kQq}{r^2}$ | $Qq$ 带正负号:同号相斥、异号相吸 |
| 重力势能 $U=mgh$ | $mg$ | $-mg$ | 负号表示向下($h$ 减小的方向)——正是重力 |
| 弹簧振子 $U=\dfrac12kx^2$ | $kx$ | $-kx$ | 负号表示力指向平衡位置——正是胡克定律 |
负号的含义只有一句话:力永远指向势能降低的方向。想象一个小球放在斜坡上:它总是往下坡滚,而不会往上坡滚。若丢掉负号,结论就变成「力指向势能升高的方向」,与所有物理事实相反。
换句话说:势能是「力」的另一种写法。给定 $U$,处处切线的斜率就告诉你力;反过来,力沿路径累积(积分)也能恢复出 $U$。所以 MD 把「力场」直接称作「势函数」——两者说的是一回事。
0.3 亲手算一遍:Lennard-Jones 势的力
本课程第一个算例使用的是最经典的 Lennard-Jones(LJ)势:
其中 $r$ 是两原子间距离,$\varepsilon$ 是「阱深」(能量单位),$\sigma$ 是「零势能距离」(长度单位)。对它求导,用到的只是高中两条法则:幂函数求导 $(r^n)'=nr^{n-1}$ 与复合函数求导。先把括号里的幂改写成负指数:
于是力为
这个式子给出了一个可检验的预言:在 $F=0$ 处,两原子既不推也不拉,那就是平衡距离 $r_0$。令括号内为零:
把 $r_0$ 代回势能,可以验证它就是势能的最低点(阱底):$U(r_0)=4\varepsilon\left(\frac14-\frac12\right)=-\varepsilon$。这一步只用到分数运算,高二学生完全能自己完成。
LJ 势最成功的应用对象是惰性气体。以氩为例,$\sigma\approx0.340\ \mathrm{nm}$,于是 $r_0\approx0.382\ \mathrm{nm}$;而实验测得的固态氩最近邻距离约为 $0.38\ \mathrm{nm}$——两者几乎重合。这不是巧合,LJ 势当初就是为惰性气体「量身定做」的。
顺带说明:金属(如铜)不能用 LJ 势描述,要用 EAM 等多体势(见 §1.3)。但无论哪种势,力都是对势能求导得到的——这一条永远成立。
0.4 三个导数合起来:一个微分方程
前面三节一共得到三个导数:速度 $\dfrac{\mathrm dx}{\mathrm dt}$、加速度 $\dfrac{\mathrm d^2x}{\mathrm dt^2}$、力 $F=-\dfrac{\mathrm dU}{\mathrm dx}$。它们不是三件互不相干的事——把它们与牛顿第二定律 $F=ma$ 首尾相接,消去 $F$ 与 $a$,就只剩一个等式:
这个等式有两个特点:左边含未知函数的导数(二阶导数),右边也含未知函数本身(因为势能 $U$ 依赖位置 $x$)。把「函数」与「函数的导数」绑在同一个式子里,这样的等式叫微分方程(这里是一条二阶常微分方程)。
它没有一步到位的公式解。原因很直白:你无法写出一行 $x(t)=\cdots$ 的答案,因为右边的 $U$ 依赖 $x$,而 $x$ 正是待求的未知量——这是一个「自己决定自己」的方程。
理论上,只要写下力,就能对这个方程积分求出轨迹。但对 $N$ 个原子相互作用的体系,这个「积分」没有解析解——只能一步一步数值推进。这正是计算机的用武之地,也是 LAMMPS 这类程序存在的理由。
0.5 计算机怎么解它:离散化与差分
数值求解只需两步。
第一步:把时间离散化。不再追问「任意时刻 $x$ 是多少」,而是只记录 $t=0,\ \Delta t,\ 2\Delta t,\ \dots$ 这些离散时刻的位置。这样「一个连续的未知函数 $x(t)$」就变成「一串待求的数」。
第二步:用差分代替导数。当 $\Delta t$ 足够小时,二阶导数最常用的差分近似是
把它代回 0.4 的微分方程,并利用 $-\dfrac{\mathrm dU}{\mathrm dx}=F$,稍微整理就得到一条递推式:
读法是:知道这一刻的位置和上一刻的位置,就能算出下一刻的位置。从 $t=0$ 出发一路推下去,每个原子在每个时刻的位置就都出来了——这就是分子动力学模拟,也是 LAMMPS 的全部工作。
LAMMPS 默认使用的积分器是 velocity-Verlet:它不止更新位置,还对速度做「半步更新」,并用 $F(t)$ 与 $F(t+\Delta t)$ 的平均值来提高精度。但思想与上式完全一样——把微分方程翻译成递推式,然后拼命快算。本课程只需要记住这件事,第三章会把 velocity-Verlet 逐步写出来。
0.6 符号表与三个常见困惑
本课程会反复出现下面几个符号,遇到时对照此表即可:
| 符号 | 读法 | 需要掌握到什么程度 |
|---|---|---|
| $\Delta x/\Delta t$ | 平均变化率(这一段时间的平均速度) | 高中已学;它是「取极限」之前的量 |
| $\dfrac{\mathrm dx}{\mathrm dt}$ | 位置对时间求导(瞬时速度) | 高中已学;即 $\Delta t\to0$ 的极限 |
| $\dfrac{\mathrm d^2x}{\mathrm dt^2}$ | 位置对时间求导两次(加速度) | 理解为「求导两次」即可 |
| $\dfrac{\mathrm dU}{\mathrm dr}$ | 势能对位置求导 | 本章核心,要会用幂函数求导法则算 |
| $m\dfrac{\mathrm d^2x}{\mathrm dt^2}=-\dfrac{\mathrm dU}{\mathrm dx}$ | 运动的微分方程 | 只需知道它是「一条含未知函数导数的方程」 |
| $\dfrac{\Delta^2x}{\Delta t^{2}}$ | 差分:用「差商」近似导数 | 只需知道 $\Delta$ 是「一小段」、$\mathrm d$ 是「取极限」 |
| $\nabla U$ | 梯度:对三个方向的坐标分别求导 | 只需知道它是 $\mathrm dU/\mathrm dr$ 在三维的推广 |
| $\displaystyle\int \mathrm dt$ | 积分:求导的反向操作(累积) | 只需知道它与求导互为逆运算 |
| $k_B$ | 玻尔兹曼常数,$1.38\times10^{-23}\ \mathrm{J/K}$ | 只需知道它是「温度」与「能量」之间的换算常数 |
$\Delta$ 表示「一小段」——一个真实的、有限大的间隔,对应的量叫平均量(平均速度、平均变化率)。$\mathrm d$ 表示「让这一小段趋于零」,对应的量叫瞬时量(瞬时速度、导数)。所以 $\dfrac{\Delta x}{\Delta t}$ 与 $\dfrac{\mathrm dx}{\mathrm dt}$ 只差一件事:有没有取极限。整门课的数学,就是在这一件事上来回走。
因为 MD 里所有相互作用都是保守力(只与位置有关、与路径无关),而保守力必定可以写成一个势函数的导数。用一个标量函数 $U$ 代替三个分量的力 $\mathbf F$,是一种极经济的记账方式——LAMMPS 的 pair_style 定义的正是 $U$,而不是力。这也解释了为什么「换势函数」等于「换了一整套物理」。
因为 $\Delta t$ 取得足够小时两者的差别可以忽略:分子动力学里 $\Delta t$ 通常取 $1\ \mathrm{fs}$($10^{-15}\ \mathrm{s}$),比原子振动周期小一到两个量级,所以差分近似足够准。代价是误差会累积:推的步数越多,偏离真实轨迹越远。这正是后面要面对的「能量漂移」问题的根源(见 §1.8)。
本节的三条结论会被反复用到:§1.3(势函数与单位制)用的是「力来自势能的导数」;§1.7(LJ 流体逐行讲解)用的是「差分递推式」;§1.8 讲的「能量漂移」则直接来自 0.6 困惑三里说的累积误差。若读者对导数还不太熟,建议先在数学课上把人教B版选修第三册的「导数的几何意义」与「基本初等函数的导数公式」两节过一遍;本课程不再引入其它数学工具。
一、§1.1 分子动力学模拟在算什么对应讲义第 4–5 页
1.1.1 三件套:势、力、积分器
分子动力学(Molecular Dynamics, MD)的全部内容可以压缩成一句话:把原子当成经典粒子,让它们在势函数决定的力场里按牛顿第二定律运动。写成方程就是
这里面有三个角色,缺一不可:
| 角色 | 数学形式 | 它决定了什么 |
|---|---|---|
| 势函数 | $U(\mathbf{r}_1,\dots,\mathbf{r}_N)$ | 「像不像真实材料」。把化学键、静电、范德华等相互作用全部编码成一个标量函数 |
| 受力 | $\mathbf{F}_i=-\nabla_i U$ | 力不是额外输入的,而是势函数对坐标求梯度自动得到 |
| 积分器 | velocity-Verlet 等 | 把 $t\to t+\Delta t$ 一步步推进,把连续的微分方程变成离散的轨迹 |
值得强调的是第二条。在 MD 里你永远不需要手写内力——只要给定 $U$,力就自动出来(这正是〈数学准备〉里的 $F=-\mathrm dU/\mathrm dr$;带 $\nabla$ 的写法只是它在三维的推广)。这也是为什么「换势函数」几乎等价于「换了一套新物理」。第三章我们会看到,LAMMPS 里换势函数只是改一行 pair_style。
LAMMPS 只做经典分子动力学,它不解薛定谔方程。电子结构属于量子化学软件的职责。MD 需要的势函数,要么是别人用第一性原理算好后拟合出来的(如 EAM、Tersoff),要么是直接经验拟合的(如 LJ)。
由此产生一条重要推论:如果势函数不可靠,MD 结果再漂亮也没有意义。这是 MD 与第一性原理计算最本质的差别。
1.1.2 输出:从轨迹到宏观量
MD 的「原始产品」只有一样东西:轨迹。即每一个时刻、每一个原子的位置与速度。所有宏观量都是对轨迹做统计平均得到的。
| 宏观 / 微观量 | 从轨迹怎么得到 |
|---|---|
| 温度 $T$ | 由原子动能统计:原子动得越剧烈,温度越高,$E_k=\frac{3}{2}Nk_BT$($k_B$ 为玻尔兹曼常数) |
| 压强 $P$ | 维里定理:动能项 + 原子间作用力项。通俗地说,就是把「原子撞墙的冲量」与「原子互相拉扯的贡献」都算进去 |
| 总能量 $E$ | 动能 + 势能,逐帧求和 |
| 径向分布函数 $g(r)$ | 统计原子间距离的分布,反映液体/晶体结构 |
| 均方位移 MSD | $\langle|\mathbf r(t)-\mathbf r(0)|^2\rangle$,对时间拟合斜率得到扩散系数 $D$ |
| 弹性常数、应力 | 由应力涨落的关联公式,或直接做形变模拟 |
| 热导率 | Green-Kubo 关联,或非平衡态(NEMD)方法 |
MD 用时间平均代替系综平均:即认为「一条足够长的轨迹,遍历了系统在该宏观态下所有可能的微观构型」。这个假设在理论上并不严格成立,它是 MD 的工程前提。
由此带来两条实践规则:①模拟时间要够长,②体系要够大。这也是 MD 最消耗算力的地方。
二、§1.2 LAMMPS 是什么对应讲义第 6–8 页
1.2.1 出身与定位
LAMMPS 的全称是 Large-scale Atomic/Molecular Massively Parallel Simulator,直译即「大规模原子/分子并行模拟器」。
| 项目 | 内容 |
|---|---|
| 开发方 | 美国 Sandia 国家实验室(Sandia National Laboratories) |
| 首次发布 | 1995 年,至今持续更新,每季度发布一个日期版本 |
| 实现语言 | C++ |
| 许可 | 开源,GNU GPL |
| 定位 | 经典分子动力学引擎:原子、粗粒化粒子、介观粒子 |
| 并行 | 以 MPI 为主,同时支持 OpenMP 多线程与 KOKKOS 性能可移植层 |
| 官网 | https://www.lammps.org |
| 官方手册 | https://docs.lammps.org |
一句话记住它的计算对象:永远是「粒子 + 势函数」,而不是电子。它最强的地方在于——能把几百万到几十亿个粒子在超级计算机上跑起来,并把结果稳定地写成文件。
1.2.2 能算什么、不能算什么
LAMMPS 覆盖的范围很宽,但边界同样清楚。
| 维度 | 覆盖范围 |
|---|---|
| 相互作用 | 两体/多体势(LJ、EAM、MEAM、Tersoff、AIREBO、ReaxFF…);键合力场与专用水模型(CHARMM、AMBER、TIP3P、SPC/E…);并可外挂机器学习势(ML-IAP、ML-PACE) |
| 尺度跨度 | 原子尺度 → 介观尺度:粗粒化模型、耗散粒子动力学 DPD、SPH 流体 |
| 统计系综 | NVE、NVT、NPT、NPH、μVT 等,另含多种温度/压力控制方式 |
| 积分方法 | velocity-Verlet;多时间步 r-RESPA;刚体与 SHAKE/RATTLE 约束 |
| 边界条件 | 周期性 p、固定 f、自由 s、收缩 m,可逐方向组合 |
| 外场与约束 | 外加电场/磁场、固定原子(fix setforce)、壁面、纳米压痕、拉伸形变 |
| 分析工具 | 内置 compute / fix 直接给出 $g(r)$、MSD、应力、配位数等 |
| 扩展接口 | 库接口可与 Python、量子化学程序耦合(如 QM/MM) |
不能计算电子结构(能带、激发态、光谱属于量子化学);
不能自动处理化学键断裂——除非使用 ReaxFF 这类反应性势函数,而这类势的精度与适用性都需要单独验证;
不会替你判断势函数选得对不对。选错势,结果再漂亮也没有意义。
1.2.3 并行能力与体系规模
LAMMPS 的名字里就有「Massively Parallel」,它自诞生起就是为并行设计的。核心策略是域分解(domain decomposition):把模拟盒子切成若干子域,分给不同进程,每个进程只负责自己那一块里的原子。进程之间只在子域边界处交换原子信息。
| 并行后端 | 说明 |
|---|---|
| MPI | 跨节点并行,主力方式;配合域分解与通信优化 |
| OpenMP | 单节点多线程,可与 MPI 混用(每进程开多个线程) |
| KOKKOS | 性能可移植层,提供 Serial / OpenMP / CUDA / HIP 等后端 |
| GPU | 通过 KOKKOS 的 CUDA/HIP 后端,或传统的 GPU 加速包实现 |
官方交叉编译的 Windows 安装包虽然已包含 KOKKOS,但只启用了 serial 与 OpenMP 后端,GPU 后端因交叉编译限制不可用。桌面机上做教学与中小体系完全够用;需要大规模并行时,应当在 Linux 集群上运行。
三、§1.3 势函数与单位制对应讲义第 9 页
势函数是 MD 里最关键的输入。常见的几类:
| 势函数(pair_style) | 适用对象 | 特点 |
|---|---|---|
lj/cut | 惰性气体、粗粒化体系 | 最简单,只有 $\varepsilon$、$\sigma$ 两个参数 |
eam、eam/alloy | 金属与合金(Cu、Al、Fe…) | 嵌入原子法,适合金属热力学与力学性质 |
meam | 金属、半导体 | 考虑角度依赖,比 EAM 更接近真实 |
tersoff | 共价晶体(Si、C) | 显含键角,描述共价键 |
airebo | 碳氢体系 | 反应性不强但速度快,适合碳材料 |
reaxff | 化学反应 | 允许键断裂与生成,可模拟反应过程 |
TIP3P、SPC/E | 水 | 专用水分子模型,配合长程静电求解(kspace_style) |
ml-iap、ML-PACE | 任意体系 | 机器学习势,接近 DFT 精度,但需要先训练 |
单位制先行
LAMMPS 用一条 units 命令一次性选定单位制,此后脚本里所有数值的含义都由它决定。常用的几种:
units | 长度 | 能量 | 质量 | 时间 | 典型用途 |
|---|---|---|---|---|---|
lj | $\sigma$ | $\varepsilon$ | 粒子质量 | $\sigma\sqrt{m/\varepsilon}$ | 约化单位,LJ 模型算例 |
real | Å | kcal/mol | g/mol | fs | 生物分子力场(CHARMM、AMBER) |
metal | Å | eV | g/mol | ps | 金属、EAM 势 |
si | m | J | kg | s | 真正的国际单位制 |
单位制是初学者最常踩的坑:把 metal 的时间当 fs 用,或者把 lj 里的小数误认为是物理量。一条规则:脚本里出现任何一个数之前,先确认 units 是什么。本课程第一个算例用 units lj,即能量、长度、质量均为无量纲的约化单位,可以完全避开单位换算。
四、§1.4 下载与安装对应讲义第 10–12 页
4.1 下载:官方 Windows 安装包
LAMMPS 官方为 Windows 提供预编译安装包,由 Fedora 上的 MinGW64 交叉编译器构建,托管在官方软件源 rpm.lammps.org。
本课程统一使用下面这个文件(64 位 + 图形界面版):
文件名怎么读
| 文件名片段 | 含义 |
|---|---|
LAMMPS | 程序名 |
64bit | 64 位版本(自 2022 年起不再提供 32 位) |
GUI | 附带图形界面:带语法高亮的输入文件编辑器,可直接运行脚本并查看 log 窗口 |
Python | 附带完整 Python 运行环境,可在 LAMMPS 内调用 Python |
MSMPI | 使用 Microsoft MPI 编译,支持多进程并行(需另装 MS-MPI) |
latest / stable / 日期 | 最新开发版 / 稳定版 / 指定日期版本 |
下载目录里还有 SHA256SUMS 文件,可用于校验安装包完整性。同一目录也提供 PLUMED、ML-PACE 等插件安装包,本课程暂不需要。
4.2 安装:五步完成
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 运行安装程序 | 双击 LAMMPS-64bit-GUI-latest.exe。若出现 SmartScreen 提示,选择「更多信息 → 仍要运行」 |
| 2 | 跟随向导 | 按提示选择安装目录(建议保留默认)、是否创建快捷方式,然后点击 Install |
| 3 | 等待解包 | 安装包会一并释放 PDF 手册、势函数文件、示例输入与基准算例,体积较大 |
| 4 | 完成 | 点击 Finish。安装是用户级的,不需要管理员权限 |
| 5 | 验证 | 打开开始菜单里的 LAMMPS Shell,输入 lmp -h |
文件名含 GUI 的安装包不含 MSMPI,只能串行或多线程运行。需要多进程并行时,应改装 LAMMPS-64bit-latest-MSMPI.exe(无图形界面),并另行安装 Microsoft MPI。
本课程为什么仍选 GUI 版?因为它自带开始菜单项、自带手册与示例,且教学算例并不需要并行。教学与中小体系用 GUI 版更省事。
若确实需要多进程并行,请按下面 4.3 节安装 MS-MPI,并改用含 MSMPI 的安装包。
4.3 并行运行:安装 Microsoft MPI
Windows 版 LAMMPS 有两种可执行文件形态:普通多线程版(文件名不含 MSMPI)与支持多进程并行的版本(文件名含 MSMPI)。后者本身不包含 MPI 运行库,必须另行安装微软官方的 MPI 实现——Microsoft MPI(MS-MPI)。这一点值得单独记住:MS-MPI 是 LAMMPS 在 Windows 上唯一被官方支持的 MPI 库(早期版本曾使用 Argonne 的 MPICH,自 2023 年 8 月版起已不再支持)。
4.3.1 下载
| 下载文件 | 大小 | 作用 | 本课程是否需要 |
|---|---|---|---|
msmpisetup.exe | 7.4 MB | 运行时:提供 mpiexec.exe 与并行通信库。任何要运行 MPI 程序的机器都要装它 | 需要 |
msmpisdk.msi | 2.2 MB | 开发包:头文件与导入库。只含编译期文件,不含运行时,仅当从源码编译 LAMMPS 或自写 MPI 程序时才需要 | 不需要 |
当前版本为 MS-MPI v10.1.3(内部版本号 10.1.12498.52,2024-07-15 发布),支持的操作为 Windows 10 / 11 与 Windows Server 2016 / 2019 / 2022。
教学与使用场景下,只下载并运行 msmpisetup.exe 即可跑并行 LAMMPS。常见误解是「两个都要装」——对编译是对的,对运行则不是。msmpisdk.msi 提供的是 mpi.h 与 msmpi.lib,属于开发期文件。
4.3.2 安装步骤
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 下载 | 在下载页勾选 msmpisetup.exe,点 Download |
| 2 | 以管理员身份运行 | MS-MPI 是机器级安装:要写入 Program Files 并注册系统环境变量,因此会出现 UAC 提示,选择「是」 |
| 3 | 跟随向导 | 建议保持默认路径 C:\Program Files\Microsoft MPI\,一路 Next 完成安装 |
| 4 | 重启终端 | 环境变量只对安装之后新启动的进程生效,务必关掉所有旧命令行窗口再重新打开 |
| 5 | 验证 | 在新终端输入 mpiexec,出现 Microsoft MPI Startup Program 帮助信息即为成功 |
① 权限级别不同。LAMMPS 安装包是用户级的(不需要管理员);MS-MPI 是机器级的(需要管理员),并把 C:\Program Files\Microsoft MPI\Bin 写入系统 PATH。
② 是否重启终端不同。LAMMPS 安装后新开的 LAMMPS Shell 自带正确环境;MS-MPI 装完必须重开终端,否则会报「'mpiexec' 不是内部或外部命令」——这是最常见的假故障。
4.3.3 验证与安装位置
mpiexec
不带参数运行 mpiexec 会打印用法与版本信息。也可以直接查看安装器注册的环境变量:
set MSMPI
| 变量名 | 预期值 | 用途 |
|---|---|---|
MSMPI_BIN | C:\Program Files\Microsoft MPI\Bin\ | 可执行文件路径(mpiexec.exe) |
MSMPI_INC | C:\Program Files (x86)\Microsoft SDKs\MPI\Include\ | 头文件路径(仅 SDK 提供) |
MSMPI_LIB64 | C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64\ | 64 位库文件路径(仅 SDK 提供) |
4.3.4 并行运行 LAMMPS
装好 MS-MPI、并使用含 MSMPI 的 LAMMPS 包之后,用 mpiexec 启动多进程并行:
mpiexec -n 4 lmp -in in.lj
-n(等价写法 -np)指定并行进程数。域分解会把模拟盒子自动切成 4 份,各进程各自负责一块,只在子域边界交换原子信息。
① 屏幕输出是块缓冲的。在 mpiexec 下,日志不会实时刷屏,而是攒够一批才写出来。这不是卡死——看进度请查 log.lammps。
② 不要在 mpiexec 下再开多线程。MS-MPI 会把每个进程绑定到单个物理核,此时叠加 OpenMP 反而更慢。并行策略二选一:MPI 多进程,或单进程多线程。
③ 装了 MSMPI 版 LAMMPS 却忘装 MS-MPI。程序一启动就会失败。安装顺序无所谓,但两者必须同时在场。
因为教学算例都是中小体系(几千到几十万个原子),单机多线程已经够用,而 GUI 版自带语法高亮的编辑器、手册与示例,开箱即用。真正需要「几百万原子 + 多节点」时,正确去处是 Linux 集群,而不是在 Windows 桌面机上堆进程数。
本节的意义在于:当你要在 Windows 上跑并行时,知道该装什么、装到哪、怎么验证——这条路径与 LAMMPS 的版本更新无关,长期有效。
五、§1.5 启动、验证与界面速查对应讲义第 13 页,后接 3 张插页
5.1 安装之后,开始菜单多了什么
| 菜单项 | 用途 |
|---|---|
| LAMMPS Shell | 已配置好环境的命令行窗口,推荐从这里开始 |
| LAMMPS GUI | 图形界面:打开、编辑、运行输入脚本,并查看 log 窗口 |
| LAMMPS Manual (PDF) | 官方手册,随安装包一同发布 |
| Benchmarks / Examples | 官方基准算例与示例目录(含参考输出) |
5.2 验证
lmp -h
能打印出命令行选项列表,就说明可执行文件已在 PATH 中,安装成功;若提示「不是内部或外部命令」,则说明环境变量没有生效,需要重装或手动添加路径。
版本号不必单独查询:任何一次运行都会在开头打印一行版本横幅,形如 LAMMPS (2 Aug 2023)——看到它就知道程序正常启动了。
PATH 指向安装目录下的可执行文件(因此可以直接敲 lmp);
LAMMPS_POTENTIALS 指向随包发布的势函数目录——因此写 pair_coeff 时可以直接引用势文件名(如 Cu_u3.eam),不必把它复制到工作目录。
5.3 File 菜单:脚本的新建、打开与保存
LAMMPS-GUI 的菜单栏有 File、Edit、Run、View、Tutorials、About 六项,日常用到的就是前四项。下面三节把它们逐个说清楚——每个菜单项都标注了快捷键与用途,并配一张本机实际运行界面的截图。
| 菜单项 | 快捷键 | 作用 |
|---|---|---|
New | Ctrl+N | 清空编辑区,文件名重置为 unknown。此时再按保存,会先弹出对话框让你取名。 |
Open | Ctrl+O | 打开对话框,选择一个输入脚本进行编辑。菜单里紧接其后的条目(截图中是 case01.lj)是最近打开的 5 个文件,点一下即可重新打开。 |
View | Ctrl+Shift+F | 以只读方式在独立窗口中查看任意文本文件——查看 log.lammps 和 dump 文件最方便。注意它不是「切换视图」的意思。 |
Inspect Restart | Ctrl+Shift+R | 读入一个 restart 文件,一次性弹出三个窗口:系统信息(相当于 info 命令的输出)、由它导出的 data 文件内容、以及一张快照图。用于接续一次被中断的计算。 |
Save | Ctrl+S | 保存当前文件。若文件名还是 unknown,会先弹出对话框让你选名字。 |
Save As | Ctrl+Shift+S | 另存为新文件名或新文件夹。存到别的文件夹会同时把工作目录切过去——而工作目录正是脚本里相对路径的基准。 |
Quit | Ctrl+Q | 退出程序。若有未保存的修改,会先询问「保存 / 不保存 / 取消」。 |
① View 在这里是「查看文件内容」,与「视图模式」无关;
② Save As 换文件夹会连带切换工作目录,而脚本里的相对路径(势函数文件名、dump 的输出名、日志名)都以它为基准——换目录后可能就找不到了。
5.4 Run 菜单:启动计算、停止计算与可视化
Run 菜单负责把脚本变成计算。有一件事值得先说清楚:LAMMPS-GUI 并不去调用独立的 lmp 可执行文件,而是链接了 LAMMPS 库,通过 C 库接口在单独的线程里运行 LAMMPS。所以计算期间界面依然响应,可以随时中止或查看中间结果——底部状态栏左侧那个小小的 L 标志,就表示当前存在一个 LAMMPS 实例。
| 菜单项 | 快捷键 | 作用 |
|---|---|---|
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 窗口里。计算进行中不可用;若尚未初始化,它会先执行脚本中第一个 run 之前的命令并补一个 run 0 来建立体系。 |
View in OVITO | Ctrl+Shift+O | 用 OVITO 打开当前体系(内部先写出一份 data 文件)。仅当系统 PATH 中能找到 OVITO 时可用。 |
View in VMD | Ctrl+Shift+D | 用 VMD 打开当前体系。同样要求系统 PATH 中能找到 VMD。 |
前两条的差别不只是「哪个文件」,而是两条执行通路:从缓冲区执行走的是 lammps_commands_string(),从文件执行走的是逐行读取文件。前者让「改一个字就能立刻重跑」成为可能,这正是做教学算例时最需要的;后者则作为兜底,留给少数在字符串缓冲区下跑不通的输入。
5.5 View 菜单:五个观察窗口
View 菜单本身不产生任何计算,它只负责显示或隐藏五个观察窗口。窗口默认是否自动打开,可以在 Edit → Preferences 里设置。写脚本时最常看的是 Output Window,跑起来之后最直观的是 Slide Show Window。
| 菜单项 | 快捷键 | 作用 |
|---|---|---|
Output Window | Ctrl+Shift+L | 显示运行时原本会刷屏的那段文本:版本横幅、每一步的能量与温度、耗时统计。默认每次运行都打开,且被新的运行替换。 |
Charts Window | Ctrl+Shift+C | 把热力学输出画成折线图。用 Data 下拉框选择画哪一项(温度、能量、压强……),用 Plot 选择画原始数据、平滑曲线或两者。平滑用的是 Savitzky–Golay 卷积滤波。 |
Image Window | Ctrl+Shift+I | 显示 Create Image 拍下的单张快照。窗口里可以继续调图像尺寸、渲染质量、视角,以及只显示某个原子组。 |
Slide Show Window | Ctrl+L | 若脚本里写了 dump image,这个窗口会在每帧图像写出的同时加载并显示,效果像放幻灯片——可以用来直观监控模拟进程,也可以事后再回看。 |
Variables Window | Ctrl+Shift+W | 显示脚本中变量的当前值(相当于 info variables),内容随运行持续更新。写循环时用它看跑到哪一步了;没有变量时显示 (none)。 |
View 菜单只影响「看什么」,不影响「算什么」——窗口关掉不会让计算停下或结果改变。真正决定计算的是 Run 菜单与输入脚本。
六、§1.6 输入脚本的四段式结构对应讲义第 14 页
LAMMPS 是一个「读脚本、按行执行」的程序。语法上它并不强制分段,但惯例上分为四段。看懂这四段,就看得懂绝大多数输入文件。
| 段 | 代表命令 | 作用 |
|---|---|---|
| ① 初始化 | units, dimension, boundary, atom_style, newton | 定义单位制、维度、边界条件与原子表示方式 |
| ② 定义体系 | lattice, region, create_box, create_atoms, read_data | 造盒子、放原子;或读入已有结构 |
| ③ 设置相互作用 | pair_style, pair_coeff, bond_style, kspace_style, neighbor, timestep | 指定力场与数值参数(截断、邻接表、时间步) |
| ④ 计算与输出 | velocity, fix, compute, thermo, dump, run | 给初始速度、积分演化、采样统计、写文件 |
pair_style 定「用哪种势」,pair_coeff 给「这套势的参数」,dump 写「轨迹」,thermo 控「屏幕上的热力学输出频率」。前缀说对象,后缀说动作,这是 LAMMPS 命名的通用规律。
四段不只是「风格建议」,其中含真正的依赖关系:units 必须在一切数值之前;create_box 必须在 create_atoms 之前;pair_style 必须在使用它之前。写脚本时若报「Unknown command」或「Illegal …」,先检查是不是顺序错了。
七、§1.7 第一个算例:LJ 流体逐行讲解对应讲义第 15 页
下面这份 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 1000
上面这 22 行不必手抄,案例库里已按编号放好,下载后可直接运行:
· in.lj —— 本案例的输入脚本,放在 run-serial.bat 旁边双击即可运行
· 案例库首页 —— 全部案例的编号、说明与下载链接
· 打包下载全部案例(zip)
案例库的位置是 molecular_word/examples/,按「章号-序号」编号,每个案例一个目录。
① 初始化
| 命令 | 含义 |
|---|---|
units lj | 采用 LJ 约化单位。此后长度以 $\sigma$、能量以 $\varepsilon$、质量以粒子质量为单位 |
atom_style atomic | 原子是「一个点」,没有键、没有电荷。若模拟水分子则需 full 或 charge |
dimension 3 | 三维模拟(默认为 3,此处显式写出来便于阅读) |
boundary p p p | 三个方向都是周期性边界。这是「体相」模拟的标准选择,用一个小盒子模拟无穷大的材料 |
② 定义体系
| 命令 | 含义 |
|---|---|
lattice fcc 0.8442 | 用面心立方(fcc)晶格铺点,晶格常数为 0.8442(约化单位)。这是液态 LJ 在约化温度 1.44 附近、约化密度 0.8442 的数值——注意这里的数不是随便写的 |
region box block 0 10 0 10 0 10 | 定义一个 10×10×10(立方晶格单位)的立方区域,命名为 box |
create_box 1 box | 在 box 范围内建立模拟盒子,声明有 1 种原子类型 |
create_atoms 1 box | 按晶格把 1 号原子填进盒子。最终得到约 $4\times10^3$ 个原子 |
mass 1 1.0 | 设置 1 号原子质量。LJ 单位下质量通常取 1.0,这样所有质量都变成无量纲的比值 |
③ 设置相互作用
| 命令 | 含义 |
|---|---|
pair_style lj/cut 2.5 | 使用截断 Lennard-Jones 势,截断半径 $r_c=2.5\sigma$。这是最经典的参数选择——2.5 以外 LJ 力已经很小 |
pair_coeff 1 1 1.0 1.0 2.5 | 1–1 相互作用的参数:$\varepsilon=1.0$、$\sigma=1.0$、$r_c=2.5$。注意要把截断半径再写一遍 |
neighbor 0.3 bin | 邻接表(neighbor list)的建表距离取 0.3,即把 $r_c+0.3$ 以内的原子都记入列表;用 bin 分区法组织 |
neigh_modify delay 0 every 20 check no | 邻接表更新策略:立即建立(delay 0),每 20 步重建一次(every 20),不额外做「是否需要重建」的检查(check no) |
若每一步对每对原子都算距离,代价是 $O(N^2)$。邻接表把「可能与当前原子相互作用」的近邻一次性查出来,随后若干步内直接复用,代价降到 $O(N)$。这是 MD 能处理百万级粒子的关键工程手段之一。
④ 计算与输出
| 命令 | 含义 |
|---|---|
velocity all create 1.44 87287 loop geom | 给所有原子赋初速度:目标约化温度 1.44,随机数种子 87287,loop geom 保证总动量为零、并去掉整体转动 |
timestep 0.005 | 时间步长 0.005(LJ 约化时间单位)。这是 LJ 体系的标准取值,过大则能量不守恒 |
thermo 50 | 每 50 步在屏幕(及 log.lammps)打印一次热力学量,含步数、温度、能量、压强 |
dump mydump all atom 100 dump.lj | 建立名为 mydump 的轨迹输出,对全部原子、按原子格式、每 100 步写一帧到 dump.lj |
fix 1 all nve | 施加 NVE 积分(微正则系综):粒子数、体积、能量守恒。这是最基础的系综,也是检验别的一切的起点 |
run 1000 | 运行 1000 步,即模拟时长为 $1000\times0.005=5$ 个约化时间单位 |
体系平衡后,TotEng(总能量)应只做小幅涨落而不单调漂移。若它持续单调上升,通常说明时间步过大(能量不守恒)或体系尚未弛豫。这是判断「跑得对不对」最直接的一条判据。
把 LJ 流体换成真实材料,只需替换第 ③ 段与单位制。例如铜:
units metal atom_style atomic lattice fcc 3.615 pair_style eam pair_coeff * * Cu_u3.eam
要点:units 换成 metal(长度 Å、能量 eV、时间 ps、温度 K),晶格常数换成铜的真实值 3.615 Å,势函数换成 EAM。第 ①②④ 段的骨架完全不变——这正是四段式结构的好处。
完整可运行的版本在案例库里:in.cu(该目录下同时附了势函数文件 Cu_u3.eam,下载后即可直接运行)。它与 in.lj 逐行对齐,用文本比较工具一看就知道改了哪 8 行。
上面写的是 pair_style eam 配 pair_coeff * * Cu_u3.eam——末尾没有元素名。有人会照搬别处的写法写成 eam/alloy 再加一个 Cu,结果直接报 Not a valid integer number。原因在文件本身:
| 文件后缀 | 格式 | 配哪种 pair_style | pair_coeff 要写元素名吗 |
|---|---|---|---|
Cu_u3.eam | setfl(DYNAMO) | eam | 不写——文件里只有一个元素,头部没有元素名表 |
AlCu.eam.alloy | LAMMPS 合金格式 | eam/alloy | 要写,且顺序须与文件里的元素表一致 |
一句话判据:势函数文件头部如果有一行「元素名清单」,就在 pair_coeff 末尾按顺序写出来;如果没有,就什么也别写。官方势函数库 %LAMMPS_POTENTIALS% 里两种文件都有,拿不准时先看文件头几行。
八、§1.8 输出解读与可视化对应讲义第 16–17 页,后接 OVITO 插页
8.1 怎么运行
在 LAMMPS Shell 里进入存放脚本的目录,直接运行:
cd D:\md\lj lmp -in in.lj
也可以在 LAMMPS GUI 里打开 in.lj,点击运行,日志会显示在窗口下方的 log 面板中。
8.2 会生成哪些文件
| 文件 | 内容 |
|---|---|
log.lammps | 屏幕输出的完整记录:版本信息、体系规模、每若干步的热力学量 |
dump.lj | 轨迹文件:每 100 步一帧,含原子坐标与速度,供可视化使用 |
data.lj / restart | 只有脚本里写了 write_data / write_restart 才会产生 |
8.3 怎么读 thermo 表
| 列名 | 含义 |
|---|---|
Step | 时间步序号 |
Temp | 瞬时温度(由动能统计得到;本算例第 0 步必定是 1.44) |
E_pair | 对势能(两体及以上非键相互作用) |
E_mol | 分子内能(键、角、二面角;本算例为 0) |
TotEng | 总能量 = 动能 + 势能 |
Press | 压强(动能项 + 维里项) |
8.4 可视化:OVITO 与 VMD
LAMMPS 自己不做三维渲染,它把轨迹写成文本文件,交给专门工具显示。
最常用的分子可视化软件。直接打开 dump 文件,可按原子类型/坐标/速度着色,播放多帧动画,导出图片或 GIF,并内置配位数、位移、位错分析等功能。本课程默认使用 OVITO。
老牌可视化与建模工具,Tcl 脚本能力极强,适合批量处理与高质量图像渲染。
OVITO 的下载与安装
OVITO(Open Visualization Tool,开放可视化工具)由德国团队自 2009 年起持续开发,是该领域使用最广的可视化与后处理软件,已被两万余篇论文引用。它直接支持 LAMMPS 的 dump 格式——不需要任何格式转换——即可完成三维显示、多帧动画播放、按原子类型或坐标着色、导出图片或 GIF,并内置配位数、位移矢量、位错分析(DXA)、原子结构识别等分析功能。本课程统一用它来看轨迹。
https://www.ovito.org/#download
页面把 Windows / Linux / macOS 三个系统并列列出,每一行里都同时给出 Basic 与 Pro 两个版本的安装包。
| 版本 | 授权 | 说明 |
|---|---|---|
| OVITO Basic | 免费开源 | 含基础可视化与常用分析功能,本课程选这个,完全够用。Linux 与 macOS 用户也可用 conda / pip 安装(pip install -U ovito),同样是免费的 |
| OVITO Pro | 商业授权 | 在 Basic 之上增加路径追踪渲染引擎(Tachyon / OSPRay / VisRTX)、Python 脚本代码生成、自定义分析模块等功能,需付费许可证 |
Windows 一栏的两个文件名分别是 ovito-basic-<版本号>-win64.exe 与 ovito-pro-<版本号>-win64.exe。请点 OVITO Basic——点错会下载到需要许可证的 Pro 版。安装包双击后按向导一路「下一步」即可,无须管理员权限。
装好之后:三步看懂轨迹
- 打开轨迹文件:菜单
File → Load File…,选中算例目录里的dump.lj。OVITO 会自动识别 LAMMPS 的 dump 格式,不必填写任何参数。 - 播放动画:底部时间轴可拖动、可播放,每一帧就是一个快照——本例脚本里
dump每 100 步写一帧,1000 步共 11 帧。 - 换一个更有信息量的着色:默认按原子类型着色。点右侧 Add modification 里的 Color coding,在其属性下拉里改选坐标
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,就能按这些量着色了——这也是后续章节做定量分析时的常规做法。
8.5 看懂 dump 格式,比学软件更重要
dump 文件本质是纯文本,每一帧依次由四个块组成:
| 块 | 内容 |
|---|---|
ITEM: TIMESTEP | 当前帧的时间步 |
ITEM: NUMBER OF ATOMS | 原子数 |
ITEM: BOX BOUNDS | 盒子的三个方向的上下界 |
ITEM: ATOMS ... | 列名表头,随后是每个原子的一行数据(id、type、x、y、z、vx、vy、vz…) |
理解了这四个块,你就能用任何软件、甚至自己写几行 Python 读它——包括做那些 OVITO 不直接支持的定制统计。后处理能力的天花板往往不在于软件,而在于你是否读得懂文件本身。
九、常见错误排查补充内容(不在幻灯片中)
| 现象 | 常见原因 | 处理 |
|---|---|---|
'lmp' 不是内部或外部命令 | PATH 未生效 | 用开始菜单的 LAMMPS Shell(而非普通 cmd);或重启终端;仍不行则重装 |
Unknown command: xxx | 命令拼写错,或顺序错(例如在 create_box 之前用了 create_atoms) | 核对四段顺序;用 lmp -h 确认该命令存在 |
ERROR: Unknown identifier in data file | 原子类型数声明与实际不符 | 检查 create_box 的原子类型数与 pair_coeff 的行数是否匹配 |
Cannot open file Cu_u3.eam | 势文件不在当前目录,且 LAMMPS_POTENTIALS 没配好 | 确认用官方安装包(自动配置该变量);或把势文件复制到工作目录 |
能量单调上升 / Lost atoms | 时间步过大;或截断半径过小导致原子飞散 | 减小 timestep;增大 neighbor 距离与截断半径 |
| 温度一直为 0 或异常 | 忘记 velocity create;或 mass 未设置 | 检查第 ② 段是否写了 mass,第 ④ 段是否有 velocity |
日志里 Temp 与设定值不符 | 系综设置(fix nve 不控温) | 这是正常现象:NVE 只守恒能量,温度会涨落。需要控温请用 fix nvt |
'mpiexec' 不是内部或外部命令 | 没装 MS-MPI,或装了但终端没重启(环境变量未刷新) | 运行 msmpisetup.exe 后关掉全部旧终端再打开;确认 C:\Program Files\Microsoft MPI\Bin 在系统 PATH 中 |
MSMPI 版 lmp 一启动就报错或闪退 | 该安装包必须依赖 MS-MPI,而系统里没有 | 先安装 msmpisetup.exe 再运行;或换回不含 MSMPI 的包 |
| MPI 并行时屏幕长时间无输出 | mpiexec 下屏幕输出是块缓冲 | 属正常现象。看进度请查 log.lammps;不要因此以为程序卡死 |
十、本章小结对应讲义第 18 页
10.1 七条结论
- MD 解的是牛顿方程:输入势函数,输出轨迹,宏观量由轨迹统计得到。
- LAMMPS 是经典分子动力学引擎(不含电子结构),由 Sandia 开发、开源、以并行见长。
- Windows 安装包在
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 看轨迹。
10.2 三个必须记住的命令
| 命令 | 作用 | 为什么重要 |
|---|---|---|
units | 选定单位制 | 决定脚本里每一个数字的含义,必须放在最前面 |
pair_style + pair_coeff | 指定势函数与参数 | 决定模拟「像不像真实材料」,是全部物理的落脚点 |
fix + run | 指定系综并演化 | 决定模拟的边界条件(控温还是控压),直接影响哪些量可被统计 |
10.3 官方资源
| 资源 | 地址 |
|---|---|
| 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/ |
10.4 下一章预告
第 2 章将开始「真正算一个东西」:用一个可验证的体系(晶体熔化、或金属的弹性),把本章学到的四段式脚本用足,并第一次完整走通「建模 → 运行 → 后处理 → 出图」的闭环。届时你会看到 OVITO 与 log.lammps 是如何配合回答一个具体物理问题的。
附:页码对照表点击页码可跳到对应幻灯片页面
| 页 | 标题 | 小节 |
|---|---|---|
| 1 | 封面:LAMMPS 入门 | — |
| 2 | 本章导读 | 1.0 |
| 3 | 数学准备(一):整门课只需要一个导数 | 数学准备 |
| 插页 | 数学准备(二):从势能到力,再到一个微分方程 | 数学准备 |
| 4 | 1.1 分子动力学模拟在算什么 | 1.1 |
| 5 | 1.1 MD 的输出:从轨迹到宏观量 | 1.1 |
| 6 | 1.2 LAMMPS 是什么 | 1.2 |
| 7 | 1.2 LAMMPS 能算什么 | 1.2 |
| 8 | 1.2 并行能力与体系规模 | 1.2 |
| 9 | 1.3 势函数:力从哪来 | 1.3 |
| 10 | 1.4 下载:官方 Windows 安装包 | 1.4 |
| 11 | 1.4 安装:五步完成 | 1.4 |
| 12 | 1.4 并行运行:安装 Microsoft MPI | 1.4 |
| 13 | 1.5 安装之后:启动与验证 | 1.5 |
| 插页 | 界面速查(一):File 菜单 | 1.5 |
| 插页 | 界面速查(二):Run 菜单 | 1.5 |
| 插页 | 界面速查(三):View 菜单 | 1.5 |
| 14 | 1.6 LAMMPS 输入脚本的结构 | 1.6 |
| 15 | 1.7 第一个算例:LJ 流体 | 1.7 |
| 16 | 1.8 运行与输出 | 1.8 |
| 17 | 1.9 可视化与后处理 | 1.9 |
| 插页 | 可视化工具:OVITO 的下载与安装 | 1.9 |
| 18 | 本章小结 | 1.10 |
本章为讲义体系的第 1 章,尚无外部源课件,数字页码自 1 起连续编号,共 18 个数字页;另有 5 张插页(数学准备(二)置于第 3 页之后;界面速查一至三置于第 13 页之后;OVITO 的下载与安装置于第 17 页之后),插页不占编号,故放映文件共 23 页。深链有两种写法:#p=N 按页码跳转(N = 1…18),#s=M 按页序跳转(M = 1…23,五张插页的页序依次为 4、15、16、17、22)。表中插页行以底色标出。后续各章接入源 PPT 后,将按同一规则同步维护本表。