13.2.4. 邻居搜索库 MDAnalysis.lib.nsgrid

13.2.4.1. 关于代码

这个邻居搜索库是一个序列化的Cython版本,它的灵感来自在 GROMACS

GROMACS4.x代码(更准确地说 nsgrid.cns.c )被用作编写此文件的参考。

GROMACS4.x代码是根据GNU公共许可证v2发布的。

13.2.4.2. 关于算法

这里实现的邻居搜索是基于 cell lists 它们允许计算配对 [1] 其成本为 \(O(N)\) ,而不是 \(O(N^2)\) 。的第552页附录F中介绍了基本算法 Understanding Molecular Dynamics: From Algorithm to Applications 由Frenkel和Smit创作。

简而言之,该算法将域划分为更小的子域,称为 cells 并根据这些细胞的位置将每个粒子分配到这些细胞。随后,任何基于距离的查询首先识别域中的对应小区位置,然后仅在所识别的小区和相邻小区内进行距离评估。必须注意确保 cellsize 大于所需的搜索距离,否则可能不会在结果中反映所有邻居。

在 0.19.0 版本加入.

在 1.0.2 版本发生变更: 重写模块

在 2.1.0 版本发生变更: 最大网格维度上限为1290,立方时为32位有符号整数的最大值。

13.2.4.3. 班级

class MDAnalysis.lib.nsgrid.FastNS(cutoff, coords, box, pbc=True)

基于网格的职位间搜索

如果Pbc设置为,则最小图像约定用于距离评估 True

在 1.0.2 版本发生变更: 重写以修复Triclinic Box的错误

如果未提供方框,则坐标范围即 [xmax, ymax, zmax] - [xmin, ymin, zmin] 应该用来构造伪框。随后,原点也应移至 [xmin, ymin, zmin] 。必须将这些参数提供给函数。

参数:
  • cutoff (float) -- 所需截止距离

  • coords (numpy.ndarray) -- 形状的原子坐标 (N, 3)N 原子。 dtype=numpy.float32 。对于非PBC计算,所有坐标都必须在指定的边界框内 box

  • box (numpy.ndarray) -- 形状(6,)的框尺寸。提供的尺寸必须与返回的格式相同 MDAnalysis.coordinates.base.Timestep.dimensions[lx, ly, lz, alpha, beta, gamma] 。对于非PBC评估,提供一个正交边界框(dtype=numpy.flat32)

  • pbc (boolean) -- 用于打开/关闭周期性边界条件的手柄 [True]

备注

  • pbc=False 仅适用于正交框。

  • 必须注意,所有粒子都在非PBC计算的box参数定义的边界框内。

  • 在非PBC计算的情况下,必须提供一个边界框以包含所有坐标以及搜索坐标。尺寸应类似于 box 参数,而不是正交盒。例如,一组有效的参数用于 box 因为在没有PBC的情况下 [10, 10, 10, 90, 90, 90]

  • 对于非PBC计算,建议使用以下操作

lmax = all_coords.max(axis=0)
lmin = all_coords.min(axis=0)
pseudobox[:3] = 1.1*(lmax - lmin)
pseudobox[3:] = 90.
shift = all_coords.copy()
shift -= lmin
gridsearch = FastNS(max_cutoff, shift, box=pseudobox, pbc=False)
search(self, float[:, :] search_coords)

根据初始化的坐标搜索一组原子

使用查询原子创建新网格,并根据初始化的坐标进行搜索。搜索是排他的,即仅搜索对 (i, j) 这样一来, atom[i] 从查询原子与 atom[j] 来自初始化的一组坐标被存储为邻居。

在实例化:CLASS:FASTNS期间,自动启用PBC感知/非PBC感知计算。

参数:

search_coords (numpy.ndarray) -- 查询形状的坐标 (N, 3) 哪里 N 是查询的数量

返回:

结果 --安 NSResults 包含邻居搜索结果的对象,可通过其方法访问 get_pairs()get_pair_distances()

返回类型:

NSResults

备注

对于不支持PBC的计算,如果任何查询坐标位于 box 供应给 FastNS

搜索初始化坐标内的所有配对

初始化坐标中的所有配对都被同时配准。虽然算法仍然相同,但在这种特定情况下,距离检查可以减少到一半,因为每一对都不需要评估两次。

返回:

结果 --安 NSResults 包含邻居搜索结果的对象,可通过其方法访问 get_pairs()get_pair_distances()

返回类型:

NSResults

class MDAnalysis.lib.nsgrid.NSResults

类来存储结果。

来自的所有输出 FastNS 存储在此类的实例中。所有的方法 FastNS 返回此类的实例,该实例可用于按需生成所需的结果。

get_pair_distances(self)

返回与每对邻域对应的所有距离

返回形状数组 N 其中N是查询原子和指定距离内的初始原子之间的对的数目。每一个元素 [i] 对应于两者之间的距离 pairs[i, 0]pairs[i, 1] ,其中对是从获取的数组 get_pairs()

返回:

距离 --查询对与形状的初始原子坐标之间的距离 N

返回类型:

numpy.ndarray

参见

get_pairs()

get_pairs(self)

返回所需中断距离内的所有对

返回形状数组 (N, 2) ,其中N是之间的配对数量 referenceconfiguration 在指定距离内。每一双 (i, j)reference[i]configuration[j] 原子位置是这样的 reference 是查询原子的位置,而 configuration 包含用于针对查询原子进行搜索的原子组的位置。

返回:

成对 --查询到的邻居原子索引和形状的初始原子坐标对 (N, 2)

返回类型:

numpy.ndarray