CP2K专题

CP2K力怎么核对:DEBUG有限差分与TEST入口

对2个Ar原子逐分量比较解析力、原生有限差分与独立LJ公式,同时给出TEST矩阵入口的真实操作。

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

自定义势、单位转换或复杂输入出现可疑力时,可以用能量有限差分检查解析力。本篇用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/。无需为看图重做计算。

六个实际力分量与独立LJ公式差值

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等顶层路径,只表示有对应输入入口。应按目的选择,而不是为了普通计算把所有节都加进去。

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

查看配图

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

100%查看原图 ↗