GPUMD 联用 PLUMED:偏置轨迹重加权
从真实谐偏置 COLVAR 出发,使用 READ、REWEIGHT_BIAS、AVERAGE 和 HISTOGRAM,得到权重、分布及自由能曲线。
阅读本篇目录
距离与谐偏置改变了两个 Si 原子距离的采样分布。本篇用实际 COLVAR 说明怎样去除固定谐偏置的统计影响,并解释为什么重加权后仍需要检查采样覆盖。
下载输入、真实 COLVAR、轨迹和完整后处理程序。本例 300 K、Si64,每种显卡各有一条 2 ps 谐偏置轨迹;固定舍去前 0.5 ps,保留 500–2000 fs 的 601 行样本。
1 先运行完整后处理#
在资料包根目录执行:
bash view.sh
head analysis/p100/reweight/REWEIGHT
head analysis/p100/reweight-independent.csv
head analysis/p100/reweight/histogram.dat
head analysis/p100/reweight/fes-reweighted.dat
核心文件如下:
| 文件 | 内容 |
|---|---|
COLVAR-selected |
从真实 COLVAR 按固定时间范围选出的 601 行 |
REWEIGHT |
读入距离、偏置能、对数权重和累计加权均值 |
histogram.dat |
PLUMED 原生加权核密度网格 |
fes-reweighted.dat |
概率网格转换出的自由能估计 |
reweight-independent.csv |
原生权重与独立公式计算结果的对照 |
2 固定偏置的权重怎么理解#
对于本例固定偏置 V(d),相对无偏系综的权重为:
w_i = exp(+V_i / kBT)
weighted_mean(d) = sum(w_i × d_i) / sum(w_i)
符号是 正号。偏置使某些构型较少出现,重加权时要相应增大它们在统计中的权重。实际程序通常保存对数权重,再减去最大对数权重后求指数,避免溢出;共同乘一个常数不会改变归一化后的分布和均值。
本例温度 300 K,kBT 约 0.025852 eV。数据、偏置、温度必须使用一致单位;不要把 kJ/mol 的偏置能直接放入 eV 的分母。
这个公式用于本篇固定谐偏置。时间相关的 MetaD/WTMetaD 需要相应的偏置历史、归一化和重加权方法,不要只把 r.bias 改成 m.bias 就照搬。
3 完整的 PLUMED 后处理输入#
资料包自动生成下面的 reweight.dat:
UNITS LENGTH=A TIME=fs ENERGY=eV
x: READ FILE=COLVAR-selected VALUES=d IGNORE_TIME
b: READ FILE=COLVAR-selected VALUES=r.bias IGNORE_TIME
rw: REWEIGHT_BIAS ARG=b.bias TEMP=300
av: AVERAGE ARG=x LOGWEIGHTS=rw
h: HISTOGRAM ARG=x GRID_MIN=2.20 GRID_MAX=2.55 GRID_BIN=175 BANDWIDTH=0.005 LOGWEIGHTS=rw NORMALIZATION=true
f: CONVERT_TO_FES GRID=h TEMP=300 MINTOZERO
PRINT ARG=x,b.bias,rw,av STRIDE=1 FILE=REWEIGHT FMT=%24.16e
DUMPGRID GRID=h FILE=histogram.dat FMT=%24.16e
DUMPGRID GRID=f FILE=fes-reweighted.dat FMT=%24.16e
READ VALUES=r.bias 会生成带分量名的 b.bias,后面应写 ARG=b.bias。rw 是对数权重 V/kBT;传给 LOGWEIGHTS,不要再把它当作普通权重。
BANDWIDTH=0.005 控制核密度平滑宽度,单位 Å。平滑只能让已有样本的分布更连续,不能增加新的采样状态。
4 使用 driver,时间单位要写对#
在新的后处理目录中放好 COLVAR-selected 和上面的输入,再执行:
source /etc/profile
module load gpumd/5.9.1-p100
PLUMED="$GPUMD_PLUMED_ROOT/bin/plumed"
"$PLUMED" driver --noatoms --plumed reweight.dat \
--timestep 0.0025 --initial-step 200
这里不读原子轨迹,因为距离和偏置能已从真实 COLVAR 读入。IGNORE_TIME 让 READ 每次按一行顺序读取,时间轴则由 driver 设置。
driver 的 --timestep 使用 ps:0.0025 ps = 2.5 fs。配合 --initial-step 200,第一行对应 200×2.5=500 fs,后面一直到 2000 fs。这样也避免在第 0 步开始时,累计分析动作尚未纳入首个样本的情况。检查输出时间与原始选取时间一致后,再比较统计结果。
如果改了输出频率、起始时间或采样步长,应一起重新设置 driver 时间参数,不能只改 COLVAR 文件名。
5 实际结果:权重正确,不代表采样充分#
| 实际轨迹 | 谐偏置样本均值 / Å | 重加权均值 / Å | 权重 ESS |
|---|---|---|---|
| P100 | 2.386733 | 2.323066 | 64.06 |
| V100 16G | 2.385707 | 2.365678 | 308.76 |
两组均使用 601 行样本。原生加权均值与独立公式计算的最大差小于 2×10⁻¹⁵ Å;权重读取和计算一致。两条短轨迹重加权后却仍有明显差别,尤其 P100 轨迹中少量高权重样本占比较大。


ESS 的计算为 (sum w)^2 / sum(w^2),衡量权重是否集中。这一数值没有进一步扣除轨迹时间相关性,不能直接等同于独立构型数。两个显卡上的随机热浴轨迹也不是要求逐位相同的复算对照。
正式计算应增加平衡和采样时间、检查多个独立起点、分块统计,并考虑用多个有重叠的偏置窗口扩大覆盖。不要把本例任何一个重加权均值直接当作收敛键长。
6 自由能图中没有采到的部分怎么办#
CONVERT_TO_FES 计算 F=-kBT ln P,自由能零点可以整体平移。本版本的 MINTOZERO 会通过插值寻找最小值,所以输出网格中最小的采样点可能略高于零;这不影响自由能差。
对于 P=0 的网格,原生输出的自由能为无穷大。资料包绘图保留其“没有采样支持”的含义,遮蔽这些点,不把它们填成零或画成有限势垒。图中仅展示有概率支持的区间,并把显示网格的最低点移到零。
当前 2 ps 的结果只是重加权与绘图流程示例。权重公式不能找回从未访问的状态,也不能单凭平滑曲线认定 PMF、势垒或反应坐标已经收敛。
进一步说明见 REWEIGHT_BIAS、HISTOGRAM和 READ。