分子动力学模拟基础
做分子动力学模拟,说白了就是让原子在力场里“跑”起来。你想想看,我们得先告诉软件:原子长什么样?它们之间怎么相互作用?初始位置在哪?然后才能一步步能量最小化、平衡、生产。这一套流程看起来琐碎,但每一步错一点,后面全白干。我刚开始接触GROMACS时,就因为拓扑文件写错了一个电荷,跑了三天发现体系爆炸了……嗯,从那以后我再也不敢跳过检查步骤了。
力场 - 模拟的“物理规则”
力场定义了原子间的相互作用势能。没有力场,你就是在瞎跑。常见的力场有OPLS、CHARMM、AMBER等,各有各的适用场景。我个人习惯用CHARMM36做蛋白质模拟,OPLS做小分子配体。
力场通常包含这几类参数:
- 键伸缩(Bond stretch)
- 角弯曲(Angle bend)
- 二面角旋转(Dihedral torsion)
- 非键相互作用:范德华(Lennard-Jones)和静电(库仑)
每个原子被分配一个“原子类型”,力场文件里记录了这些类型的参数。GROMACS用.itp文件存放力场定义,顶层的forcefield.itp会包含所有类型。我曾遇到过一个问题:用OPLS跑小分子,结果电荷参数和实验数据对不上。后来发现是原子类型选错了,把sp2碳当成了sp3。
拓扑文件 - 分子的“身份证”
拓扑文件描述了分子内部连接关系、原子质量、电荷和成键信息。GROMACS通常使用.top作为主拓扑,其中#include嵌入多个.itp片段。我个人建议将每个分子的拓扑单独写成一个.itp,方便复用。
一个典型的.top文件结构如下:
; 体系拓扑文件 example.top
#include "ffGROMACS53a6.ff/forcefield.itp"
#include "protein.itp"
#include "ligand.itp"
#include "solvent.itp"
[ system ]
Protein-Ligand Complex in Water
[ molecules ]
Protein 1
Ligand 1
SOL 12345
NA 15
CL 12
注意看[ molecules ]部分,它告诉GROMACS体系中每个分子拷贝数。写错了会导致原子数不匹配。我记得有一次,我跑完能量最小化发现体系体积异常,排查了半小时才发现溶剂分子数多写了一个0。
gmx pdb2gmx生成拓扑时,加上-ignh可以忽略原始PDB中的氢原子,由GROMACS自动加氢。这对pH依赖的质子化状态很有用。
起始结构 - 别让原子“打架”
起始结构通常来自X射线衍射、核磁共振或同源建模得到的PDB文件。但PDB文件直接拿过来用往往有问题:缺少氢原子、键长不合理、原子间重叠严重。必须做预处理。
我常用的流程:
- 用
gmx pdb2gmx生成带拓扑的GRO结构。 - 检查是否有多余的原子或缺失的残基。
- 用
gmx editconf定义盒子大小(如立方体、菱形十二面体)。 - 用
gmx solvate填充溶剂。 - 添加离子中和净电荷。
为什么一定要先加盒子再溶剂化?因为盒子外的原子会在周期性边界条件中被“镜像”回来,产生人工相互作用。我曾经跳过盒子定义直接用gmx solvate,结果体系无限膨胀……教训深刻。
能量最小化 - 给体系“松筋骨”
起始结构通常带有较大的原子间斥力(比如两个原子距离太近)。直接做动力学,步长太小跑不动,或者直接崩掉。所以先做能量最小化,让体系落在一个局部势能底部。
GROMACS中常用最陡下降法配合共轭梯度法。我的典型em.mdp文件:
; em.mdp
integrator = steep
nsteps = 5000
emtol = 1000
emstep = 0.01
nstxout = 0
nstlog = 500
nstenergy = 500
能量收敛判据emtol设为1000 kJ/mol/nm,一般够用。如果是刚性体系(如晶体),可以放到500。运行命令:
gmx grompp -f em.mdp -p system.top -c solvated.gro -o em.tpr
gmx mdrun -v -deffnm em
跑完后检查能量:gmx energy -f em.edr -o potential.xvg,看势能是否趋于常数。如果能量振荡不停,说明最小化没收敛,需要增加步数或调小步长。
gmx check检查配体拓扑是否正确,或者用CGenFF重新生成配体力场。
平衡模拟 - 让体系“适应环境”
能量最小化只是找到了一个低能构型,但温度和压力还不对。平衡阶段分两步:
- NVT平衡(等温等容):先将温度升高到目标值(如300 K),通常做100 ps。
- NPT平衡(等温等压):再跑100 ps,同时控制压力和温度,让体系密度稳定。
平衡阶段的.mdp文件区别主要在热浴和压浴设置:
; nvt.mdp(片段)
integrator = md
nsteps = 50000
dt = 0.002
tcoupl = V-rescale
tc-grps = System
tau_t = 0.1
ref_t = 300
; npt.mdp(在以上基础上增加)
Pcoupl = Parrinello-Rahman
pcoupltype = isotropic
tau_p = 2.0
ref_p = 1.0
compressibility = 4.5e-5
跑完NPT后,检查体系体积和密度是否稳定。如果体积一直在降,说明体系还在“收缩”,需要延长平衡时间。我一般跑NPT至少200 ps,直到密度波动在±1%以内。
平衡完成后,就可以开始生产模拟了。但要注意,平衡的轨迹不要用于数据分析——那不科学。
一张图看懂整体流程
下面这张SVG图总结了我刚才讲的核心流程,从力场选择到平衡模拟,每一步都标出来了。你可以把它贴在实验记录本上,每次跑模拟前扫一眼,避免漏步骤。
这张图把六步串起来了。你可能会问:为什么是六步而不是三步?因为NVT和NPT虽然都是平衡,但分别控制温度和压力,分开跑更容易诊断问题。我在做膜蛋白模拟时,NPT跑了500 ps密度还没稳,后来发现是水的力场选错了——用TIP4P代替了TIP3P。
好了,力场、拓扑、起始结构、能量最小化、平衡模拟,这一套下来,你就拥有了一个可以跑的、物理合理的初始体系。后面的生产模拟和数据分析,就是在这个基础上“跑”和“看”的问题了。