CP2K小团簇全局搜索:SWARM与Minima Hopping
用10个Lennard–Jones模型粒子实际运行SWARM,学习局部优化、MD逃逸、主从任务和极小点输出。
阅读本篇目录
普通结构优化沿着当前势能面寻找附近极小点;要探索多个极小点,可以把局部优化和短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/。无需为看图重做计算。

本例只运行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。对自己的体系,应使用适当势能方法、不同初始结构/随机种子和足够搜索预算;本例结构图中的连线仅按距离辅助观察,不表示实际化学键判断。