文档反馈

问题文档片段

问题文档片段包含公式时,显示为空格。

提交类型
issue

有点复杂...

找人问问吧。

PR

小问题,全程线上修改...

一键搞定!

请选择提交类型

问题类型
规范和低错类

- 规范和低错类:

- 错别字或拼写错误,标点符号使用错误、公式错误或显示异常。

- 链接错误、空单元格、格式错误。

- 英文中包含中文字符。

- 界面和描述不一致,但不影响操作。

- 表述不通顺,但不影响理解。

- 版本号不匹配:如软件包名称、界面版本号。

易用性

- 易用性:

- 关键步骤错误或缺失,无法指导用户完成任务。

- 缺少主要功能描述、关键词解释、必要前提条件、注意事项等。

- 描述内容存在歧义指代不明、上下文矛盾。

- 逻辑不清晰,该分类、分项、分步骤的没有给出。

正确性

- 正确性:

- 技术原理、功能、支持平台、参数类型、异常报错等描述和软件实现不一致。

- 原理图、架构图等存在错误。

- 命令、命令参数等错误。

- 代码片段错误。

- 命令无法完成对应功能。

- 界面错误,无法指导操作。

- 代码样例运行报错、运行结果不符。

风险提示

- 风险提示:

- 对重要数据或系统存在风险的操作,缺少安全提示。

内容合规

- 内容合规:

- 违反法律法规,涉及政治、领土主权等敏感词。

- 内容侵权。

请选择问题类型

问题描述

点击输入详细问题描述,以帮助我们快速定位问题。

sponge.control.Controller

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

MindSPONEG的控制器模块中的基类。

sponge.optimizer.Updater 中使用 sponge.control.Controller 用于控制仿真过程中的七个变量,包括坐标、速度、力、能量、动力学、维里和PBC box。

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

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

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

输入:
  • coordinate (Tensor) - 坐标。shape为 (B,A,D) 的Tensor。数据类型是float。这里 B 是分子模拟中walker的数目, A 是原子数目, D 是模拟系统的空间维数,通常为3。

  • 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

输出:
  • 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。

支持平台:

Ascend GPU

样例:

>>> from mindspore import Tensor
>>> from sponge import Sponge, Molecule, ForceField, UpdaterMD, WithEnergyCell
>>> from sponge.control import Controller
>>> from sponge.callback import RunInfo
>>> system = Molecule(template='water.tip3p.yaml')
>>> potential = ForceField(system, parameters='SPCE')
>>> withenergy = WithEnergyCell(system, potential)
>>> class MyController(Controller):
...     def construct(self,
...             coordinate: Tensor,
...             velocity: Tensor,
...             force: Tensor,
...             energy: Tensor,
...             kinetics: Tensor,
...             virial: Tensor = None,
...             pbc_box: Tensor = None,
...             step: int = 0,
...             **kwargs):
...         return super().construct(coordinate, velocity/100,
...                                 force, energy, kinetics,
...                                 virial, pbc_box, step,
...                                 **kwargs)
>>> velocity = Tensor([[0.1008,0.,0.],[-0.8,0.,0.],[-0.8,0.,0.]])
>>> updater = UpdaterMD(
...     system=system,
...     time_step=1e-3,
...     velocity=velocity,
...     integrator='velocity_verlet',
...     temperature=300,
...     controller=MyController(system)
... )
>>> mini = Sponge(withenergy, optimizer=updater)
>>> run_info = RunInfo(1)
>>> mini.run(5, callbacks=[run_info])
property boltzmann

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

返回:

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

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

计算质心坐标。

参数:
  • coordinate (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)[源代码]

计算质心速度。

参数:
  • 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)[源代码]

根据速度计算动能。

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

返回:

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

get_pressure(kinetics: Tensor, virial: Tensor, pbc_box: 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,压力。shape为 (B,D) 。数据类型为float。

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

根据速度计算温度。

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

返回:

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

get_volume(pbc_box: 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)[源代码]

更新模拟系统的坐标。

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

返回:

Tensor,更新后的坐标。shape为 (B,A,D)

update_pbc_box(pbc_box: Tensor)[源代码]

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

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

返回:

Tensor,更新后的PBC box。shape为 (B,D)