sponge.partition.NeighbourList
- class sponge.partition.NeighbourList(system: Molecule, cutoff: float = None, pace: int = 20, exclude_index: Tensor = None, num_neighbours: int = None, num_cell_cut: int = 1, cutoff_scale: float = 1.2, cell_cap_scale: float = 1.25, grid_num_scale: float = 2, use_grids: bool = False, cast_fp16: bool = False)[源代码]
近邻表。
- 参数:
system (Molecule) - 模拟系统。
cutoff (float,可选) - 截断距离。如果在周期性边界条件 (PBC) 下给定了
None
,截断距离将被分配为默认值 1 纳米。默认值:None
。pace (int,可选) - 更新近邻表的模拟频率。默认值:
20
。exclude_index (Tensor,可选) - 可以从近邻表中排除的相邻原子的索引Tensor,shape为 \((B, A, Ex)\),数据类型为 int。默认值:
None
。num_neighbours (int,可选) - 最大近邻数。如果给定了
None
,此值将通过相邻网格数与总网格数的比例计算。默认值:None
。num_cell_cut (int,可选) - 根据截断距离对网格单元进行细分的数目。默认值:
1
。cutoff_scale (float,可选) - 截断距离的缩放因子。默认值:
1.2
。cell_cap_scale (float,可选) - cell_capacity 的缩放因子。默认值:
1.25
。grid_num_scale (float,可选) - 根据网格比例计算 num_neighbours 的缩放因子。如果 num_neighbours 不是
None
,则不会使用该值。默认值:2
。use_grids (bool,可选) - 是否使用网格来计算近邻表。默认值:
None
。cast_fp16 (bool,可选) - 如果设置为
True
,数据将在排序之前转换为 float16。用于某些仅支持 float16 数据排序的设备。默认值:False
。
说明
B:模拟中行走器的批量大小。
A:模拟系统中的原子数。
N:最大相邻原子数。
D:位置坐标的维度。
Ex:最大排除的近邻原子数。
- 支持平台:
Ascend
GPU
样例:
>>> import sponge >>> from sponge.partition import NeighbourList >>> from sponge.system import Molecule >>> system = Molecule(template='water.spce.yaml') >>> neighbourlist = NeighbourList(system, 0.5) >>> neighbourlist(system.coordinate, system.pbc_box) (Tensor(shape=[1, 3, 2], dtype=Int64, value= [[[1, 2], [0, 2], [0, 1]]]), Tensor(shape=[1, 3, 2, 3], dtype=Float32, value= [[[[ 8.16490427e-02, 5.77358976e-02, 0.00000000e+00], [-8.16490427e-02, 5.77358976e-02, 0.00000000e+00]], [[-8.16490427e-02, -5.77358976e-02, 0.00000000e+00], [-1.63298085e-01, 0.00000000e+00, 0.00000000e+00]], [[ 8.16490427e-02, -5.77358976e-02, 0.00000000e+00], [ 1.63298085e-01, 0.00000000e+00, 0.00000000e+00]]]]), Tensor(shape=[1, 3, 2], dtype=Float32, value= [[[ 1.00000001e-01, 1.00000001e-01], [ 1.00000001e-01, 1.63298085e-01], [ 1.00000001e-01, 1.63298085e-01]]]), Tensor(shape=[1, 3, 2], dtype=Bool, value= [[[ True, True], [ True, True], [ True, True]]])) >>> neighbourlist.calculate(system.coordinate, system.pbc_box) (Tensor(shape=[1, 3, 2], dtype=Int64, value= [[[1, 2], [0, 2], [0, 1]]]), Tensor(shape=[1, 3, 2], dtype=Bool, value= [[[ True, True], [ True, True], [ True, True]]])) >>> neighbourlist.pace 20
- calculate(coordinate: Tensor, pbc_box: Tensor = None)[源代码]
计算近邻表。
- 参数:
coordinate (Tensor) - shape为 \((B, A, D)\) 的Tensor。数据类型为 float。位置坐标。
pbc_box (Tensor,可选) - shape为 \((B, D)\) 的Tensor。数据类型为 float。PBC(周期性边界条件)盒的大小。默认值:
None
。
- 返回:
neigh_idx (Tensor) - shape为 \((B, A, N)\) 的Tensor。数据类型为 int。系统中每个原子的相邻原子的索引。
neigh_mask (Tensor) - shape为 \((B, A, N)\) 的Tensor。数据类型为 bool。近邻表 neigh_idx 的掩码。
说明
B:批量数,例如: 模拟中walkers的批量大小。
A:模拟系统中的原子数。
N:最大相邻原子数。
D:位置坐标的维度。
- get_neighbour_list()[源代码]
获取近邻表。
- 返回:
neigh_idx (Tensor) - Tensor,shape为 \((B, A, N)\)。数据类型为int。系统每个原子的邻近原子的索引。
neigh_mask (Tensor) - Tensor,shape为 \((B, A, N)\)。数据类型为bool。近邻表 neigh_idx 的掩码。
说明
B:批量数,例如: 模拟中walkers的批量大小。
A:模拟系统中的原子数量。
N:最大邻近原子的数量。
- property pace
更新近邻表的模拟频率。
- 返回:
int, 更新后的模拟频率。
- set_exclude_index(exclude_index: Tensor)[源代码]
设置排除索引。
- 参数:
exclude_index (Tensor) - shape为 \((B, A, Ex)\) 的Tensor。数据类型为 int。
- update(coordinate: Tensor, pbc_box: Tensor = None)[源代码]
更新近邻表。
- 参数:
coordinate (Tensor) - shape为 \((B, A, D)\) 的Tensor。数据类型为 float。位置坐标。
pbc_box (Tensor,可选) - shape为 \((B, D)\) 的Tensor。数据类型为 float。PBC(周期性边界条件)盒的大小。默认值:
None
。
- 返回:
neigh_idx (Tensor) - shape为 \((B, A, N)\) 的Tensor。数据类型为 int。每个原子的相邻原子的索引。
neigh_mask (Tensor) - shape为 \((B, A, N)\) 的Tensor。数据类型为 bool。近邻表 neigh_idx 的掩码。
说明
B: 批量数,例如: 模拟中walkers的批量大小。
A: 模拟系统中的原子数。
N: 最大相邻原子数。
D: 位置坐标的维度。