CP2K MetaD完整重启与输出整理
用400步加600步的真实续算演示原子、速度、恒温器与高斯历史的恢复,以及不同输出的时间对齐。
阅读本篇目录
MetaD续算需要延续高斯历史,同时恢复原子位置、速度和恒温器状态。只复制坐标,或者只把一份HILLS文本接到新任务前面,都不能替代完整的动力学续算。本篇使用与原生MetaD教程相同的真实Ar₂轨迹,演示完整检查点的使用。
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 先保存完整检查点#
示例开启原生重启输出:
&RESTART
BACKUP_COPIES 0
&EACH
MD 20
&END EACH
&END RESTART
这是MOTION/PRINT里的设置。计算完成后,standard-half-1.restart包含原子、速度、Nose恒温器与MetaD高斯历史。把这份完整文件与对应模型一并保存;正式任务应根据自己的恢复需求保留历史副本,不要照搬示例的BACKUP_COPIES 0当作备份策略。
3 从400步继续到1000步#
前半段运行400步,续算输入引用其检查点:
&EXT_RESTART
RESTART_FILE_NAME ../standard-half/standard-half-1.restart
RESTART_DEFAULT TRUE
&END EXT_RESTART
本例MD续算输入再设置STEPS 600,最终到第1000步。这里展示的是CP2K MD的400+600行为;不要把这个写法机械套用到其他软件或实时电子传播的步数定义上。
保持相同的原子顺序、力场、时间步长、CV、宽度、沉积周期、温度与恒温器参数。路径使用两个并列结果目录;不要将新输出直接写进旧目录覆盖历史文件。
4 实际对照结果#
一次连续1000步,与400步后从完整检查点继续600步,最终均得到50个高斯,末步距离为4.127451935 Å。本次输出精度下,拼接轨迹的全部原子坐标与连续轨迹一致;能量、力和高斯历史也逐项比较。

这说明这份小模型的完整续算操作可以复现对应连续轨迹,不代表任意并行数、软件版本或随机恒温器都保证长轨迹逐位相同。正式任务应先用小段续算检查时间、体系和偏置历史是否衔接。
python3 -c "import json; v=json.load(open('results/VALIDATION.json')); print([x for x in v['items'] if x['name'].startswith('full_vs_')])"
5 拼接时按实际时间对齐#
前半段MD坐标和能量记录第0–400步,共401帧;续算MD记录401–1000步,共600帧,直接按顺序接起来是1001帧。
但本版本续算的COLVAR还先记录一次400 fs检查点,因此COLVAR有601行。需要和续算MD坐标/能量逐行比较时,应按实际时间连接,保留400 fs这行作为起点记录,再对401–1000 fs比较;不能把第一个COLVAR值错误配给401 fs坐标。
附件将完整COLVAR保存在fields.npz的COLVAR_all_rows中,按MD时间对齐的部分另存为COLVAR_native。没有插值,也没有丢弃其他时间点。
6 检查高斯历史与原生工具输出#
不要仅检查最后一行坐标。至少确认总步数、时间步长、已有高斯数量,以及新增高斯的起始时间。附件对连续和续算的完整高斯位置、宽度、保存高度分别比较;graph.psmp读取的是完整重启文件,不依赖打印成五位小数的HILLS高度。
source env.sh
"$YS_PY" -c "import numpy as np; a=np.load('results/cases/standard/fields.npz'); b=np.load('results/cases/standard-resume/fields.npz'); print('hills:', len(a['hill_times_fs']), len(b['hill_times_fs'])); print('last step:', a['steps'][-1], b['steps'][-1])"
ls -lh results/cases/standard/native-fes.dat results/cases/well-tempered/native-fes.dat
修改CV定义或体系后,应建立新的采样任务,不能把原偏置历史当作通用启动文件。若目的是利用已有偏置进行固定偏置采样,也应明确采用对应输入,而不是把它与继续沉积高斯混称为同一种续算。
完整续算输入:
展开附件实际执行的standard-resume/input.inp
&GLOBAL
PROJECT standard-resume
RUN_TYPE MD
PRINT_LEVEL MEDIUM
SEED 20261109
&END GLOBAL
&EXT_RESTART
RESTART_FILE_NAME ../standard-half/standard-half-1.restart
RESTART_DEFAULT TRUE
&END EXT_RESTART
&MOTION
&MD
ENSEMBLE NVT
STEPS 600
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