计算 group 平移动量:LAMMPS compute momentum 命令完全指南
科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载compute momentum是 LAMMPS 中用于计算一组粒子平移动量translational momentum的 compute 命令。它归属于EXTRA-COMPUTE 包需要编译时启用该包才能使用输出一个长度为 3 的全局向量对应系统总动量p (p_x, p_y, p_z)。本指南将完整介绍该命令的语法、物理含义、输出特性、源码实现原理、典型应用场景如质心漂移检测、速度零点校正、NEMD 动量通量测量等以及它在 LAMMPS 输出体系中的定位与使用方法。命令语法与示例compute momentum的语法非常简单仅需三个参数compute ID group-ID momentum参数含义IDcompute 的标识符用于后续通过c_ID[I]等语法引用该计算group-ID指定参与动量计算的原子组momentum该 compute 命令的样式名称style name其中ID与group-ID的通用规则在 compute 命令文档 中有详细说明此处不再赘述。一个最典型的示例compute 1 all momentum该命令定义了名为1的 compute统计all组内所有粒子的总平移动量。物理定义与计算公式compute momentum计算的是 group 内所有粒子平移动量translational momentum的矢量和其定义为p Σᵢ mᵢ · vᵢ即对 compute group 内所有粒子 i将每个粒子的质量m与其速度矢量v相乘并求和。需要注意这里的动量是平移动量translational momentum对应粒子质心的整体运动不包含分子内旋转、振动等内部自由度带来的角动量分量。如果系统中有刚体rigid body或其他具有内部结构的多体对象本计算只统计其质心平动部分。质量的处理方式原子质量 vs 每原子质量从源码实现看compute_momentum.cpp 中compute_vector()函数对质量的取值做了两种分支处理double **v atom-v; double *rmass atom-rmass; double *mass atom-mass; int *mask atom-mask; int *type atom-type; int nlocal atom-nlocal; double mom[3] {0.0, 0.0, 0.0}; if (rmass) { for (int i 0; i nlocal; i) if (mask[i] groupbit) { for (int j 0; j 3; j) mom[j] rmass[i] * v[i][j]; } } else { for (int i 0; i nlocal; i) if (mask[i] groupbit) for (int j 0; j 3; j) mom[j] mass[type[i]] * v[i][j]; }如果系统使用每原子质量per-atom mass即rmass非空则直接用rmass[i] * v[i][j]累加如果系统使用按类型质量per-type mass即rmass为空则通过原子类型索引查表mass[type[i]]再乘以速度。此外mask[i] groupbit的位掩码判断保证了只有属于目标 group 的原子才会被纳入求和这是 LAMMPS 中所有按 group 统计计算的通用模式。并行规约MPI_Allreduce在并行MPI运行时每个处理器只拥有自己子域内的原子nlocal个本地原子因此各处理器先本地累加最后通过一次全局规约得到完整结果MPI_Allreduce(mom, vector, 3, MPI_DOUBLE, MPI_SUM, world);这一行代码将各进程的局部动量分量长度为 3 的 double 数组以求和方式归约到所有进程保证每个进程上的 compute 结果一致。该实现体现了 LAMMPS 并行架构下本地求和 全局规约的标准模式。输出信息全局向量及其引用方式compute momentum计算输出一个全局向量global vector长度为 3对应p_x, p_y, p_z三个分量。引用语法任何接受全局向量输入的 LAMMPS 命令都可以使用该结果例如在thermo_style custom中compute 1 all momentum thermo_style custom step c_1[1] c_1[2] c_1[3]在 LAMMPS 的输出体系详见 Howto output 文档中c_ID表示整个标量、向量或数组c_ID[I]表示向量的第 I 个元素或数组的第 I 列c_ID[I][J]表示二维数组的具体元素。因此c_1[1]、c_1[2]、c_1[3]分别取出总动量的 x、y、z 分量。该结果同样可以传递给fix ave/time进行时间平均、传给variable做进一步数值处理或通过thermo_style在每一时间步输出到屏幕与日志文件。量纲特性extensive该 compute 输出的是一个extensive广延量全局向量。从源码看vector_flag 1; size_vector 3; extvector 1;extvector 1表明该向量值随系统尺寸粒子数线性增长是广延量。这一点在单元测试 test_compute_global.cpp 中也有印证测试同时创建compute mom1 all momentum与compute mom2 allwater momentum分别统计全部原子和水分子子组的动量二者的数值不同体现对 group 内粒子数/质量的依赖。向量值的单位为 质量 × 速度mass·velocity随所选 units 风格而变化。例如在real单位下质量 grams/mole距离 Angstroms时间 femtoseconds速度 Angstroms/femtosecond动量单位为 grams/mole·Angstroms/femtosecond在metal单位下速度 Angstroms/picosecond相应换算在lj简约单位下则采用约化质量与约化速度的乘积。单元测试中的验证在 LAMMPS 的单元测试套件中compute momentum的数值正确性通过 test_compute_global.cpp 的ComputeGlobalTest.Geometry用例进行验证。测试流程为先检查lammps_config_has_package(EXTRA-COMPUTE)确认构建包含 EXTRA-COMPUTE 包定义pair_style lj/cut 10.0、bond_style harmonic等基本相互作用创建compute mom1 all momentum和compute mom2 allwater momentum通过thermo_style custom引入c_mom1[*]等输出用run 0 post no触发计算并校验分量数值。if (has_extra) { command(compute mom1 all momentum); command(compute mom2 allwater momentum); ... } ... EXPECT_DOUBLE_EQ_PREC(mom1[0], 0.0054219056685341164); EXPECT_DOUBLE_EQ_PREC(mom1[1], -0.054897225112275558); EXPECT_DOUBLE_EQ_PREC(mom1[2], 0.059097392692385661);这段测试同时覆盖了全系统动量与子组动量两种场景可以作为用户验证自身 LAMMPS 安装中该功能正确性的参考对照。使用限制与依赖需要 EXTRA-COMPUTE 包compute momentum是EXTRA-COMPUTE 包的一部分只有在构建 LAMMPS 时启用了该包才会被编译进来编译时通过-D PKG_EXTRA-COMPUTEonCMake或在src/下执行make yes-extra-compute传统 make 流程启用未启用该包时输入脚本中使用compute ... momentum会报错。从 compute_momentum.h 中的ComputeStyle(momentum,ComputeMomentum);宏可以看到该 compute 通过 LAMMPS 的 style 注册机制挂接到Compute基类派生的工厂注册表中属于 EXTRA-COMPUTE 目录下的扩展样式。参数数量校验源码构造函数中还包含严格的参数检查if (narg ! 3) error-all(FLERR,Illegal compute momentum command);compute momentum固定只接受 3 个参数ID、group-ID、momentum多传或少传参数都会触发Illegal compute momentum command错误并终止运行。默认值该命令没有可选的额外关键字或默认参数语法就是固定形式compute ID group-ID momentum。典型应用场景1. 检测系统的质心漂移drift动量守恒是许多 MD 模拟如 NVE 系综的基本性质。若模拟过程中系统总动量尤其 x、y、z 各分量持续偏离初始值往往意味着存在数值误差累积或非保守力干预。通过在thermo_style custom中输出c_ID[1] c_ID[2] c_ID[3]即可逐时间步监控。2. 与 fix momentum 配合实现速度零点校正compute momentum通常与 fix momentum 搭配使用fix momentum通过周期性减去 group 的总动量可包含linear、angular等关键字将系统整体平动/转动清零。而compute momentum则提供了精确的当前总动量是多少这一度量可用于在清零前后对比验证或用于判断是否需要执行velocity ... zero操作。3. 微观流场与 NEMD 分析在非平衡分子动力学NEMD中动量是分析剪切流、泊肃叶流等流动场的关键物理量。例如 VISCOSITY 示例见 examples/VISCOSITY中的 Muller-Plathe 动量通量测量即围绕动量在不同层间的输运展开对特定 group如某层原子计算动量并做时间平均可以得到该层的定向流动速度动量/质量。4. 子组动量的精细分析由于compute momentum接受任意 group-ID用户可以灵活地对指定分子类型、指定区域或指定物种的原子统计动量例如在混合体系中分别统计溶剂与溶质的整体动量观察质量输运方向。总结属性值命令格式compute ID group-ID momentum输出类型全局向量长度 3px, py, pz输出量纲质量 × 速度extensive 广延量所属包EXTRA-COMPUTE计算公式p Σᵢ mᵢ·vᵢ平移动量默认参数无实现文件src/EXTRA-COMPUTE/compute_momentum.cpp头文件src/EXTRA-COMPUTE/compute_momentum.h相关命令fix momentum测试用例unittest/commands/test_compute_global.cpp掌握compute momentum后你可以方便地在热力学输出、时间平均分析或脚本逻辑中实时获取任意原子组的总平移动量为守恒性检查、速度校正和流动分析提供基础数据。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐AutoHotkey源码剖析(七)内置调试器的TCP/XML协议与断点实现AutoHotkey源码剖析 七 内置调试器的TCP/XML协议与断点实现 AutoHotkey 内置了一个完整的调试器引擎它实现了通用的 DBGp 协议科研科学计算高性能计算LAMMPS compute inertia/chunk 命令完全指南逐块惯量张量计算与输出LAMMPS compute inertia/chunk 命令完全指南逐块惯量张量计算与输出 本指南以 doc/src/compute_inertia_chu科研科学计算高性能计算LAMMPS compute angmom/chunk 命令详解逐 chunk 计算角动量向量LAMMPS compute angmom/chunk 命令详解逐 chunk 计算角动量向量 本文以 LAMMPS 官方文档 compute_angmom_科研科学计算高性能计算上一篇2025最强端到端语音识别实战基于PyTorch的End-to-End ASR全流程落地指南下一篇SManga 开源项目教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考