科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载本文以 LAMMPS 官方文档 pair_meam_sw_spline.rst 为核心骨架结合 src/MANYBODY/pair_meam_sw_spline.cpp 源码实现、potentials 目录下的势文件以及 examples/PACKAGES/meam_sw_spline 示例脚本系统讲解 LAMMPS 中meam/sw/spline对势样式的物理模型、势文件格式、pair_coeff 配置方法、底层实现原理与运行限制。读完本文你将能够独立完成 Si、Ti 等金属体系的 MEAMSW 势配置、内聚能验证与能量守恒测试并理解其在 MANYBODY 包中的调用机制。一、MEAMSW把修正嵌入原子法与 Stillinger-Weber 三项结合meam/sw/spline是 LAMMPS 中用于金属体系的一种多体对势样式pair style它在**修正嵌入原子法Modified Embedded Atom Method, MEAM**的基础上参考 Lenosky 等人 2000 年的工作额外叠加了一个Stillinger-WeberSW三项角项参考 Stillinger Weber 1985 年的经典工作因此被称为 MEAMSW。该势格式最早由俄亥俄州立大学的 Jeremy Nicklas、Michael Fellinger 和 Hyoungki Park 提出用于开发 bcc 过渡金属势这一点在 pair_meam_sw_spline.cpp 文件末尾的版权注释中也有明确记载。1.1 总能量分解MEAMSW 势的总能量 E 由两部分构成E E_MEAM E_SW E_MEAM Σ_IJ φ(r_IJ) Σ_I U(ρ_I) E_SW Σ_I Σ_JK F(r_IJ) F(r_IK) G(cos(θ_JIK)) ρ_I Σ_J ρ(r_IJ) Σ_JK f(r_IJ) f(r_IK) g(cos(θ_JIK))其中ρ_I 是原子 I 处的电子密度θ_JIK 是以原子 I 为中心、J 与 K 之间的夹角七个函数φ、F、G、U、ρ、f、g全部用**三次样条cubic spline**表示。从物理图像上看E_MEAM 部分继承了经典 EAM 的对势 φ 嵌入能 U(ρ)结构但密度 ρ 中除了二体贡献 Σ_J ρ(r_IJ) 外还加入了三项角贡献 Σ_JK f(r_IJ) f(r_IK) g(cos θ)这使势具备方向性成键能力E_SW 部分则完全由三项角贡献 F(r_IJ)F(r_IK)G(cos θ) 组成相当于显式加入 Stillinger-Weber 式的键角项。二者叠加后可以同时描述金属键合与方向性共价键特征。1.2 与 meam、meam/spline 的关系在 LAMMPS 中meam/sw/spline属于 MANYBODY 包中 MEAM 家族的一员与 pair_style meam、pair_style meam/spline 相关但实现思路不同pair_style meam经典 MEAM势函数以解析形式描述pair_style meam/spline样条化的 MEAM无 SW 三项叠加项且支持多组分pair_style meam/sw/spline样条化 MEAM 与 SW 角项的叠加目前仅支持单元素。在 doc/src/pair_style.rst 中meam/sw/spline的定位是 Splined version of MEAM with a Stillinger-Weber term带 Stillinger-Weber 项的样条化 MEAM。二、语法与最小可用配置2.1 pair_style 语法meam/sw/spline的 pair_style 命令不接受任何参数pair_style meam/sw/spline这一点在源码中得到了确认pair_meam_sw_spline.cpp 的settings()函数规定void PairMEAMSWSpline::settings(int narg, char **/*arg*/) { if (narg ! 0) error-all(FLERR,Illegal pair_style command); }即任何多余参数都会直接报错Illegal pair_style command。2.2 官方文档示例pair_style meam/sw/spline pair_coeff * * Ti.meam.sw.spline Ti # 3 个原子类型全部映射为 Ti 元素 pair_coeff * * Ti.meam.sw.spline Ti Ti Ti第一条 pair_coeff 适用于单类型体系第二条示例假设模拟中有 3 个 LAMMPS 原子类型且全部用 Ti 势处理则文件名后跟 3 个 Ti 元素名完成映射。2.3 一个可运行的完整示例内聚能验证仓库 examples/PACKAGES/meam_sw_spline/Si/in.fcc 给出了最简的 Si fcc 结构验证脚本完整命令如下units metal boundary p p p atom_style atomic lattice fcc 4.147 region box block 0 1 0 1 0 1 create_box 1 box create_atoms 1 box pair_style meam/sw/spline pair_coeff * * Si.b.meam.sw.spline Si mass * 28.085 variable cohesive_energy equal pe/atoms variable atmVol equal vol/atoms variable aLatt equal (4*vol/atoms)^0.3333333333 run 0 print Calculated cohesive energy: ${cohesive_energy} eV/atom print Reference cohesive energy: -4.288 eV/atom print Atomic volume ${atmVol} A^3 print Lattice constant ${aLatt} A print Reference lattice constant 4.147 ATi 的 hcpα 相验证脚本见 examples/PACKAGES/meam_sw_spline/Ti/in.alpha其中使用lattice custom构建 hcp 晶格参考内聚能为-4.831 eV/atom质量设置为mass * 47.90。2.4 三个必须注意的配置细节截断半径在势文件里不在命令里与其他势不同MEAMSW 的截断不能通过 pair_style 或 pair_coeff 命令设置而是由势文件本身定义。从源码看read_file() 在读取完势文件后取 φ、ρ、f、F 四个函数样条截断的最大值作为全局cutoff并写入cutsq[i][j]供邻表构建使用。必须用 mass 命令指定原子质量与 EAM 从势文件读取质量不同.meam.sw.spline势文件不包含质量信息因此必须显式执行mass命令。示例中为mass * 28.085Si或mass * 47.90Ti。参数基于 metal 单位所有.meam.sw.spline势文件均按 LAMMPS metal 单位能量 eV、距离 Å标定因此输入脚本中应使用units metal。势文件首行注释中的UNITS: metal字段也明确标注了这一点。三、势文件格式深入解析.meam.sw.spline势文件分布在仓库的 potentials 目录当前仓库提供 Si 与 Ti 两种元素同时 examples/PACKAGES/meam_sw_spline 下也各有一份副本。以 potentials/Si.b.meam.sw.spline 为例# DATE: 2012-10-26 UNITS: metal CONTRIBUTOR: Robert Rudd, robert.ruddllnl.gov CITATION: Balamane et al, Phys Rev B 46, 2250 (1992) COMMENT: ... 37 -5.511362311759948e02 0.000000000000000000e00 1 0 1 0 9.2969999999999997E-01 1.1344841447915871E02 2.9969523122045521E03 ...文件的组织方式如下结构要素说明第 1 行注释包含 DATE、UNITS必须为 metal、CONTRIBUTOR、CITATION、COMMENT 元信息样条段 1φ节点数 N随后一行给出两端一阶导数 deriv0、derivN然后 N 行节点数据x y y2样条段 27F、G、ρ、U、f、g与段 1 结构完全相同在 potentials/Ti.meam.sw.spline 中可以看到同样 7 段的布局节点数依次为 13、2、2、11、4、10、8。每行节点数据中的第三列y2是预计算的二阶导数源码解析时会将其忽略见 parse() 中// double y2 values.next_double(); ignored的注释二阶导数由程序在 prepareSpline() 中基于自然样条边界条件自行求解三对角方程得出。从源码结构看样条函数在内部由SplineFunction类管理定义于 pair_meam_sw_spline.h每个样条持有节点位置 X、节点值 Y、二阶导数 Y2、一阶差分 Ydelta 以及两端导数 deriv0/derivN。特别值得说明的是宏SPLINE_MEAMSW_SUPPORT_NON_GRID_SPLINES置 0当前仓库默认要求样条节点落在均匀网格上插值时可通过klo (int)(x * inv_h)直接定位区间代码注释声称可提速约 50%置 1支持非均匀节点但需二分查找区间速度较慢。prepareSpline()会在读取节点时检查fabs(h*i xmin - X[i]) 1e-8来判断是否均匀网格若节点非均匀而宏为 0会抛出 TokenizerException 报错。也就是说使用自定义非均匀网格势文件前需要重新编译时开启该宏。四、pair_coeff 的元素映射规则meam/sw/spline仅使用一条pair_coeff 命令其参数格式为pair_coeff * * 势文件名 N 个元素名其中 N 等于 LAMMPS 原子类型数元素名依次映射到原子类型 1、2、…、N前两个参数必须是* *以覆盖全部 LAMMPS 原子类型势文件名指定包含所有所需元素参数的势文件N 个元素名按顺序将 LAMMPS 原子类型映射到势文件中的元素。以 3 个原子类型全部为 Ti 为例pair_coeff * * Ti.meam.sw.spline Ti Ti Ti即原子类型 1、2、3 均映射为势文件中的 Ti 元素。若映射值为NULL则该原子类型不执行映射——这主要用于pair_style hybrid场景NULL 作为占位符表示该原子类型将交由其他势处理。例如一个 hybrid 脚本中类型 1 用 meam/sw/spline类型 2 用其他对势pair_style hybrid meam/sw/spline lj/cut 2.5 pair_coeff * * meam/sw/spline Ti.meam.sw.spline Ti NULL pair_coeff * * lj/cut 1 1 0.1 3.0关于势文件的搜索路径可参考 pair_coeff 页面对路径的替代指定方式如pair_coeff中直接使用路径或通过 LAMMPS_POTENTIALS 环境变量定位。源码层面对元素映射的限制在 coeff() 中map_element2type(narg-3,arg3); // for now, only allow single element if (nelements 1) error-all(FLERR, Pair meam/sw/spline only supports single element potentials);即当前实现只允许映射到单一元素若出现两个不同元素名会直接报错Pair meam/sw/spline only supports single element potentials。这意味着原子类型可以多于 1如Ti Ti Ti但所有类型必须映射到同一个元素合金/多组分体系目前不支持官方文档同样明确currently supports only single-element MEAMSW potentials. It may be extended for alloy systems in the future。五、源码级实现原理一次 compute() 的三阶段旅程理解meam/sw/spline的底层执行流程有助于诊断能量异常或性能问题。从 compute() 的实现看每次力与能量计算分为三个阶段阶段 1遍历全邻表full neighbor list累计密度并计算嵌入能对每个原子 I遍历其全部邻居 J用f.eval(rij)、F.eval(rij)求二体量对每对已记录的键 K计算cos θ并累计partial_sum f_K * g(cosθ)与partial_sum2 F_K * G(cosθ)见 pair_meam_sw_spline.cpp对应公式中的三项密度项同时累计二体密度rho.eval(rij)随后用U.eval(rho_value, Uprime_i)求嵌入能 U(ρ) 及其导数 U′(ρ)并扣除真空零点能zero_atom_energy其值为U.eval(0.0)见 read_file()目的是让真空中孤立原子的能量为 0。阶段 2forward_comm 通信交换 U′(ρ)嵌入能导数 U′(ρ_I) 需要通过 MPI 前向通信广播给邻居pack_forward_comm/unpack_forward_comm为阶段 3 的二体对力做准备。阶段 3遍历半邻表half neighbor list计算二体对势与最终力对每个原子对 I-Jfpair rho_prime(rij) * (Uprime_values[i] Uprime_values[j]) phi_prime(rij)即二体对势 φ 的导数与嵌入能导数贡献之和除以 r_ij 得到梯度方向的力并累加到 I、J 上pair_meam_sw_spline.cpp三项贡献的力已在阶段 1 的三体循环中通过ev_tally3(i, j, k, ...)计入pair_meam_sw_spline.cpp。也正因这种全邻表算密度、半邻表算对力的算法结构init_style() 中同时请求了 FULL 和 half 两张邻表并强制要求newton pair onnewton off 时报错Pair style meam/sw/spline requires newton pair on。六、验证方法单元测试与示例基准6.1 官方回归测试基准仓库 unittest/force-styles/tests/atomic-pair-meam_sw_spline.yaml 提供了该 pair style 的自动回归测试配置lammps_version: 2 Sep 2026 epsilon: 2e-12 prerequisites: | pair meam/sw/spline pre_commands: | atom_modify map array units metal lattice diamond 5.43 region box block 0 2 0 2 0 2 create_box 1 box create_atoms 1 box displace_atoms all random 0.1 0.1 0.1 623426 mass 1 29.0 velocity all create 100 4534624 pair_style: meam/sw/spline pair_coeff: | * * Si.b.meam.sw.spline Si该测试以 64 个 Si 原子diamond 5.43 晶格 随机位移为基准给出了精确到小数点后 14 位的初始化能量init_vdwl: -110.45990817806636与运行后能量run_vdwl: -111.18747862613623并指定 2e-12 的能量容差。读者可将其作为自建势文件正确性的校准基准若用同一输入重算得到一致的能量与力则说明势文件解析与样条插值均正常。6.2 真空中单原子测试examples/PACKAGES/meam_sw_spline/Si/in.single_atom 用固定边界把单个 Si 原子放在真空中boundary f f fbox 范围 -100100 Åpair_style meam/sw/spline pair_coeff * * Si.b.meam.sw.spline Si mass * 28.085 variable cohesive_energy equal pe/atoms run 0输出参考内聚能为0 eV/atom。这验证了前述zero_atom_energy U.eval(0.0)的零点能扣除机制孤立原子的能量恰好被归零。6.3 NVE 能量守恒测试examples/PACKAGES/meam_sw_spline/Si/in.energy_conservation.meam.sw 构建 diamond 5.431 的 Si 块体用fix nve在 0.002 ps 时间步下运行 2000 步并以thermo_style custom step vol etotal press pxx pyy pxz监控总能量是否守恒——这是检验多体势力场正确性的经典手段Ti 版本见 examples/PACKAGES/meam_sw_spline/Ti/in.energy_conservation.meam.sw其中还演示了用lattice custom构建六方晶格的方法。七、兼容性与使用限制汇总7.1 混合mixing、shift、table、tailmeam/sw/spline不支持多种元素类型间的混合mixing本身即为单元素势不支持pair_modify 的shift、table、tail选项。7.2 重启文件与 rRESPA该势的信息不写入二进制重启文件因为完全存储在外部势文件中因此读取 restart 文件后必须在输入脚本中重新指定 pair_style 与 pair_coeff配合 run_style respa 时只能通过pair关键字使用不支持inner、middle、outer关键字。7.3 运行环境与构建要求必须开启newton onnewton 命令pair 相互作用要求 Newton 模式开启该 pair style 仅当 LAMMPS 以MANYBODY 包构建时才可用。CMake 方式下需启用cmake -D PKG_MANYBODYon ../cmake或传统 make 方式下在 src/Makefile.package.settings以及 src 目录的 Makefile 体系中添加PKG_MANYBODY MANYBODY后执行make yes-manybody。详见 Build package。7.4 默认值该 pair style 无默认参数none。八、结语与延伸阅读meam/sw/spline为需要同时体现金属键合与方向性作用的单元素体系Si、Ti 及其 bcc/hcp 相研究提供了简洁而精确的势形式样条化的七函数表示让势函数形状几乎不受解析形式约束SW 角项又补足了 EAM 家族对角向作用的描述能力。实际使用时只需牢记三条主线——势文件自带截断、mass 单独指定、仅支持单元素——即可快速上手。进一步阅读建议势文件仓库potentials/Si.b.meam.sw.spline、potentials/Ti.meam.sw.spline源码实现pair_meam_sw_spline.cpp、pair_meam_sw_spline.h示例目录examples/PACKAGES/meam_sw_splineSi 的 bcc/fcc/sc/dc 及对应 relax 版本、Ti 的 α/β/ω/fcc/hexagonal 相脚本回归测试atomic-pair-meam_sw_spline.yaml相关命令pair_coeff、pair_style meam、pair_style meam/spline参考文献Lenosky et al.,Modell. Simul. Mater. Sci. Eng.8, 825 (2000)Stillinger Weber,Phys. Rev. B31, 5262 (1985)以及 Nicklas、Fellinger、Park 在俄亥俄州立大学首创的 spline-based MEAMSW 格式。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐用 HVE Core 快速生成 C4 架构图与 IaC 架构图新手完整指南用 HVE Core 快速生成 C4 架构图与 IaC 架构图新手完整指南 想在项目文档里快速画出专业的架构图hve core 是微软开源的一套 Hy科研科学计算高性能计算LAMMPS pair_style sw/angle/table 完整指南基于表格化角势的改良 Stillinger-Weber 三体势LAMMPS pair_style sw/angle/table 完整指南基于表格化角势的改良 Stillinger Weber 三体势 sw/angle/t科研科学计算高性能计算AI-Infra-Guard 中的 PAMELA 单 Token 分布指纹参考库数据集规范、集成机制与实战用法AI Infra Guard 中的 PAMELA 单 Token 分布指纹参考库数据集规范、集成机制与实战用法 本指南聚焦 AI Infra Guard 仓库科研科学计算高性能计算上一篇如何用Hoppscotch轻松测试时序数据库API从入门到精通的完整指南下一篇vLLM tokenization优化分词加速技术创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?