分子动力学模拟基础:力场、积分算法、周期性边界条件、温度/压力耦合

要做 GROMACS 输出能量特征提取,得先搞明白 MD 模拟在干什么。说白了,整个模拟就是算原子间的力 → 积分运动方程 → 更新坐标 → 再算力,如此循环。这里面有四个核心概念:力场、积分算法、周期性边界条件、温度/压力耦合。我当年刚接触时,觉得这些太“理论”,结果第一个体系能量直接发散……嗯,从那以后我再也不跳过了。

力场:分子世界的“物理规则”

力场就是一组数学函数和参数,描述原子核之间的相互作用。GROMACS 里最常用的有 OPLS-AA、CHARMM36、AMBER99SB-ILDN 等,每种适合不同的体系——比如蛋白质模拟我偏向用 AMBER,膜体系用 CHARMM 稍多。力场能量分成键合项和非键合项:

E_total = E_bond + E_angle + E_dihedral + E_LJ + E_coulomb
  • 键伸缩 / 角弯曲:谐波近似,弹簧系数决定刚度
  • 二面角:用傅里叶级数描述旋转势垒
  • 范德华:Lennard-Jones 6-12 势,描述色散和排斥
  • 静电:库仑相互作用,通常用 PME 处理长程项
⚠️ 选力场要小心——不同力场对同一氨基酸的原子类型、带电量和二面角参数可能完全不同。我曾经在同一体系混用 OPLS 和 CHARMM 的参数文件,结果跑了 2 ns 后体系直接炸了。后来仔细对比了 .top 文件才发现问题。建议始终遵循力场官方的补全规则。

积分算法:谁让原子动起来?

力算出来了,怎么更新位置和速度?GROMACS 默认用 蛙跳 (leap-frog) 算法,速度和位置相差半个时间步长:

v(t + Δt/2) = v(t - Δt/2) + a(t) · Δt
r(t + Δt)   = r(t) + v(t + Δt/2) · Δt

你想想看,这样只需要存储一套速度中间值,计算效率高。另一种常用的是 Velocity-Verlet,GROMACS 也支持,但蛙跳用得更多。

💡 时间步长选多大? 一般蛋白-水体系用 2 fs 就够了,前提是用了 LINCS 或 SHAKE 约束所有氢原子键。如果不约束,必须降到 0.5 fs 以下。我曾经做某个小肽折叠,图省事设了 4 fs,结果跑了 200 ps 后温度直接飙到 400 K,体系彻底乱套。记住:步长太大 → 位置和速度耦合失真 → 能量不守恒。

周期性边界条件:有限盒子模拟无限系统

我们不可能模拟几亿个原子,所以取一小块区域(通常是个立方体或菱形十二面体),然后四周复制镜像。这就是 周期性边界条件 (PBC)。原子跑出盒子一头,就从另一头回来。同时,计算非键相互作用时要用 最小镜像约定——只和最近的那个镜像算,避免重复计算。

GROMACS 里常用截断半径(cutoff)来处理短程相互作用,一般设 1.0~1.2 nm。长程静电用 PME 网格。我个人的习惯:

  • 盒子边长至少 > 2 × cutoff,这样原子不会跟自己镜像直接作用(虽然 GROMACS 会自动排除 1-2/1-3 原子对)
  • 水盒子推荐用 editconf -d 1.0 加至少 1.0 nm 的溶剂层
📌 最小镜像 vs 最小距离:两者不是一回事。最小镜像是指选择最近的周期性副本,最小距离是指在所有副本里找最近的原子对。GROMACS 默认用最小镜像做 pair list,但有些后处理工具(如 gmx mindist)用最小距离。别搞混。

温度/压力耦合:控制模拟环境

真实的实验有恒温恒压环境。MD 模拟通过 恒温器 和 恒压器 来模拟。GROMACS 提供了多种选择:

耦合器 类型 优点 缺点 / 注意
V-rescale(改进的 Berendsen) 恒温 快速稳定、产生正确动能分布 对某些小反应坐标有干扰
Nose-Hoover 恒温 严格正则系综(NVT) 有振荡、耦合常数要调
Berendsen 恒压 恒压 非常快、适合平衡初期 不产生严格 NPT 系综
Parrinello-Rahman 恒压 严格 NPT、允许盒子形状变化 计算量稍大、对初始条件敏感

我的经验:做能量提取时,采样阶段务必用能产生正确系综的耦合器,否则提取的“热力学量”可能毫无意义。我一般这样搭配:

; 平衡阶段(快速稳定)
tcoupl  = V-rescale
pcoupl  = Berendsen

; 采样阶段(严格系综)
tcoupl  = Nose-Hoover
pcoupl  = Parrinello-Rahman
🔧 耦合常数怎么设? 温度耦合的 τ 通常设 0.1~0.5 ps,太小会剧烈扰动动力学,太大会失效。压力耦合 τ 设 1.0~5.0 ps(对水溶液)。做相变模拟时,我曾经把 τ_p 设成 10 ps,结果体系一直没压到目标压力……后来改成 2 ps 就好了。

知识结构总览

下面这张图把本章提到的四个基础概念串起来,顺便标出它们对 能量特征提取 的影响路径,方便你后续看输出文件时知道哪些是“关键参数”。

MD模拟基础 → 能量特征提取 力场 积分算法 周期性边界 温压耦合 每一步能量 / 轨迹输出(.edr / .xtc) 能量特征提取(gmx energy / 自定义脚本) 势能(LJ + Coul) 动能 → 温度 耦合功 / 压力张量 图注:四个基础概念共同决定能量输出的准确性与系综一致性。
💡 一个小提醒:做能量特征提取时,一定要记录 .edr 文件(能量轨迹)和 .mdp 中的耦合器参数。我遇到过学员只导出了 .xtc 轨迹,然后问我为什么算不出温度……嗯,温度不是直接存进坐标里的,得靠 gmx energy 从 .edr 里读。