Verlet近邻列表算法
引入截断近似后,虽然大大减少了需要计算的相互作用的粒子对数,但由于 事先无法知道两个粒子间的距离,仍须进行许多无效的计算,以确定任意两个粒 子对间的距离。考虑到粒子在每一步的模拟中只移动很小的距离,Verlet引入了 近邻列表算法(Verlet neighbor lists) o近邻列表算法需要在模拟开始时为中心 元胞中的每一个粒子构造一个近邻粒子列表,把周围半径门(>rc)近邻球内的 粒子全部罗列在近邻表中(图6-2)。由于近邻球外的粒子不会很快运动到截断 球内,在紧接着的若干步MD模拟中,只需计算中心粒子与列于近邻表中的粒 子间的距离,而不需要计算中心粒子与不在近邻表中的其他粒子之间的距离,大 大减少了需要计算粒子间距离的数量。但是,建立近邻列表后并不能一劳永逸, 每经过若干步的模拟后,近邻球外的粒子就会运动到截断球内,这时必须更新近邻表。

Verlet近邻列表算法的关键是选取合适的近邻球半径r1,保证在更新近邻表 前近邻球外的粒子,不会进入与中心粒子相距rc的截断球内,但可以让位于截 断球内的粒子离开近邻球。由此可知,增大近邻球的半径r1,虽可以延长更新近 邻表的时间间隔,减少构造近邻表的计算时间,但近邻球中包含了更多的粒子, 增加了需要计算的粒子间距离的数量。相反,降低近邻球的半径r1,虽然缩短了更新近邻表的时间间隔,增加了构造近邻表的计算时间,但近邻球中包含了更少的粒子,降低了需要计算的粒子间距离的数量。因此,选取合适的近邻球半径 r1,实现更新近邻表和计算粒子间距离数量之间的平衡,可取得最佳的计算效果。
在MD模拟程序中,所有中心粒子的近邻粒子列表,存储在一个很大的近 邻数组之中。若模拟体系的数密度为p,则近邻数组约包含4πr1^3pN/6个近邻粒 子。此外,还需建立一个大小为N的指针数组,数组的每个元素分别指向近邻 数组中存储各个中心粒子第一个近邻粒子的位置(图6-2)。
