sponge.core.WithEnergyCell

查看源文件
class sponge.core.WithEnergyCell(system: Molecule, potential: PotentialCell, bias: Union[Bias, List[Bias]] = None, cutoff: float = None, neighbour_list: NeighbourList = None, wrapper: EnergyWrapper = None, **kwargs)[源代码]

用势能函数封装仿真系统的神经网络层。 该神经网络层用于计算并返回系统在当前坐标处的势能值。

参数:
  • system (sponge.system.Molecule) - 仿真系统。

  • potential (sponge.potential.PotentialCell) - 势能函数层。

  • bias (Union[sponge.potential.Bias, List[sponge.potential.Bias]], 可选) - 偏置势函数层。默认值: None

  • cutoff (float, 可选) - 邻居列表的截断距离。如果为 None,则将其赋值为势能的截止值。默认值: None

  • neighbour_list (sponge.partition.NeighbourList, 可选) - 邻居列表。默认值: None

  • wrapper (sponge.sampling.wrapper.EnergyWrapper, 可选) - 包裹和处理势能和偏置势的网络。默认值: None

  • kwargs (dict) - 关键字参数。

输入:
输出:
  • energy (Tensor) - 整个系统的势能。shape为 \((B, 1)\) 。数据类型为float。

支持平台:

Ascend GPU

样例:

>>> from sponge import WithEnergyCell, RunOneStepCell, Sponge
>>> from sponge.callback import RunInfo
>>> from sponge.system import Molecule
>>> from sponge.potential.forcefield import ForceField
>>> from sponge.optimizer import Updater
>>> system = Molecule(template='water.tip3p.yaml')
>>> potential = ForceField(system, parameters='SPCE')
>>> optimizer = Updater(system, controller=None, time_step=1e-3)
>>> sim = WithEnergyCell(system, potential)
>>> one_step = RunOneStepCell(energy=sim, optimizer=optimizer)
>>> md = Sponge(one_step)
>>> run_info = RunInfo(800)
>>> md.run(2000, callbacks=[run_info])
>>> # Output example:
>>> # [MindSPONGE] Started simulation at 2024-04-29 01:02:10
>>> # [MindSPONGE] Compilation Time: 0.66s
>>> # [MindSPONGE] Step: 0, E_pot: 1.4293396, E_kin: 0.0, E_tot: 1.
>>> # 4293396, Temperature: 0.0, Time: 662.63ms
>>> # [MindSPONGE] Step: 800, E_pot: 1.4293396, E_kin: 0.0, E_tot: 1.
>>> # 4293396, Temperature: 0.0, Time: 13.77ms
>>> # [MindSPONGE] Step: 1600, E_pot: 1.4293396, E_kin: 0.0, E_tot: 1.
>>> # 4293396, Temperature: 0.0, Time: 14.82ms
>>> # [MindSPONGE] Finished simulation at 2024-04-29 01:02:39
>>> # [MindSPONGE] Simulation time: 29.03 seconds.
property bias

整体偏置势的Tensor。

返回:

Tensor,shape为 \((B, 1)\) ,数据类型为float。

property bias_names

偏置势能的名字。

返回:

list[str],偏置势能的名字列表。

bias_pace(index: int = 0)[源代码]

偏置势的更新频率。

参数:
  • index (int) - 偏置势的目录。默认值:0。

返回:

int,更新频率。

property biases

偏置势分量的Tensor。

返回:

偏置势分量的Tensor。shape为 \((B, V)\) ,数据类型为float。

calc_biases()[源代码]

计算偏置势项。

返回:

偏置势项,shape为 \((B, V)\) 的Tensor。数据类型为float。

calc_energies()[源代码]

计算势能的能量项。

返回:

能量项,shape为 \((B, U)\) 的Tensor。数据类型为float。

property cutoff

邻居列表的截断距离。

返回:

Tensor,截断距离。

property energies

势能分量的Tensor。

返回:

势能分量的Tensor,shape为 \((B, U)\) ,数据类型为float。

property energy_names

能量项的名字。

返回:

list[str],能量项的名字列表。

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

property num_biases

偏置势能 \(V\) 的数量。

返回:

int,偏置势能的数量。

property num_energies

能量项 \(U\) 的数量。

返回:

int,能量项的数量。

set_pbc_grad(grad_box: bool)[源代码]

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

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

update_bias(step: int)[源代码]

更新偏置势。

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

update_neighbour_list()[源代码]

更新邻居列表。

返回:
  • neigh_idx,系统中每个原子邻近原子的目录。shape为 \((B, A, N)\) 的Tensor,数量类型为int。

  • neigh_mask,neigh_idx的掩码。shape为 \((B, A, N)\) 的Tensor,数量类型为bool。

update_wrapper(step: int)[源代码]

更新能量包装器。

参数:
  • step (int) - 当前仿真步数,当步数整除更新频率余数为0时,更新能量包装器。