📐 分子动力学入门:铜的杨氏模量计算

LAMMPS 实践教程

第 1 章   什么是分子动力学

从原子视角理解物质世界 —— 给大一学生的入门介绍

1.1   一个简单的类比

想象你在电脑上玩弹珠台游戏。成千上万颗小弹珠(原子)在一个大桌面上碰撞、弹跳、滚动。如果你知道每颗弹珠的位置和速度,并且知道它们碰撞时遵循的物理规则,那么你就可以用计算机一步一步地预测它们未来的运动。

分子动力学(Molecular Dynamics, 简称 MD) 就是这样一个"原子级弹珠台游戏"。它用计算机模拟每个原子在力的作用下如何运动,从而预测材料的宏观性质。

💡 核心思想
原子之间通过力场(势能函数)相互作用 → 根据牛顿第二定律计算每个原子的加速度 → 逐时间步更新位置和速度 → 得到系统的演化轨迹。

1.2   分子动力学能做什么?

MD 是材料科学、化学、生物学中非常重要的计算工具。以下是一些典型应用:

应用领域具体例子
力学性质计算弹性模量、强度、断裂行为(本教程的内容!)
热学性质模拟熔化、热传导、热膨胀系数
扩散与输运原子在晶体中的扩散、离子导体的导电性
表面与界面薄膜生长、晶界结构、纳米材料
生物大分子蛋白质折叠、药物与受体结合

1.3   分子动力学的基本假设

MD 模拟建立在几个核心假设之上:

  1. 经典力学近似:原子被视为质点,运动遵循牛顿运动定律,不考虑量子效应(核运动部分)。
  2. 经验势能函数:原子间的相互作用用数学函数(力场)描述,参数由量子力学计算或实验数据拟合得到。
  3. 玻恩-奥本海默近似:电子运动和核运动分离,电子的影响被"吸收"到势能函数中。

1.4   常用 MD 软件简介

软件特点适用场景
LAMMPS开源免费,功能强大,社区活跃材料力学、多尺度模拟(本教程使用)
GROMACS生物分子模拟效率高蛋白质、DNA、脂质膜
Materials Studio商业软件,图形界面友好教学、材料研究
VASP(第一性原理)基于量子力学电子结构、高精度计算
✅ 学完本章你应该理解
  • MD 是用计算机模拟原子运动的方法
  • 它基于牛顿力学 + 经验势能函数
  • LAMMPS 是一个开源的 MD 模拟软件

第 2 章   基本原理与方法

牛顿力学 + 势能函数 + 数值积分 —— MD 的三大支柱

2.1   牛顿第二定律 —— MD 的基础方程

MD 模拟的核心就是牛顿第二运动定律:

$$\vec{F}_i = m_i \vec{a}_i = m_i \frac{d^2 \vec{r}_i}{dt^2}$$

其中 $\vec{F}_i$ 是第 $i$ 个原子受到的合力,$m_i$ 是其质量,$\vec{r}_i$ 是其位置向量。

而力与势能的关系为:

$$\vec{F}_i = -\nabla_{\vec{r}_i} U(\vec{r}_1, \vec{r}_2, \dots, \vec{r}_N)$$

也就是说,只要知道势能函数 $U$,就可以算出每个原子受到的力,再通过牛顿第二定律算出加速度,最后更新位置和速度。

2.2   势能函数(力场)

势能函数描述了原子之间的相互作用能。常见的有以下几类:

2.2.1   对势(Pair Potential)

最简单的势能形式,只考虑两个原子之间的相互作用:

$$U = \sum_{i \lt j} \phi(r_{ij})$$

典型代表是 Lennard-Jones (LJ) 势,常用于稀有气体分子:

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

其中 $r^{-12}$ 项代表短程排斥(原子核之间的排斥),$r^{-6}$ 项代表长程吸引(范德华色散力)。

⚠️ 对势的局限
对势无法描述金属的方向性成键多体效应,因此不适合模拟金属。模拟铜等金属需要用 EAM 势(见第 4 章)。

2.2.2   嵌入原子法(EAM)

EAM(Embedded Atom Method)是模拟金属最常用的势能函数,其核心思想是:

把每个原子看作嵌入在"电子云海"中的"杂质"。除了原子间的两两作用外,每个原子还会感受到周围所有原子贡献的"背景电子密度"。

$$U = \sum_{i} F(\rho_i) + \sum_{i \lt j} \phi(r_{ij}), \quad \rho_i = \sum_{j \neq i} f(r_{ij})$$

其中:

本教程使用的 Cu_Zhou04.eam.alloy 就是 EAM 势的一种实现格式。

2.3   数值积分算法

有了力和加速度,如何更新原子的位置和速度?这就需要数值积分算法。最常用的是 Velocity-Verlet 算法

① 计算当前力 F(t) ② 更新位置 r(t+Δt) ③ 计算新力 F(t+Δt) ④ 更新速度 v(t+Δt) ⑤ 重复到目标时间
图 2-1   Velocity-Verlet 算法流程

具体公式为:

$$\vec{r}(t+\Delta t) = \vec{r}(t) + \vec{v}(t)\Delta t + \frac{1}{2}\vec{a}(t)\Delta t^2$$ $$\vec{v}(t+\Delta t) = \vec{v}(t) + \frac{1}{2}[\vec{a}(t) + \vec{a}(t+\Delta t)]\Delta t$$

2.4   时间步长的选择

时间步长 $\Delta t$ 是 MD 模拟中非常关键的一个参数:

经验法则:$\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)

虚线框 = 周期性镜像,原子穿过边界自动"传送"
图 2-2   二维周期性边界条件示意图

第 3 章   Cu 杨氏模量计算流程

从构建晶体到输出应力-应变曲线的完整流程

3.1   什么是杨氏模量?

杨氏模量(Young's Modulus)是材料最基本的弹性常数,描述材料在弹性范围内应力与应变的比值

$$E = \frac{\sigma}{\varepsilon} = \frac{F/A}{\Delta L / L_0}$$

其中:

L₀ L₀ + ΔL F F
图 3-1   拉伸试验示意图:施加力 F 使长度从 L₀ 变为 L₀ + ΔL

铜的典型杨氏模量:多晶铜 $E \approx 117$ GPa。但单晶铜在不同方向上差异很大——这就是各向异性

拉伸方向杨氏模量 (GPa)
[100]~67
[110]~130
[111]~192

3.2   MD 模拟拉伸法的完整流程

1
构建 FCC 铜晶体
使用 LAMMPS 的 lattice + create_atoms 命令,生成面心立方(FCC)铜的单晶模型。晶格常数 $a = 3.615$ Å,重复 25×12×12 个晶胞,约 14400 个原子。
2
能量最小化(弛豫)
minimize 命令消除初始结构中可能存在的原子重叠和不良接触,使系统达到局部能量最低点。
3
NVT 升温到 300 K
用 Nose-Hoover 恒温器将系统从 0 K 升温到目标温度 300 K,模拟真实室温环境。
4
NPT 弛豫(零压平衡)
在 300 K、零外压下充分弛豫,让盒子尺寸自由调整到平衡态,消除残余内应力。
5
单轴拉伸
X 方向以恒定应变速率拉伸(fix deform x erate),Y/Z 方向用 NPT 保持零横向应力。持续输出应力-应变数据。
6
数据后处理
在弹性区域($\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)
DOI10.1103/PhysRevB.69.144113
下载地址NIST 势函数库

下载步骤

  1. 打开 NIST 势函数下载页面
  2. 点击页面上的 "Download" 按钮,下载 Cu_Zhou04.eam.alloy
  3. 将文件放到工作目录中(和 .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 绘制出来,会得到类似下面的曲线:

Strain (epsilon) Stress sigma (GPa) Linear Region 0 2% 4% 0 8 E = slope = delta_sigma / delta_epsilon
图 5-1   典型的应力-应变曲线(示意图)
蓝色实线 = 模拟数据,红色虚线 = 线性拟合,蓝色区域 = 线弹性区间

5.2   线性拟合求杨氏模量

在弹性区域($\varepsilon \approx 0 \sim 2\%$),应力-应变关系近似为线性:

$$\sigma = E \cdot \varepsilon + b$$

用最小二乘法拟合这条直线,斜率就是杨氏模量 $E$

✅ Python 分析脚本用法
python 03_analysis.py

脚本会自动:

  • 读取 stress_strain.dat
  • 在 0~2% 应变区间进行线性拟合
  • 输出杨氏模量 $E$ 和拟合优度 $R^2$
  • 绘制应力-应变曲线和拟合图
  • 保存结果到 result_summary.txt

5.3   LAMMPS 中的应力计算

LAMMPS 使用 Virial 应力公式计算原子级的应力张量:

$$\sigma_{\alpha\beta} = \frac{1}{V}\left[\sum_i m_i v_{i\alpha} v_{i\beta} + \sum_i \sum_{j \gt i} r_{ij\alpha} f_{ij\beta}\right]$$

在 LAMMPS 的 metal 单位制下,pxx 的单位是 bar。转换为 GPa:

$$\sigma_{\text{GPa}} = -p_{xx} \times 10^{-4}$$

负号是因为 LAMMPS 中压力的正方向与工程应力的拉应力方向相反(LAMMPS 中拉应力对应负压)。

5.4   预期结果与误差分析

对比项MD 模拟值(预期)实验值
[100] 方向杨氏模量~65 ~ 70 GPa~67 GPa
多晶平均杨氏模量~110 ~ 120 GPa~117 GPa

可能的误差来源

附录 A   常见问题与参考资料

FAQ、推荐阅读、相关资源汇总

A.1   常见问题 (FAQ)

❓ LAMMPS 报错 "Cannot open EAM potential file"

检查势函数文件是否和 .lammps 文件在同一目录下,文件名(包括大小写)是否完全一致。

❓ 模拟速度太慢怎么办?
  • 减少体系尺寸(例如改为 15×8×8)
  • 减少弛豫步数(对于测试可以先用 10000 步)
  • 使用 MPI 并行:mpiexec -np 4 lmp.exe -in 01_build_relax.lammps
❓ stress_strain.dat 中的值有负数或剧烈波动?

300 K 下原子的热运动导致应力波动是正常的。增大数据采样间隔或取平均值可改善。另外检查力的方向符号是否正确。

❓ Python 脚本运行报错 "No module named numpy"?

需要先安装依赖库:pip install numpy scipy matplotlib

❓ 结果与实验值差距很大怎么办?
  • 确认势函数文件没有损坏(重新下载)
  • 确认弛豫充分(增加 NPT 步数)
  • 确认拟合区间在弹性范围内(应变 < 2%)
  • 检查单位换算是否正确

A.2   推荐阅读

资源说明
LAMMPS 官方文档最权威的 LAMMPS 命令参考
NIST 势函数库高精度势函数的权威来源
《分子动力学教程》 — Frenkel & SmitMD 理论的入门经典教材
《计算材料学》 — 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 计算铜杨氏模量的完整流程。动手运行模拟,看看你能得到什么结果吧!