PLUMED driver:离线重算与在线结果对照
用实际GROMACS轨迹重算距离、角度、配位数和偏置,讲清TRR、XYZ、单位与时间步长。
阅读本篇目录
plumed driver可以对已有轨迹重新计算集体变量,不必再跑一遍MD。本篇用水体系实操的真实轨迹,比较在线COLVAR、TRR离线结果和PLUMED直接保存的高精度XYZ结果。
1 最简单的完整复跑#
资料包保存为plumed-example.zip,解压后运行:
unzip plumed-example.zip -d plumed-replay
cd plumed-replay
bash run.sh
默认入口只分析包里已有的轨迹,不提交新作业,不重新执行MD。它加载plumed/2.9.4-gcc-openmpi5.0.10,再用现有qvasp Python环境的MDAnalysis、NumPy、Matplotlib完成独立分析和4张图。若使用自己的Python,可通过ANALYSISPY指定已具备上述包的环境。
head results/p100/OFFLINE
head results/p100/OFFLINE-XYZ
ls figures
需要在新目录执行;已有results时退出,以免覆盖。每种硬件来源的轨迹均为101帧,整包保留4,855项数值检查。
2 单独重算TRR#
在独立目录运行,输入路径按自己的文件位置修改:
module load plumed/2.9.4-gcc-openmpi5.0.10
plumed driver --plumed offline.dat --mf_trr run.trr --timestep 0.002 --trajectory-stride 1
offline.dat保留与在线相同的CV和偏置定义,把输出文件名改成OFFLINE,并移除再次输出坐标的DUMPATOMS,避免覆盖原坐标。
| 参数 | 本例怎么理解 |
|---|---|
--mf_trr |
使用当前构建支持的TRR读取入口 |
--timestep 0.002 |
原生MD每步0.002 ps |
--trajectory-stride 1 |
原轨迹每一步都保存 |
STRIDE=1 |
PLUMED的PRINT每一步输出 |
如果原模拟每100步才保存一帧,应相应使用--trajectory-stride 100,不能只把每帧当成0.002 ps。本例输入不使用质量或电荷加权的CV;计算COM、偶极等量时,driver还需要正确的质量和电荷来源,不能照抄缺省值。官方driver说明列出了这些输入条件。
3 重算高精度XYZ#
原生PLUMED使用下列设置保存前7个原子:
DUMPATOMS ATOMS=1-7 FILE=native-positions.xyz STRIDE=1 PRECISION=16 UNITS=nm
然后:
plumed driver --plumed offline-xyz.dat --ixyz native-positions.xyz --length-units nm --timestep 0.002 --trajectory-stride 1
XYZ里的坐标写成nm,读取时也显式指定nm。换成Å文件时,应使用对应长度单位,而不是把数值原样当成nm。原子编号仍须和CV定义一致:本例的所有CV只用前7个原子,所以可以读取这个子集;使用更大编号的CV时,要同步保存对应原子并处理编号映射。
4 为什么两个离线路线有小差异#

本次TRR读取链的距离最大差约1.64e-7 nm,二面角最大差约3.52e-6 rad,仍满足事先设置的比较尺度。PLUMED自己输出的高精度XYZ重算,与在线距离和二面角在本次打印精度下相同。图采用对称对数轴,保留0附近的线性区;不是给零误差人为填一个物理量。
单精度轨迹、读取插件中的单位转换和坐标舍入都可能影响重算。二面角两平面接近共线时,这种影响会被放大。不要因此改动CV定义后直接把新旧角度混在一起;本例最终在线和离线都采用相同的3,1,4,5顺序。
独立Python分析使用:
u = MDAnalysis.Universe('md.gro', 'run.trr', convert_units=False)
这样保留TRR原生nm单位,避免先转成Å再转回nm给浮点坐标增加舍入。独立距离、夹角、二面角、配位数和谐势能都与在线结果逐帧比较,结果在results/版本条件/independent.csv。P100、V100是数据来源条件名称,不是两种物理方法。
5 配位数的独立公式也要对版本#
输入为:
c: COORDINATION GROUPA=1 GROUPB=4,7 R_0=0.35 NN=6 MM=12
未经平移的有理函数可写作:
raw(r) = 1 / [1 + (r / 0.35)^6]
但本例实际使用的2.9.4构建,其简写接口会自动选择Dmax = 0.35 × (1e-5)^(-1/6),再进行平移、拉伸:
s(r) = [raw(r) - raw(Dmax)] / [1 - raw(Dmax)] (r <= Dmax)
s(r) = 0 (r > Dmax)
c = s(r_1,4) + s(r_1,7)
因此,直接把两个未经处理的raw相加,会有约2e-5的系统差别。本例独立分析按实际版本的实现处理,不通过放宽阈值抹掉差别。对应实现可查2.9.4 SwitchingFunction源码中的整数参数set入口;开关函数与显式SWITCH参数说明见官方说明。
6 最后得到什么#
OFFLINE和OFFLINE-XYZ分别对应两种读取路线;independent.csv来自独立几何与能量公式;VALIDATION.json保留逐帧差异;figures包含结构、曲线、精度和偏置力图。所有离线操作都复用同一批真实轨迹,不增加新的MD采样。
继续看谐偏置与原子力,了解--dump-forces与能量差分的用法。