LAMMPS pair_style lambda/zone/apip 完全指南:APIP 自适应精度势的空间过渡区计算

📅 发布时间:2026/10/16 2:40:01
LAMMPS pair_style lambda/zone/apip 完全指南:APIP 自适应精度势的空间过渡区计算
科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载pair_style lambda/zone/apip是 LAMMPS APIPAdaptive-Precision Interatomic Potentials自适应精度原子间势包中的关键组件负责在力计算阶段为每个原子计算空间过渡区切换参数 λ_min,i。本指南围绕该 pair style 的语法、配置、源码实现与配套生态展开帮助读者理解如何用 EAMACE 等快慢势组合构建可在仿真中动态切换精度的高效原子模拟。1. 概述APIP 与空间过渡区1.1 APIP 方法背景机器学习势如 ACE虽能接近 DFT 精度但其力计算开销远超传统经验势如 EAM。APIP 的核心思想是在模拟中只对部分原子使用高精度但昂贵的 ML 势其余原子使用快速势从而在精度与计算规模之间取得平衡。原子 i 的势能由切换参数 λ_i ∈ [0,1] 加权E_i λ_i · E_i^(fast) (1 - λ_i) · E_i^(precise)其中 E_i^(fast) 为快速势如 EAME_i^(precise) 为精确势如 ACE。当多数原子 λ_i 1 时即可节省大量计算时间。1.2 空间过渡区的必要性若仅根据某个输入信号如 CSP 中心对称参数直接决定每个原子的精度会导致快/慢势分区边界过于突兀。为平滑过渡LAMMPS 引入空间过渡区一个原子的切换参数不仅取决于自身的输入信号还受其近邻原子影响——即pair_style lambda/zone/apip计算的 λ_min,i。λ_min,i 的定义为λ_min,i(t) min{ 1 - (1 - λ_0,j(t)) · f^(cut)((r_ij(t) - r_λ,lo) / (r_λ,hi - r_λ,lo)) : j ∈ Ω_λ,i }其中 r_λ,lo 与 r_λ,hi 是径向过渡区阈值Ω_λ,i 是原子 i 的近邻集合f^(cut) 为在 [0,1] 上从 1 衰减到 0 的截止函数。2. 命令语法与基本用法2.1 语法pair_style lambda/zone/apip cutofflambda/zone/apip该 pair style 的名称cutoff全局截断距离距离单位2.2 示例pair_style lambda/zone/apip 12.02.3 关键设计只接受一个参数该 pair style 仅接受全局 cutoff 一个参数。计算 λ_min,i 所需的其他量r_λ,lo、r_λ,hi、λ_non_group 等均从fix lambda/apip中提取无需在此处重复传入。⚠️ 重要提示本 pair style 的 cutoff 参数只影响邻居列表的构建。定义 r_λ,hi 和 r_λ,lo 的半径由fix lambda/apip的time_averaged_zone参数决定。若r_λ,hi cutoff初始化时会直接报错详见 pair_lambda_zone_apip.cpp 的init_style检查。2.4 为什么由 pair style 而不是 fix 计算计算 λ_min,i 需要遍历近邻列表耗时较大。将该计算放在 pair style 中可以纳入fix atom_weight/apip的负载均衡体系——即用extract(lambda/zone/apip:time_per_atom)接口报告每个原子的平均计算耗时供负载均衡使用见 fix_atom_weight_apip.cpp。3. 与 APIP 生态的组合用法3.1 组件总览一个完整的动态切换参数修正APIP 模拟需要以下组件组件作用atom_style apip存储切换参数 λ_i 等原子属性快速势eam/apip或pace/fast/apip计算 E_i^(fast)精确势pace/precise/apip计算 E_i^(precise)pair_style lambda/input/apip或其 CSP 变体计算输入信号 λ_i^inputfix lambda/apip根据输入计算切换参数 λ_ipair_style lambda/zone/apip计算空间过渡区 λ_min,ipair_style hybrid/overlay组合上述各 pair stylefix lambda_thermostat/apip切换参数变化时的能量守恒修正fix atom_weight/apipfix balance原子负载估计与动态负载均衡3.2 完整代码示例以下是 Howto_apip.rst 与 pair_lambda_zone_apip.rst 给出的标准配置EAM 快势 ACE 精确势 CSP 输入 空间过渡区pair_style hybrid/overlay eam/fs/apip pace/precise/apip lambda/input/csp/apip fcc cutoff 5.0 lambda/zone/apip 12.0 pair_coeff * * eam/fs/apip Cu.eam.fs Cu pair_coeff * * pace/precise/apip Cu_precise.yace Cu pair_coeff * * lambda/input/csp/apip pair_coeff * * lambda/zone/apip fix 2 all lambda/apip 3.0 3.5 time_averaged_zone 4.0 12.0 110 110 min_delta_lambda 0.01各行解析pair_style hybrid/overlay ...用 overlay 方式叠加 4 个 pair style快势、精确势、输入计算、空间过渡区。pair_coeff * * eam/fs/apip Cu.eam.fs Cu指定 EAM 快势文件与元素。pair_coeff * * pace/precise/apip Cu_precise.yace Cu指定 ACE 精确势文件与元素。pair_coeff * * lambda/input/csp/apip无系数文件仅需声明。pair_coeff * * lambda/zone/apip同样无需系数文件。fix 2 all lambda/apip 3.0 3.5 ...thr_lo3.0、thr_hi3.5 定义 CSP 输入到切换参数的阈值区间time_averaged_zone 4.0 12.0 110 110定义空间过渡区半径 r_λ,lo4.0、r_λ,hi12.0 及两段时间平均的历史长度各 110 步min_delta_lambda 0.01抑制数值波动。注意lambda/input/csp/apip的cutoff 5.0是 CSP 近邻搜索半径默认 5.0与lambda/zone/apip 12.0的邻居列表截断是两个不同概念。3.3 真实示例Cu 空位模拟仓库 examples/PACKAGES/apip/in.vacancy.dynamic.lambda 提供了可运行的完整示例关键片段units metal atom_style apip read_data data.vacancy fix nve all nve pair_style hybrid/overlay eam/fs/apip pace/apip lambda/input/csp/apip ${csp_lattice} cutoff ${csp_cutoff} lambda/zone/apip ${r_sw_hi} pair_coeff * * eam/fs/apip ${eamfs_file} Cu pair_coeff * * pace/apip ${ace_file2} Cu pair_coeff * * lambda/input/csp/apip pair_coeff * * lambda/zone/apip fix lambda all lambda/apip ${lambda_input_thr_lo} ${lambda_input_thr_hi} time_averaged_zone ${r_sw_lo} ${r_sw_hi} ${lambda_input_histlen} ${lambda_histlen} min_delta_lambda ${min_delta_lambda} fix weight_atom all atom_weight/apip 100 eam ace lambda/input lambda/zone all其中变量定义见该脚本顶部csp_lattice fcccsp_cutoff 6.0CSP 检测使用 fcc 晶格 12 个近邻搜索半径 6.0。r_sw_lo 2.0r_sw_hi 3.0空间过渡区径向范围。lambda_input_thr_lo 2.5lambda_input_thr_hi 3.0CSP 输入阈值。lambda_input_histlen 110lambda_histlen 110两段时间平均长度。min_delta_lambda 1/110切换参数最小变化量。该脚本还演示了用compute property/atom apip_lambda与compute reduce sum统计简单λ1、过渡0λ1、复杂λ0原子数量直观观察过渡区。通过write_restart平滑重启由于 λ_i 与 λ_i^input 的历史被写入二进制重启文件见下文重启后无需重新预热时间平均。4. 源码级原理pair_lambda_zone_apip 的实现4.1 类结构与初始化流程核心类PairLambdaZoneAPIP定义在 src/APIP/pair_lambda_zone_apip.h继承自 LAMMPS 的Pair基类并通过PairStyle(lambda/zone/apip, PairLambdaZoneAPIP)注册。它声明了fix lambda/apip为友元类便于二者协作。初始化时各参数默认值均为 -1pair_lambda_zone_apip.cppcut_global、cut_lo、cut_hi、cut_hi_sq、cut_width、lambda_non_group计时变量timer、n_calculations、time_per_atominit_style()pair_lambda_zone_apip.cpp执行三个关键步骤检查原子风格要求原子风格支持apip_lambda_input_ta字段即必须使用atom_style apip。定位 fix lambda/apip用modify-get_fix_by_style(^lambda/apip)查找要求恰好一个fix lambda/apip存在随后通过extract(fix_lambda:cut_lo, ...)、extract(fix_lambda:cut_hi, ...)、extract(fix_lambda:cut_hi_sq, ...)、extract(fix_lambda:cut_width, ...)、extract(fix_lambda:lambda_non_group, ...)接口从 fix 中取回空间过渡区参数这些接口定义于 fix_lambda_apip.cpp。注册邻居列表neighbor-add_request(this, NeighConst::REQ_FULL | NeighConst::REQ_GHOST)请求包含 ghost 原子的完整邻居列表——因为计算 λ_min,i 需要看到其他处理器的 ghost 原子所携带的 λ 输入。同时校验cut_hi cut_global时报错确保空间过渡区截断不超过邻居列表截断。4.2 核心算法calculate_lambda()calculate_lambda()pair_lambda_zone_apip.cpp是空间过渡区计算的真正实现分为三步第一步初始化本处理器原子own particles的 λ 值for (i 0; i nlocal; i) { lambda_ta[i] (mask[i] groupbit) ? lambda_input_ta[i] : lambda_non_group; }属于fix lambda/apip所指定 group 的原子取其上一步的时间平均输入 λ_input_ta不属于 group 的原子则赋固定值 λ_non_group默认 1即fast。第二步遍历非平凡原子非 λ1 原子的近邻if (lambda_input_ta[i] 1 || (!(mask[i] groupbit))) { continue; }只有 λ_input ≠ 1即需要精确计算或处于过渡区且属于 group 的原子才会影响邻居的 λ。对每个这样的原子 i遍历其近邻 j跳过 ghost 原子和不在 group 中的原子只需更新本处理器原子的 λ。若邻居 j 已经 λ_ta[j] 0已是最复杂状态跳过。计算距离平方rsq若rsq cut_hi_sq即超出 r_λ,hi跳过。否则计算候选值lambda_new 1 - (1 - λ_input_ta[i]) · f^(cut)(r_ij)若比邻居当前的 λ_ta[j] 更小则更新之if (lambda_new lambda_ta[j]) lambda_ta[j] lambda_new;这正是取最小值语义的邻居级实现——每个原子最终取所有近邻贡献的最小值。第三步回写结果for (i 0; i nlocal; i) lambda_input_ta[i] lambda_ta[i];将计算出的 λ_min,i 写回atom-apip_lambda_input_ta供fix lambda/apip在 post_integrate 阶段使用。4.3 多项式截止函数空间过渡区使用 5 次多项式截止函数pair_lambda_zone_apip.cpp与fix lambda/apip中阈值切换函数switching_function_poly为同一族函数后者见 fix_lambda_apip.cppdouble PairLambdaZoneAPIP::switching_function_poly_distance(double input) { if (input cut_lo) return 1; else if (input cut_hi) return 0; else { double deltatmp 1 - 2 * (1 (input - cut_hi) / cut_width); return 0.5 7.5 / 2. * (deltatmp / 4. - pow(deltatmp, 3) / 6. pow(deltatmp, 5) / 20.); } }距离 ≤ r_λ,lo 时返回 1完全保留近邻的复杂影响距离 ≥ r_λ,hi 时返回 0近邻完全不影响该原子中间区间由多项式平滑过渡其前两阶导数在过渡区边界处为零源码注释指出该函数参考 Phys Rev Mat 6, 013804 (2022) 附录 C 的径向截止函数保证切换参数的平滑性与数值稳定性。4.4 计时与负载均衡接口PairLambdaZoneAPIP通过extract()暴露lambda/zone/apip:time_per_atom接口pair_lambda_zone_apip.cpp内部累积timer与n_calculations由calculate_time_per_atom()计算平均单原子耗时。fix atom_weight/apip通过该接口获取实测耗时而非硬编码常数从而为fix balance提供更精确的每原子负载估计。4.5 计算流程中的调用关系从fix lambda/apip的setup_pre_forcefix_lambda_apip.cpp可以看到完整的协同流程pair_lambda_input-calculate_lambda_input()计算输入信号 λ_i^inputupdate_lambda_input_history()更新输入历史环形缓冲见下communicate_lambda_input_ta()将时间平均输入发送给 ghost 原子pair_lambda_zone-calculate_lambda()即本 pair style 的空间过渡区计算post_integrate()更新 λ 历史、施加 min_delta_lambda 抑制、回写comm_forward_lambda()把新的 λ 与 λ_const 通信给邻居。5. 与 fix lambda/apip 的完整数据流5.1 切换参数计算的完整流水线fix lambda/apip负责把输入信号转换成最终的切换参数其完整流程为详见 fix_lambda_apip.rst输入时间平均对 λ_i^input 做 N 步时间平均由time_averaged_zone的history_len_lambda_input控制得到 λ_avg,i^input阈值切换用阈值函数把 λ_avg,i^input 映射到 λ_0,ithr_lo 以下为 1thr_hi 以上为 0中间多项式过渡空间过渡区本 pair styleλ_0,i 结合近邻距离计算 λ_min,i切换参数时间平均对 λ_min,i 再做 N 步平均history_len_lambda控制得到 λ_avg,i波动抑制只有当 |λ_avg,i(t) - λ_i(t-Δt)| ≥ Δλ_min或 λ_avg,i ∈ {0,1}时才更新 λ_i否则沿用上一时间步的值min_delta_lambda参数控制。第 5 步在 fix_lambda_apip.cpp 中实现lambda_const[i] lambda[i]; lambda[i] lambda_input_ta[i]; if (fabs(lambda[i] - lambda_const[i]) min_delta_lambda lambda[i] ! 1 lambda[i] ! 0) lambda[i] lambda_const[i];其作用正如源码注释所述防止切换区中仅由原子热运动引起的无意义波动0 和 1 始终允许防止原子永久保持一个 ε 级的 λ 值。5.2 历史存储与平滑重启fix lambda/apip通过内部创建的FixStoreAtom名为fix-idLAMBDA_INPUT_HISTORY与fix-idLAMBDA_HISTORY以环形缓冲方式保存输入与切换参数历史lambda_input_history[i][0..len-1]过去各时间步的 λ_i^inputlambda_input_history[i][len]环形缓冲内所有值的和增量维护用于快速求平均lambda_input_history[i][len1]由时间平均输入直接算出的 λ 值同理的lambda_history保存 λ_min 序列。这两段历史连同history_length、history_used、history_last等标量信息都被写入二进制重启文件fix_lambda_apip.cpp重启时校验历史长度一致即可恢复时间平均状态实现平滑重启。与之对照本 pair style 本身不写任何信息到重启文件——因此凡读取重启文件的输入脚本都必须重新给出pair_style lambda/zone/apip与pair_coeff命令。5.3 逐原子统计输出若fix lambda/apip使用store_atomic_stats参数则以逐原子数组输出 5 个量fix_lambda_apip.cppλ_i^input(t)当前输入信号λ_avg,i^input(t)输入的时间平均λ_0,i(t)阈值切换后的值λ_min,i(t)空间过渡区计算后的值λ_i(t)最终切换参数。使用dump_atomic_history参数时还会把完整的输入/切换历史追加到该数组之后列数相应增加便于调试。该数组可由dump、compute等输出命令访问。6. 限制与约束Restrictions以下限制均须在配置脚本中满足否则运行时报错或行为不符合预期必须启用 APIP 包本 pair style及配套 fix属于 APIP 包只有 LAMMPS 以该包构建时才可用。构建方式参见 Build_package。必须与fix lambda/apip配对使用本 pair style 仅为fix lambda/apip服务输入脚本中两者都必须存在且fix lambda/apip恰好一个init_style()会强制校验Exact one fix lambda required。必须使用atom_style apip原子风格需要提供apip_lambda_input_ta等字段见 atom_vec_apip.cpp 中MODE_THERMOSTAT分支的字段配置。截断一致性fix lambda/apip的cut_hir_λ,hi不得超过本 pair style 的邻居列表 cutoff也不得超过 pair 势能截断违反时init/init_style会报错。邻居列表类型需要 FULL GHOST 邻居列表这会影响通信开销是把空间过渡区计算放入 pair style 以便负载均衡这一设计权衡的一部分。7. Mixing 与 pair_modify 行为截断距离混合本 pair style 的 cutoff 支持混合mixing默认混合方式为geometric可用pair_modify mix修改参见 pair_modify。不支持的 pair_modify 选项shift、table、tail 均不支持。重启文件不写入任何二进制重启信息因此读取重启文件时必须重新声明pair_style与pair_coeff。rRESPA 不支持本 pair style 不支持run_style respa的inner、middle、outer关键字。默认值无除继承 fix 的默认参数外本 pair style 自身无默认参数。8. 相关命令与进一步阅读切换参数计算fix lambda/apip输入信号计算pair_style lambda/input/apip 与 lambda/input/csp/apip快速势pair_style eam/apip、pair_style pace/apip能量守恒修正fix lambda_thermostat/apip负载均衡fix atom_weight/apip保守可微切换参数方案fix lambda/la/csp/apip总览与更多示例Howto_apip、examples/PACKAGES/apip/README仓库提供的可运行示例还包括examples/PACKAGES/apip/in.surface.balance模拟表面演示fix atom_weight/apipfix balance对 APIP 的负载均衡收益examples/PACKAGES/apip/in.vacancy.dynamic.lambda含空位的 Cu 体系便于可视化过渡区并直观检验参数选择对应的data.vacancy、data.surface.balance数据文件与参考 log 文件均位于 examples/PACKAGES/apip 目录。9. 小结pair_style lambda/zone/apip以只传一个 cutoff、其余参数从 fix 提取的极简接口承担了 APIP 流程中最具空间性的计算——近邻驱动的 λ_min,i。它通过与fix lambda/apip的extract()接口解耦参数、通过 FULLGHOST 邻居列表获取跨处理器信息、通过多项式截止函数保证平滑性并通过time_per_atom提取接口融入fix atom_weight/apip的负载均衡框架。理解这一 pair style 的实现pair_lambda_zone_apip.cpp是正确调优 APIP 模拟、尤其是配置空间过渡区半径与邻居截断的关键。方法学参考文献Immel, Drautz and Sutmann,J Chem Phys, 162, 114119 (2025)即fix lambda/apip源码中引用的 doi.org/10.1063/5.0245877保守可微方案参见 Immel 等 arXiv:2512.07693。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐LAMMPS APIP 系列之 pair_style lambda/input/apip自适应精度势的切换输入计算详解LAMMPS APIP 系列之 pair_style lambda/input/apip自适应精度势的切换输入计算详解 导读 本文以 LAMMPS 官方文档科研科学计算高性能计算LAMMPS APIP 包 fix lambda/apip 命令完全指南自适应精度势切换参数的动态计算LAMMPS APIP 包 fix lambda/apip 命令完全指南自适应精度势切换参数的动态计算 导读 本文是 LAMMPS APIPAdaptive科研科学计算高性能计算LAMMPS APIP 包 fix lambda/la/csp/apip 详解基于可微中心对称参数的保守自适应精度势LAMMPS APIP 包 fix lambda/la/csp/apip 详解基于可微中心对称参数的保守自适应精度势 本指南围绕 LAMMPS APIPAd科研科学计算高性能计算上一篇emoji-cheat-sheet性能优化处理大量表情符号数据的技术下一篇giffgaff英国SIM卡完整使用指南激活、保号与实用技巧全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考