CP2K约束收敛与能量读取
区分电子SCF和电荷约束外循环,实际提取残差、最终能量与三组收敛曲线。
阅读本篇目录
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解释见片段电荷实操。