
科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载fix nonaffine/displacement是 LAMMPS 中用于量化粒子**非仿射位移nonaffine displacement**的专用 fix 命令它实现了 Falk 与 Langer 于 1998 年提出的经典 $D^2_{\mathrm{min}}$ 度量Falk 1998可用于玻璃、非晶材料剪切带、塑性形变局域化等研究中表征局域结构重排。本文以官方文档 doc/src/fix_nonaffine_displacement.rst 为骨架结合 src/EXTRA-FIX/fix_nonaffine_displacement.cpp 与 src/EXTRA-FIX/fix_nonaffine_displacement.h 的源码实现完整讲解命令语法、两种度量d2min与integrated、三种参考系策略fixed/update/offset、截断判据、输出列含义及使用限制并给出可直接运行的配置示例帮助读者在剪切、压缩等形变模拟中正确使用该 fix 追踪原子的非仿射响应。一、命令语法与参数总览命令的完整语法见 doc/src/fix_nonaffine_displacement.rst为fix ID group nonaffine/displacement nevery style args reference/style nstep keyword values参数含义IDfix 的唯一标识符与fix命令的通用约定一致参考 doc/src/fix.rstgroup应用该 fix 的原子组只有组内原子的非仿射位移被计算nevery每隔多少个时间步计算一次非仿射位移style度量方式d2min或integratedreference/style参考态更新策略fixed、update或offsetnstep与参考态相关的步数语义取决于reference/stylekeyword values可选关键字z/min、intensive/d2min官方文档给出的三个典型示例fix 1 all nonaffine/displacement 100 integrated update 100 fix 1 all nonaffine/displacement 1000 d2min type fixed 0 fix 1 all nonaffine/displacement 1000 d2min custom 2.0 offset 100 intensive/d2min no从源码 src/EXTRA-FIX/fix_nonaffine_displacement.cpp 可以看到参数解析在构造函数中逐项完成并且对非法取值做了严格校验例如nevery必须大于 0否则报错Illegal nevery value {} in fix nonaffine/displacement第 75-76 行fixed参考态的nstep不能为负update的nstep必须大于 0offset的nstep必须满足 $0 nstep \le nevery$第 109-124 行z/min不能为负intensive/d2min只能取值yes/no且仅当style为d2min时才允许设置第 128-139 行。1.1 styled2min与integrated两种度量d2min计算 Falk-Langer 非仿射位移 $D^2_{\mathrm{min}}$是最核心、最常用的模式。其后的cutoff args决定邻居的判定标准见下节。integrated每个时间步对粒子速度做一次积分得到位移。该模式必须与另一个会形变盒子、并移动原子位置的 fix 配合使用例如 fix deform配合remap x、fix press/berendsen 或 fix nh。源码中的integrate_velocity()第 325-342 行在每个POST_FORCE回调里执行 $x_{\mathrm{na}} dt \cdot v$ 的累加因此它实际测量的是速度积分得到的真实位移而非仿射部分是否被扣除取决于参考系的选取。二、style d2minFalk-Langer 非仿射位移的数学原理d2min度量的思想是对于一个形变均匀仿射的区域原子位移可以用一个全局的变形梯度张量完美描述而非仿射位移就是实际位移中无法用任何均匀变形解释的那部分残差。对每个原子fix 首先在其截断范围内的所有邻居上构建两个 $3 \times 3$ 张量文档公式$$ X \sum_{\mathrm{neighbors}} \vec{r},(\vec{r}0)^T, \qquad Y \sum{\mathrm{neighbors}} \vec{r}_0,(\vec{r}_0)^T $$其中 $\vec{r}$ 是当前时刻的粒子间位移矢量$\vec{r}_0$ 是参考时刻的位移矢量。随后计算变形梯度张量$$ F X Y^{-1} $$并由此得到非仿射位移$$ D^2_{\mathrm{min}} \frac{1}{N_n} \sum_{\mathrm{neighbors}} \left| \vec{r} - F \vec{r}_0 \right|^2 $$以及应变张量 $E F F^{T} - I$其中 $I$ 为单位张量$N_n$ 为邻居数。每个原子在当前时刻到参考时刻的位移中仿射部分 $F \vec{r}0$ 被显式扣除残差的平方和即 $D^2{\mathrm{min}}$。2.1 源码实现细节在 src/EXTRA-FIX/fix_nonaffine_displacement.cpp 的calculate_D2Min()中实现与上述公式一一对应并且包含若干值得注意的工程细节邻居筛选采用当前时刻的位置代码注释明确指出 Only include contributions from atoms that are CURRENTLY neighbors第 452 行即邻居集合由当前构型决定而非参考构型。参考位移需做最小镜像约定由于参考构型保存在周期性边界中minimum_image0()第 735-789 行会基于保存的参考盒子尺寸xprd0/yprd0/zprd0及其 half 值对 $\vec{r}_0$ 施加最小镜像修正并且对 triclinic 盒子按xy0/xz0/yz0倾角进行修正。两遍邻居循环第一遍循环第 432-487 行累加所有邻居对的 $X$、$Y$ 张量第二遍循环第 541-599 行利用 $F$ 计算每对邻居的残差平方并累加到D2min[i]。借助newton_pair与 reverse/forward 通信张量和残差在 MPI 并行下被正确跨进程累加。奇异矩阵处理当 $Y$ 行列式绝对值小于EPSILON 1.0e-15第 49 行时矩阵被判定为奇异singular[i] 1输出直接置零并给出警告 Singular matrix detected for atom {}, defaulting output to zero第 608-609 行。二维系统的特殊处理在 2D 模拟中只对 $2\times2$ 子矩阵求逆第 513-526 行体积应变也按维度dim归一化。2.2 cutoff 判定type / radius / customd2min的邻居范围由cutoff决定三种模式语义如下cutoff 模式参数说明type无截断距离由原子对的类型决定直接复用当前pair_style的cutsq矩阵第 453-454 行因此该模式要求已定义 pair 势否则源码在init()中报错 Fix nonaffine/displacement D2Min option requires a pair style be defined or cutoff specified第 219-221 行radius无截断距离由原子直径之和radius[i] radius[j]决定适用于atom_style sphere等含半径属性的原子样式若原子没有radius属性构造时报错第 142-144 行custom rmaxrmax距离单位对所有类型统一使用常数截断 $r_{\mathrm{max}}$rmax必须大于 0第 101-102 行要求邻居列表 style 为bin或nsq不能是multi第 96-97、229-231 行且截断加 skin 不得超过 ghost 原子范围否则需用comm_modify cutoff扩大第 238-243 行2.3 参考态保存与周期盒尺寸save_reference_state()第 346-382 行除了保存原子坐标到内部FixStoreAtom外还会同时记录参考时刻的盒子尺寸与倾角xprd0等供minimum_image0()使用。参考构型中 ghost 原子也需要坐标D2min 模式因此 fix 内部自动创建一个STORE/ATOMfix 并以_FIX_PA后缀命名第 194-207 行。三、参考系策略fixed / update / offset两种度量都需要定义一个参考状态三种策略决定了参考构型的更新节奏fixed nstep在指定的第nstep步保存粒子位置作为固定参考此后一直与它比较。若在第nstep步之前访问该 fix 的 peratom 数据输出为零源码第 215-216 行还会在初始步大于参考步时直接报错防止无参考态可用。update nstep每nstep个时间步更新一次参考态源码第 296-298 行ntimestep % update_timestep 0时保存适合需要滑动窗口式连续追踪的模拟。offset nstep在第nevery的整数倍之前nstep步更新参考态源码第 300-302 行(ntimestep offset_timestep) % nevery 0使计算时刻与参考时刻之间恰好相差nstep步适用于固定时间窗的增量比较。计算只在nevery的整数倍含第 0 步发生其余步输出保持零或上次值。源码中post_force()第 268-303 行同时负责按节奏计算与按节奏保存参考态两件事并在setup()时预先调用一次post_force(0)以在首个时间步前保存必要的参考态第 261-264 行。四、可选关键字z/min 与 intensive/d2min4.1 z/min最小配位数保护z/min zmin用于跳过低配位原子若某原子在截断范围内或接触范围内的邻居数少于zmin则该原子的 $D^2_{\mathrm{min}}$ 计算被跳过peratom 数组相应条目置零。低配位粒子如表面原子、自由面附近的原子的 $D^2_{\mathrm{min}}$ 计算在统计上不准确该选项可避免其干扰。源码在最终输出前检查norm[i] z_min第 607 行norm为实际参与计算的邻居计数。4.2 intensive/d2min强度量 vs 广延量默认intensive/d2min yes此时 $D^2_{\mathrm{min}}$ 除以邻居数 $N_n$第 616-617 行是强度量intensive与邻居多少解耦便于比较不同截断/密度下的结果。若设为no则去掉该归一化因子得到随邻居数增长的广延量extensive。仅当style d2min时该关键字合法源码第 136-137 行会报错。五、输出peratom 数组及其访问方式该 fix 计算一个 peratom 数组列数取决于度量方式可通过任何支持f_ID语法读取 fix peratom 数据的命令访问参考 doc/src/fix.rst 中f_ID、f_ID[I]、f_ID[I][J]的约定integrated模式3 列第 1-3 列分别为非仿射位移在 x、y、z 方向的分量。d2min模式9 列第 1 列$\sqrt{D^2_{\mathrm{min}}}$即非仿射位移的标量度量取平方根便于与位移量纲一致第 2 列体积应变volumetric strain$E_{\mathrm{vol}} \mathrm{tr}(E)/\mathrm{dim}$第 626 行第 3 列偏应变deviatoric strain$E_{\mathrm{dev}} \sqrt{\tfrac{1}{2}J_2}$其中 $J_2 \sum_{jk} E_{jk} E_{jk}$ 为扣除体积部分后的第二不变量第 629-635 行第 4-9 列应变张量 $E$ 的 xx、yy、zz、xy、xz、yz 六个分量第 640-645 行。典型用法是配合dump custom输出如dump 1 all custom 100 dump.nad id type x y z f_ID[1] f_ID[2] f_ID[3]或通过compute reduce、compute property/atom等命令做统计与可视化。六、重启、运行约束与限制6.1 重启与 fix_modify参考态是否已保存这一状态信息会被写入二进制重启文件参考 doc/src/restart.rst源码通过write_restart()/restart()第 307-321 行持久化reference_saved标志。所有 fix_modify 选项与该 fix 均不相关无标量/向量输出只有 peratom 数组因此无需也不能通过fix_modify调整其输出。6.2 软件包与编译限制该 fix 属于EXTRA-FIX 软件包仅在编译时启用了该包时才可用详见 doc/src/Build_package.rst 与 doc/src/Packages_details.rst 中 EXTRA-FIX 小节。在 CMake 构建中对应选项为PKG_EXTRA-FIX见 cmake/CMakeLists.txt。d2min模式需要半邻居列表half neighbor listfix 通过neighbor-add_request(...REQ_OCCASIONAL)申请偶发列表第 225-248 行。由于该 fix 依赖特定参考时间步的存在与 rerun 命令配合时不会更新 peratom 值——因为 rerun 无法保证所需的参考时间步都被包含在重放轨迹中。6.3 使用前提小结从源码可推断integrated模式必须与fix deform remap x、fix press/berendsen、fix nh等会移动原子位置的形变类 fix 联用否则速度积分得到的只是普通位移radius截断需要原子含半径属性atom_style sphere等custom截断要求neighbor风格为bin或nsq且截断半径含 skin不能超过 ghost 原子范围必要时用comm_modify cutoff调大type截断要求已设置pair_style其cutsq矩阵会被直接复用z/min用于屏蔽低配位原子避免不稳定统计输出在非计算步访问时为零fixed参考态在参考步之前访问也为零。七、默认值速查选项默认值intensive/d2minyes强度量除以邻居数z/min0不设置最小配位数限制八、参考文献Falk 与 LangerDynamics of viscoplastic deformation in amorphous solids, Phys. Rev. E57, 7192 (1998)。源码 src/EXTRA-FIX/fix_nonaffine_displacement.cpp 中的citeme条目即该文献的 BibTeX当以d2min模式运行 LAMMPS 时程序会自动输出引用提示。九、典型应用场景建议fix nonaffine/displacement最常见的用途是非晶/玻璃材料如 Lennard-Jones 二元混合物、金属玻璃在剪切或压缩下的塑性局域化分析将 $D^2_{\mathrm{min}}$或 $\sqrt{D^2_{\mathrm{min}}}$作为 peratom 序参量配合compute chunk/atom、compute reduce或直接 dump 输出即可定位剪切带、观测应力松弛前后的结构重排。建议组合使用update参考系做连续追踪如示例 1或在准静态加载中使用offset控制比较窗口如示例 3并用z/min过滤表面低配位原子、以intensive/d2min yes保证不同密度样本间的可比性。如需进一步深入可继续阅读 doc/src/fix_nonaffine_displacement.rst 原始命令文档、src/EXTRA-FIX/fix_nonaffine_displacement.cpp 的实现源码以及配套的 fix deform、fix nh 等形变类 fix 文档。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐LAMMPS compute xrd 命令详解基于运动学衍射理论的虚拟 X 射线衍射强度计算LAMMPS compute xrd 命令详解基于运动学衍射理论的虚拟 X 射线衍射强度计算 本文以 LAMMPS 官方文档 compute_xrd.rst科研科学计算高性能计算LAMMPS compute saed 命令全解析基于运动学衍射理论的选区电子衍射SAED强度计算与 VTK 可视化LAMMPS compute saed 命令全解析基于运动学衍射理论的选区电子衍射SAED强度计算与 VTK 可视化 导读 compute saed 是科研科学计算高性能计算FontForge 变换Transform对话框完全指南从基础仿射变换到非线性变形与透视投影FontForge 变换Transform对话框完全指南从基础仿射变换到非线性变形与透视投影 FontForge 的 Transform 对话框是其字形编桌面应用图形学上一篇如何在Windows 10上免费运行Android应用WSA-Windows-10终极指南下一篇MAA明日方舟助手革命性智能游戏辅助工具一站式解放双手的强力解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考