☰
LAMMPS compute msd/nongauss 详解:用非高斯参数(NGP)量化动力学异质性
2026/10/15 2:41:58 网站建设 项目流程
  • 科研
  • 科学计算
  • 高性能计算

【免费下载链接】lammps

Public development project of the LAMMPS MD software package

项目地址:https://gitcode.com/gh_mirrors/la/lammps
点击查看免费下载

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 个元素的全局向量:

  1. 位移平方均值(MSD):dr² = dx² + dy² + dz²,即组内原子位移平方的求和平均;
  2. 位移四次均值:dr⁴ = (dx² + dy² + dz²)²,同样是求和平均;
  3. 非高斯扩散参数 NGP,由二者组合得到:
NGP(t) = ( 3·⟨(r(t)−r(0))⁴⟩ ) / ( 5·⟨(r(t)−r(0))²⟩² ) − 1

NGP 是动力学异质性研究中常用的量,其物理判读要点:

  • 理论最小值 −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 msdcompute 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)的实现要点:

  1. 质心处理:comflag为真时调用group->xcm(igroup, masstotal, cm)得到当前质心,否则质心置零。
  2. 参考位置读取:从后台 fix 的astore数组读取每个原子的原始解卷绕位置xoriginal。
  3. 解卷绕当前坐标:
    • 正交盒:dx = x[i][0] + xbox*xprd − cm[0] − xoriginal[i][0],其中xbox由 image flags 按IMGMASK/IMGMAX位运算解析(zbox使用IMG2BITS移位),保证穿过周期性边界的原子位移连续;
    • 三斜盒:使用domain->h变换矩阵对xbox/ybox/zbox做线性组合,再减质心与参考位置。
  4. 累加矩量:对组内(mask[i] & groupbit)的每个原子累加msd[0] += dr²、msd[1] += dr⁴。
  5. 跨 MPI 归约:MPI_Allreduce(msd, vector, 2, MPI_DOUBLE, MPI_SUM, world)将各进程的累加值汇总。
  6. 平均与 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

项目地址:https://gitcode.com/gh_mirrors/la/lammps
点击查看免费下载
上一篇:Kubernetes Python 客户端中的 V1SelfSubjectAccessReview:用官方模型实现"当前用户权限自检"
下一篇:2025终极教程:企业微信远程打卡神器如何使用?

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询