CP2K专题

CP2K线性标度SCF与纯化算法

用真实水分子比较SIGN、TC2、TRS4和矩阵过滤,提供完整输入、提交与全部能量力偶极结果。

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

下载CP2K求解器、输入索引与真实结果包,在自己的工作目录操作:

module load pymatgen/2026.9.24
python -m zipfile -e cp2k-solver-tools-wave323.zip .
cd cp2k-solver-tools
bash run.sh

下载后将文件名改为 cp2k-solver-tools-wave323.zip,再解压。bash run.sh 读取已有结果并生成 results/、plots/,不重新做电子计算;输出目录应为新目录。包内有四份完整输入、四组原生数值、全部力/偶极分量和两个实际版本的输入索引。

1 先了解要比较什么#

LS-SCF直接迭代密度矩阵。普通水分子计算优先从单点与结构优化的OT流程入门;本例帮助你认识密度矩阵求解、纯化算法和过滤精度。能否体现线性标度,取决于体系尺寸、能隙、矩阵稀疏性及精度设置,三个原子的结果不能证明大体系加速。

真实模型是一个中性水分子:O—H为0.96 Å、H—O—H为104°,8个价电子,12 Å非周期盒,MT泊松边界;PBE、DZVP-MOLOPT-SR-GTH、GTH-PBE,网格600/50 Ry。四组只改变纯化方法或矩阵过滤阈值,与同一结构、同一哈密顿量的OT结果比较。

水分子结构与四组原生SCF能量历史

本例使用 cp2k/2026.2-p100:GNU 13.3、MPICH 5.0.1、CUDA 12.9、OpenBLAS 0.3.33、ScaLAPACK 2.2.3。一个MPI进程、两个OpenMP线程、一张P100。GPU构建不代表每个算法和每一段计算都在显卡上执行;这里展示可运行的求解路径,不据此给出GPU加速比。复跑这份LS输入请使用本节P100模块。

2 完整输入#

cases/SIGN-tight/input.inp:

&GLOBAL
 PROJECT response
 RUN_TYPE ENERGY_FORCE
 PRINT_LEVEL MEDIUM
&END GLOBAL
&FORCE_EVAL
 METHOD QS
 &DFT
  &PRINT
   &MOMENTS ON
    PERIODIC .FALSE.
    REFERENCE COM
   &END MOMENTS
  &END PRINT
  BASIS_SET_FILE_NAME DATA/BASIS_MOLOPT
  POTENTIAL_FILE_NAME DATA/GTH_POTENTIALS
  &QS
   EPS_DEFAULT 1.0E-12
   LS_SCF .TRUE.
  &END QS
  &MGRID
   CUTOFF 600
   REL_CUTOFF 50
  &END MGRID
  &SCF
   SCF_GUESS ATOMIC
  &END SCF
  &LS_SCF
   PURIFICATION_METHOD SIGN
   EPS_FILTER 1.0E-12
   EPS_SCF 1.0E-9
   EPS_LANCZOS 1.0E-5
   MAX_SCF 150
   LS_DIIS .TRUE.
   MIXING_FRACTION 0.3
   RESTART_READ .FALSE.
   RESTART_WRITE .FALSE.
  &END LS_SCF
  &XC
   &XC_FUNCTIONAL PBE
   &END XC_FUNCTIONAL
  &END XC
  &POISSON
   PERIODIC NONE
   POISSON_SOLVER MT
  &END POISSON
 &END DFT
 &SUBSYS
  &CELL
   ABC 12 12 12
   PERIODIC NONE
  &END CELL
  &COORD
  O 6.000000000000 6.000000000000 6.000000000000
  H 6.756490323462 6.000000000000 6.591035016313
  H 5.243509676538 6.000000000000 6.591035016313
  &END COORD
  &KIND O
   BASIS_SET DZVP-MOLOPT-SR-GTH
   POTENTIAL GTH-PBE-q6
  &END KIND
  &KIND H
   BASIS_SET DZVP-MOLOPT-SR-GTH
   POTENTIAL GTH-PBE-q1
  &END KIND
 &END SUBSYS
 &PRINT
  &FORCES ON
  &END FORCES
 &END PRINT
&END FORCE_EVAL

两个位置配合使用:DFT/QS/LS_SCF .TRUE. 选择LS求解;DFT/LS_SCF 设置该求解器。只写后一段而忘记QS开关,不是完整切换。

参数 本例值 修改时关注
PURIFICATION_METHOD SIGN 也可用TC2、TRS4;本例三种都实际计算
EPS_FILTER 1E-12 矩阵过滤精度;更宽松可能更稀疏,但会改变能量与力
EPS_SCF 1E-9 LS中按每电子总能变化判断;不要与OT的收敛指标直接当成同一种量
EPS_LANCZOS 1E-5 谱界估计精度,并非几何优化力阈值
LS_DIIS、MIXING_FRACTION TRUE、0.3 密度矩阵自洽混合;不等于给体系加电子
RESTART_READ/WRITE FALSE/FALSE 本例各条件独立开始;LS密度矩阵续算需相应文件,不能只改文件名

SCF_GUESS ATOMIC 只提供初始猜测。本例不同时保留OT子段。结构没有优化,最终仍存在力;力的对照用于检查算法数值,并非宣布结构稳定。

3 准备输入、提交与读结果#

bash prepare.sh
sbatch gpu.sh
squeue -u "$USER"

prepare.sh建立全新的 work/,从已加载模块的数据目录复制公开基组和GTH赝势,依次准备四组;gpu.sh顺序运行它们,避免同一张卡上无计划地重叠任务。要更换体系,先修改工作目录中的 input.inp,同时核对元素、价电子数、基组、周期性、盒长和方法适用条件。普通核时账户使用本包P100分区模板,套餐账户按自己的资源权限选相应模板。

grep "SCF run converged" work/SIGN-tight/output.log
grep "ENERGY|" work/SIGN-tight/output.log
grep "FORCES|" work/SIGN-tight/output.log
python verify.py --cases work --output my-results

最后一条对四组新输出读取完整能量、9个力分量和3个偶极分量;本包的比较基准是所附水分子,换了体系应更换基准,不能继续拿它判断新材料。原生力以Hartree/Bohr输出,脚本换成eV/Å;偶极矩以Debye输出。

4 实际得到的四组数值#

条件 迭代数 总能/Hartree 相对OT绝对能差/Hartree 最大力分量差/eV·Å⁻¹ 最大偶极分量差/D
SIGN,过滤1E-12 11 -17.219501090698962 2.35545E-12 8.11440E-6 7.79635E-9
TC2,过滤1E-12 11 -17.219501090699165 2.15294E-12 8.11440E-6 7.79635E-9
TRS4,过滤1E-12 11 -17.219501090699175 2.14229E-12 8.11440E-6 7.79636E-9
SIGN,过滤1E-6 11 -17.219501676052456 5.85351E-7 6.70544E-6 2.00000E-6

三种完整数值误差与固定比较精度

图中的虚线是本例对照使用的1E-6 Hartree、1E-4 eV/Å、1E-4 Debye标准。放宽过滤阈值后,本水分子的能差增大,但仍在这些范围内;不能据此推广出“所有体系1E-6过滤都够用”。对于自己的体系,应在同一结构上逐步收紧过滤,比较总能、力、偶极与矩阵非零比例,再选择可接受的精度。小体系稠密矩阵不体现稀疏方法的主要优势。

5 扩展到自己的体系#

先用可靠常规SCF获得小体系参考,再在同一坐标和物理参数下启用LS-SCF;依次比较SIGN/TC2/TRS4和过滤精度,最后才扩大体系。金属、小能隙、复杂自旋和温度占据不能照搬这个闭壳层水例。选择PEXSI等外部求解器前,要另核对对应依赖和输入条件。

参数含义见CP2K LS_SCF官方手册,开关位置见QS官方手册。更多命令见输入检查与命令行工具。

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

查看配图

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

100%查看原图 ↗