GROMACS专题

GROMACS Andersen与柔性水耦合实操

演示Andersen、Andersen-massive与历史MTTK组合,说明刚性/柔性水、自由度和兼容输入。

更新于 2026-10-30约 8 分钟阅读按任务与环境选择适用配置
阅读本篇目录

温压耦合方法有对应的积分器和约束前提,不能只改一个名字就沿用所有参数。本篇用小水盒展示 Andersen 系列与历史 MTTK 分支;普通生产计算可优先参考已经给出实际输入的 v-rescale/Nose–Hoover 和 C-rescale/Parrinello–Rahman 教程。

1. 先区分刚性水与柔性水#

默认 SPC/E 拓扑采用 SETTLE 固定水分子几何。给包含文件打开 define=-DFLEXIBLE 后,使用键和角的势能描述内部形变;这改变了模型及自由度,不仅是换一个求解器。本例 510 分子水盒的自由度由刚性的 3057 变为柔性的 4587(均去除整体平动)。

柔性水先从随包的已平衡输入重新运行 10 ps NVT:

bash run.sh flexible-equilibration
完整柔性水准备输入
integrator = md
dt = .0005
nsteps = 20000
continuation = yes
tcoupl = v-rescale
pcoupl = no
gen-vel = no
comm-mode = Linear
nstcomm = 100
nstenergy = 100
nstcalcenergy = 100
nstlog = 1000
nstxout = 0
nstvout = 0
nstfout = 0
nstxout-compressed = 0
compressed-x-precision = 1000
cutoff-scheme = Verlet
nstlist = 20
verlet-buffer-tolerance = -1
rlist = 1.0
coulombtype = PME
rcoulomb = .8
vdwtype = Cut-off
vdw-modifier = Potential-shift
rvdw = .8
DispCorr = no
fourierspacing = .12
pme-order = 4
pbc = xyz
constraints = none
constraint-algorithm = lincs
lincs-order = 4
lincs-iter = 1
define = -DFLEXIBLE
tc-grps = System
tau-t = .1
ref-t = 300
ld-seed = 2612206

柔性分支采用 0.5 fs,后续输入来自这段准备得到的检查点。不要把刚性与柔性水的温度波动直接用来给恒温器排名;它们的内部自由度和势能模型已经不同。

2. 普通 Andersen:无约束的 velocity-Verlet#

bash run.sh flexible-andersen

本例使用 integrator=md-vv、tcoupl=andersen、constraints=none 和柔性水。Andersen 随机刷新一部分速度,tau-t=0.1 ps 是刷新相关的时间尺度,不应照搬成所有方法同义的“松弛时间”。

本版原生预处理要求它与质心去除频率相容,本包明确设置 nstcomm=1、nsttcouple=1。不要通过忽略输入错误让不相容组合继续运行。

完整普通 Andersen 输入
integrator = md-vv
dt = .0005
nsteps = 40000
continuation = yes
tcoupl = andersen
pcoupl = no
gen-vel = no
comm-mode = Linear
nstcomm = 1
nstenergy = 400
nstcalcenergy = 400
nstlog = 1000
nstxout = 400
nstvout = 400
nstfout = 0
nstxout-compressed = 400
compressed-x-precision = 1000
cutoff-scheme = Verlet
nstlist = 20
verlet-buffer-tolerance = -1
rlist = 1.0
coulombtype = PME
rcoulomb = .8
vdwtype = Cut-off
vdw-modifier = Potential-shift
rvdw = .8
DispCorr = no
fourierspacing = .12
pme-order = 4
pbc = xyz
constraints = none
constraint-algorithm = lincs
lincs-order = 4
lincs-iter = 1
define = -DFLEXIBLE
tc-grps = System
tau-t = .1
ref-t = 300
ld-seed = 2612203
nsttcouple = 1

3. Andersen-massive:整组速度周期刷新#

bash run.sh flexible-andersen-massive
bash run.sh rigid-andersen-massive

massive 版本周期性刷新整组速度。本例同时保留柔性与刚性水分支;它与普通 Andersen 的约束支持范围不同。刚性分支仍有 SETTLE,不应删除拓扑里的约束后继续称为同一刚性模型。

本版还检查 tau-t/dt 与 nstcomm 的整除关系。资料包直接使用 nstcomm=1,避免把 0.1 ps、2 fs 这一组输入与不相容的 100 步质心频率混用。不要据此推断所有历史版本的自动处理都相同。

实际分支 模型 平均温度K 轨迹温度标准差K
flexible-andersen 柔性水 299.06 6.51
flexible-andersen-massive 柔性水 299.61 5.41
rigid-andersen-massive 刚性水 300.75 7.86
flexible-mttk 柔性水 299.07 5.21

标准差是短轨迹自身的时间波动,不是平均值的置信区间。不同随机流和短时样本会得到不同的曲线。

Andersen实际温度和MTTK实际体积变化

4. MTTK:保留历史方法示例,先看使用前提#

MTTK 在本版已经标记弃用,主要用于理解和复现历史输入,普通新任务优先参考 C-rescale 或适合体系的 Parrinello–Rahman。这里的可运行组合是:柔性水、无约束、md-vv、Nose–Hoover 温控和各向同性压力耦合。

bash run.sh flexible-mttk
完整 MTTK 输入
integrator = md-vv
dt = .0005
nsteps = 40000
continuation = yes
tcoupl = nose-hoover
pcoupl = MTTK
gen-vel = no
comm-mode = Linear
nstcomm = 100
nstenergy = 400
nstcalcenergy = 400
nstlog = 1000
nstxout = 400
nstvout = 400
nstfout = 0
nstxout-compressed = 400
compressed-x-precision = 1000
cutoff-scheme = Verlet
nstlist = 20
verlet-buffer-tolerance = -1
rlist = 1.0
coulombtype = PME
rcoulomb = .8
vdwtype = Cut-off
vdw-modifier = Potential-shift
rvdw = .8
DispCorr = no
fourierspacing = .12
pme-order = 4
pbc = xyz
constraints = none
constraint-algorithm = lincs
lincs-order = 4
lincs-iter = 1
define = -DFLEXIBLE
tc-grps = System
tau-t = .5
ref-t = 300
pcoupltype = isotropic
tau-p = 5
ref-p = 1
compressibility = 4.5e-5

本例体积从 15.6250 变为 15.2572 nm³,说明压力耦合确实在改变盒子;20 ps 不能证明密度或体积涨落已经收敛。改变柔性/刚性模型、温控方式、压控方式时,需要重新平衡,不能把输入兼容等同于统计已经充分。

5. 查看实际生效的设置#

grep -E 'integrator|tcoupl|pcoupl|nstcomm|constraints' \
  reference/flexible-andersen/md.mdp
module load gromacs/2026.4-cpu-double
gmx_d dump -s reference/flexible-mttk/md.tpr | head -95
bash analyze.sh

除了本篇,还有 步长与 NVE、PME 网格和截断 的完整实算资料。它们使用另一套 216 分子水盒,不要混用检查点或把不同体系的能量直接相减。

官方说明:温度、压力及约束选项。

下载与重新运行#

下载完整输入、实际结果、MDP、CSV和五张图的绘图脚本。本包直接提供已经平衡的 510 分子 SPC/E 水盒和 1UBQ 蛋白水溶液输入;柔性水分支另有 10 ps 准备阶段。先查看现成数据:

bash analyze.sh

结果在 reference/analysis,图片在 reference/figures。在新解压目录提交整套新计算:

bash submit.sh
squeue -u "$USER"

作业使用实际分区 gpu-8p100-hs,每组申请一张 P100 和两个 CPU 核;双精度对照使用该任务的 CPU 核计算,不使用 GPU 力计算。22 个任务脚本包括一个柔性水准备任务、20 个生产条件和一个后处理任务,依赖关系已写好。需要先看脚本而不提交时,在另一个新解压目录用 bash submit.sh --dry-run。jobs、work 已存在时不重复提交整套任务。

正文中的单条 bash run.sh ... 只在已经分配到对应资源的任务中执行,不在登录/管理节点运行 MD。输入、拓扑、检查点和力场要配套;不要拿重新建模后的拓扑继续读取旧检查点。

混合精度 GPU 路径使用 gromacs/2026.4-p100-threadmpi:GROMACS 2026.4、GNU13.3、CUDA12.8、FFTW3.3.10、thread-MPI/OpenMP。双精度路径使用 gromacs/2026.4-cpu-double,命令 gmx_d,固定 v2026.4 源码构建,程序标记 2026.4-dev,CPU-only、GNU13.3、AVX2、FFTPACK。不是 Intel Xeon 8173M 的性能数据。

提取使用 gmx_d,绘图用 NumPy/Matplotlib;结构与轨迹也通过 MDAnalysis 核对。脚本保留双精度 TRR 的实际精度,避免把双精度坐标先缩成 float32 再判断极紧约束误差。参考数据均为真实计算,但 20 ps 水与 5 ps 蛋白仅用于学会操作,不作为收敛热力学、扩散或性能结论。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗