sponge.core.WithForceCell
- class sponge.core.WithForceCell(self, system: Molecule, force: ForceCell, neighbour_list: NeighbourList = None, modifier: ForceModifier = None)[源代码]
用于封装带有原子力函数的仿真系统的单元。
- 参数:
system (
sponge.system.Molecule
) - 仿真系统。force (sponge.potential.ForceCell) - 原子力计算单元。
neighbour_list (
sponge.partition.NeighbourList
, 可选) - 邻居列表。默认值:None
。modifier (sponge.sampling.modifier.ForceModifier, 可选) - 力修正器。默认值:
None
。
- 输入:
energy (Tensor) - 势能。shape为 \((B, 1)\) 。数据类型为float。
force (Tensor) - 原子力。shape为 \((B, A, D)\) 。数据类型float。
virial (Tensor) - 维里。shape为 \((B, D)\) 。数据类型为float。
- 输出:
energy (Tensor) - 仿真系统的总势能。shape为 \((B, 1)\) 。数据类型为float。这里的 \(B\) 是batch size,即仿真中的walker的数量。
force (Tensor) - 作用于仿真系统每个原子的力。shape为 \((B, A, D)\) 。数据类型为float。这里的 \(B\) 是batch size, \(A\) 是原子数量, \(D\) 是仿真系统的空间维度,通常为3。
virial (Tensor) - 维里。shape为 \((B, D)\) 。数据类型为float。
- 支持平台:
Ascend
GPU
样例:
>>> # You can find case2.pdb file under MindSPONGE/tutorials/basic/case2.pdb >>> from sponge import Protein >>> from sponge.potential.forcefield import ForceField >>> from sponge.partition import NeighbourList >>> from sponge.core.simulation import WithEnergyCell, WithForceCell >>> from sponge.sampling import MaskedDriven >>> system = Protein(pdb='case2.pdb', rebuild_hydrogen=True) >>> energy = ForceField(system, 'AMBER.FF99SB') >>> neighbour_list = NeighbourList(system, cutoff=None, cast_fp16=True) >>> with_energy = WithEnergyCell(system, energy, neighbour_list=neighbour_list) >>> modifier = MaskedDriven(length_unit=with_energy.length_unit, ... energy_unit=with_energy.energy_unit, ... mask=system.heavy_atom_mask) >>> with_force = WithForceCell(system, neighbour_list=neighbour_list, modifier=modifier)
- property cutoff
邻居列表的截断距离。
- 返回:
Tensor,截断距离。
- property energy_unit
能量单位。
- 返回:
str,能量单位。
- get_neighbour_list()[源代码]
获取邻居列表。
- 返回:
neigh_idx,系统中每个原子邻近原子的目录。shape为 \((B, A, N)\) 的Tensor,数量类型为int。
neigh_mask,neigh_idx的掩码。shape为 \((B, A, N)\) 的Tensor,数量类型为bool。
- property length_unit
长度单位。
- 返回:
str,长度单位。
- property neighbour_list_pace
邻居列表的更新步长。
- 返回:
int,更新步长。
- update_neighbour_list()[源代码]
更新邻居列表。
- 参数:
coordinate (Tensor) - 位置坐标。shape为 \((B, A, D)\) 的Tensor。这里的 \(B\) 是batch size, \(A\) 是原子数量, \(D\) 是仿真系统的空间维度,通常为3。数据类型为float。
pbc_box (Tensor) - 周期性边界条件(PBC)盒子。shape为 \((B, D)\) 的Tensor。数据类型为浮点型。
- 返回:
neigh_idx,系统中每个原子邻近原子的目录。shape为 \((B, A, N)\) 的Tensor,数量类型为int。
neigh_mask,neigh_idx的掩码。shape为 \((B, A, N)\) 的Tensor,数量类型为bool。