MindSponge分子动力学模拟——自定义控制器(2024.05)
技术背景
分子动力学模拟中的控制器(Controller)可以被用于修改模拟过程中的原子坐标和原子速度等参量,从而达到控制系统特定参量的目的。例如控温器可以用于实现NVT系综,控压器可用于实现NPT系综。而在MindSponge分子动力学模拟框架下,控温控压都可以基于控制器Controller来实现。关于更多的MindSponge分子动力学模拟框架的信息,如安装和基本使用等,可以阅读MindSponge专栏里面的文章。
自定义Controller
Controller位于control路径下,除了已经定义好的一些控温控压算法之外,用户还可以直接继承Controller来实现自己需要的系统控制算法。例如最简单的,这里我们定义一个缩放原子速度的控制器:
class MyController(Controller):
def construct(self,
coordinate: Tensor,
velocity: Tensor,
**kwargs):
return super().construct(coordinate, velocity/2, **kwargs)
它的功能是保持原子当前位置不变,但是速度减半,简单表述就是:
\]
完整的MindSponge用例如下所示:
from mindspore import context, Tensor
# 选择MindSpore图模式,0号GPU硬件
context.set_context(mode=context.GRAPH_MODE, device_target='GPU', device_id=0)
from sponge import set_global_units, Sponge, Molecule, WithEnergyCell, UpdaterMD, ForceField
from sponge.function import VelocityGenerator
from sponge.callback import RunInfo
from sponge.control import Controller
# 自定义控制器
class MyController(Controller):
def construct(self,
coordinate: Tensor,
velocity: Tensor,
**kwargs):
return super().construct(coordinate, velocity/2, **kwargs)
# 设置全局分子动力学模拟单位
set_global_units('nm', 'kj/mol')
# 根据内置模板生成水分子系统
system = Molecule(template='water.spce.yaml')
# 将分子沿X轴方向复制一份,现在体系有2个水分子
system.reduplicate([0.3, 0, 0])
# 基于前面的分子系统,再复制一份,然后合并到system里面,此时一共是4个水分子
new_sys = system.copy([0, 0, -0.3])
system.append(new_sys)
# 选择SPCE力场
potential = ForceField(system, parameters='SPCE')
# 类似于深度学习中的WithLossCell,绑定了分子系统和力场的信息
withenergy = WithEnergyCell(system, potential)
# 配置MD参数
temp = 300
vgen = VelocityGenerator(temp)
velocity = vgen(system.shape, system.atom_mass)
# 构建迭代器,并且传入我们自定义的控制器
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])
因为每次控制器被调用都会使得速度减半,而且按照执行的顺序,控制器在常规的控温之后,因此运行过程中体系的温度无法达到我们预期的300K:
[MindSPONGE] Started simulation at 2024-05-15 16:07:54
[MindSPONGE] Step: 1, E_pot: 110.0423, E_kin: 11.559962, E_tot: 121.60226, Temperature: 84.26327
[MindSPONGE] Step: 2, E_pot: 111.15905, E_kin: 11.305634, E_tot: 122.46468, Temperature: 82.40941
[MindSPONGE] Step: 3, E_pot: 121.5491, E_kin: 8.962629, E_tot: 130.51173, Temperature: 65.330696
[MindSPONGE] Step: 4, E_pot: 126.55731, E_kin: 7.8556476, E_tot: 134.41296, Temperature: 57.26165
[MindSPONGE] Step: 5, E_pot: 118.11452, E_kin: 9.807281, E_tot: 127.9218, Temperature: 71.48756
[MindSPONGE] Finished simulation at 2024-05-15 16:07:57
[MindSPONGE] Simulation time: 3.06 seconds.
--------------------------------------------------------------------------------
如果去掉这个降低速度的控制器,那么体系的温度和动能一下子就上去了,并且在稳定之后,温度会逐渐收敛在300K附近:
[MindSPONGE] Started simulation at 2024-05-15 16:09:10
[MindSPONGE] Step: 1, E_pot: 110.0423, E_kin: 64.28456, E_tot: 174.32686, Temperature: 468.5852
[MindSPONGE] Step: 2, E_pot: 116.11336, E_kin: 58.616272, E_tot: 174.72963, Temperature: 427.26773
[MindSPONGE] Step: 3, E_pot: 120.5004, E_kin: 54.469967, E_tot: 174.97037, Temperature: 397.04434
[MindSPONGE] Step: 4, E_pot: 119.11376, E_kin: 55.627754, E_tot: 174.74152, Temperature: 405.48373
[MindSPONGE] Step: 5, E_pot: 114.84599, E_kin: 59.536713, E_tot: 174.3827, Temperature: 433.97702
[MindSPONGE] Finished simulation at 2024-05-15 16:09:12
[MindSPONGE] Simulation time: 2.84 seconds.
--------------------------------------------------------------------------------
总结概要
本文介绍了在MindSponge分子动力学模拟框架先实现自定义Controller控制器的方法,通过调控体系中的原子坐标和原子速度等,来控制系综的参量。MindSponge分子模拟框架基于MindSpore深度学习框架开发而成,对于开发者尤其是深度学习开发者来说,非常的友好。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/controller.html
作者ID:DechinPhy
更多原著文章:https://www.cnblogs.com/dechinphy/
请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
MindSponge分子动力学模拟——自定义控制器(2024.05)的更多相关文章
- 使用jQuery.FileUpload和Backload自定义控制器上传多个文件
当需要在控制器中处理除了文件的其他表单字段,执行控制器独有的业务逻辑......等等,这时候我们可以自定义控制器. 通过继承BackloadController □ 思路 BackloadContro ...
- 自定义控制器的View(loadView)及其注意点
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 1.自定义控制器切换<一>
一.自定义控制器切换:在同一个控制器上,展示不同的控制器,类似于tabbar一样 二.怎么做?(问题解决步骤) 1.创建若干控制器:OneViewController TwoViewControlle ...
- beego 自定义控制器与路由
框架浅析 这是之前使用bee创建的webapp目录层级结构: ├── conf 配置文件 │ └── app.conf ├── controllers 控制器 │ └── default.go ├── ...
- SAP CRM 自定义控制器与数据绑定
当用户从视图离开时,视图将失去它的数据.解决这个问题,需要引入自定义控制器(Custom Controller)(译者注:SAP CRM自定义端中,不同地方的Custom Controller会翻译为 ...
- MVC文件上传06-使用客户端jQuery-File-Upload插件和服务端Backload组件自定义控制器上传多个文件
当需要在控制器中处理除了文件的其他表单字段,执行控制器独有的业务逻辑......等等,这时候我们可以自定义控制器. MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证 ...
- 不准使用xib自定义控制器view的大小
1.AppDelegate.m // // 文 件 名:AppDelegate.m // // 版权所有:Copyright © 2018年 leLight. All rights reserved. ...
- Gromacs分子动力学模拟流程概述
Gromacs分子动力学模拟主要可以分为以下几个步骤,不同的体系步骤可能略有不同. 在开始之前,先简单了解一下预平衡: 分子动力学模拟的最终目的是对体系进行抽样,然后计算体系的能量,各种化学键,成分分 ...
- 分子动力学模拟软件VMD的安装与使用
技术背景 在分子动力学模拟过程中会遇到一些拓扑结构非常复杂的分子模型,所谓的复杂不仅仅是包含众多的原子,还有各种原子之间的成键关系与成键类型等.这时候就非常能够体现一个好的可视化软件的重要性了,这里我 ...
- 分子动力学模拟之基于自动微分的LINCS约束
技术背景 在分子动力学模拟的过程中,考虑到运动过程实际上是遵守牛顿第二定律的.而牛顿第二定律告诉我们,粒子的动力学过程仅跟受到的力场有关系,但是在模拟的过程中,有一些参量我们是不希望他们被更新或者改变 ...
随机推荐
- CentOS 9 x64 使用 Nginx、Supervisor 部署 Go/Golang 服务
前言 在 CentOS 9 x64 系统上,可以通过以下步骤来部署 Golang 服务. 1. 安装必要的软件包 安装以下软件包: Golang:Golang 编程语言 Nginx:Web 服务器 S ...
- SQL ALTER TABLE 语句- 灵活修改表结构和数据类型
SQL ALTER TABLE 语句 SQL ALTER TABLE 语句用于在现有表中添加.删除或修改列,也可用于添加和删除各种约束. ALTER TABLE - 添加列 要在表中添加列,请使用以下 ...
- linux打包Qt,收集依赖库脚本
编写shell脚本,用来收集Qt的依赖库,避免在无环境裸机上无法运行 1.创建shell脚本:touch pack.sh 2.编辑shell脚本,脚本内容如下:vi pack.sh 3.给脚本增加权限 ...
- DevEco Studio 3.1 Beta新特性知多少
原文链接:https://mp.weixin.qq.com/s/HYdNlKKA9Z51dfI1bcplDA,点击链接查看更多技术内容: DevEco Studio 3.1 Beta新特性知多少原文 ...
- Linux之隔离技术
前言 Linux的内核有两大特性Namespace和CGroup,这两种特性可以在Linux主机上实现主机名.用户.网络等全局资源的隔离,也是实现网络虚拟化.容器技术的基础. 命名空间 Linux N ...
- Openstack之工作流程
组件 OpenStack的核心部件即包括Nova(用于计算).Keystone(用于身份服务).Neutron(用于网络和地址管理).Cinder(块存储).Swift(对象存储).Glance(镜像 ...
- c# 框架系列 ———— EFCore 模型篇 [一]
前言 简单介绍一下EfCore 的模型篇 正文 内容来源: 配置模型 配置模型的方式,一种是fluent api 还一种是属性的方式. public class Blog { public int B ...
- 实战指南:使用 xUnit 和 ASP.NET Core 进行集成测试【完整教程】
引言 集成测试可在包含应用支持基础结构(如数据库.文件系统和网络)的级别上确保应用组件功能正常. ASP.NET Core 通过将单元测试框架与测试 Web 主机和内存中测试服务器结合使用来支持集成测 ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-39-highlight() 方法之追踪定位
1.简介 在之前的文章中宏哥讲解和分享了,为了看清自动化测试的步骤,通过JavaScript添加高亮颜色,就可以清楚的看到执行步骤了.在学习和实践Playwright的过程中,偶然发现了使用Playw ...
- 力扣1127(MySQL)-用户购买平台(困难)
题目: 支出表: Spending 这张表记录了用户在一个在线购物网站的支出历史,该在线购物平台同时拥有桌面端('desktop')和手机端('mobile')的应用程序.这张表的主键是 (user_ ...