GROMACS 分文件续算与轨迹拼接
实际演示校验保护、noappend续算、TRR/XTC和EDR合并,检查时间重复与边界帧。
阅读本篇目录
当原来的输出文件不完整、修改过,或者希望每段任务各存一套输出时,使用 -noappend。保留原检查点、原始轨迹和能量文件;不要为了消除报错而编辑检查点或拼接二进制文件。
1. 先理解默认追加的校验#
检查点保存了输出位置与校验信息。使用 -append 时,GROMACS 会检查原文件是否仍与检查点对应。本资料包的 cpu-checksum-noappend 只修改自己新复制的一份日志,用来观察保护行为;原种子日志保持不变。实际提示为:
Checksum wrong for 'md.log'. The file has been replaced or its contents have
been modified. Cannot do appending because of this condition.
这个控制例随后仍用原检查点,以 -noappend 输出独立的第二段,正常到达 20 ps。不要在自己的生产输出上照着破坏日志;遇到同类提示,先检查是不是换了目录、丢了文件、修改过文件或没有沿用 -deffnm。
2. 分文件续算怎么做#
资料包短命令:
bash run.sh cpu-seed
bash run.sh cpu-checksum-noappend
第二条是上述受控教学分支。真实任务里无需制造校验错误,可以直接在任务脚本中用:
gmx mdrun -deffnm md -cpi checkpoint10.cpt -noappend \
-ntmpi 1 -ntomp 1 -nb cpu -pme cpu -reprod \
-bonded cpu -update cpu -pin off -notunepme
本例 md.tpr 为 20 ps 的 TPR,输入检查点位于 10 ps。输出 md.part0002.trr、md.part0002.xtc、md.part0002.edr、md.part0002.log 和末态结构。检查点仍是 md.cpt;后续再续时以实际最新检查点为准,不要永远使用 10 ps 那份备份。
.part0002 表示段编号,不表示第 2 步或 2 ps。不同初始设置可能产生不同编号,先用 ls 确认。
3. 先查时间,再分别合并轨迹与能量#
在资料包根目录执行:
gmx check -f work/cpu-seed/md.trr
gmx check -f work/cpu-checksum-noappend/md.part0002.trr
第一段 0–10 ps、51 帧,第二段 10–20 ps、51 帧,两段包含相同时间的 10 ps 边界。分别合并:
gmx trjcat -f work/cpu-seed/md.trr \
work/cpu-checksum-noappend/md.part0002.trr -o joined.trr
gmx trjcat -f work/cpu-seed/md.xtc \
work/cpu-checksum-noappend/md.part0002.xtc -o joined.xtc
gmx eneconv -f work/cpu-seed/md.edr \
work/cpu-checksum-noappend/md.part0002.edr -o joined.edr
gmx check -f joined.trr
gmx check -f joined.xtc
printf 'Potential\nKinetic-En.\nTotal-Energy\nTemperature\nPressure\n0\n' | \
gmx energy -f joined.edr -o joined-energy.xvg
本例拼接后是 101 帧,0–20 ps,每 0.2 ps 一帧;不是将 51+51 直接视为 102 帧。gmx trjcat 用于轨迹,gmx eneconv 用于能量,不能用 shell 的 cat 拼接二进制文件。

本次默认调用中,trjcat 取后一段的重复轨迹帧,eneconv 取前一段的重复能量帧。GPU 重新开始计算时,同一个坐标帧的势能可因浮点归约略有不同,本例边界势能相差约 0.006 kJ/mol(整个水盒)。因此应核对时间和取帧规则,不要把轨迹帧与不同来源的边界能量强行当成逐位相同。CPU 固定设置的本例两种边界结果一致。
4. 如何拿到自己需要的轨迹#
检查无重复后可抽帧,例如每 1 ps 写一帧:
printf 'System\n' | gmx trjconv -s common/full.tpr \
-f joined.xtc -o every-1ps.xtc -dt 1
gmx check -f every-1ps.xtc
这会改变保存帧间隔,不会重新积分。若要计算速度相关函数、短时振动等依赖高时间分辨率的量,应先规划输出频率,不能指望稀疏 XTC 恢复速度。TRR 保存速度也不意味着它是检查点:完整续算仍优先使用 CPT。
本例 5 ps 平衡加 20 ps NVE 是操作示范。温度波动和能量漂移均保留在图中,不据此报告收敛的水性质;正式体系应检查能量漂移、截断/缓冲、约束和足够长的平衡采样。
下载完整输入、实际检查点/轨迹、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 性能测量。