科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载本文围绕 LAMMPS 的fix srd命令展开。它把一组粒子当作随机旋转动力学Stochastic Rotation DynamicsSRD文献中也称 MPCD粒子用作与大粒子胶体相互作用的背景溶剂SRD 粒子彼此不相互作用只与溶质发生碰撞和速度旋转从而以远低于全原子模拟的代价赋予系统流体行为有效黏度等。读完本文你可以理解 SRD 模型的核心公式平均自由程、时间步长、格点划分、逐项掌握全部关键词collision、overlap、exact、radius、bounce、search、cubic、shift、tstat、unbiased、rescale的取值与默认值并能够参考仓库中的示例脚本in.srd.pure、in.srd.mixture搭建并诊断一个 SRD 介观模拟。命令语法与参数含义fix srd的完整语法如下对应 fix_srd.rst 原文的 Syntax 一节fix ID group-ID srd N groupbig-ID Tsrd hgrid seed keyword value ...参数含义ID、group-ID见 fix 命令group-ID是 SRD 粒子背景溶剂粒子所在的组srd该 fix 的样式名N每隔多少个时间步重置一次 SRD 粒子速度执行随机旋转操作groupbig-ID大粒子溶质/胶体粒子组 IDSRD 粒子与之相互作用纯 SRD 流体可写NULLTsrdSRD 粒子温度温度单位hgridSRD 分组的格点间距距离单位seed随机数种子正整数keyword value ...零个或多个关键字/值对见下文关键词一览从源码 fix_srd.cpp 的构造函数可以确认参数校验逻辑N必须大于 0groupbig-ID若不是NULL必须是一个已存在的组否则报 Could not find fix srd big particle groupTsrd和hgrid必须为正数seed必须是正整数随机数发生器RanMars使用seed comm-me每处理器唯一的偏移量初始化保证各 MPI 进程产生不同的随机序列。文档给出的三个典型调用示例fix 1 all srd 10 NULL 1.0 1.0 482984 fix 1 srd srd 10 big 1.0 0.25 482984 fix 1 srd srd 10 big 0.5 0.25 482984 collision slip search 0.5第一条是纯 SRD 流体无大粒子groupbig-ID为NULL第二条是最简的大粒子SRD 混合物第三条展示了叠加collision slip和search 0.5关键词的用法。SRD 模型原理这个 fix 到底做了什么文档的 Description 一节把该 fix 的工作概括为两件事平流advection每个时间步对 SRD 粒子做碰撞检测——SRD 粒子与大粒子或壁面碰撞把动量转移给大粒子施加力与扭矩碰撞同时改变 SRD 粒子自身的位置和速度速度重置每隔N个时间步通过随机旋转算子rotation operator重新分布每个 SRD 格点内粒子的速度。SRD 粒子具有质量m、温度T_SRD、特征时间步长dt_SRD和碰撞间平均自由程 λ。四者满足基本关系式λ dt_SRD * sqrt( k_B * T_SRD / m )SRD 粒子质量m由输入脚本中别处的mass命令mass设定SRD 时间步长dt_SRD N * dt其中dt是timestep命令timestep定义的大粒子积分步长大粒子用短步长dt通过普通时间积分 fix 运动SRD 粒子用大步长dt_SRD ≥ dt平流。在 fix_srd.cpp 的parameterize()中可以看到这段关系的实现// set temperature and lamda of SRD particles from each other // lamda dt_srd * sqrt(boltz * temperature_srd / mass_srd); if (lamdaflag 0) lamda dt_srd * sqrt(force-boltz * temperature_srd / mass_srd / force-mvv2e); else temperature_srd force-mvv2e * (lamda / dt_srd) * (lamda / dt_srd) * mass_srd / force-boltz;即不指定lamda关键字时用Tsrd反算 λ指定lamda关键字时则忽略Tsrd改由 λ 反算 SRD 温度代码中做了force-mvv2e单位换算说明该公式在不同units下均成立。同时源码固定了两个派生量sigma lamda / dt_srd; dmax 4.0 * lamda; // 一个 SRD 步内最大可移动距离 vmax dmax / dt_srd; // 速度上限由此得到两条使用约束λ 不能小于 0.6 × hgrid否则报错——除非启用了shift关键字格点平移D_max 4λ不应大于大粒子直径否则 SRD 粒子可能在一步内穿过大粒子而不发生碰撞此时 LAMMPS 会给出警告。hgrid是 SRD 流体的特征长度尺度用于给 SRD 粒子分箱以重置速度。文档建议hgrid取大粒子直径的 1/4 或更小以充分分辨大粒子周围的流体性质。碰撞模型上SRD 点粒子被视作轻粒子撞重粒子撞到一个给定直径的大粒子表面或壁面上的某一点后弹开并带有新速度。碰撞改变 SRD 粒子的动量给大粒子施力与扭矩给壁面施力。静止或运动的 SRD 壁面由 fix wall/srd 命令建立从建模角度可把SRD 撞壁理解为撞一个半径和质量均为无穷大的大粒子。理论依据参见文档末尾给出的四篇文献(Hecht) Hecht 等Phys Rev E 72, 011408 (2005)(Petersen) Petersen 等J Chem Phys 132, 174106 (2010)纯 SRD 流体(Bolintineanu1) Phys Rev E 86, 066703 (2012)SRD 流体与壁面(Bolintineanu2) Comp Particle Mechanics 1, 321–356 (2014)大胶体粒子被 SRD 流体溶剂化的混合模型。LAMMPS 中 SRD 溶质可以是球、椭球、线段、三角形或包含这些形状的刚体。该模型可与常规的 fix deform、fix viscosity、fix nvt/sllod 等命令联合使用用于测量溶质的扩散系数、黏度等性质。关键词一览取值、默认值与源码实现以下汇总表继承自 fix_srd.rst 的 Syntax 部分与 Default 部分并在 fix_srd.cpp 的参数解析代码中逐项核对。关键词取值/参数含义默认值lamda数值距离单位SRD 粒子平均自由程指定后Tsrd被忽略并反算温度由Tsrd推出collisionnoslip/slip碰撞模型noslipoverlapyes/no大粒子是否可能相互重叠noinsideerror/warn/ignoreSRD 粒子已位于大粒子内部时的处理方式errorexactyes/no碰撞时刻与位置是否做时间精确求解yesradiusrfactor0大粒子有效碰撞半径的缩放因子1.0bounceNbounce≥0单个 SRD 粒子一个时间步内最大碰撞次数0 表示不限0不限searchsgrid距离单位碰撞对搜索用的格点间距hgridcubicstyle tolerance非立方格点检查styleerror/warntolerance 允许的相对偏差0 ≤ tol ≤ 1error 0.01shiftflag shiftseed速度旋转前的随机格点平移yes/no/possible 随机种子noshiftseed 仍需给出tstatyes/no是否对 SRD 粒子做每格热浴nounbiasedyes/no是否使用 profile-unbiased 热浴10Dec2025 版新增norescaleyes/no/rotate/collide速度超过 Vmax 时是否重缩放及在哪个环节执行yes源码中默认值的初始化代码与文档一致lamdaflag 0; collidestyle NOSLIP; overlap 0; insideflag INSIDE_ERROR; exactflag 1; radfactor 1.0; maxbounceallow 0; gridsearch gridsrd; // 默认 search hgrid cubicflag CUBIC_ERROR; cubictol 0.01; shiftuser SHIFT_NO; tstat 0; unbiasflag 0; rescale_rotate rescale_collide 1;另外有一个文档正文未单列、但源码强制的约束fix_srd.cpp启用unbiased yes时必须同时启用tstat yes否则报错 Must use SRD thermostat when enabling unbiased thermostatting。collisionslip 与 noslip 两种碰撞模型slip滑移SRD 粒子动量的切向分量保持不变因此碰撞只给大粒子施力、不施扭矩新速度的法向分量从温度Tsrd的高斯分布中采样。noslip无滑移默认新速度的法向和切向分量都从温度Tsrd的高斯分布采样并且切向方向随机选取因此碰撞会给大粒子施加扭矩。使用noslip时应搭配能正确旋转大粒子的时间积分 fix例如fix nve用于带角度的粒子、或相应的旋转积分器。在 fix_srd.h 中可以看到对应的两个私有方法slip()与noslip()以及壁面版本slip_wall()扭矩标记torqueflag在任一大粒子被施加扭矩时置 1用于后续 force/torque 的反向通信。overlap / inside / radius / bounce重叠与大粒子内部问题overlap当两个或多个大粒子可能重叠时应设为yes——这取决于大粒子间 pair 势的形式或多个大粒子被 fix rigid 连成刚体时。若设为no而实际发生重叠当某个 SRD 同时进入两个以上大粒子内部时碰撞计算可能报错。overlap no允许更快的碰撞检查所以只在确实需要时才用yes。inside若计算发现某时间步开始时 SRD 粒子已经在大粒子内部按此关键词处理error直接报错终止warn警告后继续ignore静默处理。该 fix 的 12 项输出统计之一第 4 项会累计记录此类事件便于监控。注意 SRD 一旦进入大粒子内部可能漂移若干步后才移出。radius用rfactor缩小大粒子的有效碰撞半径使每个 SRD 一次只与一个大粒子碰撞。文档给出的例子LJ 体系、约化单位温度 1.0 时两大粒子最小间距可小至约 0.88 σ因此radius 0.85左右可避免双重碰撞。bounce限制单个 SRD 在一个时间步内于邻近大粒子间弹跳的最大碰撞次数。达到上限时 SRD 可能滞留于大粒子内部0表示不设限默认。exact碰撞求解精度exact yes默认会在 SRD 与大粒子共同运动的过程中计算每次碰撞的精确时刻与位置exact no则基于时间步末位置估计碰撞位置。若overlap为yes则exact的设定被忽略——重叠情形下必须做时间精确的碰撞求解。fix_srd.h 中为球、椭球、线段、三角形、壁面分别提供了collision_*_exact与collision_*_inexact两套实现与这一设计一一对应。两种格点SRD bins 与 search binsSRD 模拟中由 LAMMPS 维护两类格点binSRD bins速度箱给 SRD 粒子分箱、每N步旋转/重置速度的格点尺寸基准是hgridsearch bins搜索箱用于识别 SRD/大粒子碰撞对的格点尺寸基准是search关键字默认等于hgrid。取更小或更大的search格点可能更高效取决于具体问题但在统计意义上不改变模拟结果。cubic格点形状检查LAMMPS 会尽量把 SRD bin 尺寸设为精确的hgrid但每个方向必须取整数个 bin因此实际 bin 尺寸取决于模拟盒大小与形状实际 bin 尺寸会在模拟开始时的 SRD 输出信息中打印。若实际 bin 非立方任意两维之比超出1 ± tolerance或偏离hgrid任一维与hgrid之比超出1 ± tolerance按cubic的style报错或警告。非立方格点会使速度旋转出现未定义行为所以 LAMMPS 用该机制保护用户。tolerance是相对偏差取值范围 [0, 1]默认error 0.01。shift随机格点平移shift决定做速度旋转分箱前是否随机平移 SRD 坐标。不做平移时分箱后的速度分布旋转只有在 SRD 粒子在相邻两次旋转之间移动得足够远由 λ 决定时才是统计上有效的。若 λ 0.6 × SRD bin 尺寸则必须做平移平移指把全部 SRD 粒子沿同一向量移动向量各分量在 [−½ bin 尺寸, ½ bin 尺寸] 内随机选取随机性由shiftseed指定的发生器产生源码中为所有处理器共用的RanPark。这即使在 λ 很小时也能充分随机化同一 bin 内的粒子组合。shift no默认不平移若 λ 0.6 × bin 尺寸则报错bin 数据在跨处理器边界重叠时仍会通信shift possible仅当 λ 0.6 × bin 尺寸时才平移并打印警告 SRD bin shifting turned on due to small lamda见 fix_srd.cpp 中的检查逻辑shift yes无论 λ 大小都平移。注意shift no时shiftseed不会被使用但仍必须给出。格点平移需要额外通信除非必要一般不应启用。tstat 与 unbiasedSRD 热浴tstat yes会把 SRD 粒子热浴到指定温度Tsrd每N个时间步、在速度旋转操作期间把每个 SRD bin 内粒子的热速度重缩放到目标温度。由于 SRD 与大粒子/壁面的碰撞本身对碰撞粒子有热浴效应这种情况下未必需要逐 bin 热浴。unbiased10Dec2025 版新增控制体系存在流场streaming时热浴的工作方式典型场景是用 fix deform 做剪切模拟默认no是profile-biased先把相对 bin 平均速度的速度重缩放再把每个 bin 的平均速度设为按 bin 中心坐标算出的位置相关流场速度从而强制线性速度剖面yes时重缩放后不改变 bin 的平均速度即profile-unbiased。文档提醒流场模拟若完全不做热浴默认tstat noSRD 流体可能需要很长时间才能弛豫到与盒子形变匹配的流速剖面。文档还特别警告了 profile-biased 热浴的动量不守恒问题fix deform下unbiased no会用流场速度替换每个 bin 的平均速度体系总动量在热浴期间持续涨落随后关闭热浴或改为unbiased yes时体系会带着那一刻的总动量以恒定的质心速度整体漂移——对剪切体系这不是无害的沿速度梯度方向的漂移会被remap v选项周期性改写速度而持续加速。文档给出的补救方法是切换热浴设置后用单步 fix momentum 清掉漂移动量剪切沿 x 方向时只重置另外两个方向fix mom all momentum 1 linear 0 1 1 run 1 unfix mom无流动时三个方向均可重置。profile-unbiased 热浴不改变 bin 平均速度因此不会产生这种漂移。rescale超速重缩放SRD 粒子速度上限 Vmax 的设定保证一个 SRD 步内平流距离不超过D_max 4λ。rescale控制当某粒子速度超过该上限若一个 SRD 步内要走超过 4 个平均自由程时是否重缩放其速度。不重缩放时超速粒子可能在跨处理器迁移时丢失或漏掉与大粒子的碰撞都会导致报错因此最安全的做法是保持重缩放开启默认rescale yes即旋转和碰撞两个环节都重缩放。但重缩放会从体系中移走动能速度被压低——若启用tstat或 SRD 碰撞本身有效热浴了体系这通常不是问题。若需要关闭重缩放例如无热浴的纯 SRD 体系避免温度随时间衰减可用rescale no旋转和碰撞都不重缩放rescale rotate只在速度旋转时重缩放碰撞时不重缩放rescale collide只在碰撞时重缩放旋转时不重缩放。盒子尺寸/形状变化时的重分箱文档用一个 note 说明了盒子变化的行为fix srd可以用于盒子大小和/或形状变化的模拟非周期边界或用 fix deform、fix wall/srd 对 SRD 流体施剪、与外壁相互作用。盒子大小变化时每次 reneighboring 必须重算 SRD bin 尺寸仅形状变化则不必。重分箱总是按当前盒子尺寸取整数个 bin无论边界是固定、shrink-wrapped 还是周期由 boundary 命令设定盒子大小或形状变化时search bin 尺寸每次 reneighboring 都要重算。注意改变 SRD bin 尺寸可能改变 SRD 流体性质如黏度。从 fix_srd.cpp 的pre_neighbor()可以看到对应的实现// if simulation box size changes, reset velocity bins if (change_size) setup_bounds(); if (change_size) setup_velocity_bins(); if ((change_size || change_shape) (bigexist || wallexist)) { setup_search_bins(); setup_search_stencil(); }即change_size触发 SRD 速度箱重建change_size || change_shape且存在大粒子/壁面时重建搜索箱与搜索模板stencil。性能优化让大数量比下的 SRD 模拟跑得更快文档明确指出fix srd通常用于 SRD 粒子数量远超大粒子数量的模拟例如 100:1。此时只涉及大粒子的计算邻表构建、通信、时间积分会因大量背景 SRD 粒子而显著变慢。三条输入脚本命令可大幅缓解这一效应均把大溶质粒子组 ID作为参数atom_modify first —— 把大粒子放在原子数组最前面neigh_modify include —— 邻表只为大粒子构建comm_modify group —— 通信只针对大粒子。此外当指定了大粒子间相互作用的 pair_style 时应使用 pair_coeff 把 big/SRD 相互作用关闭如把 ε 或 cutoff 设为 0.0。delete_atoms overlap命令在初始化时有助于确保大粒子与 SRD 粒子之间没有初始重叠。仓库示例 in.srd.mixture 恰好把这些建议全部落实是一个值得逐行学习的脚本骨架units lj atom_style sphere atom_modify first big # 大粒子排在数组前部 ... comm_modify mode multi group big vel yes neigh_modify include big ... # 大粒子间用 LJSRD(2 型)之间与大/小之间全部置零 pair_style lj/cut 2.5 pair_coeff 1 1 1.0 1.0 pair_coeff 2 2 0.0 1.0 0.0 pair_coeff 1 2 0.0 1.0 0.0 ... timestep 0.001 fix 1 big nve fix 2 small srd 20 big 1.0 0.25 49894 \ radius 0.88 search 0.2 collision slip fix 3 all enforce2d注意其中radius 0.88与文档正文给出的温度 1.0 的 LJ 体系最小间距约 0.88 σ完全对应search 0.2小于hgrid 0.25的默认取值说明搜索箱可以更密以提升碰撞查找效率。示例还展示了如何用 12 项输出统计做诊断f_2[7]是 SRD bin 温度f_2[1]~f_2[6]、f_2[8]~f_2[10]是各类计数thermo_style custom step temp f_2[7] etotal v_pebig v_ebig press \ f_2[1] f_2[2] f_2[3] f_2[4] f_2[5] \ f_2[6] f_2[8] f_2[9] f_2[10]一个完整示例3D 三角形胶体 SRD 溶剂 剪切tri_srd.in配 data.tri.srd 的 1500 个三角形大粒子数据文件演示了一个更具代表性的场景非球形atom_style tri盒子状胶体被 SRD 粒子溶剂化先做fix deform ... scale压缩盒子再施加剪切速率xy erate 0.05并用remap v处理周期性重映射。核心配置fix 1 big rigid molecule fix 2 small srd 20 big 1.0 0.25 49894 \ search 0.2 cubic warn 0.0001 shift yes 49829 \ overlap yes collision noslip fix 3 all deform 1 x scale 0.6 y scale 0.6 z scale 0.6第二段剪切阶段重新启用同一 fix 时追加了tstat yesfix 2 small srd 20 big 1.0 0.25 49894 \ search 0.2 cubic warn 0.0001 shift yes 49829 \ overlap yes collision noslip tstat yes fix 3 all deform 1 xy erate 0.05 units box remap v可以看到该示例组合了overlap yes三角形刚体相互穿插、shift yesλ 相对于 bin 尺寸较小、cubic warn 0.0001盒子被压缩变形后实际 bin 形状偏离立方用极小容差只警告不终止是前述重叠处理格点平移非立方检查三个主题的一次集中实战示范。纯 SRD 流体无大粒子的最小示例见 in.srd.puregroupbig-ID传NULLN1即每一步都旋转速度并用一个空的 dummy 组配合comm_modify group empty关闭无谓通信fix 1 all srd 1 NULL 1.0 0.25 49894 collision slip fix 2 all enforce2d输出、restart 与最小化行为无 restart 信息该 fix 不向 binary restart 文件写入任何内容fix_modify 各选项对该 fix 均不适用12 项输出统计该 fix 维护一个长度 12 的向量可被各种 输出命令访问。这些值是强度量intensive——不随体系规模缩放严格说前 8 项与体系规模相关但按强度量处理意味着作为热力学输出打印时不做缩放。除第 5 项和最后 3 项自运行开始以来的累计量外其余均为当前时间步的值序号含义(1)执行的 SRD/大粒子碰撞检查次数(2)发生了碰撞的 SRD 粒子数(3)SRD/大粒子碰撞总数含多次弹跳(4)位于大粒子内部的 SRD 粒子数(5)速度被重缩放到 Vmax 的 SRD 粒子数累计(6)碰撞搜索用的 bin 数(7)SRD 速度旋转用的 bin 数(8)计算了温度的 SRD bin 数(9)SRD 温度(10)达到最大弹跳次数的 SRD 粒子数累计(11)单个步内任一 SRD 粒子的最大弹跳次数累计(12)因 SRD 粒子移动过远触发的 reneighboring 次数累计run start/stop 与 minimize该 fix 的任何参数都不能与 run 命令的start/stop关键字联用在 能量最小化过程中该 fix 不会被调用。构建要求与相关命令fix srd只能在 LAMMPS 启用了SRD package编译时可用具体见 Build package 文档页对应的源文件位于 src/SRD/fix_srd.cpp、fix_srd.h以及壁面相关的fix_wall_srd.cpp、fix_wall_srd.h。该 fix 唯一的相关命令是 fix wall/srd。LAMMPS 中 SRD 模型更多实现细节可参考 Hecht 等四篇文献引用信息列于文档页末fix srd命令本身的引用信息也会通过cite me机制自动附加 Petersen 等 2010 年 J. Chem. Phys. 132, 174106 的条目见 fix_srd.cpp 中的cite_fix_srd常量。实操检查清单结合本文梳理的文档内容与源码行为建立一个 SRD 模拟时可以按以下顺序自查单位与质量确认units、mass下的 SRD 粒子质量理解 λ 与Tsrd的二选一关系格点hgrid取大粒子直径的 1/4 或更小确认 λ ≥ 0.6 × hgrid否则用shift穿透风险确认 4λ 不大于大粒子直径大粒子间相互作用是否可能重叠决定overlap与radius必要时用delete_atoms overlap清理初始构型碰撞风格需要扭矩选noslip默认并搭配正确的旋转积分器盒变模拟留意cubic检查与实际 bin 尺寸的重算剪切下启用tstat时评估unbiased的动量影响性能落实atom_modify firstneigh_modify includecomm_modify group三件套并把 big/SRD 的pair_coeff置零诊断把 12 项统计挂进thermo_style custom重点监控 (4) 内部粒子数、(5) 重缩放计数与 (9) SRD 温度。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐Wand-Enhancer 使用指南5分钟为 WeMod 解锁本地增强功能Wand Enhancer 使用指南5分钟为 WeMod 解锁本地增强功能 你躺在床上刚把《星露谷物语》的修改器挂上想让手机远程调一下数值却发现 WeMo科研科学计算高性能计算LAMMPS fix evaporate 命令详解周期性删除原子模拟溶剂蒸发与干燥过程LAMMPS fix evaporate 命令详解周期性删除原子模拟溶剂蒸发与干燥过程 fix evaporate 是 LAMMPSLarge scale科研科学计算高性能计算LAMMPS fix gravity 命令详解颗粒系统重力场与驱动力的实现原理与实战配置LAMMPS fix gravity 命令详解颗粒系统重力场与驱动力的实现原理与实战配置 fix gravity 是 LAMMPS 中用于为原子/颗粒群体施加科研科学计算高性能计算上一篇NHSE终极指南免费动物森友会存档编辑器快速打造梦想岛屿下一篇ThreatMapper 与 Splunk 集成实战基于 HTTP Event Collector 的安全扫描结果投递创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考