CP2K力怎么核对:DEBUG有限差分与TEST入口
对2个Ar原子逐分量比较解析力、原生有限差分与独立LJ公式,同时给出TEST矩阵入口的真实操作。
阅读本篇目录
自定义势、单位转换或复杂输入出现可疑力时,可以用能量有限差分检查解析力。本篇用2个Ar原子的Lennard–Jones模型演示CP2K原生RUN_TYPE DEBUG,并说明另一个顶层TEST入口适合做什么。
1. 下载与看实际力#
下载本篇完整输入、实际结果与绘图资料包,保存为example.zip:
python3 -m zipfile -e example.zip .
cd cp2k-test-debug-example
bash results.sh
bash read.sh
bash plot.sh
这些命令先读取随包真实结果,CSV在data/,原生输出在reference-results/,生成的图在figures/。无需为看图重做计算。

2. 体系与关键参数#
两个Ar坐标为(0,0,0)和(4,1,0.5) Å,ε=119.8 K、σ=3.4 Å、截断12 Å。本例三个方向都有非零相互作用力,方便逐分量观察。
cat inputs/force-debug/input.inp
&GLOBAL
PROJECT Ar2-debug
RUN_TYPE DEBUG
PROGRAM_NAME CP2K
&END GLOBAL
&DEBUG
DEBUG_FORCES T
DEBUG_STRESS_TENSOR F
DX 0.0001
MAX_RELATIVE_ERROR 0.2
EPS_NO_ERROR_CHECK 1.0E-10
STOP_ON_MISMATCH T
&END DEBUG
&FORCE_EVAL
METHOD FIST
&MM
&FORCEFIELD
&CHARGE
ATOM Ar
CHARGE 0
&END CHARGE
&NONBONDED
&LENNARD-JONES
ATOMS Ar Ar
EPSILON 119.8
SIGMA [angstrom] 3.4
RCUT [angstrom] 12
&END LENNARD-JONES
&END NONBONDED
&SPLINE
EPS_SPLINE 1E-12
&END SPLINE
&END FORCEFIELD
&POISSON
&EWALD
EWALD_TYPE NONE
&END EWALD
&END POISSON
&END MM
&SUBSYS
&CELL
ABC 30 30 30
PERIODIC NONE
&END CELL
&COORD
Ar 0 0 0
Ar 4 1 0.5
&END COORD
&END SUBSYS
&END FORCE_EVAL
GLOBAL/RUN_TYPE DEBUG选择数值诊断;DEBUG_FORCES T检查力,DEBUG_STRESS_TENSOR F关闭本例未做的应力检查。DX 0.0001是程序原生位移增量,采用原子单位Bohr,不是0.0001 Å。
STOP_ON_MISMATCH T使超过设定相对误差的检查停止;EPS_NO_ERROR_CHECK避免极小解析分量的相对误差失去意义。不要只通过放宽误差或取消停止来处理真实不一致。
3. 提交#
使用集群cp2k/2026.2-8173m,Intel oneAPI 2024.2与Intel MPI构建,CPU路径。本包给出CPU整节点56核申请,MPI进程每个1线程。准备新计算时,在新解压目录执行:
sbatch run.slurm
任务结束后读取自己的输出:
bash read.sh work analysis-new
bash plot.sh analysis-new figures-new work
不要把实际计算直接放到登录节点。没有CPU资源时仍可先读已保存的结果。
本包2个MPI进程,各1线程。实际计算任务中的诊断命令是:
module load cp2k/2026.2-8173m
mpirun -np 2 cp2k.psmp -i input.inp > debug.out
4. 读取六个分量#
sed -n '/BEGIN OF SUMMARY/,/END OF SUMMARY/p' reference-results/force-debug/native.log
cat data/CP2K-Ar2-debug-forces.csv
f(numerical)来自能量差分,f(analytical)是解析力,单位Eh/Bohr。本例原生摘要保留8位小数,两个方法在打印精度内一致;不能因打印差为0就宣称误差数学上严格为0。打印的解析力与独立LJ公式最大差约4.42×10⁻⁹ Eh/Bohr。
用于DFT时还要保证位移前后SCF足够紧、网格与边界一致,避免把SCF噪声误判为力公式错误;差分位移过小或过大都可能影响结果。
5. TEST与DEBUG不是一回事#
TEST是另一类程序入口,本包实际执行官方矩阵乘法小输入:
cat inputs/matrix-test/input.inp
grep -E 'TESTING PARALLEL MATRIX|average cp_fm_gemm timing' reference-results/matrix-test/native.log
cat data/CP2K-internal-GEMM-times.csv
&GLOBAL
PRINT_LEVEL MEDIUM
PROGRAM_NAME TEST
PROJECT test_cp_fm_gemm_01
RUN_TYPE NONE
&TIMINGS
THRESHOLD 0.00000000001
&END TIMINGS
&END GLOBAL
&TEST
&CP_FM_GEMM
K 128
M 256
N 256
N_LOOP 10
TRANSA FALSE
TRANSB FALSE
&END CP_FM_GEMM
&CP_FM_GEMM
K 128
M 1024
N 256
N_LOOP 10
TRANSA FALSE
TRANSB FALSE
&END CP_FM_GEMM
&CP_FM_GEMM
K 128
M 512
N 256
N_LOOP 10
TRANSA TRUE
TRANSB FALSE
&END CP_FM_GEMM
&CP_FM_GEMM
K 128
M 512
N 256
N_LOOP 10
TRANSA FALSE
TRANSB TRUE
&END CP_FM_GEMM
&CP_FM_GEMM
K 128
M 512
N 256
N_LOOP 10
TRANSA TRUE
TRANSB TRUE
&END CP_FM_GEMM
&END TEST
它通过PROGRAM_NAME TEST调用内部矩阵运算测试,实际执行5种尺寸/转置组合,每种重复10次。相关计时仅是这个小任务的原生记录,不代表集群科学计算性能;普通DFT、MD和结构优化不需要加入TEST节。
输入树中出现TEST、DEBUG等顶层路径,只表示有对应输入入口。应按目的选择,而不是为了普通计算把所有节都加进去。