SPPARKS专题

SPPARKS 求解器、随机种子与并行

比较tree、linear、group、随机与顺序扫描及1/2/4MPI,避免把随机轨迹差异当成计算错误。

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

下载SPPARKS实操包。包内含78个真实计算条件、原始输入/轨迹/统计、独立提取脚本和11张结构与数据图。每篇建议从新的解压目录开始;已经完整计算过的目录不要再次执行同名条件,以免混入旧结果。

1. 两类推进方式#

事件驱动KMC用 solve_style tree/linear/group选择事件并推进随机等待时间;拒绝式rKMC用 sweep random/raster尝试站点更新。只有支持相应推进方式的app才能这样选择,不能把所有模型都任意切换。

本包对Ising和反应模型实际运行三种求解器;Ising还有随机/顺序扫描,MPI1/2/4分别三个种子的对照。

2. 求解器的具体例子#

bash run.sh chemistry-solver-linear
bash run.sh chemistry-solver-group

group需要给出倾向分组范围。本例的完整输入:

seed 40001
app_style chemistry
solve_style group 10000.0 1.0e-8
volume 1.9098395e-13
add_species A
add_species B
add_species C
add_reaction 1 A B 10000000000.0 C
add_reaction 2 C 1.0 A B
count A 300
count B 100
stats 0.01
run 0.5

tree与linear使用相同的反应模型和体积;group额外的数值是求解器组织事件的参数,不改变输入中化学反应的kf、kb。比较时先核对倾向总和、守恒关系和统计量,不要求同一seed在不同求解器中给出逐事件完全相同的轨迹。

3. 并行输入#

seed 30303
app_style ising
dimension 2
lattice sq/4n 1.0
region box block 0 24 0 24 -0.5 0.5
create_box box
create_sites box
set site range 1 2
sweep random
sector yes
diag_style energy
temperature 0.75
stats 5.0
dump 1 text 5.0 dump.sites
run 60.0

sector yes把并行更新划分为区域;不同进程数会改变区域分解、随机流和更新顺序。因此同一seed也不应被解释为跨进程数逐帧相同。

bash run.sh ising-mpi4
head -n 8 work/ising-mpi4/stdout.log

公开脚本会使用对应的 mpirun -np 4。先分配足够的CPU资源再执行;不要把4个MPI进程当作4块GPU,也不要继续叠加无意义的OpenMP线程。

4. 统计与实际时间#

bash run-all.sh
ls figures/parallel-seeds.png

三个种子分别展示,黑色为均值和样本标准差。它是有限样本的描述,不是并行性能或严格统计等价证明。

三个种子分别展示,黑色为均值和样本标准差。它是有限样本的描述,不是并行性能或严格统计等价证明。 增加种子、采样时间和晶格尺寸,并检查sector时间/更新规则,才能判断物理统计是否稳定。不要只挑一条更接近期望值的轨迹。

所有图使用实际时间。尤其sinter这组参数一次完整扫描对应6.5模型时间,run20实际会推进到26;那不是26秒,也不是输入时长失效。普通Ising、并行rKMC、反应与扩散需要分别按自己的时间定义解释。

相关入口:SPPARKS专题、官方文档、08Oct25源码版本。本专题使用有限小模型解释操作和输出,不把这些数字当作已收敛材料参数。

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

查看配图

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

100%查看原图 ↗