科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载导读bond_style mm3是 LAMMPS 中用于描述键伸缩运动的非谐势模型源自 Allinger 等人在 1989 年提出的 MM3 分子力学力场其能量表达式中包含对键长的三次方与四次方修正项比简单的简谐harmonic键势更接近真实分子的键伸缩行为。本文以 doc/src/bond_mm3.rst 为骨架结合 src/YAFF/bond_mm3.cpp 源码实现、单元测试与 MOF 模拟示例完整讲解该势函数的数学形式、系数设定方法、底层实现原理含单位换算与 MM3 论文勘误、加速变体及适用场景。读完本文你将能够在金属有机框架MOF等分子体系的 LAMMPS 输入脚本中正确配置并使用bond_style mm3并理解其能量/力的推导细节。MM3 键伸缩势概述与所属包bond_style mm3定义的是一个在键长方向上非谐的键伸缩势其势函数由 Allinger 等人的 MM3 力场论文提出见 doc/src/bond_mm3.rst 末尾的参考文献 Allinger, Yuh, Lii, JACS, 111(23), 8551-8566 (1989)。该样式属于YAFF 包。从 src/YAFF/README 可以看到YAFF 包实现了使用 QuickFF 工具为金属有机框架MOF模拟生成的典型力场所需要的各类样式。包内除bond_mm3外还包含angle_mm3MM3 角势、pair_mm3_switch3_coulgauss_longMM3 静电/短程相互作用、improper_distharm等配套样式以及 src/YAFF/angle_mm3.cpp、src/YAFF/pair_mm3_switch3_coulgauss_long.cpp 等实现文件。也就是说bond_style mm3通常作为 MOF 全力场中键伸缩部分的一员与角势、二面角势、非键势共同工作。限制说明该样式只有在 LAMMPS 编译时启用了 YAFF 包CMake 选项PKG_YAFF见 cmake/CMakeLists.txt之后才可用。势函数数学形式与单位约定能量公式bond_style mm3的势能表达式为E K (r - r0)^2 [ 1 - 2.55(r - r0) (7/12) * 2.55^2 * (r - r0)^2 ]其中r0键的平衡长度equilibrium bond lengthK键伸缩力常数prefactor即bond_coeff中的第一个系数k2r当前键长。该式本质上是在简谐项K(r-r0)^2的基础上叠加上键长偏差(r-r0)的三次方、四次方修正从而描述非谐anharmonic键伸缩行为当键被拉长或压缩到远离平衡位置时势能曲线不再关于r0对称这符合真实化学键在压缩时变硬、在拉伸时变软的物理特性。系数量纲与单位换算非谐修正项的前置因子带有 Å 量纲-2.55的单位是Å⁻¹(7/12) * 2.55²的单位是Å⁻²。代码内部会自动完成这些因子到当前单位体系的换算。以 src/YAFF/bond_mm3.cpp 为例实现中先根据force-angstrom换算出 K3、K4K3 -2.55/force-angstrom; K4 7.0/12.0*2.55*2.55/force-angstrom/force-angstrom;force-angstrom是 LAMMPS 内部维护的1 Å 在当前单位制下对应的长度数值在real、metal等单位下其值为 1.0在 SI 单位制下为1.0e-10。因此换算对用户完全透明用户在bond_coeff中只需按当前单位给出 K 与 r0 即可。KOKKOS 加速版本在 src/KOKKOS/bond_mm3_kokkos.cpp 中同样在主机端预计算d_K3、d_K4后传入设备端。MM3 论文勘误提示官方文档特别提醒MM3 原始论文中的 Eq.(1) 存在一处笔误——式中(7/12) * 2.55应为(7/12) * 2.55²。LAMMPS 采用修正后的正确形式即本文上述公式。这一点在使用其它工具导出 MM3 参数时值得留意避免参数含义与 LAMMPS 实现不一致。语法与系数设置命令语法bond_style mm3语法极其简洁没有任何额外参数所需系数全部通过bond_coeff命令或数据文件给出。支持的键类型系数对每一种键类型bond type必须通过bond_coeff命令或read_data/read_restart读入的 data 文件 / 重启文件定义两个系数系数符号量纲/单位含义1Kenergy/distance²键伸缩力常数源码中记为k22r0distance键的平衡长度官方文档示例bond_style mm3 bond_coeff 1 100.0 107.0即对键类型 1 设置K 100.0、r0 107.0单位取决于units设置例如real单位下能量为 kcal/mol、距离为 Å。多类型体系的系数设定来自单元测试unittest/force-styles/tests/bond-mm3.yaml 展示了含 5 种键类型的多键型体系如何配置bond_style mm3 bond_coeff 1 250.0 1.5 bond_coeff 2 300.0 1.1 bond_coeff 3 350.0 1.3 bond_coeff 4 650.0 1.2 bond_coeff 5 450.0 1.0该测试同时声明了extract: k2 1与extract: r0 1对应源码中 bond_mm3.cpp 的extract()接口——它允许其它模块如 MC 移动、fix命令按名称提取内部系数数组k2与r0。在 data 文件 / 重启文件中读写系数从源码可以看到系数在各类文件中的读写格式data 文件写入bond_mm3.cpp按type k2 r0的列格式输出1 %g %g\n重启文件读写bond_mm3.cpp分别将k2[1..nbondtypes]与r0[1..nbondtypes]写入读回后由 0 号进程广播MPI_Bcast到所有进程并把setflag全部置 1。因此系数既可以在输入脚本中通过bond_coeff设定也可以预先写在 data 文件的Bond Coeffs段或在重启后直接延续。源码级实现原理compute能量与力的计算核心计算在 src/YAFF/bond_mm3.cpp 的compute()中完成遍历neighbor-bondlist中的每条键由两原子坐标差delx/dely/delz求出键长r sqrt(rsq)偏差dr r - r0[type]计算能量仅当需要能量时ebond k2[type] * dr^2 * (1 K3*dr K4*dr^2)计算力de_bond 2*k2[type]*dr * (1 1.5*K3*dr 2*K4*dr^2) fbond -de_bond / r即F -dE/dr再沿键方向向量分配到两端原子f[i1] delx*fbondf[i2] - delx*fbond并遵循newton_bond标志与局部原子归属判断。力表达式中1.5*K3*dr 2.0*K4*dr^2正是对(1K3*drK4*dr²)求导乘以 2 来自dr²的导数的结果体现了能量表达式与力的自洽性。single单键能量查询single() 用于计算单条键的能量与力供compute bond/local等输出原子级/键级量时调用逻辑与compute完全一致返回k2[type]*dr²*(1K3*drK4*dr²)并通过引用参数fforce输出力值。born_matrix弹性张量接口bond_mm3声明了born_matrix_enable 1bond_mm3.cpp并在 born_matrix() 中提供键势对键长的一阶、二阶导数du、du2du 2*k2*dr 3*K3*dr² 4*K4*dr³ du2 2*k2 6*K3*dr 12*K4*dr²该接口服务于基于 Hessian/弹性矩阵的后续计算如声子、弹性常数类分析说明bond_style mm3在 LAMMPS 内部被当作可提供解析二阶导的完整力场组件来对待。头文件中的类结构src/YAFF/bond_mm3.h 中通过BondStyle(mm3,BondMM3)宏注册样式名BondMM3继承自基类Bond内部仅维护两个系数数组double *r0, *k2并重写compute、coeff、equilibrium_distance、write_restart/read_restart、write_data、single、born_matrix、extract等虚函数。其中equilibrium_distance()返回r0[i]可被需要平衡键长的模块直接调用。加速变体mm3/kk 与 mm3/omp与其它键样式一样bond_style mm3提供两种加速变体Accelerator Variantsmm3/kkKOKKOS与mm3/ompOPENMP。根据 doc/src/accel_styles.rst 的通用说明加速样式在功能上与普通样式完全一致只是针对不同硬件做了优化结果除浮点舍入误差外应当相同。mm3/omp见 src/OPENMP/bond_mm3_omp.cpp继承BondMM3在compute()中通过#pragma omp parallel将键列表按线程切分loop_setup_thr并使用ThrData做线程级累加与归约reduce_thr适用于多核 CPU 共享内存并行。mm3/kk见 src/KOKKOS/bond_mm3_kokkos.cpp使用 Kokkos 的parallel_for/parallel_reduce在设备端GPU/众核执行键遍历k_r0、k_k2等系数数组通过sync/modify在主机与设备间同步。使用方式有三种在输入脚本中显式写bond_style mm3/omp或mm3/kk、通过-suffix命令行开关、或输入脚本内的suffix命令。注意加速变体只有在 LAMMPS 相应编译进 OPENMP / KOKKOS 包时才可用。单元测试验证LAMMPS 自带的力样式回归测试 unittest/force-styles/tests/bond-mm3.yaml 对bond_style mm3做了完整的数值验证前置条件atom full、bond mm3使用 29 个原子的测试体系in.fourmol对应 unittest/force-styles/tests/in.fourmol真实单位制units real给出 5 组bond_coeff、平衡键长校验equilibrium: 5 1.5 1.1 1.3 1.2 1、初始能量init_energy: 4.247265008273143、运行后能量run_energy: 4.190444665774225以及 29 个原子逐项的init_forces/run_forces/init_stress/run_stress参考值测试容差epsilon: 2.5e-13用于验证实现与参考值的严格一致。这说明bond_style mm3的能量、力、应力张量输出都有自动化的数值基准用户若改动实现或怀疑结果可直接运行该测试套件复核。实战应用MOF 体系中的完整力场配置YAFF 包的核心应用场景是用 QuickFF 生成 MOF 力场。仓库自带的示例 examples/PACKAGES/yaff/mof5/in.mof5 给出了一个完整的、使用bond_style mm3的 NPT 模拟输入脚本值得逐段解读units real atom_style full boundary p p p dielectric 1 special_bonds lj 0.000000 0.000000 1.000000 coul 1.000000 1.000000 1.000000 pair_style mm3/switch3/coulgauss/long 12.0000 4.0000 pair_modify table 16 # Accuracy of the table used for real space electrostatics pair_modify mix arithmetic pair_modify tail no bond_style mm3 angle_style hybrid cross mm3 dihedral_style fourier improper_style distharm read_data lammps.data # Data file location kspace_style pppm 0.0000001 # Ewald accuracy neighbor 2.0 bin neigh_modify every 2 delay 4 check yes thermo 10 thermo_style custom step etotal ke temp pe emol evdwl ecoul elong etail vol press timestep 0.5 # in femtosecond velocity all create 0.0 5 fix 1 all npt temp 300.0 300.0 100.0 tri 1.0 1.0 1000.0 tchain 3 mtk yes nreset 1000 run 100要点bond_style mm3与pair_style mm3/switch3/coulgauss/long、angle_style hybrid cross mm3、improper_style distharm等 YAFF 配套样式联合使用构成完整的 MOF 力场键系数由read_data lammps.data读入data 文件Bond Coeffs段格式为type k2 r0配套示例还包括 examples/PACKAGES/yaff/mil53al/in.mil53aMIL-53(Al) 体系bond_style harmonic变体与 examples/PACKAGES/yaff/mof5/lammps.dataMOF-5 数据文件可用作对照学习。构建要求与注意事项必须启用 YAFF 包。CMake 构建时设置-D PKG_YAFFonYAFF 是 cmake/CMakeLists.txt 中列出的标准包默认关闭或用传统 make 方式make yes-yaff后重新编译可参考Build package相关文档页。系数缺失会报错。bond_mm3.cpp 中coeff()要求恰好 3 个参数type、K、r0参数个数不符或类型范围无效时 LAMMPS 会终止并提示Incorrect args for bond coefficients未被bond_coeff或 data 文件覆盖的键类型在运行时将产生未定义行为因此务必确保所有键类型都被赋值。默认值该样式没有额外的默认系数文档 Default: none所有系数必须显式给出。与其它键势的区分bond_style mm3专指 Allinger MM3 力场中的非谐键伸缩项与 LAMMPS 默认的bond_style harmonic简谐势在数学形式、参数含义上均不同不可混用系数。相关命令与进一步阅读bond_coeff设定键类型系数的核心命令read_data、read_restart从 data 文件或重启文件读入系数angle_mm3配套的 MM3 角伸缩势E K(θ-θ0)²[1-0.014(θ-θ0)5.6×10⁻⁵(θ-θ0)²-7.0×10⁻⁷(θ-θ0)³9×10⁻¹⁰(θ-θ0)⁴]θ0 以度为单位、内部换算为弧度pair_mm3_switch3_coulgauss_long配套的非键/静电样式src/YAFF/READMEYAFF 包说明与 QuickFF 方法论参考文献Vanduyfhuys 等J. Comput. Chem. 36(13):1015-1027 (2015) 及 39(16):999-1011 (2018)。总结bond_style mm3以 MM3 力场的非谐键伸缩势为核心通过两个系数力常数K与平衡键长r0即可描述更真实的键伸缩行为。其实现src/YAFF/bond_mm3.cpp完整覆盖了能量、力、单键查询、Born 矩阵与系数提取接口并配套 OPENMP / KOKKOS 加速变体与自动化回归测试。在实际使用中它主要服务于 QuickFF 导出的 MOF 力场见 examples/PACKAGES/yaff/mof5/in.mof5需要以PKG_YAFF编译为前提并注意 MM3 论文原始公式的勘误以及系数必须逐类型完整定义这两点。掌握上述配置与原理后你便可以在自己的 MOF / 分子模拟中正确启用并验证这一非谐键势。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐LAMMPS 的 angle_style mm3 角度势详解公式、系数配置与加速变体实战LAMMPS 的 angle_style mm3 角度势详解公式、系数配置与加速变体实战 angle_style mm3 是 LAMMPS 中实现 MM3 分科研科学计算高性能计算LAMMPS bond_style harmonic/shift/cut 详解位移截断谐振键势的参数、原理与实现LAMMPS bond_style harmonic/shift/cut 详解位移截断谐振键势的参数、原理与实现 导读 bond_style harmonic科研科学计算高性能计算LAMMPS bond_style harmonic 详解谐振键势的参数配置、源码原理与加速变体LAMMPS bond_style harmonic 详解谐振键势的参数配置、源码原理与加速变体 bond_style harmonic 是 LAMMPS 中科研科学计算高性能计算上一篇Wand-Enhancer 完整指南三步解锁 WeMod Pro 功能免费解除时长限制下一篇抖音无水印下载入门指南douyin-downloader 三分钟跑通批量下载创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考