第 1 章 什么是分子动力学
1.1 一个简单的类比
想象你在电脑上玩弹珠台游戏。成千上万颗小弹珠(原子)在一个大桌面上碰撞、弹跳、滚动。如果你知道每颗弹珠的位置和速度,并且知道它们碰撞时遵循的物理规则,那么你就可以用计算机一步一步地预测它们未来的运动。
分子动力学(Molecular Dynamics, 简称 MD) 就是这样一个"原子级弹珠台游戏"。它用计算机模拟每个原子在力的作用下如何运动,从而预测材料的宏观性质。
1.2 分子动力学能做什么?
MD 是材料科学、化学、生物学中非常重要的计算工具。以下是一些典型应用:
| 应用领域 | 具体例子 |
|---|---|
| 力学性质 | 计算弹性模量、强度、断裂行为(本教程的内容!) |
| 热学性质 | 模拟熔化、热传导、热膨胀系数 |
| 扩散与输运 | 原子在晶体中的扩散、离子导体的导电性 |
| 表面与界面 | 薄膜生长、晶界结构、纳米材料 |
| 生物大分子 | 蛋白质折叠、药物与受体结合 |
1.3 分子动力学的基本假设
MD 模拟建立在几个核心假设之上:
- 经典力学近似:原子被视为质点,运动遵循牛顿运动定律,不考虑量子效应(核运动部分)。
- 经验势能函数:原子间的相互作用用数学函数(力场)描述,参数由量子力学计算或实验数据拟合得到。
- 玻恩-奥本海默近似:电子运动和核运动分离,电子的影响被"吸收"到势能函数中。
1.4 常用 MD 软件简介
| 软件 | 特点 | 适用场景 |
|---|---|---|
| LAMMPS | 开源免费,功能强大,社区活跃 | 材料力学、多尺度模拟(本教程使用) |
| GROMACS | 生物分子模拟效率高 | 蛋白质、DNA、脂质膜 |
| Materials Studio | 商业软件,图形界面友好 | 教学、材料研究 |
| VASP(第一性原理) | 基于量子力学 | 电子结构、高精度计算 |
- MD 是用计算机模拟原子运动的方法
- 它基于牛顿力学 + 经验势能函数
- LAMMPS 是一个开源的 MD 模拟软件
第 2 章 基本原理与方法
2.1 牛顿第二定律 —— MD 的基础方程
MD 模拟的核心就是牛顿第二运动定律:
其中 $\vec{F}_i$ 是第 $i$ 个原子受到的合力,$m_i$ 是其质量,$\vec{r}_i$ 是其位置向量。
而力与势能的关系为:
也就是说,只要知道势能函数 $U$,就可以算出每个原子受到的力,再通过牛顿第二定律算出加速度,最后更新位置和速度。
2.2 势能函数(力场)
势能函数描述了原子之间的相互作用能。常见的有以下几类:
2.2.1 对势(Pair Potential)
最简单的势能形式,只考虑两个原子之间的相互作用:
典型代表是 Lennard-Jones (LJ) 势,常用于稀有气体分子:
其中 $r^{-12}$ 项代表短程排斥(原子核之间的排斥),$r^{-6}$ 项代表长程吸引(范德华色散力)。
2.2.2 嵌入原子法(EAM)
EAM(Embedded Atom Method)是模拟金属最常用的势能函数,其核心思想是:
把每个原子看作嵌入在"电子云海"中的"杂质"。除了原子间的两两作用外,每个原子还会感受到周围所有原子贡献的"背景电子密度"。
其中:
- $F(\rho_i)$ — 嵌入能,原子 $i$ 在电子密度 $\rho_i$ 中的能量
- $\phi(r_{ij})$ — 两体对势
- $f(r_{ij})$ — 电子密度贡献函数
本教程使用的 Cu_Zhou04.eam.alloy 就是 EAM 势的一种实现格式。
2.3 数值积分算法
有了力和加速度,如何更新原子的位置和速度?这就需要数值积分算法。最常用的是 Velocity-Verlet 算法:
具体公式为:
2.4 时间步长的选择
时间步长 $\Delta t$ 是 MD 模拟中非常关键的一个参数:
- 太大会导致数值不稳定,原子"飞出去"
- 太小则模拟太慢,浪费计算资源
- 金属体系通常取 $\Delta t = 1 \text{ fs}$(即 $10^{-15}$ 秒)
经验法则:$\Delta t$ 应小于原子振动周期的 $1/20 \sim 1/30$。
2.5 系综与温度压力控制
MD 模拟中需要控制系统所处的热力学系综。最常用的两种:
| 系综 | 符号 | 特点 | 控制方法 |
|---|---|---|---|
| 正则系综 | NVT | 原子数 N、体积 V、温度 T 恒定 | Nose-Hoover 恒温器 |
| 等温等压系综 | NPT | 原子数 N、压力 P、温度 T 恒定 | Nose-Hoover + Parrinello-Rahman |
- 结构弛豫(消除内应力):用 NPT,让盒子自由变形到平衡态
- 单轴拉伸:X 方向用 deform 固定应变率,Y/Z 方向用 NPT 保持零横向应力
2.6 周期性边界条件
MD 模拟只能包含有限数量的原子(通常几千到几百万)。为了让小体系能代表宏观材料,使用周期性边界条件(PBC):
第 3 章 Cu 杨氏模量计算流程
3.1 什么是杨氏模量?
杨氏模量(Young's Modulus)是材料最基本的弹性常数,描述材料在弹性范围内应力与应变的比值:
其中:
- $\sigma = F/A$ — 工程应力(单位面积上的力)
- $\varepsilon = \Delta L / L_0$ — 工程应变(长度变化率)
- $E$ — 杨氏模量(单位:GPa)
铜的典型杨氏模量:多晶铜 $E \approx 117$ GPa。但单晶铜在不同方向上差异很大——这就是各向异性。
| 拉伸方向 | 杨氏模量 (GPa) |
|---|---|
| [100] | ~67 |
| [110] | ~130 |
| [111] | ~192 |
3.2 MD 模拟拉伸法的完整流程
使用 LAMMPS 的
lattice + create_atoms 命令,生成面心立方(FCC)铜的单晶模型。晶格常数 $a = 3.615$ Å,重复 25×12×12 个晶胞,约 14400 个原子。
用
minimize 命令消除初始结构中可能存在的原子重叠和不良接触,使系统达到局部能量最低点。
用 Nose-Hoover 恒温器将系统从 0 K 升温到目标温度 300 K,模拟真实室温环境。
在 300 K、零外压下充分弛豫,让盒子尺寸自由调整到平衡态,消除残余内应力。
X 方向以恒定应变速率拉伸(
fix deform x erate),Y/Z 方向用 NPT 保持零横向应力。持续输出应力-应变数据。
在弹性区域($\varepsilon \approx 0 \sim 2\%$)进行线性拟合,斜率即为杨氏模量 $E$。
3.3 LAMMPS 输入文件结构
我们将整个模拟分为两个文件:
| 文件名 | 功能 | 对应流程步骤 |
|---|---|---|
01_build_relax.lammps | 构建晶体 + 弛豫 | 步骤 1 → 4 |
02_tensile.lammps | 单轴拉伸 + 数据输出 | 步骤 5 → 6 |
3.4 关键 LAMMPS 命令解读
构建晶体
# 声明 FCC 晶格,晶格常数 3.615 A lattice fcc 3.615 # 创建模拟盒子,25x12x12 个晶格重复 region box block 0 25 0 12 0 12 units lattice create_box 1 box create_atoms 1 box
设置势函数
# EAM/alloy 格式的势函数 pair_style eam/alloy pair_coeff * * Cu_Zhou04.eam.alloy Cu
弛豫
# 能量最小化:能量收敛到 1e-10,力的收敛到 1e-12 minimize 1.0e-10 1.0e-12 100000 1000000 # NPT 弛豫:温度 300 K,目标压力 0 bar fix 2 all npt temp 300.0 300.0 0.1 aniso 0.0 0.0 1.0 run 50000
拉伸
# X 方向恒定应变速率拉伸:1e-4 /ps = 1e8 /s fix DEFORM all deform 1 x erate 1.0e-4 units box remap x # Y/Z 方向保持零横向应力 fix NPT_YZ all npt temp 300.0 300.0 0.1 y 0.0 0.0 1.0 z 0.0 0.0 1.0 # 输出应力和应变的值 run 50000
第 4 章 力场与工作文件构建
4.1 势函数文件获取
本教程使用 Zhou 2004 的铜 EAM 势函数,这是 NIST 机构维护的高质量势函数之一。
| 文件名 | Cu_Zhou04.eam.alloy |
| 格式 | LAMMPS pair_style eam/alloy |
| 作者 | X.W. Zhou, R.A. Johnson, H.N.G. Wadley |
| 发表 | Phys. Rev. B 69(14), 144113 (2004) |
| DOI | 10.1103/PhysRevB.69.144113 |
| 下载地址 | NIST 势函数库 |
下载步骤
- 打开 NIST 势函数下载页面
- 点击页面上的 "Download" 按钮,下载
Cu_Zhou04.eam.alloy - 将文件放到工作目录中(和
.lammps文件同级)
4.2 势函数文件结构解析
EAM/alloy 文件是一个文本文件,由三部分组成:
# Cu_Zhou04.eam.alloy file structure # ================================================================ # Line 1: comment (description) # Line 2: element count, format info, atom types # Line 3+: data for each element # - atomic number, mass, lattice constant, crystal structure # - embedding energy function F(rho) table # - pair potential phi(r) table # - electron density function f(r) table # After: inter-element pair potential phi(r) table # ================================================================
- 不要用记事本编辑势函数文件!它的数值精度不能被破坏
- 确认文件名与
pair_coeff中的名称完全一致(包括大小写) - LAMMPS 按文件内部的元素名称匹配,不是按文件名
4.3 工作目录组织
一个井然有序的工作目录能让你的模拟工作更加高效。推荐结构如下:
Youngs_module/ (project root) | +-- Cu_Zhou04.eam.alloy (potential file, download needed) | +-- 01_build_relax.lammps (step 1: build + relax) +-- 02_tensile.lammps (step 2: tensile test) +-- 03_analysis.py (step 3: data analysis) +-- 04_tensile_110.lammps (advanced: [110] direction) +-- run_all.bat (one-click run script) | +-- doc/ (documentation) | +-- tutorial.html | +-- Cu_relaxed.data (relaxed structure, after run) +-- stress_strain.dat (stress-strain data, after run) +-- tensile.lammpstrj (trajectory file, after run) +-- log.relax (relax log, after run) +-- log.tensile (tensile log, after run)
4.4 关键参数说明
| 参数 | 值 | 含义 | 为什么选这个值? |
|---|---|---|---|
| 晶格常数 | 3.615 Å | FCC Cu 的平衡晶格常数 | 实验值,EAM 势函数的参数化基础 |
| 体系尺寸 | 25×12×12 晶胞 | 约 14400 个原子 | 足够大以减小尺寸效应,又不太耗时 |
| 温度 | 300 K | 室温 | 模拟真实环境条件 |
| 时间步长 | 0.001 ps (1 fs) | 积分步长 | 金属体系的常用值 |
| 应变速率 | $10^8$ /s | 拉伸速度 | MD 的典型值(远高于实验,这是 MD 的局限) |
| 最大应变 | 5% | 拉伸终止条件 | 弹性区约 0~2%,5% 足够观察线性段 |
| 弛豫步数 | 50000 步 | 50 ps | 充分消除内应力,达到热平衡 |
4.5 LAMMPS 单位制说明
本教程使用 units metal 单位制,这是 LAMMPS 中模拟金属最常用的单位制:
| 物理量 | 单位 | 说明 |
|---|---|---|
| 距离 | Å(埃) | $1 \text{ \AA} = 10^{-10}$ m |
| 时间 | ps(皮秒) | $1 \text{ ps} = 10^{-12}$ s |
| 质量 | g/mol | 以摩尔质量为单位 |
| 能量 | eV | $1 \text{ eV} = 1.602 \times 10^{-19}$ J |
| 温度 | K(开尔文) | |
| 压力 | bar | $1 \text{ bar} = 10^5$ Pa,$1 \text{ GPa} = 10000$ bar |
| 力 | eV/Å |
第 5 章 结果分析与讨论
5.1 应力-应变曲线
MD 拉伸模拟完成后,stress_strain.dat 文件中包含每一记录步的应变和应力数据。用 Python 绘制出来,会得到类似下面的曲线:
蓝色实线 = 模拟数据,红色虚线 = 线性拟合,蓝色区域 = 线弹性区间
5.2 线性拟合求杨氏模量
在弹性区域($\varepsilon \approx 0 \sim 2\%$),应力-应变关系近似为线性:
用最小二乘法拟合这条直线,斜率就是杨氏模量 $E$。
python 03_analysis.py
脚本会自动:
- 读取
stress_strain.dat - 在 0~2% 应变区间进行线性拟合
- 输出杨氏模量 $E$ 和拟合优度 $R^2$
- 绘制应力-应变曲线和拟合图
- 保存结果到
result_summary.txt
5.3 LAMMPS 中的应力计算
LAMMPS 使用 Virial 应力公式计算原子级的应力张量:
在 LAMMPS 的 metal 单位制下,pxx 的单位是 bar。转换为 GPa:
负号是因为 LAMMPS 中压力的正方向与工程应力的拉应力方向相反(LAMMPS 中拉应力对应负压)。
5.4 预期结果与误差分析
| 对比项 | MD 模拟值(预期) | 实验值 |
|---|---|---|
| [100] 方向杨氏模量 | ~65 ~ 70 GPa | ~67 GPa |
| 多晶平均杨氏模量 | ~110 ~ 120 GPa | ~117 GPa |
可能的误差来源
- 应变速率效应:MD 的应变速率 ($10^8$/s) 远高于实验 ($10^{-3}$/s),可能导致模拟值偏高
- 体系尺寸:体系太小会引入尺寸效应,但 14400 个原子对弹性模量通常已足够
- 势函数精度:不同 EAM 势函数给出的杨氏模量可能相差 5~10%
- 温度波动:300 K 的热振动会使应力-应变曲线有统计噪声
附录 A 常见问题与参考资料
A.1 常见问题 (FAQ)
检查势函数文件是否和 .lammps 文件在同一目录下,文件名(包括大小写)是否完全一致。
- 减少体系尺寸(例如改为 15×8×8)
- 减少弛豫步数(对于测试可以先用 10000 步)
- 使用 MPI 并行:
mpiexec -np 4 lmp.exe -in 01_build_relax.lammps
300 K 下原子的热运动导致应力波动是正常的。增大数据采样间隔或取平均值可改善。另外检查力的方向符号是否正确。
需要先安装依赖库:pip install numpy scipy matplotlib
- 确认势函数文件没有损坏(重新下载)
- 确认弛豫充分(增加 NPT 步数)
- 确认拟合区间在弹性范围内(应变 < 2%)
- 检查单位换算是否正确
A.2 推荐阅读
| 资源 | 说明 |
|---|---|
| LAMMPS 官方文档 | 最权威的 LAMMPS 命令参考 |
| NIST 势函数库 | 高精度势函数的权威来源 |
| 《分子动力学教程》 — Frenkel & Smit | MD 理论的入门经典教材 |
| 《计算材料学》 — Richard LeSar | 面向材料科学家的计算方法教材 |
| LAMMPS 中文入门视频 | B站上的 LAMMPS 教程系列 |
A.3 关键公式速查表
| 公式名称 | 表达式 |
|---|---|
| 杨氏模量 | $E = \sigma / \varepsilon$ |
| 牛顿第二定律 | $\vec{F}_i = m_i \vec{a}_i$ |
| 力与势能 | $\vec{F}_i = -\nabla_{\vec{r}_i} U$ |
| LJ 势 | $\phi(r) = 4\varepsilon[(\sigma/r)^{12} - (\sigma/r)^6]$ |
| EAM 总能量 | $U = \sum_i F(\rho_i) + \sum_{i \lt j}\phi(r_{ij})$ |
| Velocity-Verlet | $\vec{r}(t+\Delta t) = \vec{r}(t) + \vec{v}\Delta t + \frac{1}{2}\vec{a}\Delta t^2$ |
| 压力换算 | $\sigma_{\text{GPa}} = -p_{xx} \times 10^{-4}$ |
| 工程应变 | $\varepsilon = (L - L_0) / L_0$ |
现在你已经掌握了分子动力学的基础知识,以及用 LAMMPS 计算铜杨氏模量的完整流程。动手运行模拟,看看你能得到什么结果吧!