键长键角约束与刚性
系列标签:
知识文档·分子模拟·键长键角约束·MolSimulX
积分器选好了(见 积分算法与时间步长),全原子里含氢的键伸缩往往仍太快,把 $\Delta t$ 压到 0.5–1 fs。实践中常用约束算法把键长(有时键角)钉在平衡值,去掉最快自由度,步长常可提到 2 fs 量级——这是效率与模型简化之间的权衡。
本篇讲键长 / 键角约束与刚性分子在概念上做什么、和「力场里的键/角项」有何不同、对温度与动力学有何影响。了解在干什么、自由度怎么数即可,不必自己实现约束迭代——除非你要开发动力学引擎。

一、约束解决什么问题?
含氢的共价键(O–H、C–H 等)伸缩振动周期大约十几飞秒(波数约 3000 $\mathrm{cm}^{-1}$ 量级时,$T$ ~ 10 fs)。积分要「看清」最快运动,柔性键下 $\Delta t$ 常被压到 0.5–1 fs。若你真正关心的是溶剂结构、扩散、构象等慢过程,这些高频伸缩多半是累赘:吃步长、吃算力,对目标量贡献却有限。
注意:这里说的是分子内 X–H 键伸缩,不是分子间氢键(hydrogen bond)——后者更软、更慢,一般不是卡 $\Delta t$ 的那根弦。
| 不做约束 | 做键长约束 |
|---|---|
| 必须分辨最快振动 | 最快振动被「冻住」 |
| $\Delta t$ 更小,同样物理时间更多步 | $\Delta t$ 可加大(全原子常见 2 fs) |
| 键长在平衡值附近振荡 | 键长严格(或近似)固定在设定值 |
一句话:用「钉死键长」换更大时间步——模型略简化,效率明显提高。
Tips: 约束不是「把力场里的键项删掉」那么简单。力场仍可保留键势能;约束是在每步积分后(或同时)强制几何满足 $|r_{ij}|=d_0$。软件里通常一开约束选项就自动处理,你要做的是选对约束哪些键、以及 $\Delta t$ 是否匹配。
二、和「力场里的键」有何不同?
| 力场键项(谐振子等) | 几何约束(SHAKE 等) | |
|---|---|---|
| 在干什么 | 键长偏离 $d_0$ 时产生恢复力,允许振动 | 每步把键长钉回 $d_0$(或保持刚体几何) |
| 自由度 | 键伸缩仍是自由度 | 该伸缩自由度被拿掉 |
| 对 $\Delta t$ | 仍受振动频率限制 | 去掉最快模后可加大步长 |
| 键长分布 | 有宽度(温度相关) | 基本是一条线(钉死) |
两者可以同时存在于「模型描述」里,但开了硬约束后,键长分布本身不再有物理意义——你分析的应是角、二面角、径向分布等未被钉死的量。
数学上,这类「把某些内坐标钉死」的约束常称为完整约束(holonomic):约束只依赖坐标(例如 $|r_i-r_j|-d_0=0$),不显式依赖速度。入门记住图像即可:在剩余自由度上继续做牛顿积分。
三、常见做法
1. 算法名字在软件里常看到
| 名称族 | 直观理解 | 何时会遇到 |
|---|---|---|
| SHAKE | 积分后迭代修正坐标,直到约束满足 | 经典、普及;许多引擎的默认之一 |
| RATTLE | 在 SHAKE 思路上同时照顾速度,使速度也与约束相容 | 常与 Velocity Verlet 搭配 |
| LINCS 等 | 另一类高效约束算法(矩阵/展开,细节因实现而异) | GROMACS 等里很常见 |
| 刚性分子 / 刚性水 | 整个分子当刚体,或键+角都固定 | TIP3P/SPC 等「刚性水」模型 |
不必纠结迭代公式:它们都在做同一件事——每步结束后,被约束的几何重新成立。失败时(迭代不收敛)日志常会报 constraint failure,多半是步长过大、结构重叠或坏接触。
2. 通常约束什么?
| 常见选择 | 说明 |
|---|---|
| 只约束连氢的键 | 全原子最常见;去掉最快模,又尽量少动重原子骨架 |
| 约束所有键长 | 步长/稳定性上更激进;构象空间被多削掉一些 |
| 键长 + 某些角(如水的 H–O–H) | 「刚性水」:分子内部几乎不再振动 |
| 冻住一组原子(位置固定) | 另一类「约束」:墙、晶格、蛋白骨架预平衡等——见 能量最小化与预平衡 |
注意: 「刚性水」比「只约束 O–H 键长」更强:振动自由度更少,动力学、介电常数等可能与柔性水不同。和文献对比时,水模型 + 是否刚性必须一致。
3. 和步长怎么配套?
粗经验(全原子):
- 柔性 X–H、无约束 → 0.5–1 fs
- 约束 X–H(或全部键长)→ 2 fs 很常见
步长放大的前提是:剩下最快的运动仍能被 $\Delta t$ 分辨。约束没开够却硬上 2 fs,或约束失败却继续跑,都会出问题。详见 积分算法与时间步长。
四、对温度定义的影响
自由度回顾:体系还能独立怎么动的方式有多少种。三维里 $N$ 个互不约束的粒子,约 $3N$ 个平动自由度;动能温度按这些自由度均分能量。
无约束时常用:
$$\frac{1}{2}\sum_i m_i v_i^2 = \frac{3N}{2} k_B T$$
有 $N_c$ 个独立约束后,分母变为 $3N – N_c$(再视是否去掉质心平动/转动等做修正):
$$\frac{1}{2}\sum_i m_i v_i^2 = \frac{3N – N_c}{2} k_B T$$
热浴若按错误自由度标度温度,平均 $T$ 会系统性偏差——日志里「温度到了」,实际动能可能一直偏一截。好消息是:主流软件在开启 SHAKE/LINCS 时通常会自动扣自由度;你要做的是别手动改错、并在 Methods 写清约束与步长。
Tips: Methods 里建议写明:哪些键/角被约束、时间步长、热浴类型——审稿人常查这三项是否自洽。热浴细节见 常见系综与控温控压。
五、对动力学与采样的影响
约束改的是高频振动,对多数「慢」问题通常可接受,但心里要有数:
| 影响 | 说明 |
|---|---|
| 键长分布 | 被钉死,分析它没有意义 |
| 慢过程(扩散、多数构象) | 通常影响较小,这正是约束的使用场景 |
| 振动光谱 / 某些介电与动力学细节 | 可能与柔性模型不同;要比实验光谱时需谨慎 |
| 过约束 | 把不该冻的角、二面角相关几何也冻住,可能改变构象平衡 |
实践原则:
- 约束与 $\Delta t$、热浴一起选,不要只改其中一个;
- 和文献比性质时,对齐「约束了什么 + 步长 + 水模型」;
- 预平衡阶段有时先约束重原子/骨架,再逐步放开——那是流程技巧,见 能量最小化与预平衡。
六、实践中的小清单
| 检查项 | 问自己 |
|---|---|
| 要不要约束 | 含氢全原子、想用 ~2 fs?→ 通常要 |
| 约束范围 | 只连氢的键,还是全键 / 刚性水?与文献一致吗? |
| $\Delta t$ | 是否与约束配套?未约束却用 2 fs? |
| 温度 | 软件是否按约束后自由度算 $T$? |
| 日志 | 有无 constraint failure / 迭代不收敛? |
| 下一步 | 约束与步长稳了 → 常见系综与控温控压 |
七、小结
- 约束去掉最快振动(常为含氢的 X–H 伸缩),用模型简化换更大 $\Delta t$(全原子常见 2 fs)。
- 几何约束 ≠ 力场键项:前者钉死键长,后者允许振动。
- SHAKE / RATTLE / LINCS 等是实现手段;你在软件里选项即可,不必手写迭代。
- 自由度减少 → 温度公式分母要改;主流软件通常自动处理。
- 刚性程度影响可对比性;与文献保持「约束 + 步长 + 水模型」一致。
学习路径
前置阅读: 积分算法与时间步长
下一步:
