科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载导读pair_style mie/cut是 LAMMPS 中实现广义 Mie 势能的非键对势样式通过独立的排斥指数与吸引指数描述原子间相互作用可精确还原 Lennard-JonesLJ势并推广到任意幂次组合广泛用于流体相平衡与热物性研究。本文基于 LAMMPS 仓库中的官方命令文档 doc/src/pair_mie.rst结合核心源码 src/EXTRA-PAIR/pair_mie_cut.cpp 与单元测试展开帮助你掌握其数学形式、pair_style/pair_coeff完整语法、混合规则、长程尾校正、rRESPA 支持以及 GPU/OpenMP/KOKKOS 加速变体的使用与底层实现原理。概述什么是 Mie 势能Mie 势能是 1903 年由 Gustav Mie 提出的一般化幂函数型对势见文档末尾引文(Mie)G. Mie, Ann Phys, 316, 657 (1903)其能量表达式为E C·ε·[(σ/r)^γ_rep − (σ/r)^γ_att] r r_c其中εepsilon为势阱深度单位与当前units的能量单位一致σsigma为碰撞直径距离单位即势能过零点的距离γ_repgammaR与γ_attgammaA分别是排斥与吸引项的幂指数r_c为截断距离cutoffC是由两个指数共同决定的归一化常数C (γ_rep/(γ_rep−γ_att)) · (γ_rep/γ_att)^(γ_att/(γ_rep−γ_att))常数C的作用是保证对于任意(γ_rep, γ_att)组合势阱最小值都恰好位于r σ、深度恰好为−ε从而使 Mie 参数可以像 LJ 参数一样直观解读。当取经典 12/6 指数时C 4上述公式退化为标准 Lennard-Jones 势E_LJ 4·ε·[(σ/r)^12 − (σ/r)^6]该退化关系在官方文档中有明确说明也在 src/EXTRA-PAIR/pair_mie_cut.cpp 中通过相同的Cmie归一化公式实现源码与文档公式完全一致。背景参考Mie 势的现代复兴主要得益于 Avendano 等人的工作文档引文(Avendano)C. Avendano, T. Lafitte, A. Galindo, C. S. Adjiman, G. Jackson, E. Muller, J Phys Chem B, 115, 11154 (2011)其将 Mie 势用于 SAFT 型方程与流体的分子模拟研究。语法与完整示例pair_style mie/cut的命令语法为pair_style mie/cut cutoffcutoffMie 相互作用的全局截断距离距离单位为必填参数。settings()函数要求参数个数必须为 1否则报错Illegal pair_style command见 src/EXTRA-PAIR/pair_mie_cut.cpp。每个原子类型对必须通过pair_coeff命令定义系数完整格式如下pair_style mie/cut 10.0 pair_coeff 1 1 0.72 3.40 23.00 6.66 pair_coeff 2 2 0.30 3.55 12.65 6.00 pair_coeff 1 2 0.46 3.32 16.90 6.31pair_coeff的五个必需参数依次为参数含义单位epsilon势阱深度 ε能量单位sigma碰撞直径 σ距离单位gammaR排斥指数 γ_rep无单位一般 γ_attgammaA吸引指数 γ_att无单位cutoff可选该类型对的截断距离距离单位第 5 个参数cutoff是可选的若省略则该类型对使用pair_style命令中声明的全局截断。源码中coeff()通过参数个数narg 6 || narg 7严格校验少于 6 个或多于 7 个参数都会报错Incorrect args for pair coefficients见 src/EXTRA-PAIR/pair_mie_cut.cpp。系数同样可以通过read_data命令读取的 data 文件、或read_restart命令读取的二进制重启文件中的Pair Coeffs段定义命令文档详见 pair_coeff、read_data 与 read_restart。参数深层含义与指数选择ε 与 σ 的物理意义在 Mie 势中ε直接对应势阱深度σ直接对应势能过零点等价于 LJ 势中的参数。二者无需换算即可直接沿用文献中报道的 Mie 参数例如用pair_style mie/cut 10.0配合pair_coeff 1 1 0.72 3.40 23.00 6.66这类ε, σ, γ_rep, γ_att组合。γ_rep 与 γ_att 的作用排斥指数与吸引指数的相对大小决定势能曲线的形状更大的γ_rep使排斥壁更陡峭势能曲线更硬γ_att通常取 6对应色散力的渐进行为但 Mie 势允许将其视为自由参数以更精确拟合实验数据或量子化学计算结果必须保证γ_rep γ_att否则C的归一化定义含γ_rep − γ_att分母无意义这一约束由 src/EXTRA-PAIR/pair_mie_cut.cpp 中的Cmie计算直接体现。当γ_rep 12, γ_att 6时即为标准 LJ 势pair_style mie/cut与pair_style lj/cut在数值上等价。力与能量的源码实现从公式到代码从源码结构看pair_style mie/cut的核心计算位于类PairMIECut::compute()src/EXTRA-PAIR/pair_mie_cut.cpp。为了在力循环中避免重复计算昂贵的幂函数实现将势能公式预分解为四个系数mie1 C·γ_rep·ε·σ^γ_rep mie2 C·γ_att·ε·σ^γ_att mie3 C·ε·σ^γ_rep mie4 C·ε·σ^γ_att这些系数在init_one()中一次性算好src/EXTRA-PAIR/pair_mie_cut.cpp随后在力循环中只计算r2inv 1/rsq rgamA r2inv^(γ_att/2) // 即 (1/r)^γ_att rgamR r2inv^(γ_rep/2) // 即 (1/r)^γ_rep forcemie mie1·rgamR − mie2·rgamA fpair factor_mie·forcemie·r2inv其中fpair即径向力分量正值对应排斥原子受力为delx·fpair等分量src/EXTRA-PAIR/pair_mie_cut.cpp。注意两处工程优化力与能量分开计算力循环只计算forcemie只有需要能量时才额外计算evdwl mie3·rgamR − mie4·rgamA − offset从而在纯力计算如 NVE 不输出能量时省去一次减法与查表extract()接口pair_style mie/cut实现了extract()方法可向外暴露epsilon、sigma、gamR、gamA四个二维数组src/EXTRA-PAIR/pair_mie_cut.cpp供其他命令如某些 fix/compute读取参数例如单元测试 mol-pair-mie_cut.yaml 正是通过extract段校验了这些参数数组。single()接口除常规力循环外该类还实现了single()方法src/EXTRA-PAIR/pair_mie_cut.cpp用于按给定rsq计算单次相互作用力与能量这对pair_write、pair_style hybrid中需要按对调用的场景至关重要。从实现看其公式与compute()完全一致同样应用了offset平移。截断处理、势能平移与长程尾校正截断与 offsetshift 选项pair_style mie/cut支持pair_modify shift选项用于在截断处对势能进行平移使E(r_c) 0避免能量在截断处出现不连续。对应源码在init_one()中if (offset_flag cut 0) offset C·ε·[(σ/r_c)^γ_rep − (σ/r_c)^γ_att] else offset 0.0见 src/EXTRA-PAIR/pair_mie_cut.cpp。当shift未开启时offset恒为 0能量表达式即为原始 Mie 势。tail长程尾校正该对势同样支持pair_modify tail选项为能量与压力添加长程尾校正。源码中init_one()在tail_flag开启时通过MPI_Allreduce统计全系统 i、j 类型原子总数再按球面积分解析式计算etail_ij与ptail_ijsrc/EXTRA-PAIR/pair_mie_cut.cpp。从推导可推断该实现要求γ_rep 3且γ_att 3否则积分在无穷远处发散——因此使用tail时指数需满足该约束。pair_modify的详细选项见 pair_modify。rRESPA多重时间步支持pair_style mie/cut支持run_style respa的inner、middle、outer关键字可将对力按距离分区到 rRESPA 层级的不同时间步上。源码中的证据链非常完整构造函数设置respa_enable 1src/EXTRA-PAIR/pair_mie_cut.cppinit_style()根据respa集成器层级自动请求REQ_RESPA_INOUT或REQ_RESPA_ALL邻列表并读取cut_respa截断数组src/EXTRA-PAIR/pair_mie_cut.cpp专门实现compute_inner()、compute_middle()、compute_outer()三个分层计算函数src/EXTRA-PAIR/pair_mie_cut.cpp各层之间用三次平滑函数rsw²·(3−2·rsw)过渡保证力的连续性init_one()末尾还会校验cut[i][j] ≥ cut_respa[3]内部截断否则报错Pair cutoff Respa interior cutoff。run_style respa的具体用法见 run_style。混合规则Mixing对于不同原子类型对I ≠ J若未显式给出pair_coeffε、σ 与截断距离将按 LAMMPS 的混合规则自动生成。从源码init_one()可看到具体的混合行为src/EXTRA-PAIR/pair_mie_cut.cppepsilon使用mix_energy与 σ 相关的能量混合规则sigma、gammaR、gammaA、cutoff均使用mix_distance。特别值得注意文档明确说明——混合后的排斥指数与吸引指数遵循与距离相同的混合规则默认混合方式为geometric几何平均mix sqrt(x_ii·x_jj)。也就是说γ_rep与γ_att并不会自动按能量规则混合而是按距离规则处理这与 σ 和截断的处理方式一致。混合方式可通过pair_modify mix命令改为arithmetic、geometric或sixthpower单元测试 mol-pair-mie_cut.yaml 中就在运行后通过pair_modify mix arithmetic切换混合规则以覆盖多种场景。详见 pair_modify。特殊键缩放与邻列表pair_style mie/cut在力计算中通过factor_mie force-special_lj[sbmask(j)]应用特殊键1-2、1-3、1-4 键对缩放因子src/EXTRA-PAIR/pair_mie_cut.cpp即复用 LJ 的特殊键缩放权重。这意味着在分子体系中该对势会像 LJ 势一样对成键邻居及其二级、三级邻居按special_bonds权重缩放相互作用——这在混合体系如将 Mie 势用于分子的一部分时需特别留意。邻列表请求由init_style()中的neighbor-add_request()完成并支持 rRESPA 变体src/EXTRA-PAIR/pair_mie_cut.cpp。重启文件支持pair_style mie/cut支持将全部对参数写入二进制重启文件write_restart()会逐类型对写入setflag、epsilon、sigma、gamR、gamA、cutwrite_restart_settings()则写入cut_global、offset_flag、mix_flag、tail_flag等全局设置读取时通过MPI_Bcast广播给所有进程src/EXTRA-PAIR/pair_mie_cut.cpp。因此读取重启文件时无需在输入脚本中重复声明pair_style与pair_coeff详见 restart。加速变体GPU / KOKKOS / OpenMPpair_style mie/cut是 EXTRA-PAIR 包中少数同时提供全部主流加速变体的对势样式之一官方文档声明的加速变体为pair_style mie/cut/gpuGPU 加速pair_style mie/cut/kk以及mie/cut/kk/device、mie/cut/kk/hostKOKKOS 加速pair_style mie/cut/ompOpenMP 线程加速。各变体对应源码文件src/GPU/pair_mie_cut_gpu.cpp 与 src/GPU/pair_mie_cut_gpu.h注册名mie/cut/gpusrc/KOKKOS/pair_mie_cut_kokkos.cpp 与 src/KOKKOS/pair_mie_cut_kokkos.h注册名mie/cut/kk、mie/cut/kk/device、mie/cut/kk/hostsrc/OPENMP/pair_mie_cut_omp.cpp 与 src/OPENMP/pair_mie_cut_omp.h注册名mie/cut/omp。从源码结构看三者均继承自基类PairMIECut因此共享pair_coeff语法、混合规则与系数预计算逻辑只是把compute()循环改写为异构平台版本GPU 变体PairMIECutGPU继承PairMIECut并重写compute()、init_style()支持GPU_FORCE、GPU_NEIGH、GPU_HYB_NEIGH三种 GPU 加速模式src/GPU/pair_mie_cut_gpu.h由suffix gpu自动选择KOKKOS 变体模板化类PairMIECutKokkosDeviceType继承PairMIECut通过ExecutionSpaceFromDevice自动适配 CPU/GPU 后端并在compute()中利用datamask_read/modify做最小化数据同步src/KOKKOS/pair_mie_cut_kokkos.cppOpenMP 变体PairMIECutOMP通过ThrOMP线程池与loop_setup_thr做并行区间划分#pragma omp parallel并行遍历邻居对src/OPENMP/pair_mie_cut_omp.cpp。加速变体的通用启用方式如-sf gpu、-sf kk、-sf omp见 accel_styles。需要注意的是OMP 与 KOKKOS 变体在构造函数中设置了respa_enable 0即这两个加速变体不支持 rRESPAGPU 变体在非 GPU 邻列表模式下也可能有类似限制选择run_style respa时应使用基类版本。安装与启用条件pair_style mie/cut属于EXTRA-PAIR包只有当 LAMMPS 以该包编译时才可用。EXTRA-PAIR 包在 doc/src/Packages_details.rst 中被描述为不太常用的附加对势集合安装方式与其他包一致见 Build_package典型配置cmake -D PKG_EXTRA-PAIRon ../cmake传统 make 方式则是在src目录执行make yes-extra-pair后重新编译。若未安装该包而使用pair_style mie/cutLAMMPS 会报错 Unrecognized pair style。相关示例可见 examples/PACKAGES/dispersionREADME 明确指出其依赖 EXTRA-PAIR 与 ML-PACE 两个包其中in.d2、in.d3演示了将短程机器学习势与色散校正结合的典型工程用法。单元测试与正确性验证LAMMPS 官方单元测试框架为每个对势样式提供了基于 YAML 的回归测试pair_style mie/cut的测试文件位于 unittest/force-styles/tests/mol-pair-mie_cut.yaml。该测试通过 unittest/force-styles 目录的测试驱动运行其结构值得参考前提条件需要atom full原子样式与pair mie/cut样式测试配置pair_style mie/cut 8.0覆盖 5 种原子类型、6 组pair_coeff指数跨度从9.9/4.5到12.1/6.1能充分检验不同指数组合下的力与能量验证方式通过extract段读取epsilon、sigma、gamR、gamA数组与初始/运行后的能量、压力张量、逐原子力做数值对照混合规则覆盖post_commands中pair_modify mix arithmetic切换混合方式说明测试同时验证了混合路径的正确性。这为使用者提供了一份可复现的验收清单当修改实现或移植到新平台时可用同一组参数快速回归验证。默认值与注意事项小结默认值文档明确说明该样式无额外默认Default: none所有系数必须显式给出或通过混合规则生成必须显式设置未通过pair_coeff设置且类型不同I ≠ J的对ε、σ、γ、截断全部依赖混合规则默认几何平均指数约束使用tail长程校正时需γ_rep, γ_att 3恒有γ_rep γ_att单位所有参数单位随当前units设置变化距离类参数σ、cutoff与能量类参数ε务必使用一致的单位体系rRESPA 兼容性基类支持inner/middle/outer三层分区OMP/KOKKOS 加速变体不支持 rRESPA。快速上手示例下面给出一个可直接运行的完整示例混合两种原子类型一个用显式系数、一个靠混合规则生成交叉项units real atom_style full boundary p p p region box block 0 20 0 20 0 20 create_box 2 box create_atoms 1 single 5 5 5 create_atoms 2 single 10 10 10 mass 1 1.0 mass 2 1.0 pair_style mie/cut 12.0 pair_coeff 1 1 0.20 3.40 23.00 6.66 pair_coeff 2 2 0.15 3.55 12.00 6.00 # 1-2 交叉项由混合规则自动生成默认几何平均 pair_modify shift yes neighbor 2.0 bin run 0运行后可用thermo输出的势能PotEng与compute pressure交叉验证将指数改为12/6后结果应与同参数下pair_style lj/cut完全一致——这是检验 Mie 势归一化常数 C 是否正确的最直观手段。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐LAMMPS 水模型对势详解pair_style lj/cut/tip4p/cut 与 lj/cut/tip4p/long 的配置、原理与实战LAMMPS 水模型对势详解pair_style lj/cut/tip4p/cut 与 lj/cut/tip4p/long 的配置、原理与实战 本文系统讲解科研科学计算高性能计算LAMMPS pair_style harmonic/cut 纯排斥谐波截断对势详解公式推导、参数配置与源码剖析LAMMPS pair_style harmonic/cut 纯排斥谐波截断对势详解公式推导、参数配置与源码剖析 导读 harmonic/cut 是 LAMM科研科学计算高性能计算LAMMPS 移位力 Lennard-Jones 势Shifted Force LJ完全指南pair_style lj/smooth/linear 的数学原理、配置与源码剖析LAMMPS 移位力 Lennard Jones 势Shifted Force LJ完全指南pair_style lj/smooth/linear 的数学科研科学计算高性能计算上一篇5步精通Rufus启动盘制作实战完全手册下一篇Moteus当开源精神遇见高性能无刷伺服控制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考