LAMMPS 入门:从牛顿方程到第一个算例

第 1 章 · 阅读资料 | 对应幻灯片第 1–17 页(slide_01.html)
分子动力学 MD牛顿方程与积分器势函数 轨迹与统计平均LAMMPS 出身与定位域分解并行 数学准备 · 导数单位制Windows 安装包MS-MPI 并行lmp 命令行 四段式输入脚本LJ 流体算例log.lammps dump 文件格式OVITO错误排查

本章导读对应讲义第 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$ 趋于零,这个极限就是瞬时速度

$$\bar v=\frac{\Delta x}{\Delta t}=\frac{x(t+\Delta t)-x(t)}{\Delta t}\ \xrightarrow{\ \Delta t\to 0\ }\ v=\frac{\mathrm dx}{\mathrm dt}$$

对速度再做一遍完全相同的动作——先求平均加速度,再取极限——就得到瞬时加速度

$$\bar a=\frac{\Delta v}{\Delta t}\ \xrightarrow{\ \Delta t\to 0\ }\ a=\frac{\mathrm dv}{\mathrm dt}=\frac{\mathrm d^2x}{\mathrm dt^2}$$

所以 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$:

$$-\frac{\Delta U}{\Delta r}\ \xrightarrow{\ \Delta r\to 0\ }\ F=-\frac{\mathrm dU}{\mathrm dr}$$

它的几何读法是:势能曲线上某点切线的斜率,取相反数,就是那一处的力。高中已经学过两个现成的例子,用同一句话就能读懂:

高中熟悉的势能导数 $\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)势:

$$U(r)=4\varepsilon\left[\left(\frac{\sigma}{r}\right)^{12}-\left(\frac{\sigma}{r}\right)^{6}\right]$$

其中 $r$ 是两原子间距离,$\varepsilon$ 是「阱深」(能量单位),$\sigma$ 是「零势能距离」(长度单位)。对它求导,用到的只是高中两条法则:幂函数求导 $(r^n)'=nr^{n-1}$ 与复合函数求导。先把括号里的幂改写成负指数:

$$\frac{\mathrm d}{\mathrm dr}\left[\left(\frac{\sigma}{r}\right)^{12}\right]=\frac{\mathrm d}{\mathrm dr}\left[\sigma^{12}r^{-12}\right]=-\frac{12\sigma^{12}}{r^{13}},\qquad \frac{\mathrm d}{\mathrm dr}\left[\left(\frac{\sigma}{r}\right)^{6}\right]=-\frac{6\sigma^{6}}{r^{7}}$$

于是力为

$$F(r)=-\frac{\mathrm dU}{\mathrm dr}=4\varepsilon\left[\frac{12\sigma^{12}}{r^{13}}-\frac{6\sigma^{6}}{r^{7}}\right]=\frac{24\varepsilon}{r}\left[2\left(\frac{\sigma}{r}\right)^{12}-\left(\frac{\sigma}{r}\right)^{6}\right]$$

这个式子给出了一个可检验的预言:在 $F=0$ 处,两原子既不推也不拉,那就是平衡距离 $r_0$。令括号内为零:

$$2\left(\frac{\sigma}{r_0}\right)^{12}=\left(\frac{\sigma}{r_0}\right)^{6}\ \Longrightarrow\ \left(\frac{\sigma}{r_0}\right)^{6}=\frac12\ \Longrightarrow\ r_0=2^{1/6}\sigma\approx1.122\,\sigma$$

把 $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$,就只剩一个等式:

$$m\frac{\mathrm d^2x}{\mathrm dt^2}=-\frac{\mathrm dU}{\mathrm dx}$$

这个等式有两个特点:左边含未知函数的导数(二阶导数),右边也含未知函数本身(因为势能 $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$ 足够小时,二阶导数最常用的差分近似是

$$\frac{\mathrm d^2x}{\mathrm dt^2}\ \approx\ \frac{x(t+\Delta t)-2x(t)+x(t-\Delta t)}{\Delta t^{2}}$$

把它代回 0.4 的微分方程,并利用 $-\dfrac{\mathrm dU}{\mathrm dx}=F$,稍微整理就得到一条递推式

$$x(t+\Delta t)\ \approx\ 2x(t)-x(t-\Delta t)+\frac{1}{m}F\big(x(t)\big)\,\Delta t^{2}$$

读法是:知道这一刻的位置和上一刻的位置,就能算出下一刻的位置。从 $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$ 到底差在哪?

$\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)的全部内容可以压缩成一句话:把原子当成经典粒子,让它们在势函数决定的力场里按牛顿第二定律运动。写成方程就是

$$m_i \frac{\mathrm{d}^2\mathbf{r}_i}{\mathrm{d}t^2} = \mathbf{F}_i = -\nabla_i U(\mathbf{r}_1,\dots,\mathbf{r}_N)$$

这里面有三个角色,缺一不可:

角色数学形式它决定了什么
势函数$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 版注意

官方交叉编译的 Windows 安装包虽然已包含 KOKKOS,但只启用了 serial 与 OpenMP 后端,GPU 后端因交叉编译限制不可用。桌面机上做教学与中小体系完全够用;需要大规模并行时,应当在 Linux 集群上运行。

三、§1.3 势函数与单位制对应讲义第 9 页

势函数是 MD 里最关键的输入。常见的几类:

势函数(pair_style)适用对象特点
lj/cut惰性气体、粗粒化体系最简单,只有 $\varepsilon$、$\sigma$ 两个参数
eameam/alloy金属与合金(Cu、Al、Fe…)嵌入原子法,适合金属热力学与力学性质
meam金属、半导体考虑角度依赖,比 EAM 更接近真实
tersoff共价晶体(Si、C)显含键角,描述共价键
airebo碳氢体系反应性不强但速度快,适合碳材料
reaxff化学反应允许键断裂与生成,可模拟反应过程
TIP3PSPC/E专用水分子模型,配合长程静电求解(kspace_style
ml-iapML-PACE任意体系机器学习势,接近 DFT 精度,但需要先训练

单位制先行

LAMMPS 用一条 units 命令一次性选定单位制,此后脚本里所有数值的含义都由它决定。常用的几种:

units长度能量质量时间典型用途
lj$\sigma$$\varepsilon$粒子质量$\sigma\sqrt{m/\varepsilon}$约化单位,LJ 模型算例
realÅkcal/molg/molfs生物分子力场(CHARMM、AMBER)
metalÅeVg/molps金属、EAM 势
simJkgs真正的国际单位制
为什么先讲这个

单位制是初学者最常踩的坑:把 metal 的时间当 fs 用,或者把 lj 里的小数误认为是物理量。一条规则:脚本里出现任何一个数之前,先确认 units 是什么。本课程第一个算例用 units lj,即能量、长度、质量均为无量纲的约化单位,可以完全避开单位换算。

四、§1.4 下载与安装对应讲义第 10–12 页

4.1 下载:官方 Windows 安装包

LAMMPS 官方为 Windows 提供预编译安装包,由 Fedora 上的 MinGW64 交叉编译器构建,托管在官方软件源 rpm.lammps.org

本课程统一使用下面这个文件(64 位 + 图形界面版):

文件名怎么读

文件名片段含义
LAMMPS程序名
64bit64 位版本(自 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 版不带 MPI

文件名含 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.exe7.4 MB运行时:提供 mpiexec.exe 与并行通信库。任何要运行 MPI 程序的机器都要装它需要
msmpisdk.msi2.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 就够了

教学与使用场景下,只下载并运行 msmpisetup.exe 即可跑并行 LAMMPS。常见误解是「两个都要装」——对编译是对的,对运行则不是。msmpisdk.msi 提供的是 mpi.hmsmpi.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 安装的两处关键差别

① 权限级别不同。LAMMPS 安装包是用户级的(不需要管理员);MS-MPI 是机器级的(需要管理员),并把 C:\Program Files\Microsoft MPI\Bin 写入系统 PATH。

② 是否重启终端不同。LAMMPS 安装后新开的 LAMMPS Shell 自带正确环境;MS-MPI 装完必须重开终端,否则会报「'mpiexec' 不是内部或外部命令」——这是最常见的假故障。

4.3.3 验证与安装位置

mpiexec

不带参数运行 mpiexec 会打印用法与版本信息。也可以直接查看安装器注册的环境变量:

set MSMPI
变量名预期值用途
MSMPI_BINC:\Program Files\Microsoft MPI\Bin\可执行文件路径(mpiexec.exe
MSMPI_INCC:\Program Files (x86)\Microsoft SDKs\MPI\Include\头文件路径(仅 SDK 提供)
MSMPI_LIB64C:\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 版

因为教学算例都是中小体系(几千到几十万个原子),单机多线程已经够用,而 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 六项,日常用到的就是前四项。下面三节把它们逐个说清楚——每个菜单项都标注了快捷键与用途,并配一张本机实际运行界面的截图。

LAMMPS-GUI 的 File 菜单(展开状态)
File 菜单。截图取自本机 LAMMPS-GUI(Windows 版)的实际运行界面,以下两节同。
菜单项快捷键作用
NewCtrl+N清空编辑区,文件名重置为 unknown。此时再按保存,会先弹出对话框让你取名。
OpenCtrl+O打开对话框,选择一个输入脚本进行编辑。菜单里紧接其后的条目(截图中是 case01.lj)是最近打开的 5 个文件,点一下即可重新打开。
ViewCtrl+Shift+F只读方式在独立窗口中查看任意文本文件——查看 log.lammpsdump 文件最方便。注意它不是「切换视图」的意思。
Inspect RestartCtrl+Shift+R读入一个 restart 文件,一次性弹出三个窗口:系统信息(相当于 info 命令的输出)、由它导出的 data 文件内容、以及一张快照图。用于接续一次被中断的计算。
SaveCtrl+S保存当前文件。若文件名还是 unknown,会先弹出对话框让你选名字。
Save AsCtrl+Shift+S另存为新文件名或新文件夹。存到别的文件夹会同时把工作目录切过去——而工作目录正是脚本里相对路径的基准。
QuitCtrl+Q退出程序。若有未保存的修改,会先询问「保存 / 不保存 / 取消」。
两个容易踩的点

View 在这里是「查看文件内容」,与「视图模式」无关;
Save As 换文件夹会连带切换工作目录,而脚本里的相对路径(势函数文件名、dump 的输出名、日志名)都以它为基准——换目录后可能就找不到了。

5.4 Run 菜单:启动计算、停止计算与可视化

Run 菜单负责把脚本变成计算。有一件事值得先说清楚:LAMMPS-GUI 并不去调用独立的 lmp 可执行文件,而是链接了 LAMMPS 库,通过 C 库接口在单独的线程里运行 LAMMPS。所以计算期间界面依然响应,可以随时中止或查看中间结果——底部状态栏左侧那个小小的 L 标志,就表示当前存在一个 LAMMPS 实例。

LAMMPS-GUI 的 Run 菜单(展开状态)
Run 菜单。前两项只差一个词,用的却是两条完全不同的通路。
菜单项快捷键作用
Run LAMMPS from Editor BufferCtrl+Enter编辑区里的全部内容当作一个完整的输入脚本执行。尚未保存的修改同样生效——因为它执行的是缓冲区,而不是磁盘上的文件。日常运行就用这一条。
Run LAMMPS from FileCtrl+Shift+Enter改为读取磁盘上的文件来运行。这只是备用通路,用于少数无法从缓冲区执行的输入;用之前必须先把改动存盘。
Stop LAMMPSCtrl+/让正在运行的计算完成当前这一步后停下来,并跳过脚本里后面所有的 run / minimize 命令。等价于输入脚本里的 timer timeout 0
Relaunch LAMMPS Instance销毁当前的 LAMMPS 线程并释放数据,再新建一个线程和实例。平时用不到——程序会自动判断何时需要;只有行为异常时才手动用它。
Set Variables...Ctrl+Shift+V设置 index 型变量。这些变量在实例创建时传入,因此是运行前生效。对话框会自动预填脚本里出现的变量(含用到但未定义的),也可以手动增删行。
Create ImageCtrl+I给当前体系拍一张快照,显示在 Image 窗口里。计算进行中不可用;若尚未初始化,它会先执行脚本中第一个 run 之前的命令并补一个 run 0 来建立体系。
View in OVITOCtrl+Shift+O用 OVITO 打开当前体系(内部先写出一份 data 文件)。仅当系统 PATH 中能找到 OVITO 时可用。
View in VMDCtrl+Shift+D用 VMD 打开当前体系。同样要求系统 PATH 中能找到 VMD。
Buffer 与 File 的真正差别

前两条的差别不只是「哪个文件」,而是两条执行通路:从缓冲区执行走的是 lammps_commands_string(),从文件执行走的是逐行读取文件。前者让「改一个字就能立刻重跑」成为可能,这正是做教学算例时最需要的;后者则作为兜底,留给少数在字符串缓冲区下跑不通的输入。

5.5 View 菜单:五个观察窗口

View 菜单本身不产生任何计算,它只负责显示或隐藏五个观察窗口。窗口默认是否自动打开,可以在 Edit → Preferences 里设置。写脚本时最常看的是 Output Window,跑起来之后最直观的是 Slide Show Window。

LAMMPS-GUI 的 View 菜单(展开状态)
View 菜单。五项分别对应五个可以独立开合的小窗口。
菜单项快捷键作用
Output WindowCtrl+Shift+L显示运行时原本会刷屏的那段文本:版本横幅、每一步的能量与温度、耗时统计。默认每次运行都打开,且被新的运行替换。
Charts WindowCtrl+Shift+C把热力学输出画成折线图。用 Data 下拉框选择画哪一项(温度、能量、压强……),用 Plot 选择画原始数据、平滑曲线或两者。平滑用的是 Savitzky–Golay 卷积滤波。
Image WindowCtrl+Shift+I显示 Create Image 拍下的单张快照。窗口里可以继续调图像尺寸、渲染质量、视角,以及只显示某个原子组。
Slide Show WindowCtrl+L若脚本里写了 dump image,这个窗口会在每帧图像写出的同时加载并显示,效果像放幻灯片——可以用来直观监控模拟进程,也可以事后再回看。
Variables WindowCtrl+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原子是「一个点」,没有键、没有电荷。若模拟水分子则需 fullcharge
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 boxbox 范围内建立模拟盒子,声明有 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.51–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 eampair_coeff * * Cu_u3.eam——末尾没有元素名。有人会照搬别处的写法写成 eam/alloy 再加一个 Cu,结果直接报 Not a valid integer number。原因在文件本身:

文件后缀格式配哪种 pair_stylepair_coeff 要写元素名吗
Cu_u3.eamsetfl(DYNAMO)eam不写——文件里只有一个元素,头部没有元素名表
AlCu.eam.alloyLAMMPS 合金格式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 自己不做三维渲染,它把轨迹写成文本文件,交给专门工具显示。

OVITO Basic(免费)

最常用的分子可视化软件。直接打开 dump 文件,可按原子类型/坐标/速度着色,播放多帧动画,导出图片或 GIF,并内置配位数、位移、位错分析等功能。本课程默认使用 OVITO。

VMD

老牌可视化与建模工具,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.exeovito-pro-<版本号>-win64.exe请点 OVITO Basic——点错会下载到需要许可证的 Pro 版。安装包双击后按向导一路「下一步」即可,无须管理员权限。

装好之后:三步看懂轨迹

  1. 打开轨迹文件:菜单 File → Load File…,选中算例目录里的 dump.lj。OVITO 会自动识别 LAMMPS 的 dump 格式,不必填写任何参数。
  2. 播放动画:底部时间轴可拖动、可播放,每一帧就是一个快照——本例脚本里 dump 每 100 步写一帧,1000 步共 11 帧。
  3. 换一个更有信息量的着色:默认按原子类型着色。点右侧 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 七条结论

  1. MD 解的是牛顿方程:输入势函数,输出轨迹,宏观量由轨迹统计得到。
  2. LAMMPS 是经典分子动力学引擎(不含电子结构),由 Sandia 开发、开源、以并行见长。
  3. Windows 安装包在 rpm.lammps.org/windows,本课程使用 LAMMPS-64bit-GUI-latest.exe
  4. 安装是用户级的,PATHLAMMPS_POTENTIALS 自动配置,验证命令是 lmp -h
  5. 需要多进程并行时:改装含 MSMPI 的包,另装 Microsoft MPImsmpisetup.exe,机器级安装、需重启终端),启动命令 mpiexec -n N lmp -in in.lj
  6. 输入脚本惯例四段:初始化 → 定义体系 → 设置相互作用 → 计算与输出。
  7. 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数学准备(一):整门课只需要一个导数数学准备
插页数学准备(二):从势能到力,再到一个微分方程数学准备
41.1 分子动力学模拟在算什么1.1
51.1 MD 的输出:从轨迹到宏观量1.1
61.2 LAMMPS 是什么1.2
71.2 LAMMPS 能算什么1.2
81.2 并行能力与体系规模1.2
91.3 势函数:力从哪来1.3
101.4 下载:官方 Windows 安装包1.4
111.4 安装:五步完成1.4
121.4 并行运行:安装 Microsoft MPI1.4
131.5 安装之后:启动与验证1.5
插页界面速查(一):File 菜单1.5
插页界面速查(二):Run 菜单1.5
插页界面速查(三):View 菜单1.5
141.6 LAMMPS 输入脚本的结构1.6
151.7 第一个算例:LJ 流体1.7
161.8 运行与输出1.8
171.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 后,将按同一规则同步维护本表。