资讯详情

LAMMPS fix pair 命令详解:从 pair_style 中提取逐原子量并驱动条件输出

📅 2026/10/16 1:39:11 | 华诺云谱 👁 阅读
LAMMPS fix pair 命令详解:从 pair_style 中提取逐原子量并驱动条件输出
科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载fix pair是 LAMMPS 提供的一种特殊 fix它本身不施加任何力而是充当数据探针定期从指定的 pair style 内部提取逐原子per-atom物理量如局部电子密度 rho、感应偶极矩 uind/uinp、PACE 外推等级 gamma 等并以 per-atom vector 或 per-atom array 的形式保存下来供dump、compute、variable等其他命令读取。掌握这条命令后你可以把势函数内部原本不可见的中间量写入 dump 文件、参与全局归约甚至结合dump_modify skip实现满足条件才输出的按需记录这对分析机器学习势的外推风险、追踪 AMOEBA 偶极演化等场景非常实用。命令语法与参数说明fix pair命令的完整语法如下对应 fix pair 文档fix ID group-ID pair N pstyle name flag ...各参数含义ID、group-ID含义与 fix 命令 中其他 fix 的 ID 和组参数完全一致pair本 fix 的样式名固定为pairN调用周期即每隔N个步timestep触发一次提取源码中要求N 1否则报Illegal fix pair every value错误pstyle要提取信息的目标 pair style 名称例如eam。可以是pair_style hybrid中的子样式若同一 pair style 出现多次可写成style:N的形式指定第 N 个实例如eam:1、eam:2也可以是pace/extrapolation、amoeba这类带/的完整样式名name flag ...一对或多对名称/标志参数。name是 pair style 认可的、可被提取的逐原子量名称flag取 0 或 1flag 0该量总是被 pair style 计算fix 只需直接读取不需要额外触发flag 1该量并非每步都计算通常因为计算代价高fix 需要在需要的那一步主动触发 pair style 计算它。官方给出的两个典型示例fix request all pair 100 eam rho 0 fix request all pair 100 amoeba uind 0 uinp 0前者每 100 步从 EAM 势中提取一次每个原子的局部电子密度rhoEAM 势本身总会算出 rho所以 flag 为 0后者每 100 步从 AMOEBA 势中提取两种感应偶极矩。从源码可以看到参数的解析逻辑构造函数中逐一读取name/flag对flag 只接受 0 或 1否则报错Illegal fix pair {} command flag见 FixPair 构造函数。对于 flag1 的字段fix 会自动生成一个触发器名称name_flag例如rho_flag并通过pstyle-extract()拿到 pair style 内部对应的整型标志指针如果 pair style 无法提取该触发器或触发器不是标量dim ! 0都会直接报错终止。工作机制pre_force 触发、post_force 提取理解fix pair的关键在于它挂接在力计算流程的两个钩子上。FixPair::setmask() 同时注册了PRE_FORCE和POST_FORCE以及对应的最小化版本MIN_PRE_FORCE、MIN_POST_FORCE这决定了它的工作方式pre_force 阶段触发当前步号是N的整数倍时把每个 flag1 字段的触发标志置 1通知 pair style 在本步计算对应量。源码中的lasttime记录机制可防止 minimize 的线搜索在同一迭代内多次触发见 FixPair::pre_force。post_force 阶段提取同样在步号是N的整数倍时逐字段调用pstyle-extract_peratom(name, columns)把 pair style 返回的逐原子数据拷贝到 fix 自己的 vector/array 中然后把触发标志复位见 FixPair::post_force。也就是说数据只在到点的步更新一次其余步间保留旧值。构造函数中特意把peratom_freq设为 1而非 N并注册为 per-atom vector/array见 FixPair 构造函数中的注释正是为了保证其他命令在任何时刻访问该数据时都有值且最小化过程中 thermo 输出也能读到。初始化时 vector/array 会清零避免 dump 在第 0 步或variable在第一次 run 前读到未初始化数据。由于它注册了 Atom 类的 GROW 回调并实现了copy_arrays/pack_exchange/unpack_exchange见 grow_arrays 等实现当原子数变化或域分解通信时提取结果会随原子一起迁移和重映射保证多进程并行下数据一致性。输出形式per-atom vector 还是 per-atom arrayfix pair产生的 per-atom 数据形式取决于请求的字段数与各字段的列数如果只指定了1 个name且该量对每个原子是单一数值extract 返回 columns 0则 fix 保存为per-atom vectorf_ID为单值其他情况则创建per-atom arrayf_ID带列列按name参数出现的顺序排列总列数是各字段列数之和。文档中给出的 AMOEBA 例子最能说明这一点uind和uinp都是每个原子的 3 分量偶极矩因此pair_style amoeba fix ex all pair 10 amoeba uind 0 uinp 0会产生一个6 列的 per-atom array第 1~3 列存uind的三个分量第 4~6 列存uinp的三个分量。这样dump的f_ex关键字一次就能输出全部 6 列也可用f_ex[1]这类列引用取其中一部分。从实现看构造时 fix 会先用extract_peratom试探各字段的列数并累加成ncols此时返回指针可能为 NULL因为 pair style 尚未分配该字段真正的字段名是否被识别检查推迟到 post_force 中进行若ncols 1则分配单列 vector否则分配nmax × ncols的二维数组见 FixPair 构造函数。典型用法一提取 EAM 局部电子密度 rho 到 dumppair_style eam 文档 指出eam、eam/alloy、eam/fs、eam/he四种样式支持提取两个逐原子量rho每个原子的局部电子密度和fp嵌入能密度导数两者都是 EAM 力计算中天然产生的量无需触发flag 0。对应的 EAM 实现位于 PairEAM::extract_peratom其中strcmp(str,rho)分支返回逐原子 rho 数组。一个可复制运行的完整输入片段units metal boundary p p p atom_style atomic read_data Cu_u3.data pair_style eam pair_coeff * * Cu_u3.eam fix rho_all all pair 10 eam rho 0 dump 1 all custom 10 rho.dump id type x y z c_rho[1] compute c_rho all reduce avg f_rho_all要点N 10时每 10 步重新提取一次单字段单值因此f_rho_all是 per-atom vector可直接用c_rho[1]chunk reduce 的均值列或直接f_rho_all输出若同时请求rho 0 fp 0则得到 2 列 array可用f_rho_all[1]、f_rho_all[2]分别引用。典型用法二AMOEBA 感应偶极矩pair_style amoeba 文档 说明amoeba与hippo支持提取uind、uinp两个逐原子量感应偶极矩各为 3 分量同样无需触发pair_style amoeba pair_coeff * * keyfile.prn mol2file.mol2 fix dipoles all pair 100 amoeba uind 0 uinp 0 dump 1 all custom 100 dipoles.dump id type f_dipolesdump 文件里每个原子会有 6 列对应两个偶极矩矢量可直接用于可视化极化分布或后处理分析。典型用法三机器学习势外推监控flag1 触发场景这是flag 1的经典用例也是fix pair文档触发条件输出用例的完整展开。pair_style pace 文档 给出了完整脚本pace/extrapolation样式基于 MaxVol 算法计算每个原子的外推等级 gamma由于它需要逐原子矩阵-向量乘法、开销明显大于常规势能评估默认不计算必须由fix pair以gamma 1请求触发pair_style pace/extrapolation pair_coeff * * Cu.yaml Cu.asi Cu fix pace_gamma all pair 10 pace/extrapolation gamma 1 compute max_pace_gamma all reduce max f_pace_gamma variable dump_skip equal c_max_pace_gamma 5 dump pace_dump all custom 20 extrapolative_structures.dump id type x y z f_pace_gamma dump_modify pace_dump skip v_dump_skip variable max_pace_gamma equal c_max_pace_gamma fix extreme_extrapolation all halt 10 v_max_pace_gamma 25这段脚本展示了fix pair与其他命令的完整协作链fix pair每 10 步触发并提取gamma存到 per-atom vectorf_pace_gammacompute reduce把最大 gamma 归约成c_max_pace_gammavariable表达式结合dump_modify skip实现只有系统出现明显外推gamma 5时才写入 dump 文件避免海量无意义输出fix halt在 gamma 超过阈值 25 时直接终止保护训练/筛选流程。这正是fix pair文档中提取机器学习势的精度指标以在满足条件时触发输出见 dump_modify skip用例的落地形态。pstyle 指定规则hybrid 子样式与多实例pstyle参数解析在 FixPair::query_pstyle() 中完成规则如下名字含冒号style:N时冒号前半是样式名、后半是第 N 个实例序号若启用了 suffix多套势并行的后缀机制会先尝试style/suffix的匹配最终通过force-pair_match()在已注册的 pair 列表中查找找不到则报Pair style {} for fix pair not found。因此以下写法都是合法的eam唯一 EAM 实例、eam:1/eam:2多个 EAM 实例中的第 1/2 个、amoeba、pace/extrapolationhybrid 或直接使用该子样式时均适用。需要注意的是fix pair只在创建时和init阶段重新确认目标 pair style 是否存在见 FixPair::init如果输入脚本中fix pair出现在pair_style之前会因找不到对应样式而直接报错——请确保pair_style先于fix pair定义。Restart、fix_modify 与输出接口按 文档说明Restartfix pair的任何信息都不写入二进制 restart 文件fix_modifyfix_modify的通用选项对本 fix 不适用输出fix 产生的 per-atom vector/array 可以被各类输出命令访问包括dumpf_ID/f_ID[col]、compute reduce、variable等若产生 array其列数等于各name参数所产生逐原子量列数之和。哪些 pair style 支持 fix pair 提取并非所有 pair style 都实现了提取接口具体支持哪些name需查各 pair style 的文档页。当前仓库中明确声明支持的包括pair style可提取的 name是否需触发 (flag)文档位置eam、eam/alloy、eam/fs、eam/herho、fp否0pair_eamamoeba、hippouind、uinp各 3 列否0pair_amoebapace/extrapolationgamma是1pair_paceldd局部密度相关量视具体量而定pair_lddldd的实现路径有专门的单元测试佐证test_pair_ldd.cpp 中的注释明确写道pair ldd计算出的局部密度必须能通过Pair::extract_peratom()即 fix pair 使用的路径访问测试直接调用force-pair-extract_peratom(local_density, ncol)并与手工核对的参考值比对两种原子类型对应两列。如果你在使用某个 pair style 时遇到Fix pair cannot extract property {} from pair style错误即可确认该样式未实现对应的提取接口需查阅其文档页确认支持的 name 列表。小结fix pair以极小的语法成本打通了pair style 内部数据 → LAMMPS 通用输出体系的通道pre_force按需触发、post_force统一提取、per-atom vector/array 自动管理、并行通信与原子增减全部由框架处理。实际使用时只需三步查目标 pair style 文档确认支持的name与 flag 要求 → 按fix ID group pair N pstyle name flag ...定义 fix → 用f_ID/f_ID[col]将其接入dump、compute、variable。配合dump_modify skip与fix halt还可以构建外推监控、异常结构筛选等自动化的工作流。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐LAMMPS compute bond 命令详解从 bond_style hybrid 中逐项提取键合子风格能量LAMMPS compute bond 命令详解从 bond_style hybrid 中逐项提取键合子风格能量 本文围绕 LAMMPS 的 compute科研科学计算高性能计算LAMMPS 中 compute smd/ulsph/effm 命令详解ULSPH 有效剪切模量的逐粒子输出LAMMPS 中 compute smd/ulsph/effm 命令详解ULSPH 有效剪切模量的逐粒子输出 导读 本文围绕 LAMMPS MACHDYNS科研科学计算高性能计算LAMMPS compute pair/local 命令完全指南逐对输出距离、能量与力的原理与实战LAMMPS compute pair/local 命令完全指南逐对输出距离、能量与力的原理与实战 compute pair/local 是 LAMMPS 中科研科学计算高性能计算上一篇Synapse Version API 管理接口详解查询服务器运行版本下一篇国家中小学智慧教育平台电子课本下载工具终极免费解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑