sponge.control.Controller

查看源文件
class sponge.control.Controller(system: Molecule, control_step: int = 1, **kwargs)[源代码]

MindSPONEG的控制器模块中的基类。 在 Updater 中使用 Controller 用于控制仿真过程中的七个变量,包括坐标、速度、力、能量、动力学、维里和PBC box。

参数:
  • system (Molecule) - 模拟系统。

  • control_step (int) - 控制器执行的步骤间隔。默认值:1。

  • kwargs (dict) - 其他参数,用于扩展。

输入:
  • coordinate (Tensor) - shape为 (B, A, D) 的Tensor。数据类型是float。

  • velocity (Tensor) - shape为 (B, A, D) 的Tensor。数据类型是float。

  • force (Tensor) - shape为 (B, A, D) 的Tensor。数据类型是float。

  • energy (Tensor) - shape为 (B, 1) 的Tensor。数据类型是float。

  • kinetics (Tensor) - shape为 (B, D) 的Tensor。数据类型是float。

  • virial (Tensor) - shape为 (B, D) 的Tensor。数据类型是float。

  • pbc_box (Tensor) - shape为 (B, D) 的Tensor。数据类型是float。

  • step (int) - 模拟步数。默认值:0

输出:
  • 坐标,shape为 (B, A, D) 的Tensor。数据类型是float。

  • 速度,shape为 (B, A, D) 的Tensor。数据类型是float。

  • 力,shape为 (B, A, D) 的Tensor。数据类型是float。

  • 能量,shape为 (B, 1) 的Tensor。数据类型是float。

  • 动力学,shape为 (B, D) 的Tensor。数据类型是float。

  • 维里,shape为 (B, D) 的Tensor。数据类型是float。

  • 周期性边界条件PBC box,shape为 (B, D) 的Tensor。数据类型是float。

说明

  • B - Batch size。

  • A - 原子总数。

  • D - 仿真系统的空间维度。通常是3。

支持平台:

Ascend GPU

样例:

>>> from sponge import WithEnergyCell, UpdaterMD, Sponge
>>> from sponge.callback import RunInfo
>>> from sponge.control import Controller
>>> # system is the Molecule object defined by user.
>>> # potential is the Energy object defined by user.
>>> withenergy = WithEnergyCell(system, potential)
>>> updater = UpdaterMD(
...     system=system,
...     time_step=1e-3,
...     velocity=velocity,
...     integrator='velocity_verlet',
...     temperature=300,
... )
>>> mini = Sponge(withenergy, optimizer=updater)
>>> run_info = RunInfo(1)
>>> mini.run(5, callbacks=[run_info])
[MindSPONGE] Started simulation at 2024-03-22 14:21:27
[MindSPONGE] Step: 1, E_pot: 110.0423, E_kin: 46.251404, E_tot: 156.2937, Temperature: 337.1373
[MindSPONGE] Step: 2, E_pot: 107.28819, E_kin: 48.7815, E_tot: 156.0697, Temperature: 355.57977
[MindSPONGE] Step: 3, E_pot: 112.72148, E_kin: 43.82708, E_tot: 156.54855, Temperature: 319.46582
[MindSPONGE] Step: 4, E_pot: 119.34253, E_kin: 37.759735, E_tot: 157.10226, Temperature: 275.23953
[MindSPONGE] Step: 5, E_pot: 119.16531, E_kin: 37.857212, E_tot: 157.02252, Temperature: 275.95004
[MindSPONGE] Finished simulation at 2024-03-22 14:21:30
[MindSPONGE] Simulation time: 2.96 seconds.
--------------------------------------------------------------------------------
>>> class MyController(Controller):
...     def construct(self,
...                 coordinate: Tensor,
...                 velocity: Tensor,
...                 **kwargs):
...         return super().construct(coordinate, velocity/100, **kwargs)
>>> updater = UpdaterMD(
...     system=system,
...     time_step=1e-3,
...     velocity=velocity,
...     integrator='velocity_verlet',
...     temperature=300,
...     controller=MyController(system)
... )
>>> mini = Sponge(withenergy, optimizer=updater)
>>> mini.run(5, callbacks=[run_info])
[MindSPONGE] Started simulation at 2024-03-22 14:22:54
[MindSPONGE] Step: 1, E_pot: 110.0423, E_kin: 0.005846547, E_tot: 110.04814, Temperature: 0.042616848
[MindSPONGE] Step: 2, E_pot: 113.94534, E_kin: 0.005484298, E_tot: 113.95083, Temperature: 0.03997633
[MindSPONGE] Step: 3, E_pot: 117.96643, E_kin: 0.0051222043, E_tot: 117.97155, Temperature: 0.037336946
[MindSPONGE] Step: 4, E_pot: 115.83751, E_kin: 0.005331765, E_tot: 115.84284, Temperature: 0.038864482
[MindSPONGE] Step: 5, E_pot: 107.83249, E_kin: 0.006089137, E_tot: 107.83858, Temperature: 0.044385143
[MindSPONGE] Finished simulation at 2024-03-22 14:22:57
[MindSPONGE] Simulation time: 3.00 seconds.
--------------------------------------------------------------------------------
property boltzmann

获取当前单元中的玻尔兹曼常数。

返回:

float。当前单元中的玻尔兹曼常数。

get_com(coordinate: Tensor, keepdims: bool = True) Tensor[源代码]

计算质心坐标。

参数:
  • coordinate (Tensor) - 原子坐标的Tensor。shape为 (B, A, D) 。数据类型为float。

  • keepdims (bool) - 如果为True,在结果中保持第二根轴对应的维度且长度为1。默认值: True

返回:

Tensor。质心坐标。shape为 (B, A, D)(B, D) 。数据类型为float。

get_com_velocity(velocity: Tensor, keepdims: bool = True) Tensor[源代码]

计算质心速度。

参数:
  • velocity (Tensor) - 速度的Tensor。shape为 (B, A, D) 。数据类型为float。

  • keepdims (bool) - 如果为True,在结果中保持第二根轴对应的维度且长度为1。默认值: True

返回:

Tensor。质心速度。shape为 (B, A, D)(B, D) 。数据类型为float。

get_kinetics(velocity: Tensor) Tensor[源代码]

根据速度计算动力学。

参数:
  • velocity (Tensor) - 原子速度的Tensor。shape为 (B, A, D) 。数据类型为float。

返回:

Tensor,动力学。shape为 (B, A, D) 。数据类型为float。

get_pressure(kinetics: Tensor, virial: Tensor, pbc_box: Tensor) Tensor[源代码]

根据动力学,维里和周期性边界条件计算压力。

参数:
  • kinetics (Tensor) - 动力学的Tensor。shape为 (B, D) 。数据类型为float。

  • virial (Tensor) - 维里的Tensor。shape为 (B, D) 。数据类型为float。

  • pbc_box (Tensor) - 周期性边界条件box的Tensor。shape为 (B, D) 。数据类型为float。

返回:

Tensor。根据动力学,维里,周期性边界条件box计算压力。shape为 (B, D) 。数据类型为float。

get_temperature(kinetics: Tensor = None) Tensor[源代码]

根据速度计算温度。

参数:
  • kinetics (Tensor) - 动力学的Tensor。shape为 (B, D) 。数据类型为float。默认值:”None”。

返回:

Tensor,温度。shape为 (B) 。数据类型为float。

get_volume(pbc_box: Tensor) Tensor:[源代码]

根据周期性边界条件box计算容积。

参数:
  • pbc_box (Tensor) - 用于计算容积的周期性边界条件。shape为 (B, D) 。数据类型为float。

返回:

Tensor,容积。shape为 (B) 。数据类型为float。

set_degrees_of_freedom(dofs: int)[源代码]

设置自由度(DOFs)。

参数:
  • dofs (int) - 自由度。

set_time_step(dt: float)[源代码]

设置模拟单步时间。

参数:
  • dt (float) - 单步时长。

update_coordinate(coordinate: Tensor) Tensor[源代码]

更新模拟系统的坐标。

参数:
  • coordinate (Tensor) - 原子坐标的Tensor。shape为 (B, A, D) 。数据类型为float。

返回:

Tensor。更新后的坐标的Tensor,shape和数据类型与原来一致。

update_pbc_box(pbc_box: Tensor) Tensor[源代码]

更新周期性边界条件box的参数。

参数:
  • pbc_box (Tensor) - 周期性边界条件box的Tensor。shape为 (B, D) 。数据类型为float。

返回:

Tensor。更新后的PBC box的Tensor,shape和数据类型与原来的 pbc_box 一致。