CP2K专题

CP2K约束收敛与能量读取

区分电子SCF和电荷约束外循环,实际提取残差、最终能量与三组收敛曲线。

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

CDFT计算需要同时完成电子自洽和电荷约束。看到SCF run converged或程序正常结束,还要继续检查CDFT外循环是否达到目标,才能把它作为设定电荷条件的结果。

下载水二聚体CDFT输入、真实输出、分析脚本与数据图,解压进入run.sh目录。计算环境为CP2K2026.2 P100双精度,GNU13.3、MPICH5.0.1、CUDA12.9、OpenBLAS0.3.33、ScaLAPACK2.2.3;分析使用ASE3.29.0。

1 先做普通自洽,再做电荷约束#

sbatch submit.slurm

模板申请核时P100分区的一张GPU、4个CPU核。每个条件为一个MPI进程、4个OpenMP线程,先运行dimer-unconstrained得到自己这次计算的cdft-RESTART.wfn,再依次运行三个电荷目标,最后自动提取、画图和检查结果。

套餐用户用yskit生成所属分区脚本,在已分配的资源中执行bash run.sh。不要在登录节点运行计算。脚本只使用已分配CUDA_VISIBLE_DEVICES和CPU亲和范围;多卡时每卡一个任务,每任务4核,先完成共同的普通自洽,再分配三个约束目标。

inputs保存新输入,reference保存本文实算原始输入和输出,work保存新计算。已有work请重新解压,避免混用旧结果。下载包不含波函数;脚本现场生成前置文件。参考运行使用原子初猜,公开脚本进一步验证从新生成波函数继续计算,两种初猜均核对最终能量与约束值。

只算一个目标时,附上目录名;脚本仍自动完成其普通自洽前置步骤:

sbatch submit.slurm dimer-Ne8p1

2 在终端检查两层收敛#

grep -E 'SCF run converged|CDFT SCF iter|CDFT SCF loop|Current value|Target value|ENERGY\|' work/cases/dimer-Ne8p1/output.log

普通SCF输出对应给定约束乘子下的电子优化;CDFT SCF iter列出乘子外循环的约束残差和中间能量。本例必须出现CDFT SCF loop converged,并检查最后打印的Current value与Target value之差小于1E-5个电子。

如果出现CDFT SCF loop FAILED,先停止提取该目标物性,检查原子分组、电子目标、初始STRENGTH、电子收敛与约束优化设置,再重新计算。不要只因程序退出码为0就采用结果;分析脚本也会检查原生约束收敛行与数值残差。

3 实际残差与收敛曲线#

目录 目标价电子数 实际价电子数 片段净电荷/e 相对普通自洽能量/eV
dimer-Ne8p0 8.0 7.999995274 0.000004726 1.396342
dimer-Ne8p1 8.1 8.100009062 -0.100009062 0.244268
dimer-Ne8p2 8.2 8.199995467 -0.199995467 0.137525

三个实际约束目标的外循环残差,以及由实际片段电子数得到的净电荷

参考数据三个目标的残差均小于1E-5个电子。图中的迭代历史来自参考原子初猜;使用新生成波函数初猜复算时,迭代次数可以改变,比较的重点是最终目标是否满足、最终能量是否一致。这不是线程性能测试。

4 只读取约束收敛后的最终能量#

grep 'CDFT SCF loop' work/cases/dimer-Ne8p1/output.log
grep 'ENERGY|' work/cases/dimer-Ne8p1/output.log

CDFT中间优化的是带约束乘子项的泛函,中间某一步的能量可能低于普通自洽能量,也可能上下变化;不能把所有中间值里最低的一个拿来当成最终约束态能量。

本例从约束收敛后打印的ENERGY| Total FORCE_EVAL读取Hartree总能,与同一输入设置的普通自洽结果相减,再乘ASE的Hartree常数换成eV。片段电荷按8−N计算,两个量不要混用单位。

5 用于自己的片段#

先确定总体系的元素、赝势价电子数、总电荷与自旋,再在XYZ中找到片段原子编号,更新ATOM_GROUP;按当前权重定义把希望的片段净电荷换成TARGET。先完成不带约束的自洽作为基准,随后从该波函数施加约束并检查两层收敛,最后比较固定几何下的电子能量。

若要研究电子转移或电化学,还需要按实际问题补充不同约束态、核构型、环境、采样及相应理论定义。这里的三个固定结构电子约束例子提供操作参考,不代替溶液自由能、耦合矩阵元或电极电势计算。

提取与重画#

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

CSV记录目标电子数、实际电子数、片段净电荷、残差、最终总能和相对普通自洽的能量差。JSON还保存CDFT外循环历史。看本文参考数据时,把work改成reference;比较图需要完整三个目标。

约束外循环参数见CP2K CDFT OUTER_SCF;完整输入与TARGET解释见片段电荷实操。

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

查看配图

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

100%查看原图 ↗