13.2.4. 邻居搜索库 MDAnalysis.lib.nsgrid
13.2.4.1. 关于代码
这个邻居搜索库是一个序列化的Cython版本,它的灵感来自在 GROMACS 。
GROMACS4.x代码(更准确地说 nsgrid.c 和 ns.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()
。- 返回类型:
备注
对于不支持PBC的计算,如果任何查询坐标位于 box 供应给
FastNS
。
- self_search(self)
搜索初始化坐标内的所有配对
初始化坐标中的所有配对都被同时配准。虽然算法仍然相同,但在这种特定情况下,距离检查可以减少到一半,因为每一对都不需要评估两次。
- 返回:
结果 --安
NSResults
包含邻居搜索结果的对象,可通过其方法访问get_pairs()
和get_pair_distances()
。- 返回类型:
- class MDAnalysis.lib.nsgrid.NSResults
类来存储结果。
来自的所有输出
FastNS
存储在此类的实例中。所有的方法FastNS
返回此类的实例,该实例可用于按需生成所需的结果。- get_pair_distances(self)
返回与每对邻域对应的所有距离
返回形状数组
N
其中N是查询原子和指定距离内的初始原子之间的对的数目。每一个元素[i]
对应于两者之间的距离pairs[i, 0]
和pairs[i, 1]
,其中对是从获取的数组get_pairs()
- 返回:
距离 --查询对与形状的初始原子坐标之间的距离
N
- 返回类型:
参见
- get_pairs(self)
返回所需中断距离内的所有对
返回形状数组
(N, 2)
,其中N是之间的配对数量reference
和configuration
在指定距离内。每一双(i, j)
,reference[i]
和configuration[j]
原子位置是这样的reference
是查询原子的位置,而configuration
包含用于针对查询原子进行搜索的原子组的位置。- 返回:
成对 --查询到的邻居原子索引和形状的初始原子坐标对
(N, 2)
- 返回类型: