分子动力学模拟中SETTLE约束算法是如何实现的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计6456个文字,预计阅读时间需要26分钟。
继上一篇文章介绍了分子动力学模拟中常用的LINCS约束算法之后,本文将介绍一种SETTLE约束算法,并探讨其基于Jax的实现方案。
SETTLE约束算法是一种针对分子动力学模拟中原子间距离约束的算法。相较于LINCS算法,SETTLE算法在处理键角和键长约束时更为高效,尤其适用于键角变化较大的系统。本文将详细阐述SETTLE算法的原理,并展示其基于Jax的编程实现。
继上一篇文章介绍了分子动力学模拟中常用的LINCS约束算法之后,本文再介绍一种SETTLE约束算法,及其基于Jax的实现方案。LINCS约束算法相对来说比较通用,更适合于成键关系比较复杂的通用的体系,而SETTLE算法更加适用于三原子轴对称体系,比如水分子。SETTLE算法结合velocity-verlet算法,可以确保一个分子只进行整体的旋转运动,互相之间的距离又保持不变。比较关键的是,SETTLE算法所依赖的参数较少,也不需要微分,因此在性能上十分有优势。 技术背景在上一篇文章中,我们讨论了在分子动力学里面使用LINCS约束算法及其在具备自动微分能力的Jax框架下的代码实现。约束算法,在分子动力学模拟的过程中时常会使用到,用于固定一些既定的成键关系。例如LINCS算法一般用于固定分子体系中的键长关系,而本文将要提到的SETTLE算法,常用于固定一个构成三角形的体系,最常见的就是水分子体系。对于一个水分子而言,O-H键的键长在模拟的过程中可以固定,H-H的长度,或者我们更常见的作为一个H-O-H的夹角出现的参量,也需要固定。纯粹从计算量来考虑的话,RATTLE约束算法需要迭代计算,LINCS算法需要求矩阵逆(虽然已经给出了截断优化的算法),而SETTLE只涉及到坐标变换,显然SETTLE在约束大规模的水盒子时,性能会更加优秀。
算法流程类似于LINCS算法的,我们先引入一个核心的约束条件:
\[\left|r_{ij}\right|^2-d_{ij}^2=0 \]意思就是说,原子i和原子j之间的距离在分子动力学模拟的迭代过程中保持不变。\(d_{ij}\)可以是初始值,也可以是一个给定值。
本文共计6456个文字,预计阅读时间需要26分钟。
继上一篇文章介绍了分子动力学模拟中常用的LINCS约束算法之后,本文将介绍一种SETTLE约束算法,并探讨其基于Jax的实现方案。
SETTLE约束算法是一种针对分子动力学模拟中原子间距离约束的算法。相较于LINCS算法,SETTLE算法在处理键角和键长约束时更为高效,尤其适用于键角变化较大的系统。本文将详细阐述SETTLE算法的原理,并展示其基于Jax的编程实现。
继上一篇文章介绍了分子动力学模拟中常用的LINCS约束算法之后,本文再介绍一种SETTLE约束算法,及其基于Jax的实现方案。LINCS约束算法相对来说比较通用,更适合于成键关系比较复杂的通用的体系,而SETTLE算法更加适用于三原子轴对称体系,比如水分子。SETTLE算法结合velocity-verlet算法,可以确保一个分子只进行整体的旋转运动,互相之间的距离又保持不变。比较关键的是,SETTLE算法所依赖的参数较少,也不需要微分,因此在性能上十分有优势。 技术背景在上一篇文章中,我们讨论了在分子动力学里面使用LINCS约束算法及其在具备自动微分能力的Jax框架下的代码实现。约束算法,在分子动力学模拟的过程中时常会使用到,用于固定一些既定的成键关系。例如LINCS算法一般用于固定分子体系中的键长关系,而本文将要提到的SETTLE算法,常用于固定一个构成三角形的体系,最常见的就是水分子体系。对于一个水分子而言,O-H键的键长在模拟的过程中可以固定,H-H的长度,或者我们更常见的作为一个H-O-H的夹角出现的参量,也需要固定。纯粹从计算量来考虑的话,RATTLE约束算法需要迭代计算,LINCS算法需要求矩阵逆(虽然已经给出了截断优化的算法),而SETTLE只涉及到坐标变换,显然SETTLE在约束大规模的水盒子时,性能会更加优秀。
算法流程类似于LINCS算法的,我们先引入一个核心的约束条件:
\[\left|r_{ij}\right|^2-d_{ij}^2=0 \]意思就是说,原子i和原子j之间的距离在分子动力学模拟的迭代过程中保持不变。\(d_{ij}\)可以是初始值,也可以是一个给定值。

