CP2K片段、幽灵基组与BSSE校正
用四组真实水二聚体计算操作原生BSSE流程,读出五种基组配置、校正能与相互作用能。
阅读本篇目录
计算分子吸附、氢键或非共价结合时,两个片段会借用对方的基函数,使有限基组下的相互作用偏强。CP2K原生 RUN_TYPE BSSE 可以在同一几何上计算片段、幽灵基组和完整复合物,获得counterpoise校正。本例实际计算两种基组、两个间距,共四组BSSE流程。
1 下载、先读真实结果#
下载水二聚体BSSE完整输入、20个片段能量与绘图包,将文件名改为 cp2k-BSSE-wave324.zip:
module load pymatgen/2026.9.24
python -m zipfile -e cp2k-BSSE-wave324.zip .
cd cp2k-bsse
bash run.sh
results/rows.json保存相互作用能、校正能及五个配置的完整数值;results/energies.csv列出20个原生SCF能量;plots/生成两张结构/数据图。读取已有结果不重新计算电子结构,输出目录需为新目录。
2 五个配置分别算了什么#

实心点包含原子核、电子和基组;空心点只放基函数。幽灵基组不会增加另一个水分子的核电荷和电子数,不能用“删掉原子坐标”替代。
| CP2K配置 | 真实片段 | 使用的基组 | 价电子数 | 能量记号 |
|---|---|---|---|---|
| CONF 10 / SUBCONF 10 | A | A自身 | 8 | E_A(A) |
| CONF 01 / SUBCONF 01 | B | B自身 | 8 | E_B(B) |
| CONF 11 / SUBCONF 10 | A | A+B,B为ghost | 8 | E_A(AB) |
| CONF 11 / SUBCONF 01 | B | A+B,A为ghost | 8 | E_B(AB) |
| CONF 11 / SUBCONF 11 | A+B | A+B | 16 | E_AB(AB) |
未校正相互作用能为 E_AB(AB) - E_A(A) - E_B(B);CP校正后改为 E_AB(AB) - E_A(AB) - E_B(AB)。两者之差是本例报告的BSSE校正能,通常为正,使相互作用不再过度负向。
每个单体都保留二聚体中的几何。因此这里计算的是固定几何相互作用能;若分别优化孤立单体,还需要考虑形变能。它也不包含零点振动、热力学、熵或溶液校正,不能直接叫作结合自由能。
3 完整结构与输入#
3.2 Å条件的 geometry.xyz:
6
Fixedmonomergeometry; waterdimer O-O 3.2 Angstrom
O 8.000000000000000 8.000000000000000 6.000000000000000
H 8.000000000000000 8.000000000000000 6.970101302545075
H 7.999999851221545 7.059423260433508 5.762488033741113
O 8.000000000000000 8.000000000000000 9.200000000000001
H 8.000000003400000 8.765345449000000 9.796106434200000
H 7.999999851999999 7.234654621300000 9.796106524400001
前3个原子是A片段,后3个为B片段。另一间距通过整体平移B到O—O=5.0 Å得到,单体内部坐标不变。
cases/DZVP-R3.2/input.inp:
&GLOBAL
PROJECT water
RUN_TYPE BSSE
PRINT_LEVEL MEDIUM
&END GLOBAL
&FORCE_EVAL
METHOD QS
&BSSE
&FRAGMENT
LIST 1 2 3
&END FRAGMENT
&FRAGMENT
LIST 4 5 6
&END FRAGMENT
&END BSSE
&DFT
BASIS_SET_FILE_NAME DATA/BASIS_MOLOPT
POTENTIAL_FILE_NAME DATA/GTH_POTENTIALS
&QS
EPS_DEFAULT 1.0E-12
&END QS
&MGRID
CUTOFF 400
REL_CUTOFF 50
&END MGRID
&SCF
EPS_SCF 1.0E-8
MAX_SCF 200
SCF_GUESS ATOMIC
&OT
MINIMIZER DIIS
PRECONDITIONER FULL_SINGLE_INVERSE
&END OT
&END SCF
&XC
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
&END XC
&POISSON
PERIODIC NONE
POISSON_SOLVER MT
&END POISSON
&END DFT
&SUBSYS
&CELL
ABC 16 16 16
PERIODIC NONE
&END CELL
&TOPOLOGY
COORD_FILE_NAME geometry.xyz
COORD_FILE_FORMAT XYZ
&END TOPOLOGY
&KIND O
BASIS_SET DZVP-MOLOPT-GTH
POTENTIAL GTH-PBE-q6
&END KIND
&KIND H
BASIS_SET DZVP-MOLOPT-GTH
POTENTIAL GTH-PBE-q1
&END KIND
&KIND H_ghost
ELEMENT H
BASIS_SET DZVP-MOLOPT-GTH
GHOST .TRUE.
&END KIND
&KIND O_ghost
ELEMENT O
BASIS_SET DZVP-MOLOPT-GTH
GHOST .TRUE.
&END KIND
&END SUBSYS
&PRINT
&FORCES ON
&END FORCES
&END PRINT
&END FORCE_EVAL
FRAGMENT/LIST按坐标文件中的原子序号分组,不是按元素种类分组。每个真实KIND都配相应的 X_ghost,并保持相同基组,ghost中不写真实赝势。这里两个片段均为中性闭壳层;有电荷、自由基或不同自旋时,还应按CONFIGURATION官方手册分别配置组合的电荷和多重度,不能沿用本例默认值。
四组均为PBE/GTH-PBE、400/50 Ry、16 Å非周期盒、MT泊松边界,EPS_SCF=1E-8。只改基组和片段间距;没有加D3,不能把本结果与另一个加D3的二聚体直接相减来代表BSSE。
4 在集群提交#
本例使用 cp2k/2026.2-p100,GNU13.3、MPICH5.0.1、CUDA12.9、OpenBLAS0.3.33;一个MPI进程、两个OpenMP线程和一张P100。新计算时:
bash prepare.sh
sbatch gpu.sh
squeue -u "$USER"
prepare.sh创建新的 work/,复制输入、坐标和当前模块的公开基组/赝势数据。批处理顺序运行四个条件。套餐账户按自己的资源权限选择对应提交模板,保持CP2K版本、P100构建和进程/线程配套。
grep "BSSE CALCULATION" work/DZVP-R3.2/output.log
grep "SCF run converged" work/DZVP-R3.2/output.log
grep "BSSE-free interaction" work/DZVP-R3.2/output.log
tail -12 work/DZVP-R3.2/output.log
一组应有五个配置、五次收敛的SCF,以及正常结束信息。只看到最后的BSSE摘要不足以判断前面每个片段都已收敛。
5 四组真实数值#
| 基组 | O—O/Å | 未校正相互作用/eV | CP校正相互作用/eV | BSSE校正/meV |
|---|---|---|---|---|
| DZVP-MOLOPT-GTH | 3.2 | -0.1763018843 | -0.1674793192 | 8.822565 |
| DZVP-MOLOPT-GTH | 5.0 | -0.0344234618 | -0.0330900384 | 1.333423 |
| TZVP-MOLOPT-GTH | 3.2 | -0.1726036466 | -0.1663541761 | 6.249470 |
| TZVP-MOLOPT-GTH | 5.0 | -0.0355448763 | -0.0337120196 | 1.832857 |

3.2 Å时,DZVP的校正由8.82 meV降到TZVP的6.25 meV;5.0 Å时反而是TZVP稍大。不能仅凭基组标签就保证每个距离下的BSSE都单调下降。两个间距都保留物理静电等相互作用,5.0 Å结果不必恰好为零;两个点也不构成完整势能曲线或基组完备极限。
6 读完整精度,核对能量参照#
python verify.py --cases work --output my-bsse
head -8 results/energies.csv
脚本从五个SCF的 Total energy 和原生 water-1_3.restart 的 FRAGMENT_ENERGIES读取完整精度。后者储存两个一体项及一个二体相互作用项;三项相加是CP校正后的总能,不是三项都当作独立单体能。终端摘要只打印六位小数,不宜用它检查更细的能量差。
随包 N-body-energies.txt 是该原生重启文件的数值片段,便于读图;它不是可以单独提交的完整重启输入。包中的 result.out 同样是原生输出数值摘录,完整新任务结果请读自己的 output.log。
本包对照脚本固定为所附四组水二聚体;改成自己的体系后,要重新定义片段、参考数据和比较条件。先检查所有片段电荷/自旋、SCF和基组配置,再做网格、盒长、基组及几何收敛。需要结构优化、色散或其他能量修正时,参见水二聚体与D3;输入关键字查询见CP2K命令工具。片段与ghost规则见BSSE官方手册。