分子动力学模拟中的控制器(Controller)可用于修改模拟过程中的原子坐标和原子速度等参量,实现对系统特定参量的控制。例如,控温器可以用于实现NVT系综,控...

分子动力学模拟中的控制器(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 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。

如果去掉这个降低速度的控制器,那么体系的温度和动能一下子就上去了,并且在稳定之后,温度会逐渐收敛在300K附近。

总结概要

本文介绍了在MindSponge分子动力学模拟框架先实现自定义Controller控制器的方法,通过调控体系中的原子坐标和原子速度等,来控制系综的参量。MindSponge分子模拟框架基于MindSpore深度学习框架开发而成,对于开发者尤其是深度学习开发者来说,非常的友好。

版权声明

作者ID:DechinPhy