- 科研
- 科学计算
- 高性能计算
【免费下载链接】lammps
Public development project of the LAMMPS MD software package
compute msd/nongauss是 LAMMPS(EXTRA-COMPUTE 包)提供的一个全局量 compute,它在经典compute msd的基础上额外计算位移四次矩与非高斯参数(Non-Gaussian Parameter,NGP),用于量化玻璃态、胶体悬浮液、聚合物熔体等体系中常见的"动力学异质性"(dynamical heterogeneity)现象。读完本文,你将掌握该命令的完整语法与参数语义、NGP 的数学定义与物理判读、与compute msd的异同、底层实现原理(含周期性边界解卷绕与质心漂移扣除),以及如何通过 thermo、dump 等输出通道获取这一长度为 3 的全局向量。
命令语法与参数
compute msd/nongauss的完整语法如下:
compute ID group-ID msd/nongauss keyword values ...ID、group-ID的通用说明见 compute 命令文档;msd/nongauss是该 compute 的 style 名称;- 关键字/值对为可选项,当前支持的关键字只有
com:com取值yes或no,控制是否在计算每个原子的位移之前扣除该原子组质心(center-of-mass)的漂移。
示例
compute 1 all msd/nongauss compute 1 upper msd/nongauss com yes第一行对全体原子计算 MSD 与 NGP;第二行仅对名为upper的原子组计算,并扣除该组质心运动的影响(com yes)。
物理量定义:从 MSD 到非高斯参数
该 compute 计算一个包含 3 个元素的全局向量:
- 位移平方均值(MSD):
dr² = dx² + dy² + dz²,即组内原子位移平方的求和平均; - 位移四次均值:
dr⁴ = (dx² + dy² + dz²)²,同样是求和平均; - 非高斯扩散参数 NGP,由二者组合得到:
NGP(t) = ( 3·⟨(r(t)−r(0))⁴⟩ ) / ( 5·⟨(r(t)−r(0))²⟩² ) − 1NGP 是动力学异质性研究中常用的量,其物理判读要点:
- 理论最小值 −0.4:当所有原子的位移大小完全相同时取得;
- NGP = 0:对应于布朗(Brownian)扩散,即各向同性高斯位移分布;
- NGP > 0:表示部分移动较快的原子("fast-moving" atoms)比其余原子移动得更快,位移分布偏离高斯、出现异质性。
位移的计算以 compute 被创建时的原子位置为参考点,且完整包含原子穿过周期性边界的影响(通过镜像标记 image flags 解卷绕),因此 MSD 与 NGP 的数值是"unwrapped"意义上的位移量。
与 compute msd 的关系与区别
compute msd/nongauss在实现上直接继承自 compute_msd.cpp 的ComputeMSD类(见头文件 compute_msd_nongauss.h 中class ComputeMSDNonGauss : public ComputeMSD),两者共享以下重要特性:
- 参考坐标的存储机制:两者都会在后台自动创建一个内部 fix(
STORE/ATOM,ID 为compute-ID_COMPUTE_STORE),用于保存每个原子的参考(初始)位置。该 fix 由 fix_store_atom.cpp 实现,属于内部(INTERNAL)fix,用于存储、通信每个原子的标量/数组/张量数据。 - com 关键字:
com yes时在计算位移前通过group->xcm()获取当前质心并从每个原子位移中扣除,二者语义一致。 - 周期性边界处理:正交盒与三斜(triclinic)盒分别按
xprd/yprd/zprd或变换矩阵h解卷绕,完全一致。
核心区别在于输出:
| 特性 | compute msd | compute msd/nongauss |
|---|---|---|
| 输出向量长度 | 4(dx²、dy²、dz²、dr²) | 3(dr²、dr⁴、NGP) |
| 计算位移平方 | 分量级分别输出 | 只输出总位移平方 |
| 位移四次矩 | 无 | 有(第二分量) |
| NGP 参数 | 无 | 有(第三分量) |
与compute msd相关的进一步重要注意事项同样适用于本命令(参见 compute msd 文档):
- 初始坐标以"unwrapped"形式存储(借助 image flags)。若想在调用本 compute 之前重置镜像标记(例如置 0),可使用 set image 命令;image flags 的设置细节见 read_data 命令 的 Atoms 部分。
- 如果希望从 restart 文件 继续运行时该 compute 的输出保持连续,应在两次运行中使用相同的 compute ID,这样后台创建的 STORE/ATOM fix 才会使用相同的 ID 并从 restart 文件正确恢复原子的参考位置。
compute msd支持的average yes选项(以原子平均位置为参考)在msd/nongauss中不可用——其继承的构造函数ComputeMSDNonGauss::ComputeMSDNonGauss仅设置size_vector = 3,并没有启用平均参考位置逻辑,因而位移参考点就是 compute 创建时刻的位置。
输出信息与单位
该 compute 计算一个长度为 3 的全局向量,可通过索引 1–3 被任何接受全局向量输入的命令(如thermo_style、fix ave/time等)访问。LAMMPS 输出选项的完整概述见 Howto output 文档。
向量值为intensive(与原子数无关,已是按原子平均的结果):
- 第 1 个值:距离² 单位(如 real 单位下为 Ų,metal 单位下为 Ų,lj 单位下为 σ²),具体取决于 units 命令;
- 第 2 个值:距离⁴ 单位;
- 第 3 个值:NGP,无量纲。
底层实现:源码级原理剖析
ComputeMSDNonGauss::compute_vector()(见 compute_msd_nongauss.cpp)的实现要点:
- 质心处理:
comflag为真时调用group->xcm(igroup, masstotal, cm)得到当前质心,否则质心置零。 - 参考位置读取:从后台 fix 的
astore数组读取每个原子的原始解卷绕位置xoriginal。 - 解卷绕当前坐标:
- 正交盒:
dx = x[i][0] + xbox*xprd − cm[0] − xoriginal[i][0],其中xbox由 image flags 按IMGMASK/IMGMAX位运算解析(zbox使用IMG2BITS移位),保证穿过周期性边界的原子位移连续; - 三斜盒:使用
domain->h变换矩阵对xbox/ybox/zbox做线性组合,再减质心与参考位置。
- 正交盒:
- 累加矩量:对组内(
mask[i] & groupbit)的每个原子累加msd[0] += dr²、msd[1] += dr⁴。 - 跨 MPI 归约:
MPI_Allreduce(msd, vector, 2, MPI_DOUBLE, MPI_SUM, world)将各进程的累加值汇总。 - 平均与 NGP:按组内原子数
nmsd平均两个矩,然后计算vector[2] = (3*vector[1]) / (5*vector[0]*vector[0]) − 1。当nmsd为 0(空组)时跳过该步。
从继承链看,ComputeMSD构造函数中会校验narg < 3并解析可选关键字(com、average),同时通过modify->add_fix创建STORE/ATOM 3 0 0 1的内部 fix(3 列、不通信 ghost、写入 restart),并用domain->unmap()将创建时刻的原子坐标解卷绕存入astore(compute_msd.cpp)。
约束检查:ComputeMSD构造函数设置dynamic_group_allow = 0并在遇到动态组时直接报错"Compute {} is not compatible with dynamic groups"(compute_msd.cpp),因此compute msd/nongauss不能用于动态组(dynamic group)。此外,运行中组内原子数必须保持不变——compute_vector()会校验group->count()与创建时一致,否则报错"Number of atoms in compute msd group must not change",因此也不应与会改变原子数的 fix(如 fix deposit、fix evaporate)同时使用。
测试与验证
LAMMPS 的回归测试框架在 unittest/force-styles/tests/compute-msd_nongauss.yaml 中提供了msd/nongauss的基准测试:使用atom full样式与in.fourmol输入(29 个原子,timestep 0.25),在执行compute test all msd/nongauss后校验全局向量:
3 1.8138125717590532e-03 1.6057564794351552e-05 1.9285059993775757e+00即dr² ≈ 1.814e-3(距离²单位)、dr⁴ ≈ 1.606e-5(距离⁴单位)、NGP ≈ 1.93。读者可用它交叉验证:将上式代入 NGP 定义(3·dr⁴)/(5·dr²²) − 1可复现第三分量。作为对照,compute msd的基准测试见 compute-msd.yaml,其四个分量中的第四个(总位移平方1.8138125717590532e-03)与本命令的第一分量完全一致,这也从测试层面印证了两者的位移计算路径相同。
构建要求与使用前提
compute msd/nongauss属于EXTRA-COMPUTE 包,只有使用该包构建 LAMMPS 时才可用:
- CMake 构建:在配置时启用
-D PKG_EXTRA-COMPUTE=yes(相关包列表见 cmake/CMakeLists.txt,预设文件如 cmake/presets/all_on.cmake 中默认启用全部包); - 传统 make 构建:在
src目录下执行make yes-extra-compute后重新编译; - 构建流程的通用说明见 Build package 文档。
典型使用流程
以下是一段把msd/nongauss接入输出管线的典型用法(示意):
# 创建 compute(在 run 之前定义) compute ng all msd/nongauss com yes # 每隔 100 步输出全局向量到 thermo 屏幕 thermo_style custom step c_ng[1] c_ng[2] c_ng[3] thermo 100 # 或通过 fix ave/time 做时间平均后写出 fix ave all ave/time 10 100 1000 c_ng[1] c_ng[2] c_ng[3] file ngp.dat实践中建议:
- 对"整体质心有漂移"的模拟(如存在外加力场或速度初值不为零的体系)使用
com yes,避免平动污染 MSD 与 NGP; - 记录单位:第一、二分量单位分别为距离²、距离⁴,NGP 无量纲,换算与报告时勿混淆;
- 若需按空间区域或分子类型区分异质性,可配合 compute msd/chunk(按 chunk 输出)使用;
- 与 compute displace_atom、fix store/state 等命令组合,可进一步分析逐原子位移分布与 NGP 的时间演化。
默认值与限制小结
- 默认选项:
com = no; - 该 compute不可用于动态组,且组内原子数在运行期间不得变化;
- 输出为长度为 3 的全局向量(intensive),分量单位分别为距离²、距离⁴、无量纲;
- 属于 EXTRA-COMPUTE 包,需在构建时启用。
相关命令:compute msd、compute msd/chunk、compute displace_atom、fix store/state。
- 科研
- 科学计算
- 高性能计算
【免费下载链接】lammps
Public development project of the LAMMPS MD software package
相关推荐
LAMMPS compute msd 命令详解:均方位移计算与扩散系数提取
LAMMPS compute msd 命令详解:均方位移计算与扩散系数提取 导读 compute msd 是 LAMMPS 中用于计算原子均方位移(Mean S
科研科学计算高性能计算LAMMPS compute angmom/chunk 命令详解:逐 chunk 计算角动量向量
LAMMPS compute angmom/chunk 命令详解:逐 chunk 计算角动量向量 本文以 LAMMPS 官方文档 compute_angmom_
科研科学计算高性能计算LAMMPS compute event/displace 命令详解:加速动力学中的事件检测计算
LAMMPS compute event/displace 命令详解:加速动力学中的事件检测计算 compute event/displace 是 LAMMPS
科研科学计算高性能计算
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考