科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载fix_modify是 LAMMPS 中用于在输入脚本运行过程中修改已定义 fix 参数的重要控制命令它让热力学统计温度、压强、能量、维里、r-RESPA 层级分配、刚体力学时机等关键行为都能脱离fix命令本身、按需求独立调整。本文基于仓库文档 fix_modify 命令页 与核心源码实现完整覆盖temp、press、energy、virial、respa、dynamic/dof、bodyforces、pad、vizsteps、kick全部关键字的语义、默认值与源码级验证逻辑帮助你掌握如何把 fix 的贡献正确纳入体系热力学输出这一高频实战问题。命令语法与关键字一览语法fix_modify fix-ID keyword value ...fix-ID要修改的 fix 的 ID后面可追加一个或多个keyword value键值对同一条命令中可以修改多个参数支持的关键字bodyforces、dynamic/dof、energy、pad、press、respa、temp、virial、kick以及部分 fix 各自专属的关键字见下文说明。各关键字取值完整继承自官方文档关键字取值含义bodyforcesearly/late选择刚体力/力矩在时间步的哪个阶段计算早期per-atom 力通信之后晚期所有 fix 的 post-force 任务结束之后dynamic/dofyes/no每次计算温度时是否重新统计贡献自由度的原子数 N 及其自由度DOFenergyyes/no是否把该 fix 的能量贡献计入体系势能统计padNchar使用通配符*文件名时时间步字符串补零的总位数presscompute ID指定一个计算压强的 compute用于覆盖 fix 的默认压强算法respa1~ 最大 RESPA 层数或0指定设置/修改力的 fix 在 r-RESPA 的哪一层生效0表示最外层默认tempcompute ID指定一个计算温度的 compute用于覆盖 fix 的默认温度算法virialyes/no是否把该 fix 的维里贡献计入体系维里统计vizsteps整数MD 步数对支持图形输出的 fix其生成的事件图形对象如反应/MC 换位的原子在图像输出中保持可见的步数kickyes/no仅fix nvt/sllod与fix nvt/sllod/eff可用若速度存储在实验室系laboratory frame下一次run开始时叠加与fix deform一致的速度剖面速度存储在 peculiar frame 时该标志被忽略需要特别注意的是该文档页只描述被多个 fix 共同支持的关键字某些只服务于单一 fix 的关键字例如各 MC 包 fix 的pad、fix reaxff/bonds的pad等只写在对应 fix 的文档页中。确定某个 fix 支持哪些fix_modify关键字应查该 fix 的专属文档页。官方文档给出的示例fix_modify 3 temp myTemp press myPress fix_modify 1 energy yes fix_modify tether respa 2 fix_modify myrxns vizsteps 100命令在源码中的分派流程理解fix_modify的行为边界最好先看一下命令的执行链路它解释了为什么有些关键字通用、有些关键字要 fix 自己实现命令入口输入脚本解析到fix_modify后进入 Input::fix_modify()直接转发给modify-modify_fix(narg,arg)。查找目标 fixModify::modify_fix() 用第一个参数按 ID 查找 fix找不到则报错Could not find fix_modify ID ...找到后调用ifix-modify_params(narg - 1, arg[1])处理剩余键值对。通用关键字处理Fix::modify_params() 统一处理dynamic/dof、energy、virial、respa这四个所有 fix 基类都认识的关键字其余关键字则交给虚函数modify_param()分派给具体 fix 类自行解析。基类 Fix::modify_param() 默认返回 0因此若某个 fix 没有实现该关键字会报错Fix {ID} {style} does not support fix_modify {keyword} command。这套基类通用关键字 子类专属关键字的设计正是文档中本页只描述多 fix 共用关键字这一说法的源码依据。从 Fix 类成员定义 也可以看到关键字落地后的内部状态thermo_energyfix_modify energy生效后置 1thermo_virialfix_modify virial生效后置 1respa_level_support与respa_level后者的取值逻辑见下文 RESPA 一节dynamicfix_modify dynamic/dof生效标志含义是重新统计温度 compute 的原子数。源码还内置了合法性校验直接对应文档中的限制说明对不支持能量统计的 fix即没有置energy_global_flag或energy_peratom_flag执行energy yes报错Fix ... does not support fix_modify energy command对不支持维里统计的 fix 执行virial yes同理报错对不支持 RESPA 层级选择的 fixrespa_level_support为 0执行respa报错Illegal fix_modify respa commandrespa的取值小于 0 同样报错。temp 与 press覆盖 fix 的温度/压强计算方式temp关键字决定 fix 如何计算温度。指定值必须是一个已经通过compute命令定义的、且属于计算温度类样式的 compute ID。所有需要计算温度的 fix 默认都会自建一个 compute其文档页有说明因此该选项的作用是让用户覆盖默认的 T 计算方法。press关键字同理决定 fix 如何计算压强指定的 compute ID 必须已定义且属于计算压强的样式。典型应用场景是让恒温/恒压类 fix 使用自定义的温度/压强统计口径例如不同的 group 归一化方式而不必改动 fix 的其余参数。energy把 fix 的能量贡献纳入体系势能energy关键字仅对支持它的 fix 有效各 fix 文档页底部会说明。energy yes会把该 fix 的全局或逐原子能量并入 compute pe 或 compute pe/atom 的计算。而 compute pe 正是 thermo_style 输出任何包含全局势能的量时所用的 compute。注意 compute pe 与 compute pe/atom 自身也有包含/排除 fix 贡献的选项二者需配合理解。对于汇总全局能量的 fix还可以用thermo_style custom中的f_ID关键字ID 为该 fix-ID单独打印该 fix 的能量。两条与能量最小化相关的注意事项继承自文档 note若你在做能量最小化且希望某个 fix 产生的能量和力参与优化判据必须设置energy yes否则最小化看不到该 fix 的贡献大多数支持energy关键字的 fix 默认值为no少数按用户直觉应当开启的 fix 默认是yes具体默认值见各 fix 文档页。从实现看这一开关如何生效Fix::ev_setup() 中当thermo_energy未置位时eflag_either/eflag_global/eflag_atom全部清零即能量统计直接被关闭置位后才根据eflag中的ENERGY_GLOBAL、ENERGY_ATOM位决定统计路径并在需要时分配逐原子能量数组fix:eatom。这与文档energy yes 会把 fix 的全局或逐原子能量纳入 compute pe / compute pe/atom的描述完全一致。实际输入脚本中的用法示例仓库自带示例 in.efield-lepton 展示了energy yes的典型用法fix efield/lepton施加外场力后显式声明其能量要计入体系统计从而使thermo_style输出的pe包含外场贡献fix 2 all efield/lepton -1/6*x^3 step 1e-6 fix_modify 2 energy yes ... compute erot all erotate/sphere variable etotal equal ke c_erot pe thermo_style custom step temp ke c_erot pe v_etotalvirial把 fix 的维里贡献纳入体系维里virial关键字与energy对称virial yes会把 fix 的全局或逐原子维里并入 compute pressure 或 compute stress/atom 的计算。前者是 thermo_style 输出任何包含全局压强的量时所用的 compute同样地这两个 compute 也都提供包含/排除 fix 维里贡献的选项。注意事项继承自文档 note若你在使用 fix box/relax 做能量最小化且希望某个 fix 的维里贡献参与优化判据必须设置virial yes多数支持virial关键字的 fix 默认值为no少数为yes以各 fix 文档页为准。实现层面Fix::ev_setup()中对thermo_virial的处理与能量对称未置位时维里统计标志全部清零置位后才按VIRIAL_PAIR、VIRIAL_FDOTR、VIRIAL_ATOM、VIRIAL_CENTROID等位分别设置全局/逐原子统计并分配fix:vatom数组。respa为设置/修改力的 fix 选择 r-RESPA 层级对于设置或修改力的 fix可以用respa关键字选择它在 r-RESPA 的哪一层生效取值为1到当前最大 RESPA 层数的整数若指定值大于当前最大层数则落到最外层这与默认行为一致用0可以恢复到默认的最外层目标 fix 必须声明支持该功能即实现中置位respa_level_support否则fix_modify直接报错r-RESPA 运行开始时所有采用自定义 RESPA 层级且处于激活状态的 fix 会与其指定层级一并打印出来。从源码看层级数值的换算Fix::modify_params() 中先校验respa_level_support与lvl 0然后respa_level lvl - 1——即命令行层的 0/1 换算成内部层的 0 起始索引0 表示最外层的文档语义在此落地。dynamic/dof动态重新统计温度归一化的原子数与自由度dynamic/dof决定 fix 在每次计算温度时是否重新统计fix group 中的原子数 N 及对应的自由度。只有自算内部温度的 fix 样式才使用该选项目前主要是 fix rigid/nvt/small 与 fix rigid/npt/small用于对刚体的平动与转动做恒温处理。默认假设 N 与自由度恒定。若你正在向体系中添加原子/分子参见 fix pour、fix deposit、fix gcmc或预期原子会丢失例如离开模拟盒或通过 fix evaporate 蒸发则应启用该选项以保证温度归一化正确。文档同时提醒像 fix nvt 这类通过温度 compute 计算温度的恒温 fix不使用dynamic/dof关键字类似的需求应改用 compute_modify dynamic/dof 来保证温度归一化正确——两条路径针对的是不同的温度计算架构。bodyforces选择刚体力/力矩的计算时机bodyforces决定作用在刚体上的力和力矩在时间步中的哪个阶段计算仅刚体积分类 fix 使用包括 fix rigid、fix rigid/small 及其变体early在每个时间步的 post-force 阶段、逐原子力计算并跨处理器通信之后立即计算刚体力/力矩late默认在 final-integrate 阶段、其他 fix 完成其 post-force 任务之后计算。默认的late意味着如果还有其他 fix 会给单个原子施加力那么刚体约束在时间积分时会包含这些力。指定early的好处是允许新 fix 在刚体时间积分之前读取或修改逐体力/力矩副作用是像 fix addforce、fix setforce、fix spring 这类给单个原子加力的 fix如果写在输入脚本中fix rigid之后将对刚体运动不产生作用。出现这种情况时 LAMMPS 会给出警告。pad通配符文件名的时间步补零pad仅适用于会产生输出文件且文件名中含通配符*该位置替换为时间步的 fix。语义如下pad为 0默认时间步转为不补零的字符串如100、12000、2000000指定pad NcharNchar 0所有字符串用前导零补齐到统一长度 Nchar例如pad 7会得到0000100、0012000、2000000目的是让后处理程序可以按时间步升序轻松读取文件。是否支持该关键字取决于具体 fix 样式需查对应 fix 的文档页。仓库中一个真实实现是 FixReaxFFBonds::modify_param()它把pad交给padflag并返回 2 表示消耗了两个参数这正是基类不认识、fix 自己解析这一分派机制的实例。vizsteps事件图形对象的可见时长vizsteps仅适用于产生事件型图形对象的 fix例如参与化学反应的原子、Monte Carlo 的交换/移动/插入事件。它决定这些图形对象在对应的 dump image 输出 中保持可见的时间步数。例如官方示例中的fix_modify myrxns vizsteps 100让反应事件原子在图像中显示 100 步。kickSLLOD 类恒温器的速度剖面叠加kick只能与 fix nvt/sllod 和 fix nvt/sllod/eff 联用kick yes且速度存储于实验室系laboratory frame时下一次run开始时会自动叠加一个与 fix deform 一致的速度剖面若速度存储于peculiar framekick标志被忽略。默认值汇总综合官方文档 Default 一节各选项的默认设置为选项默认值tempfix 自己定义的 compute IDpressfix 自己定义的 compute IDenergynovirial因 fix 样式而异多数为norespa0最外层bodyforceslate使用要点小结fix_modify与fix命令的边界通用关键字temp、press、energy、virial、respa、dynamic/dof、bodyforces、kick等由基类统一处理专属关键字由具体 fix 实现modify_param()解析用错 fix 会得到明确的 does not support 报错便于排查涉及能量最小化时energy yes/virial yes是 fix 贡献进入优化判据的必要条件这是最常见的遗漏点涉及原子数动态变化时自算温度的刚体恒温 fix 需dynamic/dof yes而基于温度 compute 的恒温 fix如fix nvt应改用 compute_modify 的同类选项涉及r-RESPA时respa层级只对声明支持的 fix 生效且超出最大层数时自动落到最外层本命令无额外限制官方文档 Restrictions 一节为 none。相关命令fix、compute temp、compute pressure、thermo_style。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐MMDetection 上的 LVIS 大词表实例分割实战指南配置解析、长尾采样与 Mask R-CNN 基准复现MMDetection 上的 LVIS 大词表实例分割实战指南配置解析、长尾采样与 Mask R CNN 基准复现 LVISLarge Vocabulary科研科学计算高性能计算LAMMPS 中 fix press/berendsen 命令详解Berendsen 压控算法、参数配置与源码实现LAMMPS 中 fix press/berendsen 命令详解Berendsen 压控算法、参数配置与源码实现 fix press/berendsen 是科研科学计算高性能计算LAMMPS fix lineforce 命令详解将原子运动约束在一维直线方向LAMMPS fix lineforce 命令详解将原子运动约束在一维直线方向 导读 fix lineforce 是 LAMMPS 中用于施加一维几何约束的力科研科学计算高性能计算上一篇AutoSubs本地化AI字幕生成系统的技术架构与实现路径下一篇Apache Beam ZetaSQL 数学函数MOD、CEIL、CEILING、FLOOR完整参考指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考 SEO 优化官网定制响应式建站教育培训建站