- 科研
- 科学计算
- 高性能计算
【免费下载链接】lammps
Public development project of the LAMMPS MD software package
本指南围绕 LAMMPS APIP(Adaptive-Precision Interatomic Potentials,自适应精度原子间势)包中的fix lambda/la/csp/apip命令展开,系统讲解其语法、五个可选关键字、数学原理(可微 CSP、局部平均、多项式开关/加权函数)以及如何与pair_style hybrid/overlay、eam/fs/apip、pace/apip组合构建保守的自适应精度势。读者读完本文后可独立编写用于表面、空位等局部高精度场景的 APIP 输入脚本,并通过源码理解切换参数 λ 与守恒力的底层实现。
命令定位与适用场景
在 LAMMPS 中,fix 是控制积分过程或对原子施加影响的命令。fix lambda/la/csp/apip(la 即 local averaging,csp 即 centro-symmetry parameter)属于 src/APIP 包,由 David Immel(德国于利希研究中心 FZJ)实现,对应的源码文件为 fix_lambda_la_csp_apip.cpp 与 fix_lambda_la_csp_apip.h,在头文件中通过FixStyle(lambda/la/csp/apip,FixLambdaLACSPAPIP)注册。该 fix 的核心职责是:为每个原子实时计算切换参数 λ_i,并计算由 λ_i 微分化引出的守恒力。
背景上,APIP 的思想是:现代机器学习势(如 ACE)精度接近 DFT,但比经典经验势(如 EAM)慢 100~1000 倍。APIP 用精确但昂贵的势只服务少量"感兴趣"原子,其余原子使用快速势,二者通过连续切换参数 λ_i ∈ [0,1] 插值(详见 Howto_apip.rst)。fix lambda/la/csp/apip即负责在"保守动态切换"模式下计算 λ_i,适用于表面、缺陷、空位等只需局部高精度的模拟场景。
语法与参数速览
官方文档(fix_lambda_la_csp_apip.rst)给出的命令格式为:
fix ID group-ID lambda/la/csp/apip thr_lo thr_hi cut_lo cut_hi lattice keyword args ...其中前五个必填参数含义如下(thr 相关参数单位为距离平方,cut 相关参数单位为距离):
| 参数 | 含义 |
|---|---|
thr_lo | 可微 CSP 局部平均值低于该值时,切换参数为 1(即全部使用快速势) |
thr_hi | 可微 CSP 局部平均值高于该值时,切换参数为 0(即全部使用精确势) |
cut_lo | 局部平均加权函数在该半径内取 1 |
cut_hi | 局部平均加权函数在该半径外取 0(局部平均的最大半径) |
lattice | fcc、bcc或整数 N,N 为 CSP 计算时每个原子考虑的最近邻数目 |
lattice选项在源码中的解析逻辑为:fcc→ 最近邻数 nnn = 12,bcc→ nnn = 14,否则直接读入整数 N(fix_lambda_la_csp_apip.cpp)。值得说明的是,经典中心对称参数通常取 nnn/2 对最近邻向量求和,因此 nnn 需为偶数,fcc(12)与 bcc(14)正好对应面心立方与体心立方晶格特征配位数。
示例:
fix lambda_la all lambda/la/csp/apip 0.25 1.5 15.0 16.0 bcc fix lambda_la mobile lambda/la/csp/apip 0.24 1.5 11.0 12.0 bcc lambda_non_group fast可选关键字
除必选参数外,还可追加零个或多个keyword args对,五个关键字的含义与默认值汇总如下(默认值依据文档与源码构造函数一致):
| 关键字 | 参数 | 含义 | 默认值 |
|---|---|---|---|
csp_cut | 浮点数 | CSP 计算中邻域截断半径,超出该半径的邻居不考虑 | 5.0 |
csp_mode | dynamic/static | dynamic使用可微 CSP 计算切换参数;static使用不可微原始 CSP | static |
forces | no/yes | yes计算由切换参数微分化引起的力 | yes |
lambda_non_group | precise/fast/ 浮点数 | 不在 group-ID 组内原子的恒定切换参数;precise=0,fast=1,浮点数须在 0~1 | 1(即 fast) |
store_peratom | 整数 | 每隔多少个时间步输出一次逐原子统计量 | ∞(不输出) |
源码解析(fix_lambda_la_csp_apip.cpp)对每个关键字做了参数校验:例如csp_mode只接受dynamic/static,lambda_non_group需满足 0 ≤ λ ≤ 1,store_peratom频率必须为正整数;同时校验0 <= cut_lo <= cut_hi、0 <= threshold_lo <= threshold_hi(fix_lambda_la_csp_apip.cpp)。
需要注意一个微妙的点:文档中关于csp_mode的描述存在表述反转——文档原文写"original CSP 与csp_mode dynamic一起使用",而源码中dynamic对应const_ngh_flag = false(每次动态重选 CSP 邻居对)、static对应const_ngh_flag = true(使用恒定 CSP 邻居对以获得守恒势)。从源码结构可以推断:使用可微、守恒的 CSP 描述子应选dynamic(邻居对动态更新,配合可微开关函数得到守恒力);static则固定邻居对,使用不可微的原始 CSP,不产生守恒势。实际使用时请结合文档正文("The original CSP is used instead of the differentiable CSP with the option csp_mode dynamic")与源码行为核对。
数学原理:可微 CSP 与局部平均
自适应精度势的势能定义为(文献 Immel, Drautz, Sutmann, J Chem Phys 162, 114119 (2025)):
E_i = λ_i · E_i^fast + (1 − λ_i) · E_i^precise其中 E_i^fast 为快速势给出的势能,E_i^precise 为精确势给出的势能。由此可得总力:
F_i = Σ_k ( −λ_k ∇_i E_k^fast − (1 − λ_k) ∇_i E_k^precise + (∇_i λ_k)(E_k^precise − E_k^fast) )前两项由 pair style 计算(分别乘 λ 与 1−λ),最后一项(∇_i λ_k)(E_k^precise − E_k^fast)正是本 fix 计算的"切换参数微分化力"。该力项使总力严格等于势能负梯度F_i = −∇_i Σ_k E_k,从而在无外力时按设计守恒能量与动量——这是"保守自适应精度势"的核心。
fix 的工作流程分三步:
- 计算描述子(CSP):对每个原子取 nnn 个最近邻,枚举所有 C(nnn,2) 对邻居,计算"邻居对矢量和"的长度平方,取最小的 nnn/2 个求和得到中心对称参数 csp[i](fix_lambda_la_csp_apip.cpp)。若邻居数不足 nnn,源码直接报错:
Atom has only X neighbours, but Y are required to calculate the CSP。 - 局部平均:在 cut_hi 半径内用加权函数 w(r) 对 csp 做归一化平均:
csp_avg_i = Σ_j csp_j · w(r_ij) / Σ_j w(r_ij)(自项取 w(0)=1)。跨进程的累加通过reverse_comm完成(fix_lambda_la_csp_apip.cpp)。 - 计算 λ:对组内原子,
λ_i = switching_function_poly(csp_avg_i);对组外原子,λ_i = lambda_non_group(默认 1)。
多项式开关与加权函数
开关函数与加权函数使用同一形式的五次多项式(参照 Phys Rev Mat 6, 013804 (2022) Appendix C 的 cutoff 函数),保证在过渡区边界处前两阶导数为零,从而保证力项连续:
switching_function_poly(x): x ≤ thr_lo → 1 x ≥ thr_hi → 0 否则 → 0.5 + 3.75·(u/4 − u³/6 + u⁵/20),其中 u = 1 − 2·(1 + (x − thr_hi)/thr_width)加权函数weighting_function_poly(r)形式相同,仅把 thr_lo/thr_hi 换成 cut_lo/cut_hi;其导数der_weighting_function_poly(r)用于力计算(fix_lambda_la_csp_apip.cpp)。源码注释特别提醒:开关函数的导数实现与pair_la_csp_apip.cpp中保持一致(见 fix_lambda_la_csp_apip.cpp)。
与 pair style 的组合:hybrid/overlay 实战模板
文档强调:快速势与精确势必须通过pair_style hybrid/overlay组合。一个完整的保守自适应精度势输入片段:
fix lambda_la all lambda/la/csp/apip 0.24 1.5 11.0 12.0 bcc pair_style hybrid/overlay eam/fs/apip pace/apip pair_coeff * * eam/fs/apip W.eam.fs W pair_coeff * * pace/apip W.yace W这里eam/fs/apip计算λ_i·E_i^EAM(快速势部分),pace/apip计算(1−λ_i)·E_i^pace(精确势部分),fix 负责 λ 与微分化力,三者共同构成保守势(相关文档见 pair_eam_apip.rst 与 pair_pace_apip.rst)。
仓库自带的完整示例位于 examples/PACKAGES/apip/in.surface.la.cons,它以 Cu 表面(EAM+ACE 耦合)为例,展示了推荐参数选择:
units metal atom_style apip conservative timestep 0.001 fix nve all nve fix lambda_cspavg all lambda/la/csp/apip 0.7 2.0 4.0 8.0 fcc pair_style hybrid/overlay eam/fs/apip pace/apip zero 8.0 pair_coeff * * eam/fs/apip Cu_300K_Immel_2023.eam.fs Cu pair_coeff * * pace/apip Cu-PBE-core-rep.ace Cu pair_coeff * * zero compute lambda all property/atom apip_lambda(参数在示例中以变量定义:cspavg_csp_lo=0.7、cspavg_csp_hi=2.0、cspavg_r_lo=4.0、cspavg_r_hi=8.0、cspavg_lattice=fcc。注意:示例将store_peratom注释掉,避免高频输出开销。)势文件分别位于 examples/PACKAGES/apip/Cu_300K_Immel_2023.eam.fs 与 potentials/Cu-PBE-core-rep.ace,可直接复用。
逐原子输出与压力/应力贡献
store_peratom 逐原子输出:启用后,每 store_peratom 步提供 5 列逐原子向量(
size_peratom_cols = 5,见 fix_lambda_la_csp_apip.cpp):- 切换参数微分化力的 x 分量
- 微分化力的 y 分量
- 微分化力的 z 分量
- 可微 CSP 原始值(即 csp,未局部平均)
- 用于计算切换参数的局部平均可微 CSP(即 csp_avg)
这些列可通过
compute property/atom或 dump 输出命令访问(参考 Howto_output.rst)。实现上,store_f_lambda_before/after在力计算前后记录差值以提取微分化力(fix_lambda_la_csp_apip.cpp),store_la负责写入 csp 与 csp_avg(fix_lambda_la_csp_apip.cpp)。virial 支持:fix 支持
fix_modify virial选项(默认 yes,见文档"Default"一节),将微分化力对全局压力与逐原子应力的贡献计入compute pressure与compute stress/atom;全局压力可通过thermo_style的热力学输出读取(参考 compute_pressure.rst、compute_stress_atom.rst、thermo_style.rst)。源码中virial_global_flag = virial_peratom_flag = thermo_virial = 1在forces yes时被设置(fix_lambda_la_csp_apip.cpp),二体/三体 virial 分别由ev_tally2与ev_tally3实现(fix_lambda_la_csp_apip.cpp)。全局标量(仅 dynamic 模式):当使用非保守的 dynamic CSP 邻居对时,fix 返回累计的"发生变化的 CSP 邻居对数"作为全局标量。势能守恒的前提是该计数恒定不变(每变化一对都可能改变系统总能量)。该标量可通过输出命令读取,例如示例 in.surface.la.nocons 中的用法:
thermo_style custom step etotal f_lambda_cspavg thermo_modify format 2 "%10.09f" colname 3 "#changedCSPpairs"限制与注意事项
- 与势能截断的一致性:fix 在 init 阶段校验:势能截断必须 ≥ cut_hi,且势能截断的平方 ≥ csp_cutsq,否则报错(fix_lambda_la_csp_apip.cpp)。
- 原子样式要求:fix 要求
atom_style apip(即带 λ 属性的原子样式),且要求开启原子 ID(tag_enable);同一模拟中只允许一个fix lambda/la/csp/apip(fix_lambda_la_csp_apip.cpp)。文档示例与 atom_style.rst 均说明atom_style apip conservative适用于保守 APIP(字段为 apip_lambda、apip_lambda_required、apip_e_fast、apip_e_precise)。 - 重启行为:可微 CSP 的邻居对会写入二进制重启文件(
restart_global = 1),保证重启时邻居对连续,从而保持势能守恒;重启时需重新指定本 fix 与 pair 命令(文档"Restart, fix_modify, output"一节;源码见 fix_lambda_la_csp_apip.cpp)。 - 不支持的选项:本 fix 不支持任何
fix_modify选项(virial 除外);其参数不能用于run命令的 start/stop 关键字;能量最小化(minimize)期间该 fix 不会被调用(参考 minimize.rst)。 - 性能与负载均衡:由于 λ 的计算与微分化发生在 fix 中,无法纳入力计算的负载均衡;如需近似负载权重,应配合
fix atom_weight/apip(见 fix_atom_weight_apip.rst)与fix balance(参考 fix_balance.rst)。示例 in.surface.la.cons.balance 展示了带负载均衡的保守 APIP 用法。此外,文档建议comm_style tiled配合 rcb 平衡算法以获得更灵活的域分解。 - 构建要求:本 fix 属于 APIP 包,仅当 LAMMPS 以该包构建时才可用;
pair_style pace/apip还需要安装 lib/pace(ML-PACE 包),见 src/APIP/README 与 Build_package.rst。
相关命令
- pair_style eam/apip:EAM 快速势的 APIP 变体
- pair_style pace/apip:ACE(pace)精确势的 APIP 变体
- Howto_apip.rst:APIP 包总览与三种切换参数模式
- fix_lambda_apip.rst 与 fix_lambda_thermostat_apip.rst:非保守动态切换与能量校正方案
参考文献
- (Immel) Immel, Drautz and Sutmann, J Chem Phys, 162, 114119 (2025)——APIP 原始方法
- (Immel2) Immel, Drautz and Sutmann, arXiv:2512.07693——保守自适应精度势(可微 CSP 局部平均)
- (Kelchner) Kelchner, Plimpton, Hamilton, Phys Rev B, 58, 11085 (1998)——原始中心对称参数 CSP
- 科研
- 科学计算
- 高性能计算
【免费下载链接】lammps
Public development project of the LAMMPS MD software package
相关推荐
LAMMPS fix lambda_thermostat/apip 详解:APIP 自适应精度势的能量守恒局部恒温器
LAMMPS fix lambda_thermostat/apip 详解:APIP 自适应精度势的能量守恒局部恒温器 fix lambda_thermostat
科研科学计算高性能计算LAMMPS APIP 自适应精度原子间势完全指南:原理、三种工作模式与实战配置
LAMMPS APIP 自适应精度原子间势完全指南:原理、三种工作模式与实战配置 自适应精度原子间势(Adaptive Precision Interatomi
科研科学计算高性能计算LAMMPS SPIN 包详解:fix precession/spin 磁自旋进动 fix 的参数、公式与源码实现
LAMMPS SPIN 包详解:fix precession/spin 磁自旋进动 fix 的参数、公式与源码实现 本文围绕 LAMMPS SPIN 包的 fi
科研科学计算高性能计算
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考