CP2K线性标度SCF与纯化算法
用真实水分子比较SIGN、TC2、TRS4和矩阵过滤,提供完整输入、提交与全部能量力偶极结果。
阅读本篇目录
下载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结果比较。

本例使用 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官方手册。更多命令见输入检查与命令行工具。