资讯动态

LAMMPS fix neighbor/swap 命令深度解析:基于 Voronoi 邻居的 MD-kMC 加速扩散模拟

发布时间:2026/10/16 5:54:31 来源:尧图企业网站定制
科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载导读本文围绕 LAMMPS 的fix neighbor/swap命令MC 包版本 22Jul2025 引入展开讲解如何通过 Monte-Carlo 原子交换实现 MD 与 kinetic Monte CarlokMC混合的加速扩散模拟。读者将掌握该命令的完整语法、types/diff/ke/region/rates各关键字的语义与配置方法、与compute voronoi/atom的配合方式、源码级实现原理与性能注意事项并能直接运行仓库中附带的真实测试脚本。1. 命令是什么让 MD 模拟跑得更快的邻居原子交换传统 MD 的时间尺度通常在纳秒量级对于依赖稀有事件如固体中的原子扩散的动力学过程天然难以在合理时间内采样到足够多的跃迁事件。fix neighbor/swap的出发点正是解耦两条时间尺度MD 原子振动时间尺度由常规时间积分推进原子跳跃kMC 事件时间尺度由蒙特卡洛交换推进。该 fix 会在每N步 MD 之后暂停积分执行X次邻居原子位置交换尝试并用 Metropolis 判据决定接受与否从而以 kMC 的方式加速稀有跳跃事件的采样近似模拟扩散过程。相关算法细节可参考 (Tavenner 2023)Computational Materials Science, 218, 111929源码中也通过citeme机制自动写入该文献引用见 src/MC/fix_neighbor_swap.cpp。与 fix atom/swap在全域任意位置随机配对交换不同fix neighbor/swap将交换候选限制为Voronoi 拓扑邻居从而天然贴合近邻跳跃的物理图像构成混合 MD/kMC 模拟。2. 完整语法与参数总览fix ID group-ID neighbor/swap N X seed T R0 voro-ID keyword values ...参数含义约束ID、group-IDfix 标识符与作用原子组见 fix 命令N每隔 N 步执行一次 MC 交换正整数源码要求nevery 0X每次执行时尝试交换的次数非负整数源码要求ncycles 0seed随机数种子正整数TMC 交换的缩放温度温度单位 0用于 Metropolis 判据beta 1/(k_B·T)R0交换概率的距离缩放半径距离单位 0概率权重exp(-(r/R0)²)中的r_0voro-IDcompute voronoi/atom的 compute-ID必须存在且输出合法邻居列表关键字keyword types | diff | ke | region | ratestypes与diff互斥且必须指定其一types值 两个及以上原子类型[1, Ntypes]整数或类型标签diff值 单个原子类型ke值 yes默认或no交换后是否缩放速度以守恒动能region值 region-ID将交换限制在几何区域内rates值 V1 V2 ... Vntypes无量纲为不同原子类型的 J 原子设置扩散速率权重。仓库文档 fix_neighbor_swap.rst 给出的标准示例compute voroN all voronoi/atom neighbors yes fix mc all neighbor/swap 10 160 15238 1000.0 3.0 voroN diff 2 fix myFix all neighbor/swap 100 1 12345 298.0 3.0 voroN region my_swap_region types 5 6 fix kmc all neighbor/swap 1 100 345 1.0 3.0 voroN diff 3 rates 3 1 63. 工作原理与算法流程3.1 邻居如何定义邻居关系由 compute voronoi/atom 产生的 Voronoi 剖分定义两个原子是邻居当且仅当它们的 Voronoi 胞共享一个公共面3d或公共边2d。因此该 fix 强制要求compute voronoi/atom使用neighbors yes选项compute compute-ID group-ID voronoi/atom neighbors yesneighbors yes会让 compute 额外输出一个 3 列的 local 数组每行对应每个胞的每个面胞归属原子 ID、邻居原子 ID外表面为 0、面面积。源码在构造函数中严格校验c_voro-local_flag必须开启且size_local_cols 3见 fix_neighbor_swap.cpp。3.2 每次调用执行的完整流程对应文档描述算法步骤如下暂停 MDMD 每运行N步fix 在pre_exchange()中触发源码setmask()仅注册PRE_EXCHANGE见 fix_neighbor_swap.cpp执行 Voronoi 剖分对当前构型调用c_voro-compute_local()获取邻居列表尝试 X 次交换依次执行attempt_swap()随机选 I从types第一个类型或diff指定类型的原子中均匀随机选一个中心原子 I全局范围内按MPI_Allreduce 序号偏移选择见 pick_i_swap_atom距离加权选 J在 I 的 Voronoi 邻居中按距离加权概率选择交换伙伴 J全局能量评估将 I、J 原子 ID 通信到所有处理器对交换后的系统做全局能量计算Metropolis 判据依据能量变化与温度 T 决定接受或拒绝。3.3 距离加权概率与 R0 的物理含义J 被选中的概率由以下公式给出p_ij exp( -(r_ij / r_0)² )其中r_ij是原子 I、J 的距离r_0即参数R0。源码中实现为exp(-square(r * inv_r_0))见 fix_neighbor_swap.cpp。距离越近的邻居被选中的概率越高这与 kMC按相对概率挑选下一事件的思路一致。通常取R0为平均最近邻间距量级即可由于它只是概率加权交换行为对R0的精确取值并不敏感。文档同时强调该加权还隐含一种限制作用在自由表面附近的 Voronoi 剖分可能出现不合理的远距离邻居距离加权会天然压低这类配对被选中的概率避免交换超出合理截断范围。3.4 Metropolis 判据与动能守恒接受概率由能量差驱动accept 当 random_uniform exp( beta × (E_before - E_after) )其中beta 1/(k_B·T)E_before/E_after为交换前后的全局总势能见 attempt_swap 中的energy_full()计算。若ke yes默认交换后按两原子类型质量比sqrt(m_i/m_j)缩放各自速度确保系统动能守恒若ke no则不缩放。一个值得注意的实现细节当被选中的 I、J 类型相同典型于diff模式下的自扩散系统状态无变化交换直接计为成功源码中if (itype jtype) return 1见 fix_neighbor_swap.cpp此时不需要能量评估。4. 构建与运行前置条件MC 包该 fix 属于 MC 包必须启用PKG_MC编译同时依赖 VORONOI 包PKG_VORONOI需要系统装有 Voro 库否则 fix 无法编译。仓库中 Packages_details.rst 的 MC 包条目列出了本命令。compute voronoi/atom 前置声明voro-ID必须引用一个已定义的、neighbors yes的 voronoi compute。group 范围匹配voronoi compute 的 group 应覆盖该 fix 可能选择的所有原子——使用types时group 应包含与types关键字一致的原子使用diff时group 应包含模拟中所有类型的原子因为 J 可以是任意类型包括与 I 同类型以覆盖自扩散。与 /intel 后缀不兼容init()中显式检查若 pair style 带/intel后缀会报错见 fix_neighbor_swap.cpp。5. 关键字的语义与配置要点5.1types定向交换types接收两个及以上原子类型。只有第一个类型的原子会被选为 I其余类型的原子才作为候选交换伙伴 J。例如types 5 6表示只选类型 5 原子为 I类型 6 原子为 J。源码要求至少两个类型nswaptypes 2时报错。5.2diff扩散模式diff只接收一个原子类型。I 仅从该类型原子中选出而J 可以是所有剩余类型包括与 I 相同的类型——这一设定专门用于覆盖同种原子间的自扩散跳跃self-diffusive hops。它比types更贴合扩散的物理场景也是示例脚本采用的形式。5.3ke动能守恒开关yes默认交换的两个原子质量不同时按质量比sqrt(m_i/m_j)缩放各自速度守恒系统动能no不做缩放动能不守恒。限制对于没有 per-type 质量体系的 atom style如sphere必须设ke off否则算法无法正确重缩放速度。源码init()中还会校验开启ke时若使用 per-atom 质量同一类型的原子质量必须一致否则报错若体系带电荷q_flag同一交换类型的原子电荷也须一致分别见 fix_neighbor_swap.cpp。5.4region空间限定region region-ID将 I、J 限制在几何区域内需先用region命令定义。此时 voronoi compute 的 group 也只需包含区域内的原子源码在update_iswap_atoms_list()与build_i_neighbor_list()中对region-match(x)逐原子判定见 fix_neighbor_swap.cpp。5.5rates按类型差异化扩散速率rates需要恰好给出Ntypes个值Ntypes 体系原子类型总数每个值缩放对应类型 J 原子的概率权重p_ij V_type(J) × exp( -(r_ij / r_0)² )以文档示例fix kmc all neighbor/swap 1 100 345 1.0 3.0 voroN diff 3 rates 3 1 6为例体系有 3 种原子I 为类型 1假定 J 原子等距时类型 1 的 J 被选概率是类型 2 的 3 倍类型 3 的 J 是类型 2 的 6.5 倍。若不使用rates所有类型的 J 在选取时概率相等。源码要求rates的值个数必须等于ntypes否则报错见 fix_neighbor_swap.cpp。6. 实战脚本仓库自带的 MEAM 加速扩散示例仓库 examples/PACKAGES/neighbor-swap/ 目录提供了两个真实可运行脚本由算法作者 Jacob Tavenner 编写用 2nn MEAM 势模拟 Mo-Co-Ni-V-Fe-Al-Cr 合金中 Ni/Cr 脉冲区域的加速扩散。核心脚本 in.KMC_pulse_centerunits metal dimension 3 boundary p p p atom_style atomic lattice fcc 3.762 region whole block 0 1 0 1 0 1 create_box 2 whole create_atoms 1 region whole replicate 6 16 6 region puck block INF INF 7 9 INF INF set region puck type 2 pair_style meam pair_coeff * * library_2nn.meam Mo Co Ni V Fe Al Cr MoCoNiVFeAlCr_2nn.meam Ni Cr timestep 0.002 thermo 100 compute voroN all voronoi/atom neighbors yes run 0 thermo_style custom step temp press pxx pyy pzz lx ly lz vol pe velocity all create 2400 908124 loop geom fix temp all npt temp 1000 1000 1000 aniso 0 0 1 fix mc all neighbor/swap 50 12 1340723 1000 3.0 voroN diff 2 thermo_style custom step temp press pxx pyy pzz lx ly lz vol pe f_mc[*] run 1000要点解读交换配置每 50 步执行 12 次交换种子 1340723缩放温度 1000 KR0 3.0约等于最近邻间距量级diff 2表示类型 2Cr原子为扩散主体J 可为任意类型含自扩散输出thermo_style中的f_mc[*]输出该 fix 的全局向量——即累计的交换尝试次数与接受次数可直接观测扩散进程姊妹脚本 in.KMC_pulse_edge 将脉冲区域放到盒子边缘region puck block INF INF INF 2 INF INF用于对照表面附近的扩散行为。7. 源码级实现细节与并行机制7.1 核心调用链pre_exchange()fix_neighbor_swap.cpp是执行入口判断next_reneighbor ntimestep否则直接返回确保系统可计算能量处理 triclinic 坐标变换、pbc()、comm-exchange()、comm-borders()、neighbor-build(1)energy_stored energy_full()缓存当前能量循环ncycles次调用attempt_swap()累计成功数更新nswap_attempts/nswap_successes统计推进next_reneighbor nevery。构造函数中设定了force_reneighbor 1强制每次 MC 周期前重建邻居列表。7.2 全局能量评估energy_full()能量计算仅求全局标量ENERGY_GLOBAL | ENERGY_ONLY、VIRIAL_NONE依次调用 pair含 kspace、以及分子体系下的 bond/angle/dihedral/improper 计算最终从thermo_pecompute 读取标量值见 fix_neighbor_swap.cpp。因此即使使用 EAM、多体势、长程静电等复杂势也能正确评估交换能量差。7.3 全局分布式随机选择I 的选取采用全局序号 MPI 扫描模式各处理器统计本地的候选 I 数量niswap_local通过MPI_Allreduce得到全局总数niswap再用MPI_Scan得到本处理器之前的累计数进而将全局随机序号映射到本地原子pick_i_swap_atom。J 的选取同理所有处理器先各自累加本地概率local_probability全局求和得global_probability再生成[0, global_probability)的随机数通过prev_probability定位到所属处理器并线性搜索命中邻居pick_j_swap_neighbor。所有处理器使用同一RanPark随机数发生器、同一种子保证随机序列一致。7.4 交换动作与邻居列表重建交换不仅改变type还同步更新电荷q与 per-atom 质量rmass若存在。关键优化逻辑在unequal_cutoffs若 pair style 对不同类型或类型对使用不同截断init()中通过cutsq矩阵比对得出交换后必须重新comm-borders()并重建邻居列表才能保证后交换能量正确若所有截断相同则只需comm-forward_comm(this)通信 ghost 原子的类型/电荷即可开销小得多。这解释了文档的性能注意事项第 3 条不同截断的 pair style 会显著拖慢 MC 部分。8. 性能与效率注意事项单次全局能量评估的成本与一个 MD 步相当——这是 MC 交换的主要开销来源并行效率特点与其他 LAMMPS MC 算法类似每个处理器上的原子数比常规 MD 更少时并行效率更高——能量评估成本随原子数增加而固定步数下的通信成本相对恒定不同截断的惩罚若 pair style 对不同原子类型使用不同截断每次交换都需要重建邻居列表MC 部分会戏剧性变慢MC-only 模式若只跑 MC 不跑 MD应不定义时间积分 fix、thermo 1、N 1、X取足够小以观察系统 MC 演化但X太小会导致每个时间步启停 MC 的固定开销拖慢整体。9. dump image 可视化支持自 11Feb2026 版本起该 fix 支持dump image的fix关键字graphics 测试见 unittest/graphics/tests/fix-image-neighbor-swap.yaml 中的fix nswap用法可将参与交换的原子以额外球体高亮高亮持续时间由vizsteps控制默认 1000 步可用fix_modify fix-name vizsteps N修改原子多次参与交换时按最后一次交换的时间步判断是否继续显示颜色type/element颜色风格下默认使用交换前的原子类型颜色const风格默认白色可用dump_modify fcolor修改透明度默认不透明可用dump_modify ftrans调整fflag1设置无效果fflag2用于设置附加球体的半径内部半径被置为 0可视化需要原子映射atom_modify map array无映射时该功能自动禁用vizsteps 0使用时报错提示见 fix_neighbor_swap.cpp 与image()实现。10. 输出、重启与限制10.1 输出向量fix 计算长度为 2 的全局向量intensive可通过fix-ID[1]、fix-ID[2]或f_mc[*]访问累计交换尝试次数swap attempts累计交换接受次数swap accepts。10.2 重启行为fix 状态会写入二进制重启文件包括 RNG 种子、下一次 MC 的时间步、尝试/成功次数write_restart。read_restart后需在输入脚本中重新指定 fix 以无缝继续重启后不得用reset_timestep改变时间步否则报错restart()。10.3 其他限制没有任何fix_modify选项适用于本 fixvizsteps除外参数不可用于run的start/stopfix 在能量最小化期间不被调用types与diff互斥且必须二选一types至少两个类型引用文献(Tavenner 2023) J Tavenner, M Mendelev, J Lawson, Computational Materials Science, 218, 111929 (2023)。10.4 默认值ke yes所有原子类型rates 1。11. 相关命令时间积分fix nvtfix_nh邻居计算compute voronoi/atom同类 MC 交换fix atom/swap、fix mol/swap、fix gcmc、fix sgcmc原子操作delete_atoms。相比全域配对的fix atom/swapfix neighbor/swap通过 Voronoi 拓扑限定交换范围、并以距离加权概率选取伙伴是面向加速稀有扩散事件场景的 MD/kMC 混合方案尤其适用于晶体固体中的原子迁移模拟。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐LAMMPS fix smd 命令详解基于移动弹簧的 Steered MD 与 PMF 计算LAMMPS fix smd 命令详解基于移动弹簧的 Steered MD 与 PMF 计算 本文以 LAMMPS 官方文档 fix smd 命令 https科研科学计算高性能计算LAMMPS 邻居列表Neighbor Lists机制深度解析从 Verlet 列表、分箱与 Stencil 到 neigh_modify 调优实战LAMMPS 邻居列表Neighbor Lists机制深度解析从 Verlet 列表、分箱与 Stencil 到 neigh_modify 调优实战 本文人工智能AI AgentMCP 服务工具调用GUI 自动化语音数字人交互助手后端LAMMPS fix bond/swap 命令详解基于蒙特卡洛键交换的聚合物熔体快速平衡化LAMMPS fix bond/swap 命令详解基于蒙特卡洛键交换的聚合物熔体快速平衡化 fix bond/swap 是 LAMMPS 的 MCMonte科研科学计算高性能计算上一篇Million.js错误处理常见问题排查与解决方案终极指南下一篇多域名邮件服务器终极配置docker-mailserver虚拟域名管理完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑