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,更新步长。

set_pbc_grad(grad_box: bool)[源代码]

设置是否计算PBC box的梯度。

参数:
  • grad_box (bool) - 是否计算PBC box的梯度。

update_modifier(step: int)[源代码]

更新修饰器。

参数:
  • step (int) - 当前仿真步数,当步数整除更新频率余数为0时,更新修饰。

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。