LAMMPS fix nvt/sllod 命令详解:基于 SLLOD 方程的 NEMD 恒温剪切/拉伸模拟 科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载fix nvt/sllod 是 LAMMPS 中面向非平衡分子动力学NEMD仿真的核心恒温命令它在模拟盒持续变形如剪切、拉伸流动时通过 SLLOD 运动方程配合 Nose/Hoover 恒温器生成正则系综轨迹并自动扣除盒子变形带来的流速度streaming velocity只对原子的热运动部分进行恒温。读完本文你将掌握该命令的完整语法与全部可选参数psllod、peculiar、kick、integrator理解 SLLOD 与 p-SLLOD 两种运动方程的差异与选择依据学会与 fix deform 正确搭配remap 设置、初始 kick 叠加并能复现仓库中 NEMD 剪切流计算粘度的完整输入脚本。命令总览语法与参数fix nvt/sllod 的基本语法与 fix nvt 一致仅需指定 fix 的 ID、group 与 style 名称其后可以追加零个或多个 keyword/value 对fix ID group-ID nvt/sllod keyword value ...其中 ID 与 group-ID 的语义与其他 fix 命令一致见 fix 命令文档nvt/sllod是该 fix 的 style 名称其余参数汇总如下keywordvalue含义psllodno/yes使用标准 SLLODno或 p-SLLODyes变体peculiarno/yes速度存储在实验室坐标系no还是peculiar随流坐标系yeskickno/yes是否在运行开始时自动叠加一次流速度默认在 peculiarno 时为 yesintegratorreversible/legacy使用可逆积分格式默认2026 年后版本或旧版积分格式此外fix nvt 命令见 fix nvt 文档中所有与恒温器相关的 keyword/value 都可以继续追加例如temp、tchain、drag等。常用示例fix 1 all nvt/sllod temp 300.0 300.0 100.0 fix 1 all nvt/sllod temp 300.0 300.0 100.0 drag 0.2第一行表示对全部原子在 300K 目标温度下做恒温阻尼/响应时间 100.0第二行额外设置了drag 0.2 以加速温度弛豫drag参数在 fix_nh.cpp 中解析取值必须为非负实数。从源码看这些参数都在 FixNVTSllod 构造函数 中逐个解析psllod、peculiar、kick、integrator之外的所有参数会被忽略交给父类 FixNH 处理。构造函数还做了两项硬性约束——必须启用温度控制tstat_flag且不能启用压力控制pstat_flag否则直接报错。默认时mtchainNose/Hoover 链长度被强制设为 1这正对应文档Restrictions中本命令配合 tchain1 效果最佳的说明。SLLOD 方程与 p-SLLOD两种运动方程的选择适用场景与物理背景fix nvt/sllod 对组内原子执行恒定 NVTV 为体积、T 为温度积分每步更新位置与速度产生与正则系综一致的轨迹。它专门用于盒子大小和/或形状持续变化的仿真例如 NEMD 剪切流。盒子变化由 fix deform 命令 驱动因此盒内每一点都可以认为具有一个流速度streaming velocity。这个随位置变化的流速度会从每个原子的实际速度中减去得到用于温度计算和恒温的热速度。例如盒子沿 x 方向相对 y 剪切时盒子底部低 y的点 x 速度小顶部高 y的 x 速度大——这些速度分量不贡献原子的温度。标准 SLLOD 与 p-SLLODg-SLLODSLLOD默认psllodno最早由 Hoover 和 Ladd 提出Evans and Morriss, Phys Rev A, 30, 1528 (1984)并由 Evans 和 Morriss 证明与剪切流的牛顿运动方程等价Daivis 和 ToddJ Chem Phys, 124, 194103 (2006)进一步证明它对所有形式的均匀流动都能产生期望的速度梯度和正确的应力做功。LAMMPS 默认实现严格遵循标准 SLLOD 方程。p-SLLODpsllodyes这是 SLLOD 的一个变体先由 Tuckerman 等人以 g-SLLOD 之名提出J Chem Phys 106, 5615 (1997)后由 Edwards 等人以 p-SLLOD 之名再次提出J Chem Phys 124, 194104 (2006)。两种情况下运动方程都以 velocity Verlet 形式与 Nose/Hoover 链恒温器耦合实现方式与 fix nvt 命令 高度一致。psllod选项从 2023 年 2 月 8 日的版本8Feb2023开始提供。从源码 fix_nvt_sllod.h 可以看到psllod_flag、peculiar_flag、kick_flag三个整型标志和REVERSIBLE/LEGACY枚举的集成器选择在 nve_x() 位置更新 中p-SLLOD 与标准 SLLOD 的区别体现在速度更新项上p-SLLOD 额外包含与坐标成比例的二次项如dthalf*grad_u[0]*grad_u[0]*x[i][0]而标准 SLLOD 只含与速度耦合的项如dthalf*(grad_u[5]*v[i][1] grad_u[4]*v[i][2])。两个 velocity 坐标系实验室帧与 peculiar 帧peculiar标志决定速度以何种参考系存储peculiar no默认速度存储在实验室坐标系包含流动带来的流速度分量。这通常是计算角速度等属性所必需的但会使 SLLOD 运动方程的积分更复杂性能可能稍差。此时 fix 会自动创建一个compute temp/deform来计算热温度。peculiar yes不存储流速度分量LAMMPS 报告的速度即为相对流速度的速度。如果不需要实验室系速度一般推荐使用此模式——在相同结果下性能更好。此时 fix 会创建一个compute temp。对应地构造函数 中会自动创建名为fix-ID_temp的 computecompute fix-ID_temp group-ID temp # 如果 peculiar yes compute fix-ID_temp group-ID temp/deform # 如果 peculiar notemp/deform的细节见 compute temp/deform 文档它会从原子速度中减去由盒子变形诱导的流速度后再计算温度remove_deform_bias/restore_deform_bias系列函数在 compute_temp_deform.cpp 中实现。注意这个 compute 的 ID 为 fix-ID _temp分组与 fix 相同但它不是热力学输出默认使用的thermo_tempcompute——因此你可以通过 compute_modify 命令 单独修改这个 compute 的属性如自由度并通过 thermo_style custom 命令 指定该 compute-ID 来打印此温度反之修改thermo_temp不会影响本 fix。integrator 选项reversible 与 legacy从 2026 年 2 月 11 日的版本11Feb2026起命令新增integrator选项integrator reversible默认数值积分格式紧密遵循 Sanderson 和 Searles 描述的方案J Chem Phys, 164, 084121 (2026)已被验证能产生等于解析期望值的功从而严格守恒守恒量。integrator legacy即旧版 LAMMPS 的行为该守恒量不能精确保持且在高流速下应力可能略微偏高。在源码中两种格式分别对应两条代码路径integrator REVERSIBLE时nve_x() 执行完整的可逆 SLLOD 半步更新——位置更新前后各做一次流速度补偿并手动处理盒子形变导致的流速度变化integrator LEGACY时nh_v_temp() 走旧路径其注释明确说明该方式在混合流动下不可时间反转且忽略了位置更新引起的流速度变化。源码还强制规定legacy 积分器与 peculiar yes 不兼容构造函数检查使用时会直接报错。与 fix deform 的正确搭配remap 设置与流张量选择remap 设置的一致性检查fix nvt/sllod 依赖 fix deform 命令 驱动盒子变形。fix deform 有一个remap选项取值x、v、none用于决定原子坐标或速度是否被重新映射到变化的盒子。与 fix nvt/sllod 搭配时必须遵守绝不 remap 原子坐标不能用 remap x因为 fix nvt/sllod 会自行调整原子位置和速度以产生与盒子大小/形状变化匹配的速度剖面。peculiar no 时应当用 remap v原子穿越周期边界时 remap 速度与 fix nvt/sllod 维持的速度剖面一致。peculiar yes 时应当用 remap none。LAMMPS 会在 init() 中自动检查这一设置它会查找所有 style 为deform的 fix并比对remapflagDomain::V_REMAP或Domain::NO_REMAP不一致时直接报错。remap选项的解析见 fix_deform.cpp。此外init() 还要求仿真中必须存在 fix deform否则报 Using fix nvt/sllod with no fix deform defined 错误。恒定流张量的推荐做法对于恒定流动张量的 SLLOD 仿真例如计算粘度x/y/z 方向变形使用 fix deform 的trate真应变率stylexy/xz/yz 方向使用erate或erate/rescale工程剪切应变率style混合流动时必须用erate/rescale以维持恒定流动张量此时 LAMMPS 会发出警告。这些警告在仅用 fix nvt/sllod 调整系统尺寸、随后再做平衡步骤的场景下可以安全忽略。仓库示例 examples/nemd/in.nemd 给出了最直接的用法对 2D LJ 系统施加 xy 方向剪切fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1配合fix 2 all deform 0 xy erate 0.01 remap v。更完整的粘度计算脚本见 examples/VISCOSITY/in.nemd.2d它展示了完整的流程先用fix nvefix langevin平衡然后解除旧 fix、改用fix nvt/sllod temp $t $t 0.1fix deform 0 xy erate ${xyrate} remap v施加剪切并通过compute tilt all temp/deform配合thermo_modify temp tilt在热力学输出中使用热温度最后用-pxy/(v_srate/ly)计算粘度v_visc。该示例也被单测 unittest/examples/test_examples_viscosity.cpp 中的nemd_sllod测试覆盖。初始 kick叠加流速度的正确姿势SLLOD 算法的一个关键点是当流动开启时粒子会获得一个初始的动量kick等价于在实验室系中叠加流速度。这能缩短达到稳态所需的时间并且是与响应理论保持联系所必需的。可以手动用 velocity 命令 施加但必须小心速度要与盒子变形兼容——拉伸流动以盒子中心忽略倾斜因子为有效原点剪切流动以下盒角为原点。更简单的方式是设置kickyespeculiar no 时的默认值在下一次 run 命令或类似命令被调用时自动施加。kick 只会施加一次若需再次 kick例如修改了 fix deform 的参数可用 fix_modify 命令 重新排队。注意 kick 在run 0时也会被施加——这可以用来先移除当前的流速度、再施加新的。文档给出了完整的两段式示例先以xy erate 0.5运行 100 步此处自动叠加流速度随后切换为反向变形xy erate -0.5并用fix_modify 2 kick yesrun 0移除旧流速度最后切换为xy erate 1.0重新叠加流速度并运行 100 步fix 1 all deform 0 xy erate 0.5 remap v fix 2 all nvt/sllod temp 1 1 0.1 peculiar no kick yes run 100 # Streaming velocity superimposed here # Remove current streaming velocity unfix 1 fix 1 all deform 0 xy erate -0.5 remap v fix_modify 2 kick yes run 0 # Continue with new streaming velocity unfix 1 fix 1 all deform 0 xy erate 1.0 remap v fix_modify 2 kick yes run 100如果速度存储在 peculiar 帧peculiaryeskick 标志会被忽略上述行为可用更简单的脚本实现fix 1 all deform 0 xy erate 0.5 remap v fix 2 all nvt/sllod temp 1 1 0.1 peculiar yes run 100 # Switch to new deformation rate unfix 1 fix 1 all deform 0 xy erate 1.0 remap v run 100需要留意几个边界情况fix deform 的final、scale、vel、delta等 style 在run 0时会把变形率置零此时这些流动分量不会施加 kick。若希望在此类场景下 kick建议先以kick no初始化 fix nvt/sllod再在下一个非零长度的 run 之前用fix_modify ... kick yes开启。volume、wiggle、variable等 style 在 run 初始化时不会设定变形率因此不兼容kick yes选项。源码层面kick 的执行位于 init()仅当 peculiar no 且 kick_flag 为真时先调用f-init()确保 h_rate 就绪然后输出 fix nvt/sllod applying velocity profile kick. 日志并调用ComputeTempDeform::apply_deform_bias_all()叠加流速度随后立即将 kick_flag 置 0保证只 kick 一次peculiar yes 时则会警告忽略 kick。fix_modify对kick选项的支持在 modify_param() 中实现kick值同样用utils::logical解析。仓库日志如 examples/nemd/log.5Feb26.nemd.g.1中可以看到运行期输出 fix nvt/sllod applying velocity profile kick. 的实际证据。恒温器细节温度计算、偏置移除与常见搭配与所有执行恒温的 fix 一样本 fix 可与带偏置移除的 compute 命令 配合使用例如仅对 region 区域 内的原子恒温、移除某个组的质心速度、或从计算中移除速度的 x 分量等。默认不启用偏置只有通过fix_modify给本 fix 指定一个包含偏置项的温度 compute 时才会生效。偏置与 SLLOD 的具体交互规则integratorlegacy或integratorreversible且peculiaryes时先从每个原子移除偏置对剩余热自由度恒温再把偏置加回。integratorreversible且peculiarno时温度 compute 必须是 compute temp/deform 类型但可以通过指定内部温度 compute 达到同样效果。施加 SLLOD 到原子速度时integratorreversible下peculiar yes 不移除任何偏置、peculiar no 只移除盒子变形偏置integratorlegacy下会先移除全部偏置盒子变形 compute temp/deform 内部温度 compute 的任何偏置。一个实用的组合是给 temp/deform 指定temp/partial或temp/profile作为内部温度 compute以排除某些方向或处理额外的偏置内部温度 compute 的组必须与 temp/deform 一致并可通过 compute_modify 更换详见 compute temp/deform 文档。需要注意如果直接求值内部温度 compute如c_compute-ID_temp其计算中不会移除流速度分量。重启、输出与其他行为重启restart本 fix 会把 Nose/Hoover 恒温器状态写入二进制重启文件restart 命令文档同时保存速度 kick 是否已施加确保重启后不会重复 kick。源码中 size_restart_global()/pack_restart_data()/restart() 在父类基础上多打包/恢复了一个kick_flag值。从重启文件恢复仿真时需在输入脚本中按 read_restart 文档 的要求重新指定 fix。fix_modify支持temp选项指定用于恒温过程的 compute以及本文所述的kick选项。输出本 fix 计算累计能量变化计入热力学输出关键字ecouple与econserve见 thermo_style 文档。注意这不包括驱动流动所做的功因此这些值会随时间变化econserve的期望变化率细节见 Sanderson 和 Searles 的文献。本 fix 输出的全局标量与全局向量与 fix nvt 命令 相同。温度渐变可通过 run 命令 的start/stop关键字在多次运行间渐变目标温度。能量最小化本 fix 在 minimize 能量最小化 期间不会被调用。限制、相关命令与默认值限制本 fix 最适宜不使用 Nose/Hoover 链恒温器即tchain 1这也是它的默认值tchain设置过大可能导致平衡不佳。相关命令fix nve、fix nvt、fix temp/rescale、fix langevin、fix_modify、compute temp/deform。默认值与 fix nvt 相同但tchain 1、psllodno、peculiarno、kickyes、integratorreversible。关于偏置与流速度一致性的一个实用提醒见 compute temp/deform 文档以 compute temp 为内部温度 compute 时temp/deform 只有在原子确实以匹配盒子变形的流速度运动时才准确否则会减去错误的流速度得到虚假的热温度。不要想当然地认为原子一定以盒子变形速率流动应通过 fix ave/chunk 监视速度剖面或将其结果与 compute temp/profile 对比。附单元测试中的参数组合参考仓库单测提供了各种参数组合的可复现示例位于 unittest/force-styles/tests/ 目录可作为参数语义的交叉验证例如fix-timestep-nvt-sllod-reversible.yamlkick yes psllod no peculiar no integrator reversible配合fix deform ... xy erate/rescale ... remap vfix-timestep-nvt-sllod-peculiar.yamlkick no psllod no peculiar yes integrator reversiblefix-timestep-nvt-psllod-reversible.yamlkick yes psllod yes peculiar no integrator reversiblefix-timestep-nvt-psllod.yamlkick no psllod yes peculiar no integrator legacy。这些测试同时覆盖了 standard SLLOD 与 p-SLLOD、lab 帧与 peculiar 帧、reversible 与 legacy 积分器的全部组合说明四组选项在实现上相互正交、均可独立选用唯一例外是 legacy 积分器与 peculiar yes 不兼容源码会直接报错。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐LAMMPS fix nvt/sllod/eff 全解析面向 eFF 电子力场的非平衡 NVT 热浴与 SLLOD 流场积分LAMMPS fix nvt/sllod/eff 全解析面向 eFF 电子力场的非平衡 NVT 热浴与 SLLOD 流场积分 导读 fix nvt/sllod科研科学计算高性能计算LAMMPS 中 fix nvt/sphere 命令详解有限尺寸球形粒子的 Nose/Hoover 恒 NVT 系综控温LAMMPS 中 fix nvt/sphere 命令详解有限尺寸球形粒子的 Nose/Hoover 恒 NVT 系综控温 本文围绕 LAMMPS 的 fix科研科学计算高性能计算LAMMPS 非平衡分子动力学NEMD仿真完整指南从 SLLOD 方程到粘度测量LAMMPS 非平衡分子动力学NEMD仿真完整指南从 SLLOD 方程到粘度测量 非平衡分子动力学Non equilibrium Molecular D科研科学计算高性能计算上一篇老 Mac 也能装最新系统OpenCore Legacy Patcher 完整指南下一篇3分钟解锁QQ音乐加密文件qmcdump让你的音乐真正属于你创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考