分子動力學模擬中的控制器(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