技术背景

MindSponge教程合集中我们已经介绍了很多使用MindSponge进行分子动力学模拟的方法,这里主要介绍在MindSponge中自定义一个力场。在传统的MD软件中,如果你希望去开发一个自己的力场,或者是添加一些分子动力学模拟方法如增强采样等,会面临不少编程上的困难。而这些困难对于使用Python来编程的MindSponge来说,就天然的降低了门槛。以力场为例子,我们可以在EnergyCell的基础上,去开发一个自定义的ForceField。

自定义力场

首先,关于MindSponge的安装和基础使用,大家可以在前面的博客中去学习,这里不做更多介绍。

由于这里我们只是为了演示如何使用MindSponge来构建自定义力场的方法,因此我们可以用一个最简单方便的操作,把所有的坐标做一个加和:

\[E_{self}=\sum_{i}(x_i+y_i+z_i)
\]

这里\(E_{self}\)就是我们用到的自定义力场的势能。在MindSponge里面定义一个力场,首先我们继承基础能量类EnergyCell来构建一个新的势能类:

class MyEnergy(EnergyCell):
def construct(self, coordinate: Tensor, **kwargs):
return coordinate.sum()[None, None]

这里需要解释的是,因为我们只是定义一个简单的力场,没有额外的参数,所以没必要修改__init__函数里面的参数内容,只需要修改construct里面的内容就可以了。唯一有要求的是最后输出的能量的维度有一点要求,为了原生支持多batch的操作,我们输出的能量项是二维的,所以这里求和之后又做了一个扩维。完整的演示代码如下所示:

from mindspore import context, Tensor
from mindspore.nn import Adam
context.set_context(mode=context.GRAPH_MODE, device_target='GPU') if __name__ == "__main__":
from sponge import Sponge, Molecule, WithEnergyCell
from sponge.potential import EnergyCell, ForceFieldBase
from sponge.callback import RunInfo, SaveLastPdb
# 自定义能量类
class MyEnergy(EnergyCell):
def construct(self, coordinate: Tensor, **kwargs):
return coordinate.sum()[None, None]
# 生成水分子系统
system = Molecule(template='water.spce.yaml')
system.reduplicate([0.3, 0, 0])
new_sys = system.copy([0, 0, -0.3])
system.append(new_sys)
# 根据系统生成自定义力场对象
potential = MyEnergy(system)
forcefield = ForceFieldBase(potential)
withenergy = WithEnergyCell(system, forcefield)
opt = Adam(system.trainable_params(), 1e-3)
mini = Sponge(withenergy, optimizer=opt)
# 配置回调函数
run_info = RunInfo(5)
save_pdb = SaveLastPdb(system, save_freq=1, pdb_name='water_last.pdb')
# 开始执行模拟任务
mini.run(10, callbacks=[run_info, save_pdb])

这里演示的是4个水分子的体系,其中定义好能量项之后,要用ForceFieldBase力场基础类封装起来,才是一个完整的力场。然后再把力场信息、系统信息和迭代器信息传给Sponge类,就可以来时进行模拟了。根据定义的迭代器的不同,既可以完成能量优化的功能,也可以实现分子动力学模拟的过程,在框架上实现了统一。此外我们还可以分别定义两个回调函数RunInfo和SaveLastPdb,用于在屏幕上输出迭代信息,以及输出最后一步的系统的坐标到一个指定的pdb文件里面。运行结果如下所示:

[MindSPONGE] Started simulation at 2024-03-22 16:54:45
[MindSPONGE] Step: 5, E_pot: 0.31788814
[MindSPONGE] Step: 10, E_pot: 0.13788882
[MindSPONGE] Finished simulation at 2024-03-22 16:54:46
[MindSPONGE] Simulation time: 1.03 seconds.
--------------------------------------------------------------------------------

同时在当前路径下生成了一个pdb文件:

MODEL     1
ATOM 1 O WAT A 1 -0.100 -0.100 -0.100 1.0 0.0 O
ATOM 2 H1 WAT A 1 0.716 0.477 -0.100 1.0 0.0 H
ATOM 3 H2 WAT A 1 -0.916 0.477 -0.100 1.0 0.0 H
ATOM 4 O WAT A 2 2.900 -0.100 -0.100 1.0 0.0 O
ATOM 5 H1 WAT A 2 3.716 0.477 -0.100 1.0 0.0 H
ATOM 6 H2 WAT A 2 2.084 0.477 -0.100 1.0 0.0 H
ATOM 7 O WAT A 3 -0.100 -0.100 -3.100 1.0 0.0 O
ATOM 8 H1 WAT A 3 0.716 0.477 -3.100 1.0 0.0 H
ATOM 9 H2 WAT A 3 -0.916 0.477 -3.100 1.0 0.0 H
ATOM 10 O WAT A 4 2.900 -0.100 -3.100 1.0 0.0 O
ATOM 11 H1 WAT A 4 3.716 0.477 -3.100 1.0 0.0 H
ATOM 12 H2 WAT A 4 2.084 0.477 -3.100 1.0 0.0 H
TER
ENDMDL
END

有了这个pdb结构文件,我们就可以用VMD来进行可视化了:

如果需要保存完整的轨迹文件,那就需要用到MindSponge所支持的h5md数据结构,相关方法可以参考这篇博客中的范例,其中还包含了使用MDAnalysis第三方软件进行后分析的方法。

总结概要

基于力场的分子动力学模拟,其实可以看做是一个最简单的机器学习模型,具有计算成本低的特点,在药物研发、生物化学和计算物理学等研究领域存在广泛的应用。那么,如何去快速的开发一个新的力场,在传统的MD模拟软件中其实可能是一个不小的门槛,而基于MindSpore框架开发的MindSponge分子动力学模拟软件,则具有这种便捷开发的特性。本文通过一个简单的示例,介绍了如何在MindSponge分子动力学模拟框架内构建一个自定义的分子力场,可以正常的执行分子动力学模拟迭代过程并保存相应的结果和输出。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/energy-cell.html

作者ID:DechinPhy

更多原著文章:https://www.cnblogs.com/dechinphy/

请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

MindSponge分子动力学模拟——自建力场(2024.03)的更多相关文章

  1. Gromacs分子动力学模拟流程概述

    Gromacs分子动力学模拟主要可以分为以下几个步骤,不同的体系步骤可能略有不同. 在开始之前,先简单了解一下预平衡: 分子动力学模拟的最终目的是对体系进行抽样,然后计算体系的能量,各种化学键,成分分 ...

  2. 分子动力学模拟软件VMD的安装与使用

    技术背景 在分子动力学模拟过程中会遇到一些拓扑结构非常复杂的分子模型,所谓的复杂不仅仅是包含众多的原子,还有各种原子之间的成键关系与成键类型等.这时候就非常能够体现一个好的可视化软件的重要性了,这里我 ...

  3. 分子动力学模拟之基于自动微分的LINCS约束

    技术背景 在分子动力学模拟的过程中,考虑到运动过程实际上是遵守牛顿第二定律的.而牛顿第二定律告诉我们,粒子的动力学过程仅跟受到的力场有关系,但是在模拟的过程中,有一些参量我们是不希望他们被更新或者改变 ...

  4. 分子动力学模拟之SETTLE约束算法

    技术背景 在上一篇文章中,我们讨论了在分子动力学里面使用LINCS约束算法及其在具备自动微分能力的Jax框架下的代码实现.约束算法,在分子动力学模拟的过程中时常会使用到,用于固定一些既定的成键关系.例 ...

  5. bzoj 2304 [Apio2011]寻路 Dij+模拟+恶心建图

    [Apio2011]寻路 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 624  Solved: 193[Submit][Status][Discus ...

  6. 【HHHOJ】ZJOI2019模拟赛(十三)03.10 解题报告

    点此进入比赛 得分: \(97+0+10=107\) 排名: \(Rank\ 3\) \(Rating\):\(+47\) \(T1\):[HHHOJ187]Hashit(点此看题面) 容易想到可以用 ...

  7. 【GROMACS】分子动力学模拟①——环境搭建

    系统环境 Win11 22H2 企业版 开启虚拟化.window subsystem for liunx等虚拟机相关的功能 应用商店中安装WSL2 安装步骤 打开Ubuntu,输入sudo apt f ...

  8. in文件注意事项及详细解释(转载)

    转载自:https://www.cnblogs.com/sysu/p/10817315.html  和   https://www.cnblogs.com/panscience/p/4953940.h ...

  9. in文件注意事项及详细解释

    lammps做分子动力学模拟时,需要一个输入文件(input script),也就是in文件,以及关于体系的原子坐标之类的信息文件(data file)和势文件(potential file).lam ...

  10. CUDA vs GPGPU

    http://www.kuqin.com/hardware/20080830/15726.html 一 在硬件和软件之间选择     “计算机软件和硬件的逻辑等价性”是计算机组成原理中一个非常重要的理 ...

随机推荐

  1. CF-925(已更新:D-F)

    CF 925 补题ing 待更新 后面打算更新D题和power oj上一道区间合并的题(现在才知道是一道洛谷上的原题--) D 分析 ​ 涉及到关于取模的知识,我们的答案要满足三个条件: ai-aj≡ ...

  2. MySQL 幻象行

    当同一个查询在不同的时间产生不同的行集时,就会出现所谓的幻像问题.例如,如果执行了两次SELECT,但是第二次返回了第一次没有返回的行,那么该行就是一个"幻象"行. 假设在表chi ...

  3. IPFS 添加和管理文件

    IPFS的文件有不同的模式 默认模式 默认模式下, 文件会被解析并存入blocks, 同时文件的结构被存入filestore, 因为IPFS是按内容寻址的文件系统, 在添加时最外层的目录名或文件名信息 ...

  4. Vue+SpringBoot+ElementUI实战学生管理系统-3.表结构设计

    1.章节介绍 前一篇介绍了如何搭建前端工程,这一篇讲一下表结构设计,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.项目截图 登录页 列表操作 动态图 ...

  5. thymeleaf利用fragment解决html页面间获取context-path问题

    问题说明 我使用spring boot+thymeleaf做了个项目,那前台页面都是html,里面有各种api调用和路径跳转. 大家都知道这些路径不能写死,为保证任何情况下路径的正确性,一般都是这种格 ...

  6. Java Socket编程系列(三)开发支持单客户端访问的Server

    例子来自Java官方教程,稍作调整. 实现的是单个客户端请求服务端,根据服务端提示进行一系列操作. 协议类: package com.dylan.socket; /** * @author xusuc ...

  7. 《系列一》-- 2、XmlBeanFactory 的类图介绍.md

    阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证.全系列文章基于 spring 源码 5.x 版本. Spring源码阅读系列--全局目录.md ...

  8. Linux驱动开发笔记(四):设备驱动介绍、熟悉杂项设备驱动和ubuntu开发杂项设备Demo

    前言   驱动的开发需要先熟悉基本概念类型,本篇讲解linux杂项设备基础,还是基于虚拟机ubuntu去制作驱动,只需要虚拟机就可以尝试编写注册杂项设备的基本流程.   linux三大设备驱动 字符设 ...

  9. sqlserver数据库jar包下载

    链接:https://pan.baidu.com/s/1mCx5JpVpmU6uUaqMITxP_Q提取码:4piq 说明:若链接失效,联系会及时补上!

  10. docker部署fastdfs并在Django中集成

    拉取Fastdfs镜像 docker pull delron/fastdfs 构建Tracker容器 是在Linux环境下,使用docker镜像构建tracker容器,用于启动跟踪服务器,起到调度的作 ...