Zn(OTF)2 水溶液的分子动力学模拟

C. Qiu 于 2025-05-31 发布

如题,记录一次分子动力学模拟。体系为 2 mol/L 三氟甲烷磺酸锌 (Zn(OTF)2),其中加入少量碘化胆碱(ChI)。

使用软件为 gromacs 2024.2 GPU版本,在一块笔记本 GTX 1660Ti 上完成全部计算。

本文全程使用 Amber 力场。读者若想用别的力场也可以,OPLS-AA 和 CHARMM 等都是论文中很常用的力场,模拟有机分子和简单离子的水溶液都比较靠谱。

目录(点击直达,右下角提供快速回顶按钮)


1. 准备工作:力场参数和初始结构 (AmberTools + ACPYPE)

这一步至关重要,靠谱的模拟基于正确的力场参数。对于标准离子和水,我们可以从现有力场中提取。对于非标准分子(如胆碱阳离子 CHL+ 和三氟甲磺酸根阴离子 OTF-),我们需要借助外部工具生成参数;或者有文献提供参数的话也可以拿来用。下面我展示如何通过工具获得靠谱的力场参数。

1.1 获取胆碱(CHL)和三氟甲磺酸根(OTF)的力场参数 (AmberTools + ACPYPE)

CHL 和 OTF 不是蛋白质或核酸的标准残基,因此需要专门为其生成 General Amber Force Field(GAFF/GAFF2)参数。这里将详细展示如何通过 AmberTools 套件(antechamber, parmchk2, tleap)为目标分子(以OTF-为例)生成Amber格式的力场参数,然后使用 ACPYPE 将其转换为 GROMACS 格式。CHL+ 的参数化过程与此类似。

注意,既然接触计算模拟,我就默认读者有 Linux 前置技能,掌握简单工具的安装方法。AmberTools 官网 为最新版提供了两种安装方法,拉取conda环境或直接编译二进制都可以,这里建议用conda。ACPYPE 可以通过 pip install acpype 安装。

具体步骤 (以OTF-为例):

1.1.1 准备初始3D结构

你需要 CHL+ 和 OTF- 的单分子3D结构文件,通常是 .pdb 格式。这些可以通过化学建模软件(如Avogadro、GaussView、Materials Studio)构建并进行初步的几何优化得到(用 DFT 计算优化后的更好),或者从化学数据库下载。确保原子命名规范。

1.1.2 使用antechamber生成MOL2文件和初步原子类型

antechamber是AmberTools中的一个关键程序,用于识别原子类型、分配键类型,并计算原子点电荷。

# 为OTF⁻ (三氟甲磺酸根) 生成MOL2文件
antechamber -i OTF_initial.pdb -fi pdb -o OTF.mol2 -fo mol2 -c bcc -nc -1 -rn OTF -at gaff2

此命令会生成 OTF.mol2 文件。务必检查该文件中各原子的电荷之和是否等于指定的净电荷(这里是 -1)。

1.1.3 使用parmchk2检查并生成缺失的力场参数

GAFF2力场虽然通用,但对于某些特定的键、角、二面角组合可能没有预设参数。parmchk2程序会检查MOL2文件中的原子类型,并与力场库比较,为缺失的参数提供合理的估计值。

parmchk2 -i OTF.mol2 -f mol2 -o OTF.frcmod -s gaff2

打开 OTF.frcmod 文件查看是否有 “ATTN, need revision” 这样的警告,这表示某些参数的估计可能不太可靠,需要进一步检查。如果里面只有一些[ xxx ]标签,下面不带参数,说明所有力场参数全部找到,没有问题。

本文涉及的分子在这一步不会出现问题,都是些很常见的元素。

1.1.4 (可选但推荐) 使用tleap生成Amber的prmtop和inpcrd文件

tleap是Amber中用于整合参数并构建拓扑 (.prmtop) 和坐标 (.inpcrd) 文件的工具。使用tleap生成的prmtop文件可以更好地被ACPYPE处理,因为它已经包含了所有力场参数。

首先,创建一个 tleap 输入脚本,例如 tleap_OTF.in:

source leaprc.gaff2      # 加载GAFF2力场 (或 leaprc.gaff)
loadamberparams OTF.frcmod # 加载parmchk2生成的缺失参数
OTF = loadmol2 OTF.mol2   # 加载分子的MOL2文件
check OTF                # 检查分子结构,确保没有错误
saveamberparm OTF OTF.prmtop OTF.inpcrd # 保存Amber拓扑和坐标文件
quit

然后运行 tleap:

tleap -s -f tleap_OTF.in > tleap_OTF.out

1.1.5 使用acpype转换为GROMACS格式

ACPYPE (AnteChamber PYthon Parser interface) 可以将Amber的prmtopinpcrd文件转换为GROMACS兼容的.itp.gro文件。

acpype -p OTF.prmtop -x OTF.inpcrd -b OTF -o gmx -d

此命令会在名为 OTF.acpype 的子目录中生成 OTF_GMX.itpOTF_GMX.gro

注意,据我测试,最新的2025版会生成 xxx_GMX.topxxx_GMX.gro,你需要根据自己的实际输出来调整。我们需要的 .itp 其实就是所生成的 .top 文件,把.top重命名为.itp即可。核心是获取包含 [ moleculetype ] 定义的GROMACS拓扑片段。

对CHL+也重复以上1.1.1到1.1.5的步骤。

最终产物:

恭喜,你已经完全玩明白了:如何获得任一有机分子的力场参数。相信任何小分子溶液的模拟都难不倒你。

1.2 获取Zn2+, I- 和 水分子(SOL)的力场参数 (Amber ff99SB-ILDN)

对于标准离子和水模型,我们可以从 GROMACS 内置的力场或已发表的参数中提取。这里我们使用与 Amber ff99SB-ILDN 兼容的参数。

1.3 创建单分子PDB/GRO文件

除了 .itp 文件,我们还需要每个分子类型的单分子坐标文件,作为 Packmol 构建初始盒子的输入。

1.4 整合原子类型参数到 atomtypes.itp

GROMACS需要一个文件来定义所有原子类型的非键相互作用参数(Lennard-Jones σ 和 ε)。我们将所有这些参数集中到 atomtypes.itp 文件中(个人认为是个好习惯,预防后续乱七八糟的报错)。

atomtypes.itp 文件内容示例:

[ atomtypes ]
;name   bond_type     mass     charge   ptype   sigma         epsilon       ; comments
; From CHL.itp (GAFF2-like, AmberTools/ACPYPE)
n4       n4          0.00000  0.00000   A     2.49951e-01   1.62122e+01   ; Example N in Choline (CHECK YOUR GAFF2 VALUES)
c3       c3          0.00000  0.00000   A     3.39771e-01   4.51035e-01   ; Example C in Choline & OTF (CHECK YOUR GAFF2 VALUES)
oh       oh          0.00000  0.00000   A     3.24287e-01   3.89112e-01   ; Example O in Choline alcohol (CHECK YOUR GAFF2 VALUES)
hx       hx          0.00000  0.00000   A     1.88746e-01   8.70272e-02   ; Example H attached to C (CHECK YOUR GAFF2 VALUES)
h1       h1          0.00000  0.00000   A     2.42200e-01   8.70272e-02   ; Example H attached to C next to N/O (CHECK YOUR GAFF2 VALUES)
ho       ho          0.00000  0.00000   A     5.37925e-02   1.96648e-02   ; Example H in alcohol (CHECK YOUR GAFF2 VALUES)
; From OTF.itp (GAFF2-like, AmberTools/ACPYPE)
s6       s6          0.00000  0.00000   A     4.05840e-01   2.56898e-01   ; Example S in OTF (CHECK YOUR GAFF2 VALUES)
o        o           0.00000  0.00000   A     3.04812e-01   6.12119e-01   ; Example O in OTF (SO3 part) (CHECK YOUR GAFF2 VALUES)
f        f           0.00000  0.00000   A     3.03422e-01   3.48109e-01   ; Example F in OTF (CHECK YOUR GAFF2 VALUES)
; For SOL (LJ parameters from TIP3P Amber used with SPC/E charges/geometry)
OW       OW          0.00000  0.00000   A     0.315061      0.636386      ; OWT3 from Amber TIP3P
HW       HW          0.00000  0.00000   A     0.000000      0.000000      ; HWT3 from Amber TIP3P (LJ usually zero)
; For ZN ion (from amber99sb-ildn.ff/ffnonbonded.itp or compatible source)
ZN       ZN          0.00000  0.00000   A     1.95998e-01   5.23000e-02
; For I ion (from amber99sb-ildn.ff/ffnonbonded.itp or compatible source)
I        I           0.00000  0.00000   A     4.18722e-01   1.67360e+00

注意masscharge 列在这里通常设为0,因为实际的质量和电荷在各个分子的 .itp 文件中的 [ atoms ] 部分定义。ptype A 表示普通原子。sigma (nm) 和 epsilon (kJ/mol) 是Lennard-Jones参数。务必确保 atomtypes.itp 中GAFF2相关的原子类型及其参数与你通过AmberTools流程生成的参数一致。


2. 计算分子数量和盒子尺寸

根据体系浓度和期望的模拟规模确定各种分子的数量。

我们选择在模拟盒子中固定以下数量:

电荷平衡检查: CHL(+1) + I(-1) + ZN(50 * +2) + OTF(100 * -1) = 1 - 1 + 100 - 100 = 0. 系统电中性。

估算盒子尺寸和水分子数量: 基于50个Zn2+离子和2 mol/L的目标浓度:

估算溶质体积 V_solutes ≈ 11.55 nm3。 可用于水的体积 V_water_space = V_box - V_solutes ≈ 29.96 nm3。 每个水分子的体积约 0.03 nm3

最终分子数量:


3. 使用Packmol构建初始盒子

Packmol是一个强大的工具,用于将不同类型的分子按照指定的数量和空间约束填充到模拟盒子中。

packmol.inp 文件:

# Packmol input file for Zn(OTF)2 / ChI aqueous solution

tolerance 2.0
output system_packed.pdb
filetype pdb

# Box dimensions: 3.46 nm = 34.6 Angstroms
structure CHL.pdb
  number 1
  inside cube 0. 0. 0. 34.6
end structure

structure I.pdb
  number 1
  inside cube 0. 0. 0. 34.6
end structure

structure ZN.pdb
  number 50
  inside cube 0. 0. 0. 34.6
end structure

structure OTF.pdb
  number 100
  inside cube 0. 0. 0. 34.6
end structure

structure SOL.pdb
  number 999
  inside cube 0. 0. 0. 34.6
end structure

其中,tolerance 指每个插入的分子之间的最小距离,一般设为 2.0 就可以。

运行 Packmol:

packmol < packmol.inp

这将生成 system_packed.pdb 文件。


4. 创建GROMACS拓扑文件 topol.top

topol.top 文件是GROMACS模拟的核心,它定义了系统的力场、包含的分子类型及其数量。

topol.top 文件内容:

; Topology file for Zn(OTF)2 / ChI aqueous solution

; 1. Force field parameters
[ defaults ]
; nbfunc        comb-rule       gen-pairs       fudgeLJ fudgeQQ
  1             2               yes             0.5     0.8333  ; AMBER/GAFF standard

; Include the non-bonded atom type definitions
#include "atomtypes.itp"

; 2. Include molecule topology (.itp files)
#include "CHL.itp"    ; Choline cation
#include "I.itp"      ; Iodide anion
#include "ZN.itp"     ; Zinc cation
#include "OTF.itp"    ; Triflate anion
#include "SOL.itp"    ; Water

; 3. System definition
[ system ]
; Name of the system
Zn(OTF)2 and ChI in Water

; 4. Molecules
; List of molecule types and their counts in the system.
[ molecules ]
; Compound        nmol
CHL               1
I                 1
ZN                50
OTF               100
SOL               999

重要:确保 topol.top、所有 .itp 文件和 system_packed.pdb 在同一工作目录。

至于topol文件中应该包含哪些东西,注释里已经写得很清楚了,用#include把已放进同一目录中,所有该引用的文件全引进来。最后的分子数和前面的步骤对应,别搞错了。

注意:在 topol.top#include "atomtypes.itp" 之前记得添加 [ defaults ] ,用于正确初始化力场设置,否则会报语法错误。


5. 转换坐标并定义盒子 (gmx editconf)

将Packmol生成的PDB文件转换为GROMACS的GRO格式,并确保盒子尺寸正确。

gmx editconf -f system_packed.pdb -o system.gro -c -box 3.46 3.46 3.46

检查 system.gro 文件最后一行的盒子向量和第二行的总原子数 (应为 1*21 + 1*1 + 50*1 + 100*8 + 999*3 = 3869 个原子)。


6. 能量最小化

移除初始结构中的不良接触,降低系统能量。

em.mdp 文件:

; MDP file for Energy Minimization
define          = -DFLEXIBLE
integrator      = steep
emtol           = 1000.0
emstep          = 0.01
nsteps          = 50000
nstlist         = 10
cutoff-scheme   = Verlet
pbc             = xyz
coulombtype     = PME
rcoulomb        = 1.0
vdwtype         = Cut-off
rvdw            = 1.0
DispCorr        = EnerPres
constraints     = h-bonds
constraint_algorithm = LINCS

运行Grompp和MDrun:

gmx grompp -f em.mdp -c system.gro -p topol.top -o em.tpr -maxwarn 1
gmx mdrun -v -deffnm em

检查em.log是否显示 “Steepest Descents converged to Fmax < 1000”。我这里在576步收敛,Fmax ≈ 957 kJ/mol/nm,最终势能 ≈ -8.9e4 kJ/mol。


7. NVT (恒温恒容) 平衡

在恒定体积和目标温度下弛豫系统。

nvt.mdp 文件:

; MDP file for NVT equilibration
title                   = ZnOTF2_ChI NVT equilibration
define                  = -DFLEXIBLE
integrator              = md
nsteps                  = 50000       ; 100 ps
dt                      = 0.002
nstlog                  = 5000
nstenergy               = 5000
nstxout-compressed      = 5000
continuation            = no
constraint_algorithm    = lincs
constraints             = h-bonds
cutoff-scheme           = Verlet
nstlist                 = 20
pbc                     = xyz
coulombtype             = PME
rcoulomb                = 1.0
vdwtype                 = Cut-off
rvdw                    = 1.0
DispCorr                = EnerPres
tcoupl                  = V-rescale
tc-grps                 = System
tau_t                   = 0.1
ref_t                   = 298.15      ; Target temperature (K)
pcoupl                  = no
gen_vel                 = yes
gen_temp                = 298.15
gen_seed                = -1

运行Grompp和MDrun:

gmx grompp -f nvt.mdp -c em.gro -p topol.top -o nvt.tpr -r em.gro -maxwarn 1
gmx mdrun -v -deffnm nvt

检查:使用 gmx energy -f nvt.edr -o temperature_nvt.xvg (选择 “Temperature”)。 我这里显示平均温度为 298.065 K,接近目标值298.15 K,波动合理。


8. NPT (恒温恒压) 平衡

在恒定压力和目标温度下弛豫系统,允许盒子体积变化以达到正确的密度。

npt.mdp 文件:

; MDP file for NPT equilibration
title                   = ZnOTF2_ChI NPT equilibration
define                  = -DFLEXIBLE
integrator              = md
nsteps                  = 500000      ; 1 ns
dt                      = 0.002
nstlog                  = 5000
nstenergy               = 5000
nstxout-compressed      = 5000
continuation            = yes
constraint_algorithm    = lincs
constraints             = h-bonds
cutoff-scheme           = Verlet
nstlist                 = 20
pbc                     = xyz
coulombtype             = PME
rcoulomb                = 1.0
vdwtype                 = Cut-off
rvdw                    = 1.0
DispCorr                = EnerPres
tcoupl                  = V-rescale
tc-grps                 = System
tau_t                   = 0.1
ref_t                   = 298.15
pcoupl                  = Parrinello-Rahman
pcoupltype              = isotropic
tau_p                   = 2.0
ref_p                   = 1.0         ; Target pressure (bar)
compressibility         = 4.5e-5
refcoord_scaling        = com

运行Grompp和MDrun:

gmx grompp -f npt.mdp -c nvt.gro -p topol.top -o npt.tpr -t nvt.cpt -r nvt.gro -maxwarn 1
gmx mdrun -v -deffnm npt

检查:使用 gmx energy 分析 npt.edr 文件中的 Temperature, Pressure, Density (或 Volume)。确保它们都已达到稳定。


9. 生产阶段模拟

系统充分平衡后(即温度、压力、密度等关键物理量在目标值附近稳定波动),就可以进行长时间的生产阶段分子动力学模拟了。这个阶段的主要目的是采集足够的数据样本,用于后续的各种物理性质分析和现象观察。

md.mdp 文件:

; MDP file for Production MD

title                   = ZnOTF2_ChI Production MD ; 描述性标题
define                  = -DFLEXIBLE             ; 与平衡阶段一致,通常用于水模型

; Run parameters
integrator              = md                     ; leap-frog integrator, 标准的MD积分器
nsteps                  = 5000000                ; 总模拟步数。这里是 5,000,000 步
                                                 ; 5,000,000 * 0.002 ps/step = 10,000 ps = 10 ns
                                                 ; **这是需要根据研究目的和计算资源仔细设定的关键参数。**
                                                 ; 对于离子溶液的结构和动力学,通常需要几十到几百纳秒。
dt                      = 0.002                  ; 时间步长 (ps)。2 fs是常见选择,前提是约束了含氢键。

; Output control - 控制各种输出文件的频率
nstxout                 = 0                      ; 输出全精度坐标到 .trr 文件的频率。设为0表示不输出。
                                                 ; 通常在生产阶段不保存 .trr,因为 .xtc 已足够且小得多。
nstvout                 = 0                      ; 输出速度到 .trr 文件的频率。设为0表示不输出。
nstfout                 = 0                      ; 输出力到 .trr 文件的频率。设为0表示不输出。
nstlog                  = 10000                  ; 每10000步 (20 ps) 更新一次 .log 日志文件。
                                                 ; 对于长模拟,可以适当增大此值以减小日志文件大小。
nstenergy               = 10000                  ; 每10000步 (20 ps) 保存一次能量项到 .edr 文件。
                                                 ; 用于后续热力学性质分析。
nstxout-compressed      = 10000                  ; 每10000步 (20 ps) 保存一次压缩坐标到 .xtc 文件。
                                                 ; **这是用于后续轨迹分析的主要文件。**
                                                 ; 频率决定了分析的时间分辨率。

; Bond parameters
continuation            = yes                    ; **关键!** 表示从上一个模拟阶段 (NPT) 继续。
                                                 ; 会读取上一步的检查点文件 (.cpt) 以获取坐标、速度、盒子状态等。
constraint_algorithm    = lincs                  ; LINear Constraint Solver,用于约束键长。
constraints             = h-bonds                ; 约束所有包含氢原子的键。这允许使用更大的时间步长(如2fs)。
lincs_iter              = 1                      ; LINCS算法的迭代次数,影响约束精度。
lincs_order             = 4                      ; LINCS算法的阶数,也影响精度。

; Neighbor searching - 邻近列表参数,与平衡阶段一致
cutoff-scheme           = Verlet
nstlist                 = 20                     ; 每20步 (40 fs) 更新一次邻近列表。
pbc                     = xyz                    ; 在所有三个方向上使用周期性边界条件。

; Electrostatics - 静电相互作用参数,与平衡阶段一致
coulombtype             = PME                    ; Particle Mesh Ewald,用于处理长程静电作用。
rcoulomb                = 1.0                    ; 短程静电截断半径 (nm)。

; Van der Waals - 范德华相互作用参数,与平衡阶段一致
vdwtype                 = Cut-off                ; 使用截断处理范德华相互作用。
rvdw                    = 1.0                    ; 范德华截断半径 (nm)。
DispCorr                = EnerPres               ; 对能量和压力进行长程色散校正。

; Temperature coupling - 温度耦合参数,与平衡阶段一致
tcoupl                  = V-rescale              ; V-rescale 恒温器,能较好地产生正则系综。
tc-grps                 = System                 ; 将整个系统耦合到同一个热浴。
tau_t                   = 0.1                    ; 温度耦合的时间常数 (ps)。
ref_t                   = 298.15                 ; 目标参考温度 (K)。

; Pressure coupling - 压力耦合参数,与平衡阶段一致
pcoupl                  = Parrinello-Rahman      ; Parrinello-Rahman 恒压器,允许盒子形状和体积变化。
pcoupltype              = isotropic              ; 各向同性压力耦合,盒子在所有方向上等比例缩放。
tau_p                   = 2.0                    ; 压力耦合的时间常数 (ps)。
ref_p                   = 1.0                    ; 目标参考压力 (bar)。
compressibility         = 4.5e-5                 ; 体系的压缩系数 (bar⁻¹),这里使用水的典型值。
refcoord_scaling        = com                    ; 参考坐标缩放方式,对没有位置限制的体系影响不大。

; Velocity generation (NOT needed if continuation = yes)
; gen_vel                 = no                   ; 由于 continuation = yes,不需要重新生成速度。```mdp
; MDP file for Production MD

title                   = ZnOTF2_ChI Production MD ; 描述性标题
define                  = -DFLEXIBLE             ; 与平衡阶段一致,通常用于水模型

; Run parameters
integrator              = md                     ; leap-frog integrator, 标准的MD积分器
nsteps                  = 5000000                ; 总模拟步数。这里是 5,000,000 步
                                                 ; 5,000,000 * 0.002 ps/step = 10,000 ps = 10 ns
                                                 ; **这是需要根据研究目的和计算资源仔细设定的关键参数。**
                                                 ; 对于离子溶液的结构和动力学,通常需要几十到几百纳秒。
dt                      = 0.002                  ; 时间步长 (ps)。2 fs是常见选择,前提是约束了含氢键。

; Output control - 控制各种输出文件的频率
nstxout                 = 0                      ; 输出全精度坐标到 .trr 文件的频率。设为0表示不输出。
                                                 ; 通常在生产阶段不保存 .trr,因为 .xtc 已足够且小得多。
nstvout                 = 0                      ; 输出速度到 .trr 文件的频率。设为0表示不输出。
nstfout                 = 0                      ; 输出力到 .trr 文件的频率。设为0表示不输出。
nstlog                  = 10000                  ; 每10000步 (20 ps) 更新一次 .log 日志文件。
                                                 ; 对于长模拟,可以适当增大此值以减小日志文件大小。
nstenergy               = 10000                  ; 每10000步 (20 ps) 保存一次能量项到 .edr 文件。
                                                 ; 用于后续热力学性质分析。
nstxout-compressed      = 10000                  ; 每10000步 (20 ps) 保存一次压缩坐标到 .xtc 文件。
                                                 ; **这是用于后续轨迹分析的主要文件。**
                                                 ; 频率决定了分析的时间分辨率。

; Bond parameters
continuation            = yes                    ; **关键!** 表示从上一个模拟阶段 (NPT) 继续。
                                                 ; 会读取上一步的检查点文件 (.cpt) 以获取坐标、速度、盒子状态等。
constraint_algorithm    = lincs                  ; LINear Constraint Solver,用于约束键长。
constraints             = h-bonds                ; 约束所有包含氢原子的键。这允许使用更大的时间步长(如2fs)。
lincs_iter              = 1                      ; LINCS算法的迭代次数,影响约束精度。
lincs_order             = 4                      ; LINCS算法的阶数,也影响精度。

; Neighbor searching - 邻近列表参数,与平衡阶段一致
cutoff-scheme           = Verlet
nstlist                 = 20                     ; 每20步 (40 fs) 更新一次邻近列表。
pbc                     = xyz                    ; 在所有三个方向上使用周期性边界条件。

; Electrostatics - 静电相互作用参数,与平衡阶段一致
coulombtype             = PME                    ; Particle Mesh Ewald,用于处理长程静电作用。
rcoulomb                = 1.0                    ; 短程静电截断半径 (nm)。

; Van der Waals - 范德华相互作用参数,与平衡阶段一致
vdwtype                 = Cut-off                ; 使用截断处理范德华相互作用。
rvdw                    = 1.0                    ; 范德华截断半径 (nm)。
DispCorr                = EnerPres               ; 对能量和压力进行长程色散校正。

; Temperature coupling - 温度耦合参数,与平衡阶段一致
tcoupl                  = V-rescale              ; V-rescale 恒温器,能较好地产生正则系综。
tc-grps                 = System                 ; 将整个系统耦合到同一个热浴。
tau_t                   = 0.1                    ; 温度耦合的时间常数 (ps)。
ref_t                   = 298.15                 ; 目标参考温度 (K)。

; Pressure coupling - 压力耦合参数,与平衡阶段一致
pcoupl                  = Parrinello-Rahman      ; Parrinello-Rahman 恒压器,允许盒子形状和体积变化。
pcoupltype              = isotropic              ; 各向同性压力耦合,盒子在所有方向上等比例缩放。
tau_p                   = 2.0                    ; 压力耦合的时间常数 (ps)。
ref_p                   = 1.0                    ; 目标参考压力 (bar)。
compressibility         = 4.5e-5                 ; 体系的压缩系数 (bar⁻¹),这里使用水的典型值。
refcoord_scaling        = com                    ; 参考坐标缩放方式,对没有位置限制的体系影响不大。

; Velocity generation (NOT needed if continuation = yes)
; gen_vel                 = no                   ; 由于 continuation = yes,不需要重新生成速度。

运行Grompp和MDrun:

gmx grompp -f md.mdp -c npt.gro -p topol.top -o md.tpr -t npt.cpt -r npt.gro -maxwarn 1
#-f md.mdp: 指定MDP参数文件。
#-c npt.gro: 提供NPT平衡结束时的坐标作为起始结构。
#-p topol.top: 指定系统的拓扑文件。
#-o md.tpr: 输出的二进制运行文件。
#-t npt.cpt: **关键!** 读取NPT平衡的检查点文件,包含速度、精确盒子状态等,用于无缝续跑。
#-r npt.gro: (可选,但推荐) 参考结构,用于某些类型的分析或限制。
#-maxwarn 1: 允许一个警告通过而不中断grompp。

gmx mdrun -v -deffnm md
#-v: 输出详细运行信息到屏幕。
#-deffnm md: GROMACS会自动寻找md.tpr作为输入,
#   并将所有输出文件 (md.log, md.xtc, md.edr, md.gro, md.cpt等) 以"md"为前缀命名。

关于输出文件:


好了,如果到这里一切顺利,那么恭喜你完成了分子动力学模拟,现在是喜闻乐见的提数据作图环节。

10. 数据分析:RDF和配位数

这里分析Zn2+离子周围O原子(来自OTF-)和O原子(来自水)的径向分布函数和配位数。

10.1 创建索引文件 (gmx make_ndx)

gmx make_ndx -f md.tpr -o index.ndx

在交互提示符下创建以下组:

  1. 选择Zn原子: a ZN (这步操作会创建一个新组,我这里是组11,根据make_ndx输出确认,或者空敲一下回车)
  2. 命名Zn组: name 11 ZN_ions (将11替换为实际组号,主要防止弄错)
  3. 选择OTF中的氧原子 (原子名O1, O2, O3,残基名OTF): r OTF & a O1 O2 O3 (假设创建组12)
  4. 命名OTF氧原子组: name 12 O_OTF
  5. 选择水分子的氧原子 (原子名OW,残基名SOL): r SOL & a OW (假设创建组13)
  6. 命名水氧原子组: name 13 O_Water
  7. 保存并退出: q

确认make_ndx 会列出预定义的组,如:

  0 System              :  3869 atoms
  ...
  4 ZN                  :    50 atoms (基于残基名ZN的预定义组)
  ...

确保你使用 a ZN (按原子名) 创建的新组被正确识别和命名。

不知道怎么看?操作完,仍在make_ndx中空敲一下回车键就可以。

10.2 计算RDF和配位数 (gmx rdf)

解读输出:


11. 总结与其他

总之,本文涵盖了从力场参数准备、体系模拟到数据分析的关键环节,并给出了所有输入文件的详细内容,理论上完成 #1 准备工作 后可以顺利复现,并举一反三地推广到其他任何体系。

我认为按照此流程,至少跑绝大多数液相中的MD模拟都不在话下,并能获得论文中常见的 RDF、配位数等数据,和花里胡哨的 “满盒子的分子” 图 (这个百度能找到教程,用VMD就可以画出你想要的)。

后续可以进行的分析包括:


对于Gromacs,我也从一无所知中摸索过来,深知教程/信息的零散过时、完整案例的缺失难寻,和海量报错带来的烦躁崩溃。希望这篇博文能对你有哪怕一丝些微的帮助!