CP2K专题

CP2K小团簇全局搜索:SWARM与Minima Hopping

用10个Lennard–Jones模型粒子实际运行SWARM,学习局部优化、MD逃逸、主从任务和极小点输出。

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

普通结构优化沿着当前势能面寻找附近极小点;要探索多个极小点,可以把局部优化和短MD逃逸交替进行。本篇用CP2K的SWARM / MINIMA_HOPPING演示这一流程。

体系是10个Lennard–Jones模型粒子,ε=0.001 Eh、σ=1 Å、质量1 amu。输入类型名是X,其元素标记为H,原生XYZ因而写出H;它不是氢团簇的电子结构计算。

1. 先看实际结构和能量#

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

python3 -m zipfile -e example.zip .
cd cp2k-swarm-lj10
bash results.sh
bash read.sh
bash plot.sh

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

原生SWARM找到的最低报告结构与搜索记录

本例只运行5次外层主从通信,报告3个极小点。最低报告能量为−0.0265950924 Eh,没有达到输入目标−0.028421532 Eh,因此不称为找到全局最小值。

2. 输入由哪几部分组成#

cat inputs/input.inp

关键控制为:

&GLOBAL
  PROGRAM_NAME SWARM
  RUN_TYPE NONE
  SEED 42
&END GLOBAL
&SWARM
  BEHAVIOR GLOBAL_OPT
  MAX_ITER 5
  NUMBER_OF_WORKERS 1
  &GLOBAL_OPT
    METHOD MINIMA_HOPPING
    E_TARGET -0.028421532
  &END GLOBAL_OPT
&END SWARM

GLOBAL/PROGRAM_NAME SWARM选择程序入口;不是把RUN_TYPE改成SWARM。1个worker配1个master,本例因此使用2个MPI进程。

MOTION/GEO_OPT采用BFGS,最多300步并启用有理函数步长控制;MOTION/MD采用NVE,逃逸段最多1000步、0.5 fs,并设置速度软化。MD内部段长、几何优化步数和SWARM外层通信次数是三种不同计数。

展开本例完整原生输入
&GLOBAL
  PROGRAM_NAME SWARM
  PROJECT_NAME LJ10_minhop_1
  RUN_TYPE NONE
  SEED 42
&END GLOBAL

&MOTION
  &GEO_OPT
    MAX_ITER 300
    OPTIMIZER BFGS
    &BFGS
      TRUST_RADIUS [angstrom] 0.1
      USE_RAT_FUN_OPT  ! otherwise LJ particle sth. get too close.
      &RESTART OFF
      &END RESTART
    &END BFGS
    &CG
      MAX_STEEP_STEPS 3
      &LINE_SEARCH
        &GOLD
          INITIAL_STEP 1.0e-2
        &END GOLD
      &END LINE_SEARCH
    &END CG
    &PRINT
      &PROGRAM_RUN_INFO OFF
      &END PROGRAM_RUN_INFO
    &END PRINT
  &END GEO_OPT
  &MD
    ENSEMBLE NVE
    STEPS 1000
    TIMESTEP 0.5
    &PRINT
      FORCE_LAST .TRUE.
      &CENTER_OF_MASS OFF
      &END CENTER_OF_MASS
      &COEFFICIENTS OFF
      &END COEFFICIENTS
      &ENERGY OFF
      &END ENERGY
      &PROGRAM_RUN_INFO OFF
      &END PROGRAM_RUN_INFO
      &ROTATIONAL_INFO OFF
      &END ROTATIONAL_INFO
      &SHELL_ENERGY OFF
      &END SHELL_ENERGY
      &TEMP_KIND OFF
      &END TEMP_KIND
      &TEMP_SHELL_KIND OFF
      &END TEMP_SHELL_KIND
    &END PRINT
    &VELOCITY_SOFTENING
      ALPHA 1.0
      DELTA 0.01
      STEPS 20
    &END VELOCITY_SOFTENING
  &END MD
  &PRINT  ! IO is expensive, turning everything off
    &FINAL_STRUCTURE OFF
    &END FINAL_STRUCTURE
    &RESTART OFF
    &END RESTART
    &RESTART_HISTORY OFF
    &END RESTART_HISTORY
    &TRAJECTORY
      !ADD_LAST NUMERIC
      &EACH
        GEO_OPT -1
        MD -1
      &END EACH
    &END TRAJECTORY
  &END PRINT
&END MOTION

&SWARM
  BEHAVIOR GLOBAL_OPT
  MAX_ITER 5
  NUMBER_OF_WORKERS 1
  &GLOBAL_OPT
    E_TARGET -0.028421532
    METHOD MINIMA_HOPPING
    &HISTORY
      ENERGY_PRECISION 1.0e-5
      FINGERPRINT_PRECISION 1.0e-2
    &END HISTORY
  &END GLOBAL_OPT
&END SWARM

&FORCE_EVAL
  METHOD FIST
  &MM
    &FORCEFIELD
      &CHARGE
        ATOM X
        CHARGE 0.0
      &END CHARGE
      &NONBONDED
        &LENNARD-JONES
          ATOMS X X
          EPSILON [hartree] 0.001
          RCUT 25.0
          SIGMA 1.0
        &END LENNARD-JONES
      &END NONBONDED
      &SPLINE
        EMAX_ACCURACY [hartree] 1000  ! yields r_min = 0.66 bohr
        EMAX_SPLINE [hartree] 1000
        EPS_SPLINE [hartree] 1.0E-10  ! yields 1698 spline points
        R0_NB 1.0E-10  ! solely MAX_SPLINE shall control spline range
      &END SPLINE
    &END FORCEFIELD
    &NEIGHBOR_LISTS
      GEO_CHECK OFF
    &END NEIGHBOR_LISTS
    &POISSON
      &EWALD
        EWALD_TYPE none
      &END EWALD
    &END POISSON
    &PRINT
      &DERIVATIVES OFF
      &END DERIVATIVES
      &DIPOLE OFF
      &END DIPOLE
      &EWALD_INFO OFF
      &END EWALD_INFO
      &FF_INFO OFF
      &END FF_INFO
      &FF_PARAMETER_FILE OFF
      &END FF_PARAMETER_FILE
      &ITER_INFO OFF
      &END ITER_INFO
      &NEIGHBOR_LISTS OFF
      &END NEIGHBOR_LISTS
      &PROGRAM_BANNER OFF
      &END PROGRAM_BANNER
      &PROGRAM_RUN_INFO OFF
      &END PROGRAM_RUN_INFO
      &SUBCELL OFF
      &END SUBCELL
    &END PRINT
  &END MM
  &PRINT
    &DISTRIBUTION OFF
    &END DISTRIBUTION
    &DISTRIBUTION1D OFF
    &END DISTRIBUTION1D
    &DISTRIBUTION2D OFF
    &END DISTRIBUTION2D
    &FORCES OFF
    &END FORCES
    &GRID_INFORMATION OFF
    &END GRID_INFORMATION
    &PROGRAM_RUN_INFO OFF
    &END PROGRAM_RUN_INFO
    &STRESS_TENSOR OFF
    &END STRESS_TENSOR
    &TOTAL_NUMBERS OFF
    &END TOTAL_NUMBERS
  &END PRINT
  &SUBSYS
    &CELL
      ABC [angstrom] 50.0 50.0 50.0
      !PERIODIC NONE
    &END CELL
    &COORD
      X         0.4589898422        0.6967471136        1.4966414161
      X         1.7810159326        0.6241736315        0.2505541610
      X         0.1800792183        1.4360203812        0.7133104604
      X         0.6907533252        0.4858379327        0.4287806799
      X         0.4848961364       -0.3602827169        1.1199932299
      X         1.4327710668        0.2177870536        1.2319379170
      X         0.5703803927        1.7787454084        1.7106241277
      X         1.2561570161        1.2871878862        0.9796453399
      X        -0.2286542076       -0.0595967487        1.9261848287
      X         0.8736112905       -0.1066199530        2.1423278315
    &END COORD
    &KIND X
      ELEMENT H
      MASS 1.0
    &END KIND
    &TOPOLOGY
      CONNECTIVITY OFF
    &END TOPOLOGY
  &END SUBSYS
&END FORCE_EVAL

3. 提交#

使用集群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资源时仍可先读已保存的结果。

本包2个MPI进程,底层命令为:

module load cp2k/2026.2-8173m
mpirun -np 2 cp2k.psmp -i input.inp > swarm.out

4. 提取找到的极小点#

grep 'Reported potential energy' reference-results/native.log
grep 'Lowest reported potential energy' reference-results/native.log
cat data/CP2K-LJ10-minima-hopping.csv
head -n 12 reference-results/LJ10_minhop_1-progress.xyz
报告通信序号 能量/Eh
2 −0.0262500209
3 −0.0264891387
4 −0.0265950924

通信1用于初始化,通信5到达本例外层上限后退出,因此5次外层计数不等于5个不同极小点。progress.xyz逐块保存每次报告结构;WORKER00001.out包含内部优化与MD信息。

随包脚本对每个报告结构用独立LJ公式重算经典势能,差小于7.6×10⁻¹⁰ Eh。对自己的体系,应使用适当势能方法、不同初始结构/随机种子和足够搜索预算;本例结构图中的连线仅按距离辅助观察,不表示实际化学键判断。

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

查看配图

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

100%查看原图 ↗