GPUMD专题

GPUMD 联用 PLUMED:偏置轨迹重加权

从真实谐偏置 COLVAR 出发,使用 READ、REWEIGHT_BIAS、AVERAGE 和 HISTOGRAM,得到权重、分布及自由能曲线。

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

距离与谐偏置改变了两个 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 轨迹中少量高权重样本占比较大。

P100 真实谐偏置分布、重加权分布与有限采样范围内的自由能估计

V100 16G 对应分布与自由能估计

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。

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

查看配图

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

100%查看原图 ↗