CP2K ELF、PDOS与电荷分区
用水分子真实网格读取电子密度和ELF,画原子kind投影谱,并比较两种Hirshfeld分区。
阅读本篇目录
用水分子真实网格读取电子密度和ELF,画原子kind投影谱,并比较两种Hirshfeld分区。
1. 下载实例,先提取再画图#
下载电子性质与局域轨道实操包,在新目录解压:
unzip cp2k-electronic-fields-wave294-*.zip
cd cp2k-electronic-fields-wave294
bash preview.sh
bash run.sh
preview/重画三张参考图,results/data/保存重新提取的数值,plots/保存重画结果;随包figures/可直接查看。输出目录受保护,再次运行请使用新解压目录。这里不重新运行DFT,只在已分配资源内使用1个CPU后处理。
原生计算用CP2K2026.2的CPU构建:Intel oneAPI2024.2、icx/icpx/ifx2024.2.1、Intel MPI2021.13、MKL2024.2,MPI+OpenMP。本例1个MPI进程、4个OpenMP线程。后处理用pymatgen/2026.9.24中的Python3.11、NumPy2.3.5、Matplotlib3.11.2。
reference/是实际CUBE及PDOS导出的自有数值,选定网格完整保留,没有抽样或人为归一化;不含程序、原始二进制WFN或完整运行日志。inputs/保留完整输入与原生PDOS数值,方便核对字段。
2. 请求密度、ELF和投影DOS#
在DFT的PRINT段加入下面内容:
&E_DENSITY_CUBE ON
STRIDE 2 2 2
&END E_DENSITY_CUBE
&ELF_CUBE ON
STRIDE 2 2 2
&END ELF_CUBE
&DOS ON
NLUMO 4
NDIGITS 10
&PDOS
COMPONENTS T
&END PDOS
&END DOS
&HIRSHFELD ON
SHAPE_FUNCTION DENSITY
&END HIRSHFELD
2026.2把投影PDOS放在DOS/PDOS内:NLUMO属于外层DOS,COMPONENTS属于内层PDOS。不能把旧版的整个&PDOS直接放到DFT/PRINT下。当前版本层级见CP2K DOS及PDOS。
本例4个占据空间轨道,再请求4个空轨道;不是4个电子。对角化时由SCF/ADDED_MOS提供空轨道。本例使用ADDED_MOS 4,每个占据轨道占据数2,总价电子数8。
3. 读取CUBE的单位和网格#
head -8 water-ELECTRON_DENSITY-1_0.cube
head -8 water-ELF_S1-1_0.cube
本例CUBE为75³输出网格,步长约0.302356 Bohr,即0.1600 Å。STRIDE 2是输出取样间隔,不是把DFT截断减半。电子密度单位e/Bohr³,积分要乘网格体积;若坐标改成Å,密度单位也要一起转换。
本例电子密度积分为 8.00154882 e,接近GTH价电子数8。它不含相同表示下的全部芯电子,不能与全电子水分子的10电子直接混为一谈。小偏差保留原值,没有将整幅数据强行缩放到8。

ELF是0到1的无量纲指标,不是电子密度,也不是直接的成键概率。图中两幅色标含义不同:左边是密度的log10,右边是ELF;采样面实际在x=6.0800 Å,原子位于x=6 Å。低密度真空有数值阈值处理,不应凭真空颜色判断电子成键。参阅官方ELF输出说明。
4. 从原生PDOS文件画出投影谱#
在资料包根目录:
head -8 inputs/water-BERRY-restart/water-k1-1.pdos
head -8 inputs/water-BERRY-restart/water-k2-1.pdos
head -5 results/data/BERRY-PDOS.csv
k1、k2在本例分别是O与H的原子kind,不是k点。H kind包含两个氢原子的投影;不能未经处理就当成单个H的投影。列头依次列出轨道编号、能量、占据、Total以及s/p/d分量,能量单位为a.u.,换成eV乘27.211386。
脚本把能量零点放在HOMO,并用0.15 eV高斯展宽画谱;每个空间轨道权重为1,两个kind的权重之和为1,再乘各自占据才能得到电子数。本例HOMO约−7.2004 eV;这些是Kohn–Sham轨道,不将空轨道能量或轨道差直接称为实验电子亲和能、光学激发能。

5. 电荷分区先说明参考形状#
默认SHAPE_FUNCTION GAUSSIAN与DENSITY使用不同参考形状,不是同一个结果换了显示方式。后者采用多个高斯展开的原子密度;可选设置见CP2K Hirshfeld。本例分别真实计算得到:
| 参考形状 | O/e | H1/e | H2/e | 原生打印Total/e |
|---|---|---|---|---|
| 默认Gaussian | −1.107 | +0.559 | +0.559 | +0.011 |
| Atomic-density | −0.305 | +0.152 | +0.152 | −0.000 |
这是分区电荷,不是原子的整数氧化态。默认Gaussian在本例保留了约0.011 e残差;不要把残差人为摊到各原子后冒充原始结果。逐原子数值只打印三位小数,总和列也独立打印,不能拿三位小数证明更高精度的电荷守恒。
cat results/data/water-Hirshfeld-charges.csv
更换体系时,保持方法、基组、赝势、参考形状一致,再比较相对变化;对带电、金属和强离域体系还要检查分区及网格敏感性。
准备自己的计算并提交#
本例水分子为PBE、DZVP-MOLOPT-SR-GTH/GTH-PBE、12 Å非周期立方盒、MT泊松边界;密度截断400 Ry、REL_CUTOFF=50 Ry、EPS_SCF=1E−6。先优化自己的结构,再请求单点性质;不要把非周期分子的MT设置直接套到周期晶体。
mkdir water-fields
cp inputs/water-BERRY-restart/input.inp water-fields/
cd water-fields
输入中的SCF_GUESS RESTART与WFN_RESTART_FILE_NAME seed.wfn用于读取同一结构、基组和赝势的已收敛波函数。将自己的匹配文件复制为seed.wfn。没有前置WFN时,可在这个新目录改成原子初猜:
sed -i 's/SCF_GUESS RESTART/SCF_GUESS ATOMIC/' input.inp
sed -i '/WFN_RESTART_FILE_NAME/d' input.inp
通过yskit选择CP2K2026.2对应的CPU模板,也可以复制公共模板;CPU分区须处于可用状态。MPI与线程数按模板分配,不混入其他MPI环境:
cp /public/slurm_scripts/hs_user/cp2k/2026.2/8173m/sub_cp2k_2026.2_8173m.sh .
sbatch sub_cp2k_2026.2_8173m.sh
grep 'SCF run converged' cp2k.out
tail -12 cp2k.out
ls *.cube *.pdos
模板的并行配置与本例1×4不同,输入模型不变;小分子不一定随核心数增加而加速。详细提交流程见CP2K入门。
完整输入#
以下原始输入也保留在资料包inputs/中。
water-BERRY-restart
&GLOBAL
PROJECT water
RUN_TYPE ENERGY_FORCE
PRINT_LEVEL MEDIUM
&END GLOBAL
&FORCE_EVAL
METHOD QS
&DFT
BASIS_SET_FILE_NAME BASIS_MOLOPT
POTENTIAL_FILE_NAME GTH_POTENTIALS
WFN_RESTART_FILE_NAME seed.wfn
&MGRID
CUTOFF 400
REL_CUTOFF 50
&END MGRID
&SCF
EPS_SCF 1.0E-6
MAX_SCF 120
ADDED_MOS 4
SCF_GUESS RESTART
&DIAGONALIZATION
ALGORITHM STANDARD
&END DIAGONALIZATION
&MIXING
METHOD PULAY_MIXING
ALPHA 0.3
NBUFFER 5
&END MIXING
&END SCF
&XC
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
&END XC
&POISSON
PERIODIC NONE
POISSON_SOLVER MT
&END POISSON
&LOCALIZE T
METHOD JACOBI
OPERATOR BERRY
EPS_LOCALIZATION 1E-8
MAX_ITER 5000
&PRINT
&WANNIER_CENTERS ON
IONS+CENTERS T
&END WANNIER_CENTERS
&WANNIER_SPREADS ON
&END WANNIER_SPREADS
&WANNIER_CUBES ON
STRIDE 2 2 2
&END WANNIER_CUBES
&TOTAL_DIPOLE ON
&END TOTAL_DIPOLE
&END PRINT
&END LOCALIZE
&PRINT
&E_DENSITY_CUBE ON
STRIDE 2 2 2
&END E_DENSITY_CUBE
&ELF_CUBE ON
STRIDE 2 2 2
&END ELF_CUBE
&DOS ON
NLUMO 4
NDIGITS 10
&PDOS
COMPONENTS T
&END PDOS
&END DOS
&HIRSHFELD ON
&END HIRSHFELD
&MULLIKEN ON
&END MULLIKEN
&MOMENTS ON
PERIODIC F
MAX_MOMENT 1
&END MOMENTS
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 12 12 12
PERIODIC NONE
&END CELL
&COORD
O 6.000 6.000 6.000
H 6.000 6.757 6.587
H 6.000 5.243 6.587
&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
water-Hirshfeld-density
&GLOBAL
PROJECT water
RUN_TYPE ENERGY_FORCE
PRINT_LEVEL MEDIUM
&END GLOBAL
&FORCE_EVAL
METHOD QS
&DFT
BASIS_SET_FILE_NAME BASIS_MOLOPT
POTENTIAL_FILE_NAME GTH_POTENTIALS
WFN_RESTART_FILE_NAME seed.wfn
&MGRID
CUTOFF 400
REL_CUTOFF 50
&END MGRID
&SCF
EPS_SCF 1.0E-6
MAX_SCF 120
ADDED_MOS 4
SCF_GUESS RESTART
&DIAGONALIZATION
ALGORITHM STANDARD
&END DIAGONALIZATION
&MIXING
METHOD PULAY_MIXING
ALPHA 0.3
NBUFFER 5
&END MIXING
&END SCF
&XC
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
&END XC
&POISSON
PERIODIC NONE
POISSON_SOLVER MT
&END POISSON
&PRINT
&HIRSHFELD ON
SHAPE_FUNCTION DENSITY
&END HIRSHFELD
&MULLIKEN ON
&END MULLIKEN
&MOMENTS ON
PERIODIC F
MAX_MOMENT 1
&END MOMENTS
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 12 12 12
PERIODIC NONE
&END CELL
&COORD
O 6.000 6.000 6.000
H 6.000 6.757 6.587
H 6.000 5.243 6.587
&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