CP2K专题

CP2K基组优化:H₂O参考与OPTIMIZE_BASIS

用收敛的水分子参考态演示H/O基组系数优化、派生基组、加权目标和实际迭代曲线。

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

调整Gaussian基组的指数或收缩系数,需要专用的参考态与目标函数。CP2K的OPTIMIZE_BASIS可以同时处理多个元素和多种派生基组,本篇用一个H₂O参考演示最短可操作流程。

本例只针对一个水分子,采用较低教学网格和有限优化预算;得到的基组不作为可迁移的生产基组推荐。真正基组开发需要更多训练体系、独立验证和收敛测试。

1. 下载与看实际曲线#

下载本篇完整输入、实际结果与绘图资料包,保存为example.zip:

python3 -m zipfile -e example.zip .
cd cp2k-optimize-basis-water
bash results.sh
bash read.sh
bash plot.sh

这些命令先读取随包真实结果,CSV在data/,原生输出在reference-results/,生成的图在figures/。无需为看图重做计算。

原生基组优化目标与实际写出基组的独立读数

2. 第一步:生成参考波函数#

参考为3原子水、8 Å盒、PADE/GTH-PADE、TZV2P-MOLOPT-GTH,网格截断100 Ry。EPS_SCF=1E-6,MAX_SCF=100,本次23步收敛。100 Ry仅用于本例教学,不是生产水体系推荐截断。

cat inputs/H2O-ref.inp
&GLOBAL
  PRINT_LEVEL LOW
  PROJECT refH2O
  RUN_TYPE ENERGY
&END GLOBAL

&FORCE_EVAL
  METHOD Quickstep
  &DFT
    BASIS_SET_FILE_NAME BASIS_MOLOPT
    POTENTIAL_FILE_NAME POTENTIAL
    &MGRID
      CUTOFF 100
    &END MGRID
    &QS
      EPS_DEFAULT 1.0E-12
      EXTRAPOLATION PS
      EXTRAPOLATION_ORDER 3
    &END QS
    &SCF
      EPS_SCF 1.0E-6
      MAX_SCF 100
      SCF_GUESS ATOMIC
      &OT
      &END OT
    &END SCF
    &XC
      &XC_FUNCTIONAL Pade
      &END XC_FUNCTIONAL
    &END XC
  &END DFT
  &SUBSYS
    &CELL
      ABC 8.0 8.0 8.0
    &END CELL
    &COORD
      O   0.000000    0.000000   -0.065587
      H   0.000000   -0.757136    0.520545
      H   0.000000    0.757136    0.520545
    &END COORD
    &KIND H
      BASIS_SET TZV2P-MOLOPT-GTH
      POTENTIAL GTH-PADE-q1
    &END KIND
    &KIND O
      BASIS_SET TZV2P-MOLOPT-GTH
      POTENTIAL GTH-PADE-q6
    &END KIND
  &END SUBSYS
&END FORCE_EVAL

计算阶段首先执行:

mpirun -np 4 cp2k.psmp -i H2O-ref.inp > reference.out

得到refH2O-RESTART.wfn后再进入基组优化。后面的脚本复用这个参考文件,不为每次目标评价重新做参考SCF。

3. 第二步:定义要优化的基组#

本例从H和O的TZVP-MOLOPT-GTH出发,只开放收缩系数,原Gaussian指数保持不变;再按输入删减收缩构造两级派生基组,形成三种H/O组合。

cat inputs/budget500/opt-1.inp
展开完整基组优化输入
#CPQA DEPENDS H2O-ref.inp
&GLOBAL
  PROGRAM_NAME OPTIMIZE_BASIS
  PROJECT optbas-1
&END GLOBAL

&OPTIMIZE_BASIS
  ! specify basis set combinations for H and O being fitted together
  BASIS_COMBINATIONS 0 0
  BASIS_COMBINATIONS 1 1
  BASIS_COMBINATIONS 2 2
  ! BASIS_OUTPUT_FILE contains the result basis and intermediate basis set. Can be directly used with CP2K
  BASIS_OUTPUT_FILE myout
  ! BASIS_TEMPLATE_FILE contains a basis set which is used as a starting point for optimization
  BASIS_TEMPLATE_FILE BASIS_MOLOPT
  ! BASIS_WORK_FILE contains the basis set generated with the information below
  BASIS_WORK_FILE WORK_BASIS_STRUCTURE
  ! specify the weights on the CN for all combinations
  CONDITION_WEIGHT 0.001  ! 0 0
  CONDITION_WEIGHT 0.001  ! 1 1
  CONDITION_WEIGHT 0.01  ! 2 2
  ! specify the weights on the residuums for all combinations
  RESIDUUM_WEIGHT 100  ! 0 0
  RESIDUUM_WEIGHT 10  ! 1 1
  RESIDUUM_WEIGHT 1.0  ! 2 2
  ! include LOG(condition_number) in the fit
  USE_CONDITION_NUMBER
  ! output frquency for new basis file anjd opt info
  WRITE_FREQUENCY 50
  ! informations for the basis sets to be fitted. If nothing is specified basis from
  ! training input will be used
  &FIT_KIND H
    BASIS_SET TZVP-MOLOPT-GTH  ! will be reference set 0
    INITIAL_DEGREES_OF_FREEDOM COEFFICIENTS
    ! Generate additional basis sets
    !   DZVP basis
    &DERIVED_BASIS_SETS  ! reference set 1
      REMOVE_CONTRACTION 1 0 3
    &END DERIVED_BASIS_SETS
    !   SZV basis
    &DERIVED_BASIS_SETS  ! reference set 2
      REFERENCE_SET 1
      REMOVE_CONTRACTION 1 0 2
      REMOVE_CONTRACTION 1 1 1
    &END DERIVED_BASIS_SETS
  &END FIT_KIND
  &FIT_KIND O
    BASIS_SET TZVP-MOLOPT-GTH  ! reference set 0
    INITIAL_DEGREES_OF_FREEDOM COEFFICIENTS
    &DERIVED_BASIS_SETS  ! reference set 1
      BASIS_SET_NAME DZVP-MOLOPT-GTH
      REMOVE_CONTRACTION 1 0 3
      REMOVE_CONTRACTION 1 1 3
    &END DERIVED_BASIS_SETS
    &DERIVED_BASIS_SETS  ! reference set 2
      BASIS_SET_NAME SZV-MOLOPT-GTH
      REFERENCE_SET 1
      REMOVE_CONTRACTION 1 0 2
      REMOVE_CONTRACTION 1 1 2
      REMOVE_CONTRACTION 1 2 1
    &END DERIVED_BASIS_SETS
  &END FIT_KIND
  ! number of procs can be assigned for every calcualtion
  !   GROUP_PARTITION 4 4 2
  ! information for optimization
  &OPTIMIZATION
    MAX_FUN 500
  &END OPTIMIZATION
  ! path to input files and directory for the QS calculations and the restart files
  &TRAINING_FILES
    INPUT_FILE_NAME H2O-ref.inp
  &END TRAINING_FILES
&END OPTIMIZE_BASIS
控制 本例作用
BASIS_TEMPLATE_FILE 原始基组数据
FIT_KIND H/O 分别定义元素与起始基组
INITIAL_DEGREES_OF_FREEDOM COEFFICIENTS 本例仅优化收缩系数
DERIVED_BASIS_SETS 由同一组参数生成较小基组
BASIS_COMBINATIONS 同时评价的H/O组合
RESIDUUM_WEIGHT 各组合的目标权重
USE_CONDITION_NUMBER 把条件数相关项纳入目标
BASIS_OUTPUT_FILE myout 写出可供CP2K读取的基组文件

目标包含加权的能量、密度残差与条件数相关项,因此数值可以为负,不能把纵轴称作“非负均方误差”。

4. 提交与计数#

使用集群cp2k/2026.2-8173m,Intel oneAPI 2024.2与Intel MPI构建,CPU路径。本包给出CPU整节点56核申请,MPI进程每个1线程。准备新计算时,在新解压目录执行:

sbatch run.slurm

任务结束后读取自己的输出:

bash read.sh work analysis-new
bash plot.sh analysis-new figures-new work

不要把实际计算直接放到登录节点。没有CPU资源时仍可先读已保存的结果。

本包使用4个MPI进程。MAX_FUN 500在此原生实现中对应循环索引0至500,共501次目标评价;WRITE_FREQUENCY 50只输出11个采样记录,不是只计算了11次。

grep -E 'iteration number|Total residuum' reference-results/budget500/fit-native.log
cat data/CP2K-basis-objective-history.csv

初始目标约−443.98011,最后打印试探点约−444.13228。程序在结尾处理优化器状态并写出myout,因此不能直接把最后一条试探点当成最终基组的精确目标值。本例另行将实际myout作为模板读回,得到目标约−444.13350。

5. 下一步怎样用#

head -n 12 reference-results/budget500/myout
cat data/CP2K-basis-H2O-singlepoints.csv

将生成的文件用于真实输入,并重新做SCF收敛与独立验证,见输出基组的读取与使用。

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

查看配图

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

100%查看原图 ↗