SPPARKS 求解器、随机种子与并行
比较tree、linear、group、随机与顺序扫描及1/2/4MPI,避免把随机轨迹差异当成计算错误。
阅读本篇目录
下载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源码版本。本专题使用有限小模型解释操作和输出,不把这些数字当作已收敛材料参数。