GROMACS 检查点续算与状态精度
从同一水盒实测连续运行、追加续算、分文件续算和GRO重启;给出完整MDP、命令和精度对照。
阅读本篇目录
本篇解决一个常见问题:作业到时限了,怎样接着算,并确认接上的是原来的动力学状态?先保留原目录及输出,再使用 CPT 续算。GRO 适合查看结构、传递结构和建模,不适合代替检查点。

1. 先准备水盒,再得到同一个生产起点#
在已经分配的单 GPU 任务环境中,资料包的准备命令是:
bash prepare.sh
脚本依次执行 gmx solvate、能量最小化、5 ps NVT,然后从平衡末态的 eq.gro 和 eq.cpt 生成生产 TPR。实际水盒边长 2.5 nm,510 个水分子、1530 个原子。初始构建的主要命令为:
gmx solvate -cs spc216.gro -box 2.5 2.5 2.5 \
-o start.gro -p topol.top
gmx grompp -f em.mdp -c start.gro -p topol.top -o em.tpr
gmx mdrun -deffnm em -ntmpi 1 -ntomp 2 -nb cpu -pme cpu
gmx grompp -f eq.mdp -c em.gro -p topol.top -o eq.tpr
gmx mdrun -deffnm eq -ntmpi 1 -ntomp 2 -nb gpu -pme gpu
gmx grompp -f md.mdp -c eq.gro -t eq.cpt \
-p topol.top -o full.tpr
gmx convert-tpr -s full.tpr -nsteps 5000 -o short.tpr
下载包的脚本还显式固定更新、键合计算和绑核方式,完整实际命令见 prepare_case.py。拓扑内容为:
#include "oplsaa.ff/forcefield.itp"
#include "oplsaa.ff/spce.itp"
[ system ]
SPC/E water checkpoint and layout example
[ molecules ]
SOL 510
这里刻意使用短时 NVE 作为续算对照:没有恒温/恒压器的额外状态,方便定位差异。并不代表一般生产计算都应采用本篇截断、时长和 NVE 设置。5 ps 平衡和 20 ps 轨迹不足以证明水的热力学或输运性质收敛;这里仅演示状态衔接与数值路径。
完整生产 md.mdp(20 ps)
integrator = md
dt = 0.002
nsteps = 10000
continuation = yes
tcoupl = no
pcoupl = no
gen-vel = no
comm-mode = Linear
nstcomm = 100
nstenergy = 100
nstcalcenergy = 100
nstlog = 1000
nstxout = 100
nstvout = 100
nstfout = 0
nstxout-compressed = 100
compressed-x-precision = 1000
cutoff-scheme = Verlet
nstlist = 20
verlet-buffer-tolerance = -1
rlist = 1.0
coulombtype = PME
rcoulomb = 0.8
vdwtype = Cut-off
vdw-modifier = Potential-shift
rvdw = 0.8
DispCorr = no
fourierspacing = 0.12
pme-order = 4
pbc = xyz
constraints = h-bonds
constraint-algorithm = lincs
lincs-order = 4
lincs-iter = 1
dt=0.002 单位是 ps,即 2 fs;10000 步为 20 ps。continuation=yes、gen-vel=no 保留原速度并避免重新施加初始约束。comm-mode=Linear 每 100 步去除整体平动。TRR 每 100 步写坐标和速度,XTC 同步写压缩坐标。Verlet 列表半径 1.0 nm、固定更新间隔是本组对照的控制条件;正式体系要重新检查截断、缓冲和能量漂移。
完整 5 ps 平衡 eq.mdp
integrator = md
dt = 0.002
nsteps = 2500
continuation = no
tcoupl = v-rescale
tc-grps = System
tau-t = 0.1
ref-t = 300
pcoupl = no
gen-vel = yes
gen-temp = 300
gen-seed = 2612101
ld-seed = 2612102
comm-mode = Linear
nstcomm = 100
nstenergy = 100
nstlog = 1000
nstxout = 0
nstvout = 0
nstfout = 0
nstxout-compressed = 0
cutoff-scheme = Verlet
nstlist = 20
verlet-buffer-tolerance = -1
rlist = 1.0
coulombtype = PME
rcoulomb = 0.8
vdwtype = Cut-off
vdw-modifier = Potential-shift
rvdw = 0.8
DispCorr = no
fourierspacing = 0.12
pme-order = 4
pbc = xyz
constraints = h-bonds
constraint-algorithm = lincs
lincs-order = 4
lincs-iter = 1
2. 连续 20 ps 与 10+10 ps 怎么运行#
资料包在独立目录保存所有分支。在分配好的任务里运行:
bash run.sh cpu-seed
bash run.sh cpu-full
bash run.sh cpu-append
cpu-seed 跑到 10 ps,cpu-full 连续跑到 20 ps,cpu-append 复制种子输出并用完整 TPR 续到 20 ps,原种子目录保留。CPU 对照使用同一可执行程序、相同线程数、-reprod、固定 PME 配置。实际追加的核心命令是:
gmx mdrun -deffnm md -cpi checkpoint10.cpt -append \
-ntmpi 1 -ntomp 1 -nb cpu -pme cpu -reprod \
-bonded cpu -update cpu -pin off -notunepme
md.tpr 已替换为 20 ps 的 TPR;checkpoint10.cpt 是独立保留的 10 ps 检查点。对于自己的原目录,延长总时长更直接:
cp md.cpt checkpoint-backup.cpt
gmx convert-tpr -s md.tpr -extend 10 -o extended.tpr
gmx mdrun -s extended.tpr -deffnm md -cpi md.cpt -append
最后一条仍须放在正常任务脚本中,并沿用原任务资源和加速选项。-extend 10 是增加 10 ps,不是把终点设置为 10 ps;也可以用 -until 指定最终时间。
3. 怎样确认续上了#
gmx dump -cp work/cpu-seed/md.cpt | head -35
gmx dump -cp work/cpu-append/md.cpt | head -35
gmx check -f work/cpu-append/md.trr
本例种子 step=5000, t=10,续算末态 step=10000, t=20,原子数都是 1530。追加后的 TRR 有 101 帧,时间 0–20 ps、间隔 0.2 ps。
独立读取原始 TRR 后,CPU 连续运行与追加续算的每一帧坐标、速度均完全相同。这个结论只属于本次固定 CPU 条件;改变线程数、MPI 规约、二进制程序、硬件或使用 GPU,不能要求逐位一致。

4. 为什么不要拿 GRO 代替 CPT#
资料包保留 cpu-gro-restart 作为精度对照:将 10 ps 的 GRO 作为新 TPR 输入,设置 init-step=5000、nsteps=5000,没有传入 -t checkpoint10.cpt。这是一条新的动力学轨迹,时间标签衔接并不等于状态精确衔接。
GRO 通常只保存小数点后三位 nm 坐标、四位 nm/ps 速度。本例首次状态相对检查点的坐标差不超过约 0.0005 nm、速度差约 0.00005 nm/ps,随后随动力学放大。由于 continuation=yes 跳过初始约束投影,四舍五入后的首帧 O–H 长度还会偏离刚性几何约 0.0014 nm;后续 SETTLE 步才重新满足刚性约束。

不要用重新生成速度来“修复续算”。CPT 还保存积分器、耦合器、能量历史等状态,GRO 不包含这些信息。保存检查点的同时也保留旧输出,才能继续安全追加。
TRR 中本例 leapfrog 积分器的速度为半步速度;不要直接拿一帧 TRR 速度计算的动能去要求等于原生 EDR 的整步动能。资料包用 EDR 的势能、动能、总能量和温度互相核对,同时独立比较相同时间的 TRR 状态。
官方说明:长任务、检查点与可复现性。
下载完整输入、实际检查点/轨迹、CSV和绘图脚本。资料包是本专题自己的 510 分子 SPC/E 水盒;与旧篇 884 分子 TIP3P 水盒不是同一个体系,不要互相混用 TPR、CPT 或拓扑。
解压进入资料包目录,先查看已经完成的结果:
bash analyze.sh
参考图片在 reference/figures,数据表在 reference/analysis。需要重新计算整套实例时,在新解压目录执行:
bash submit.sh
squeue -u "$USER"
脚本生成独立作业文件:先建模/平衡,再运行连续段和种子段;续算依赖相应种子作业成功,最后处理 work 目录。每个任务按实际秩数、线程数和 GPU 数申请资源;CPU 路径对照也申请 P100 任务资源,只让该任务的 CPU 核计算。没有覆盖既有工作目录的选项。单独复跑某个例子前,先确保前置任务已完成,且已通过调度分配足够资源。
环境为 GROMACS 2026.4,GNU 13.3、FFTW 3.3.10、CUDA 12.8,混合精度。单进程/线程版本使用 gromacs/2026.4-p100-threadmpi;真实 MPI 版本使用 gromacs/2026.4-p100-mpi-plumed,Open MPI 5.0.10,支持 GPU-aware MPI。本专题没有施加 PLUMED 偏置。CPU 路径结果由 P100 计算节点的 CPU 核获得,不是 Intel Xeon 8173M 性能测量。