CP2K专题

CP2K相关方法力的差分核对

固定整体位置,只移动H1-z,自动生成两种步长的正负位移并核对真实能量斜率。

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

检查解析力时,可以把原子向正、负方向各移动一点,计算总能量斜率。本篇实际使用0.002和0.001 Å两个步长,核对同一水分子H1的z分量。

下载解析力、两组位移输入、实际日志与工具脚本,解压进入run.sh目录。CP2K2026.2 P100双精度:GNU13.3、MPICH5.0.1、CUDA12.9、OpenBLAS0.3.33、ScaLAPACK2.2.3;分析ASE3.29.0。

1 从输入生成到提交#

python3 make_displacements.py
sbatch submit.slurm

make_displacements.py从两个基准输入生成8个正负位移输入,只移动指定原子,不重新居中。run.sh也会自动调用它;模板默认完成10次运行:RI-MP2与Minimax RI-RPA各一次解析力,加上每种方法两种步长的正负位移单点。

模板为核时P100分区,一GPU一CPU,每个条件一个MPI与一个OpenMP线程。套餐用户用yskit生成所属分区脚本,在已分配资源中保留bash run.sh。多卡仅使用已经分配的可见GPU/CPU亲和范围,每卡一个任务,空闲卡接下一项;不自动申请资源。不要在登录节点计算,已有work重新解压。

inputs是新计算输入;reference是本文实际原始输出;work是新结果。只运行一个条件可在sbatch后附CASES.json中的名称,例如:

sbatch submit.slurm water-mp2-force

单条件只输出自己的数据;完整力图和差分对照需要整组。

2 位移前先固定整体位置#

本例基准XYZ已经写入固定的居中坐标,TOPOLOGY中不再使用CENTER_COORDINATES。CP2K这个自动居中功能依据包围盒中点;改变一个原子后,包围盒中点可能改变,其他原子也随之平移。

要核对“只移动H1-z”的导数,就应只改变这一坐标,保持其他原子和晶胞不变。make_displacements.py从固定基准复制结构、修改指定原子分量,并保留同一方法的其余数值设置。

ASE/脚本索引从0开始,H1是atom_index=1,z是axis=2。CASES.json记录每个目录的正负位移;修改原子/分量时先检查XYZ顺序,再重新生成整套输入。

3 一个正位移单点的完整输入#

完整input.inp:water-mp2-plus#

&GLOBAL
  PRINT_LEVEL MEDIUM
  PROJECT RI_MP2_H2O
  RUN_TYPE ENERGY
  &TIMINGS
    THRESHOLD 0.01
  &END TIMINGS
&END GLOBAL

&FORCE_EVAL
  METHOD Quickstep
  &DFT
    BASIS_SET_FILE_NAME ../DATA/HFX_BASIS
    POTENTIAL_FILE_NAME ../DATA/POTENTIAL
    &MGRID
      CUTOFF 300
      REL_CUTOFF 50
    &END MGRID
    &POISSON
      PERIODIC NONE
      POISSON_SOLVER WAVELET
    &END POISSON
    &QS
      EPS_DEFAULT 1.0E-12
      EPS_PGF_ORB 1.0E-18
      METHOD GPW
    &END QS
    &SCF
      EPS_SCF 1.0E-7
      MAX_SCF 100
      SCF_GUESS ATOMIC
    &END SCF
    &XC
      &HF
        FRACTION 1.0000000
        &SCREENING
          EPS_SCHWARZ 1.0E-8
              EPS_SCHWARZ_FORCES 1.0E-8
          SCREEN_ON_INITIAL_P FALSE
        &END SCREENING
      &END HF
      &WF_CORRELATION
        &CANONICAL_GRADIENTS
          EPS_CANONICAL 1.0E-7
          FREE_HFX_BUFFER FALSE
          &CPHF
            EPS_CONV 1.0E-8
            MAX_ITER 50
          &END CPHF
        &END CANONICAL_GRADIENTS
        MEMORY 200.
        NUMBER_PROC 1
        &INTEGRALS
          &WFC_GPW
            CUTOFF 300
            EPS_FILTER 1.0E-8
            EPS_GRID 1.0E-8
            REL_CUTOFF 50
          &END WFC_GPW
        &END INTEGRALS
        &RI_MP2
        &END RI_MP2
      &END WF_CORRELATION
      &XC_FUNCTIONAL NONE
      &END XC_FUNCTIONAL
    &END XC
  &END DFT
  &SUBSYS
    &CELL
      ABC [angstrom] 14.0 14.0 14.0
      PERIODIC NONE
    &END CELL
    &KIND H
      BASIS_SET DZVP-GTH
      BASIS_SET RI_AUX RI_DZVP-GTH
      POTENTIAL GTH-HF-q1
    &END KIND
    &KIND O
      BASIS_SET DZVP-GTH
      BASIS_SET RI_AUX RI_DZVP-GTH
      POTENTIAL GTH-HF-q6
    &END KIND
    &TOPOLOGY
      COORD_FILE_FORMAT xyz
      COORD_FILE_NAME H2O_gas.xyz
    &END TOPOLOGY
  &END SUBSYS
  &PRINT
    &FORCES ON
    &END FORCES
  &END PRINT
&END FORCE_EVAL

基准force目录求解析力;位移目录用RUN_TYPE ENERGY求总能,用于构造斜率。这里保留相同的方法参数,梯度求解设置只在请求力时使用。

4 中心差分与单位#

Fz≈−[E(z+δ)−E(z−δ)]/(2δ)。本例能量原生为Hartree,位移为Å,所以计算能量差分时乘Hartree到eV即可得到eV/Å;对比的解析力原生为Hartree/Bohr,则需要同时换算长度。

grep 'ENERGY|' work/cases/water-mp2-minus/output.log
grep 'ENERGY|' work/cases/water-mp2-plus/output.log
grep 'ENERGY|' work/cases/water-rpa-minus-001/output.log
grep 'ENERGY|' work/cases/water-rpa-plus-001/output.log

分析脚本读取完整总能,包含该方法的相关项;不只用SCF参考能来对比完整相关力。

5 实际结果#

方法 位移/Å 解析力/eV·Å⁻¹ 能量差分力/eV·Å⁻¹ 解析−差分/eV·Å⁻¹
MP2 0.002 0.029697650 0.029696126 1.524E-06
MP2 0.001 0.029697650 0.029686509 1.114E-05
RPA 0.002 0.381219741 0.381215036 4.705E-06
RPA 0.001 0.381219741 0.381194163 2.558E-05

实际解析力与两种步长的差分值,以及两者之差;差值不是方法相对真实体系的误差条

本例两个步长下均吻合到约3E-5 eV/Å以内;0.001 Å反而比0.002 Å的数值差略大。位移变小时,有限电子求解和能量打印等噪声也更容易被除法放大,不能只认为步长越小必然越好。

这是当前固定输入中一个力分量的一致性检查,不替代轨道/RI基组、积分网格、盒长、电子收敛和其他力分量的检查,也不表示新的方法已经得到优化结构。

6 换成自己的体系#

先更新两个方法的基准XYZ与KIND、赝势和电荷设置,确认整体位置固定;再检查CASES.json中的原子编号、分量与步长,运行make_displacements.py,最后提交。每对正负位移都用相同方法与数值参数,不在位移之间重新优化其余原子。

提取与重画#

module load ase/3.29.0
python analyze.py work
python plot_results.py work
python check_results.py work
cat work/analysis/force-check.csv
ls work/figures

CSV包含方法、位移步长、解析力、差分力和两者之差,力单位eV/Å;JSON还保存三个原子的完整力向量。看本文数据时将work改成reference。

基准输入与解析力读取见MP2与RPA解析力。

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

查看配图

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

100%查看原图 ↗