CP2K原生MetaD与高斯偏置
用真实Ar2计算操作普通与Well-Tempered MetaD,解释CV单位、高斯高度和原生graph后处理。
阅读本篇目录
两个Ar原子的小模型可以帮助理解CV、高斯偏置与输出文件,不必先等待一段昂贵的第一性原理轨迹。本篇使用实际运行的CP2K FIST/Lennard–Jones模型,说明原生普通MetaD和Well-Tempered MetaD怎么设置、怎么检查、怎样调用配套工具画图。
1 下载与运行#
下载原生MetaD完整操作包,保存为cp2k-metadynamics.zip。普通作业解压后可执行sbatch job.slurm;以下命令用于已经分配的CPU资源内。
python3 -m zipfile -e cp2k-metadynamics.zip .
cd cp2k-metadynamics
bash setup.sh
bash run.sh
bash verify.sh
bash plot.sh
脚本依次运行无偏置、普通MetaD、Well-Tempered MetaD、400步前半段与600步续算,再调用原生graph.psmp处理检查点。结果在results/cases/,图片在plots/。使用CP2K2026.2 CPU模块cp2k/2026.2-8173m,Intel ifx2024.2.1、IntelMPI2021.13、MKL2024.2;1个MPI进程、1线程,分析脚本使用集群已有Python/NumPy环境。
2 先选CV,再设置偏置#
模型为非周期Ar₂,初始距离3.82203 Å;LJ参数ε=119.8 K、σ=3.405 Å、截断7.5 Å,截断处平移能量。NVT、10 K、Nose恒温,1 fs步长,共1000步,即1 ps。这个短小轨迹用来演示操作,不用于给出收敛自由能。
CV定义在FORCE_EVAL/SUBSYS中:
&COLVAR
&DISTANCE
ATOMS 1 2
&END DISTANCE
&END COLVAR
这里按输入顺序从1编号,选两个原子的距离。MOTION/FREE_ENERGY引用同一个CV:
&FREE_ENERGY
METHOD METADYN
&METADYN
DO_HILLS TRUE
NT_HILLS 20
WW 0.000002
&METAVAR
COLVAR 1
SCALE 0.2
&END METAVAR
&END METADYN
&END FREE_ENERGY
NT_HILLS 20表示每20步加一次高斯,本例相隔20 fs。WW用Hartree,2×10⁻⁶ Ha约为0.054423 meV。距离CV的SCALE在这里用Bohr,0.2 Bohr约0.105835 Å;它不是0.2 Å。换成角度、配位数等CV时,还要按对应CV单位解释宽度。
3 Well-Tempered设置#
在同一METADYN中增加:
WELL_TEMPERED TRUE
DELTA_T 40
实际MD温度10 K,ΔT=40 K,对应γ=(T+ΔT)/T=5。后续高斯在已填充区域的实际增量会减小。ΔT是调节偏置沉积的温度参数,不是把原子温度改成40 K。
本版本检查点保存的Well-Tempered高斯高度还包含自由能估计的缩放。本例保存高度/实际偏置高度=γ/(γ−1)=1.25;直接求实际施加的偏置时,需要区分这个因子。附件保留两种高度并分别绘图。
4 实际轨迹与偏置#
| 计算 | 末步距离/Å | 沉积高斯数 |
|---|---|---|
| 普通MetaD | 4.127451935 | 50 |
| Well-Tempered MetaD | 4.119077426 | 50 |

图中原子轨迹、距离和偏置来自真实计算。普通与Well-Tempered在这个短时间内有不同偏置积累,但不能凭1 ps曲线宣布完成自由能收敛或证明某一种方法更快。
查看结果摘要:
python3 -c "import json; v=json.load(open('results/VALIDATION.json')); print(v['results'])"
5 用原生graph工具处理检查点#
run.sh已经实际调用graph.psmp -cp2k,读取完整精度的重启文件,输出各目录的native-fes.dat。图中横坐标由Bohr换算为Å,纵坐标从Hartree换为meV。
需要自己调用时,在某个结果目录使用如下形式;例如普通MetaD对应的检查点名为standard-1.restart:
graph.psmp -cp2k -file standard-1.restart -out my-fes.dat
附件还固定了网格、范围与高斯尾部截断参数,完整命令保存在GRAPH-EXECUTION.json。本例原生工具的201个网格点与独立高斯重建一致。
这里画的是有限时间的负累计高斯估计,不是已经收敛的物理自由能。 距离分布还涉及径向测度,CV不完整时也会遗漏慢自由度;不要直接把小模型曲线当成材料反应自由能台阶。
6 HILLS里为什么可能看到零#
CP2K2026.2非扩展拉格朗日模式的部分COLVAR/HILLS诊断输出只保留5位小数。本例2×10⁻⁶ Ha的高度会显示为0.00000,不代表程序没有加高斯。完整高度、位置和宽度保存在重启文件的SPAWNED_HILLS_*段中,原生graph可以直接读取。

head -n 5 results/cases/standard/HILLS.dat
head -n 5 results/cases/standard/native-fes.dat
ls -lh plots/metadynamics-trajectory-bias.png plots/metadynamics-heights-restart.png
不要根据舍入后的HILLS文本重新拼出精确偏置,再把舍入误差当成算法问题。需要续算时,继续阅读MetaD完整重启与输出整理。
完整普通MetaD输入#
展开附件实际执行的standard/input.inp
&GLOBAL
PROJECT standard
RUN_TYPE MD
PRINT_LEVEL MEDIUM
SEED 20261109
&END GLOBAL
&MOTION
&MD
ENSEMBLE NVT
STEPS 1000
TIMESTEP [fs] 1.0
TEMPERATURE 10
&THERMOSTAT
TYPE NOSE
&NOSE
TIMECON [fs] 100
&END NOSE
&END THERMOSTAT
&PRINT
&ENERGY
FILENAME =energy.dat
&EACH
MD 1
&END EACH
&END ENERGY
&END PRINT
&END MD
&FREE_ENERGY
METHOD METADYN
&METADYN
DO_HILLS TRUE
NT_HILLS 20
WW 0.000002
&METAVAR
COLVAR 1
SCALE 0.2
&END METAVAR
&PRINT
&COLVAR ON
FILENAME =COLVAR.dat
COMMON_ITERATION_LEVELS 1
&EACH
MD 1
&END EACH
&END COLVAR
&HILLS ON
FILENAME =HILLS.dat
COMMON_ITERATION_LEVELS 1
&END HILLS
&END PRINT
&END METADYN
&END FREE_ENERGY
&PRINT
&TRAJECTORY
FORMAT XYZ
FILENAME =trajectory.xyz
&EACH
MD 1
&END EACH
&END TRAJECTORY
&FORCES
FORMAT XYZ
UNIT hartree/bohr
FILENAME =forces.xyz
&EACH
MD 1
&END EACH
&END FORCES
&RESTART
BACKUP_COPIES 0
&EACH
MD 20
&END EACH
&END RESTART
&END PRINT
&END MOTION
&FORCE_EVAL
METHOD FIST
&MM
&FORCEFIELD
&SPLINE
EPS_SPLINE 1E-10
&END SPLINE
DO_ELECTROSTATICS .FALSE.
SHIFT_CUTOFF .TRUE.
&CHARGE
ATOM Ar
CHARGE 0.0
&END CHARGE
&NONBONDED
&LENNARD-JONES
ATOMS Ar Ar
EPSILON [K_e] 119.8
SIGMA [angstrom] 3.405
RCUT [angstrom] 7.5
&END LENNARD-JONES
&END NONBONDED
&END FORCEFIELD
&POISSON
&EWALD
EWALD_TYPE NONE
&END EWALD
&END POISSON
&END MM
&SUBSYS
&COLVAR
&DISTANCE
ATOMS 1 2
&END DISTANCE
&END COLVAR
&CELL
ABC 30 30 30
PERIODIC NONE
&END CELL
&COORD
Ar 10 10 10
Ar 13.82203 10 10
&END COORD
&TOPOLOGY
CONN_FILE_FORMAT OFF
&END TOPOLOGY
&END SUBSYS
&PRINT
&FORCES ON
&END FORCES
&END PRINT
&END FORCE_EVAL